Thread View: gnu.gcc.bug
1 messages
1 total messages
Started by Jeffrey A Law
Wed, 11 Nov 1992 15:07
ipc_input1111bug.c
Author: Jeffrey A Law
Date: Wed, 11 Nov 1992 15:07
Date: Wed, 11 Nov 1992 15:07
1479 lines
41274 bytes
41274 bytes
configuration i386-mach.
Compile with gcc-2.3.1 "-O" to make cc1 core dump:
typedef unsigned int vm_offset_t;
typedef unsigned int vm_size_t;
typedef int kern_return_t;
typedef int boolean_t;
typedef unsigned int mach_port_t;
typedef mach_port_t *mach_port_array_t;
typedef unsigned int mach_port_right_t;
typedef unsigned int mach_port_type_t;
typedef mach_port_type_t *mach_port_type_array_t;
typedef unsigned int mach_port_urefs_t;
typedef int mach_port_delta_t;
typedef unsigned int mach_port_seqno_t;
typedef unsigned int mach_port_mscount_t;
typedef unsigned int mach_port_msgcount_t;
typedef unsigned int mach_port_rights_t;
typedef struct mach_port_status {
mach_port_t mps_pset;
mach_port_seqno_t mps_seqno;
mach_port_mscount_t mps_mscount;
mach_port_msgcount_t mps_qlimit;
mach_port_msgcount_t mps_msgcount;
mach_port_rights_t mps_sorights;
boolean_t mps_srights;
boolean_t mps_pdrequest;
boolean_t mps_nsrequest;
} mach_port_status_t;
typedef struct old_mach_port_status {
mach_port_t mps_pset;
mach_port_mscount_t mps_mscount;
mach_port_msgcount_t mps_qlimit;
mach_port_msgcount_t mps_msgcount;
mach_port_rights_t mps_sorights;
boolean_t mps_srights;
boolean_t mps_pdrequest;
boolean_t mps_nsrequest;
} old_mach_port_status_t;
typedef int port_name_t;
typedef port_name_t port_set_name_t;
typedef port_name_t *port_name_array_t;
typedef int port_type_t;
typedef port_type_t *port_type_array_t;
typedef port_name_t port_t;
typedef port_t port_rcv_t;
typedef port_t port_own_t;
typedef port_t port_all_t;
typedef port_t *port_array_t;
typedef unsigned int mach_msg_timeout_t;
typedef unsigned int mach_msg_bits_t;
typedef unsigned int mach_msg_size_t;
typedef unsigned int mach_msg_seqno_t;
typedef int mach_msg_id_t;
typedef struct {
mach_msg_bits_t msgh_bits;
mach_msg_size_t msgh_size;
mach_port_t msgh_remote_port;
mach_port_t msgh_local_port;
mach_port_seqno_t msgh_seqno;
mach_msg_id_t msgh_id;
} mach_msg_header_t;
typedef unsigned int mach_msg_type_name_t;
typedef unsigned int mach_msg_type_size_t;
typedef unsigned int mach_msg_type_number_t;
typedef struct {
unsigned int msgt_name : 8,
msgt_size : 8,
msgt_number : 12,
msgt_inline : 1,
msgt_longform : 1,
msgt_deallocate : 1,
msgt_unused : 1;
} mach_msg_type_t;
typedef struct {
mach_msg_type_t msgtl_header;
unsigned short msgtl_name;
unsigned short msgtl_size;
unsigned int msgtl_number;
} mach_msg_type_long_t;
typedef int mach_msg_option_t;
typedef kern_return_t mach_msg_return_t;
extern mach_msg_return_t
mach_msg_trap
(mach_msg_header_t *msg,
mach_msg_option_t option,
mach_msg_size_t send_size,
mach_msg_size_t rcv_size,
mach_port_t rcv_name,
mach_msg_timeout_t timeout,
mach_port_t notify);
extern mach_msg_return_t
mach_msg
(mach_msg_header_t *msg,
mach_msg_option_t option,
mach_msg_size_t send_size,
mach_msg_size_t rcv_size,
mach_port_t rcv_name,
mach_msg_timeout_t timeout,
mach_port_t notify);
typedef unsigned int msg_size_t;
typedef struct {
unsigned int msg_unused : 24,
msg_simple : 8;
msg_size_t msg_size;
int msg_type;
port_t msg_local_port;
port_t msg_remote_port;
int msg_id;
} msg_header_t;
typedef struct {
unsigned int msg_type_name : 8,
msg_type_size : 8,
msg_type_number : 12,
msg_type_inline : 1,
msg_type_longform : 1,
msg_type_deallocate : 1,
msg_type_unused : 1;
} msg_type_t;
typedef struct {
msg_type_t msg_type_header;
unsigned short msg_type_long_name;
unsigned short msg_type_long_size;
unsigned int msg_type_long_number;
} msg_type_long_t;
typedef unsigned int msg_timeout_t;
typedef int msg_option_t;
typedef int msg_return_t;
msg_return_t msg_send(
msg_header_t *header,
msg_option_t option,
msg_timeout_t timeout);
msg_return_t msg_receive(
msg_header_t *header,
msg_option_t option,
msg_timeout_t timeout);
msg_return_t msg_rpc(
msg_header_t *header,
msg_option_t option,
msg_size_t rcv_size,
msg_timeout_t send_timeout,
msg_timeout_t rcv_timeout);
msg_return_t msg_send_trap(
msg_header_t *header,
msg_option_t option,
msg_size_t send_size,
msg_timeout_t timeout);
msg_return_t msg_receive_trap(
msg_header_t *header,
msg_option_t option,
msg_size_t rcv_size,
port_name_t rcv_name,
msg_timeout_t timeout);
msg_return_t msg_rpc_trap(
msg_header_t *header,
msg_option_t option,
msg_size_t send_size,
msg_size_t rcv_size,
msg_timeout_t send_timeout,
msg_timeout_t rcv_timeout);
extern void Assert();
int master_cpu;
extern vm_offset_t kalloc();
extern vm_offset_t kget();
extern void kfree();
extern void kalloc_init();
typedef struct ipc_marequest {
struct ipc_space *imar_space;
mach_port_t imar_name;
struct ipc_port *imar_soright;
struct ipc_marequest *imar_next;
} *ipc_marequest_t;
extern void
ipc_marequest_init();
extern unsigned int
ipc_marequest_info( );
extern mach_msg_return_t
ipc_marequest_create(
);
extern void
ipc_marequest_cancel( );
extern void
ipc_marequest_rename(
);
extern void
ipc_marequest_destroy( );
typedef int vm_prot_t;
extern vm_size_t page_size;
extern vm_size_t page_mask;
extern int page_shift;
extern vm_size_t mem_size;
extern vm_offset_t first_addr;
extern vm_offset_t last_addr;
typedef mach_port_t memory_object_t;
typedef mach_port_t memory_object_control_t;
typedef mach_port_t memory_object_name_t;
typedef int memory_object_copy_strategy_t;
typedef int memory_object_return_t;
struct slock {
int lock_data;
};
typedef struct slock simple_lock_data_t;
typedef struct slock *simple_lock_t;
struct lock {
unsigned int read_count:16,
want_upgrade:1,
want_write:1,
waiting:1,
can_sleep:1,
:0;
char *thread;
int recursion_depth;
};
typedef struct lock lock_data_t;
typedef struct lock *lock_t;
extern void lock_init();
extern void lock_sleepable();
extern void lock_write();
extern void lock_read();
extern void lock_done();
extern boolean_t lock_read_to_write();
extern void lock_write_to_read();
extern boolean_t lock_try_write();
extern boolean_t lock_try_read();
extern boolean_t lock_try_read_to_write();
extern void lock_set_recursive();
extern void lock_clear_recursive();
struct queue_entry {
struct queue_entry *next;
struct queue_entry *prev;
};
typedef struct queue_entry *queue_t;
typedef struct queue_entry queue_head_t;
typedef struct queue_entry queue_chain_t;
typedef struct queue_entry *queue_entry_t;
void enqueue_head();
void enqueue_tail();
queue_entry_t dequeue_head();
queue_entry_t dequeue_tail();
void remqueue();
struct mpqueue_head {
struct queue_entry head;
struct slock lock;
};
typedef struct mpqueue_head mpqueue_head_t;
typedef struct vm_external {
int existence_size;
char *existence_map;
int existence_count;
} *vm_external_t;
typedef int vm_external_state_t;
extern void vm_external_module_initialize();
extern vm_external_t vm_external_create();
extern void vm_external_destroy();
extern void vm_external_state_set();
extern vm_external_state_t _vm_external_state_get();
typedef struct xmm_obj * pager_request_t;
struct vm_object {
queue_chain_t memq;
vm_size_t size;
short ref_count;
short resident_page_count;
struct vm_object *copy;
struct vm_object *shadow;
vm_offset_t shadow_offset;
struct ipc_port *pager;
vm_offset_t paging_offset;
pager_request_t pager_request;
struct ipc_port *pager_name;
memory_object_copy_strategy_t
copy_strategy;
unsigned int
absent_count;
unsigned int
all_wanted;
unsigned int
paging_in_progress:16,
pager_created:1,
pager_initialized:1,
pager_ready:1,
can_persist:1,
internal:1,
temporary:1,
alive:1,
lock_in_progress : 1,
lock_restart : 1,
use_old_pageout : 1,
use_shared_copy : 1,
shadowed: 1;
queue_chain_t cached_list;
vm_offset_t last_alloc;
vm_external_t existence_info;
};
typedef struct vm_object *vm_object_t;
extern
vm_object_t kernel_object;
extern void vm_object_bootstrap();
extern void vm_object_init();
extern void vm_object_terminate();
extern vm_object_t vm_object_allocate();
extern void vm_object_reference();
extern void vm_object_deallocate();
extern void vm_object_pmap_protect();
extern void vm_object_pmap_remove();
extern void vm_object_page_remove();
extern void vm_object_shadow();
extern void vm_object_collapse();
extern vm_object_t vm_object_lookup();
extern vm_object_t vm_object_lookup_name();
extern struct ipc_port *vm_object_name();
extern void vm_object_remove();
extern boolean_t vm_object_copy_temporary();
extern kern_return_t vm_object_copy_strategically();
extern kern_return_t vm_object_copy_slowly();
extern vm_object_t vm_object_enter();
extern void vm_object_pager_create();
extern void vm_object_destroy();
extern void vm_object_print();
extern vm_object_t vm_object_request_object();
typedef struct zone {
int count;
vm_offset_t free_elements;
vm_size_t cur_size;
vm_size_t max_size;
vm_size_t elem_size;
vm_size_t alloc_size;
boolean_t doing_alloc;
char *zone_name;
unsigned int
pageable :1,
sleepable :1,
exhaustible :1,
collectable :1,
expandable :1;
lock_data_t complex_lock;
struct zone * next_zone;
} *zone_t;
extern void zone_gc();
extern void consider_zone_gc();
extern vm_offset_t zalloc();
extern vm_offset_t zget();
extern zone_t zinit();
extern void zfree();
extern void zchange();
extern void zcollectable();
extern vm_offset_t zdata;
extern vm_offset_t zdata_size;
extern void zcram();
extern void zone_bootstrap();
extern void zone_init();
extern void sched_init();
extern void assert_wait();
extern void clear_wait();
extern void thread_sleep();
extern void thread_wakeup();
extern void thread_wakeup_prim();
extern boolean_t thread_invoke();
extern void thread_block();
extern void thread_run();
extern void thread_set_timeout();
extern void thread_setrun();
extern void thread_dispatch();
extern void thread_continue();
extern void thread_go();
extern void thread_will_wait();
extern void thread_will_wait_with_timeout();
extern boolean_t thread_handoff();
extern void recompute_priorities();
extern void thread_bootstrap_return();
extern void thread_exception_return();
extern void thread_syscall_return();
extern struct thread *switch_context();
extern void stack_handoff();
extern void stack_alloc();
extern boolean_t stack_alloc_try();
extern void stack_free();
struct vm_page {
queue_chain_t pageq;
queue_chain_t listq;
struct vm_page *next;
vm_object_t object;
vm_offset_t offset;
unsigned int wire_count:16,
inactive:1,
active:1,
laundry:1,
free:1,
reference:1,
:0;
unsigned int
busy:1,
wanted:1,
tabled:1,
fictitious:1,
private:1,
absent:1,
error:1,
dirty:1,
precious:1,
overwriting:1,
:0;
vm_offset_t phys_addr;
vm_prot_t page_lock;
vm_prot_t unlock_request;
};
typedef struct vm_page *vm_page_t;
extern
vm_page_t vm_page_queue_free;
extern
vm_page_t vm_page_queue_fictitious;
extern
queue_head_t vm_page_queue_active;
extern
queue_head_t vm_page_queue_inactive;
extern
vm_offset_t first_phys_addr;
extern
vm_offset_t last_phys_addr;
extern
int vm_page_free_count;
extern
int vm_page_fictitious_count;
extern
int vm_page_active_count;
extern
int vm_page_inactive_count;
extern
int vm_page_wire_count;
extern
int vm_page_free_target;
extern
int vm_page_free_min;
extern
int vm_page_inactive_target;
extern
int vm_page_free_reserved;
extern
int vm_page_laundry_count;
extern unsigned int vm_page_free_wanted;
extern vm_offset_t vm_page_fictitious_addr;
extern void vm_page_bootstrap();
extern void vm_page_module_init();
extern void vm_page_create();
extern vm_page_t vm_page_lookup();
extern vm_page_t vm_page_grab_fictitious();
extern void vm_page_release_fictitious();
extern boolean_t vm_page_convert();
extern void vm_page_more_fictitious();
extern vm_page_t vm_page_grab();
extern void vm_page_release();
extern void vm_page_wait();
extern vm_page_t vm_page_alloc();
extern void vm_page_attach();
extern void vm_page_init();
extern void vm_page_free();
extern void vm_page_activate();
extern void vm_page_deactivate();
extern void vm_page_rename();
extern void vm_page_insert();
extern void vm_page_remove();
extern void vm_page_zero_fill();
extern void vm_page_copy();
extern void vm_page_wire();
extern void vm_page_unwire();
extern void vm_set_page_size();
extern unsigned int vm_page_info();
extern void vm_page_check_queues();
typedef int vm_inherit_t;
struct vm_statistics {
long pagesize;
long free_count;
long active_count;
long inactive_count;
long wire_count;
long zero_fill_count;
long reactivations;
long pageins;
long pageouts;
long faults;
long cow_faults;
long lookups;
long hits;
};
typedef struct vm_statistics *vm_statistics_t;
typedef struct vm_statistics vm_statistics_data_t;
extern vm_statistics_data_t vm_stat;
struct pmap_statistics {
long resident_count;
long wired_count;
long pageins;
};
typedef struct pmap_statistics *pmap_statistics_t;
typedef struct pmap_statistics pmap_statistics_data_t;
typedef unsigned int pt_entry_t;
typedef volatile long cpu_set;
struct pmap {
pt_entry_t *dirbase;
int ref_count;
struct pmap_statistics stats;
cpu_set cpus_using;
};
typedef struct pmap *pmap_t;
pt_entry_t *pmap_pte();
extern vm_offset_t pmap_steal_memory();
extern unsigned int pmap_free_pages();
extern void pmap_startup();
extern void pmap_init();
extern boolean_t pmap_next_page();
extern void pmap_virtual_space();
extern pmap_t pmap_create();
extern void pmap_reference();
extern void pmap_destroy();
extern void pmap_enter();
extern void pmap_remove();
extern void pmap_protect();
extern void pmap_activate();
extern void pmap_deactivate();
extern void pmap_page_protect();
extern void pmap_clear_reference();
extern boolean_t pmap_is_referenced();
extern void pmap_clear_modify();
extern boolean_t pmap_is_modified();
extern void pmap_statistics();
extern vm_offset_t pmap_extract();
extern boolean_t pmap_access();
extern void pmap_collect();
extern void pmap_change_wiring();
extern pmap_t kernel_pmap;
typedef union vm_map_object {
struct vm_object *vm_object;
struct vm_map *sub_map;
} vm_map_object_t;
struct vm_map_links {
struct vm_map_entry *prev;
struct vm_map_entry *next;
vm_offset_t start;
vm_offset_t end;
};
struct vm_map_entry {
struct vm_map_links links;
union vm_map_object object;
vm_offset_t offset;
unsigned int
is_shared:1,
is_sub_map:1,
in_transition:1,
needs_wakeup:1,
needs_copy:1;
vm_prot_t protection;
vm_prot_t max_protection;
vm_inherit_t inheritance;
unsigned short wired_count;
unsigned short user_wired_count;
};
typedef struct vm_map_entry *vm_map_entry_t;
struct vm_map_header {
struct vm_map_links links;
int nentries;
boolean_t entries_pageable;
};
typedef struct vm_map {
lock_data_t lock;
struct vm_map_header hdr;
pmap_t pmap;
vm_size_t size;
int ref_count;
vm_map_entry_t hint;
vm_map_entry_t first_free;
boolean_t wait_for_space;
boolean_t wiring_required;
unsigned int timestamp;
} *vm_map_t;
typedef struct vm_map_version {
unsigned int main_timestamp;
} vm_map_version_t;
typedef struct vm_map_copy {
int type;
vm_offset_t offset;
vm_size_t size;
union {
struct vm_map_header hdr;
struct {
vm_object_t object;
vm_size_t index;
} c_o;
struct {
int npages;
boolean_t pages_loose;
kern_return_t (*cont)();
char *cont_args;
vm_page_t page_list[8 ];
} c_p;
} c_u;
} *vm_map_copy_t;
typedef struct {
vm_map_t map;
vm_offset_t src_addr;
vm_size_t src_len;
vm_offset_t destroy_addr;
vm_size_t destroy_len;
boolean_t steal_pages;
} vm_map_copyin_args_data_t, *vm_map_copyin_args_t;
extern vm_offset_t kentry_data;
extern vm_offset_t kentry_data_size;
extern int kentry_count;
extern void vm_map_init();
extern vm_map_t vm_map_create();
extern vm_map_t vm_map_fork();
extern void vm_map_reference();
extern void vm_map_deallocate();
extern kern_return_t vm_map_enter();
extern kern_return_t vm_map_find_entry();
extern kern_return_t vm_map_remove();
extern kern_return_t vm_map_protect();
extern kern_return_t vm_map_inherit();
extern void vm_map_print();
extern kern_return_t vm_map_lookup();
extern boolean_t vm_map_verify();
extern kern_return_t vm_map_copyin_common();
extern kern_return_t vm_map_copyin_page_list();
extern kern_return_t vm_map_copyout();
extern kern_return_t vm_map_copy_overwrite();
extern void vm_map_copy_discard();
extern kern_return_t vm_map_copy_discard_cont();
extern kern_return_t vm_map_machine_attribute();
extern kern_return_t vm_map_pageable_common();
extern vm_object_t vm_submap_object;
typedef struct ipc_kmsg {
struct ipc_kmsg *ikm_next, *ikm_prev;
vm_size_t ikm_size;
ipc_marequest_t ikm_marequest;
vm_page_t ikm_page;
vm_map_copy_t ikm_copy;
unsigned long ikm_source_node;
union {
boolean_t ikmu_norma_acked;
boolean_t ikmu_has_dest_right;
} ikmu;
mach_msg_header_t ikm_header;
} *ipc_kmsg_t;
extern ipc_kmsg_t ipc_kmsg_cache[1 ];
typedef unsigned int ast_t;
extern volatile ast_t need_ast[1 ];
extern void ast_taken();
struct run_queue {
queue_head_t runq[32 ];
int low;
int count;
};
typedef struct run_queue *run_queue_t;
extern struct run_queue *rem_runq();
extern struct thread *choose_thread();
extern queue_head_t action_queue;
;
extern int min_quantum;
struct shift {
int shift1;
int shift2;
};
typedef struct shift *shift_t, shift_data_t;
extern unsigned sched_tick;
struct processor_set {
struct run_queue runq;
queue_head_t idle_queue;
int idle_count;
queue_head_t processors;
int processor_count;
boolean_t empty;
queue_head_t tasks;
int task_count;
queue_head_t threads;
int thread_count;
int ref_count;
queue_chain_t all_psets;
boolean_t active;
struct ipc_port * pset_self;
struct ipc_port * pset_name_self;
int max_priority;
int set_quantum;
long mach_factor;
long load_average;
long sched_load;
};
typedef struct processor_set *processor_set_t;
extern struct processor_set default_pset;
struct processor {
struct run_queue runq;
queue_chain_t processor_queue;
int state;
struct thread *next_thread;
struct thread *idle_thread;
int quantum;
boolean_t first_quantum;
int last_quantum;
processor_set_t processor_set;
processor_set_t processor_set_next;
queue_chain_t processors;
struct ipc_port *processor_self;
int slot_num;
};
typedef struct processor *processor_t;
extern struct processor processor_array[1 ];
extern queue_head_t all_psets;
extern int all_psets_count;
;
extern processor_t master_processor;
extern processor_t processor_ptr[1 ];
typedef mach_port_t *processor_array_t;
typedef mach_port_t *processor_set_array_t;
typedef mach_port_t *processor_set_name_array_t;
struct time_value {
long seconds;
long microseconds;
};
typedef struct time_value time_value_t;
typedef struct mapped_time_value {
long seconds;
long microseconds;
long check_seconds;
} mapped_time_value_t;
typedef vm_offset_t eml_routine_t;
typedef struct eml_dispatch {
int ref_count;
int disp_count;
int disp_min;
eml_routine_t disp_vector[1];
} *eml_dispatch_t;
typedef vm_offset_t *emulation_vector_t;
struct task {
int ref_count;
boolean_t active;
vm_map_t map;
queue_chain_t pset_tasks;
int suspend_count;
queue_head_t thread_list;
int thread_count;
processor_set_t processor_set;
boolean_t may_assign;
boolean_t assign_active;
int user_stop_count;
int priority;
time_value_t total_user_time;
time_value_t total_system_time;
boolean_t task_profiled;
struct prof_data *profil_buffer;
struct ipc_port *itk_self;
struct ipc_port *itk_sself;
struct ipc_port *itk_exception;
struct ipc_port *itk_bootstrap;
struct ipc_port *itk_registered[4 ];
struct ipc_space *itk_space;
struct eml_dispatch *eml_dispatch;
long child_node;
};
typedef struct task *task_t;
typedef mach_port_t *task_array_t;
extern kern_return_t task_create();
extern kern_return_t task_terminate();
extern kern_return_t task_suspend();
extern kern_return_t task_resume();
extern kern_return_t task_threads();
extern kern_return_t task_ports();
extern kern_return_t task_info();
extern kern_return_t task_get_special_port();
extern kern_return_t task_set_special_port();
extern kern_return_t task_assign();
extern kern_return_t task_assign_default();
extern void task_init();
extern void task_reference();
extern void task_deallocate();
extern kern_return_t task_hold();
extern kern_return_t task_dowait();
extern kern_return_t task_release();
extern kern_return_t task_halt();
extern kern_return_t task_suspend_nowait();
extern task_t kernel_task_create();
extern task_t kernel_task;
extern unsigned long elapsed_ticks;
extern int hz;
extern int tick;
struct timer_elt {
queue_chain_t chain;
int (*fcn)();
char * param;
unsigned long ticks;
int set;
};
typedef struct timer_elt timer_elt_data_t;
typedef struct timer_elt *timer_elt_t;
extern void set_timeout();
extern boolean_t reset_timeout();
extern void timeout();
extern boolean_t untimeout();
struct timer {
unsigned low_bits;
unsigned high_bits;
unsigned high_bits_check;
unsigned tstamp;
};
typedef struct timer timer_data_t;
typedef struct timer *timer_t;
extern timer_t current_timer[1 ];
extern timer_data_t kernel_timer[1 ];
struct timer_save {
unsigned low;
unsigned high;
};
typedef struct timer_save timer_save_data_t, *timer_save_t;
extern void timer_read();
extern void thread_read_times();
extern unsigned timer_delta();
struct i386_fp_save {
unsigned short fp_control;
unsigned short fp_unused_1;
unsigned short fp_status;
unsigned short fp_unused_2;
unsigned short fp_tag;
unsigned short fp_unused_3;
unsigned int fp_eip;
unsigned short fp_cs;
unsigned short fp_opcode;
unsigned int fp_dp;
unsigned short fp_ds;
unsigned short fp_unused_4;
};
struct i386_fp_regs {
unsigned short fp_reg_word[5][8];
};
struct i386_tss {
int back_link;
int esp0;
int ss0;
int esp1;
int ss1;
int esp2;
int ss2;
int cr3;
int eip;
int eflags;
int eax;
int ecx;
int edx;
int ebx;
int esp;
int ebp;
int esi;
int edi;
int es;
int cs;
int ss;
int ds;
int fs;
int gs;
int ldt;
unsigned short trace_trap;
unsigned short io_bit_map_offset;
};
typedef unsigned char isa_iopb[((((0x3ff +1)+(8)-1)/(8)) ) ];
struct iopb_tss {
struct i386_tss tss;
isa_iopb bitmap;
unsigned int barrier;
queue_head_t io_port_list;
int iopb_desc[2];
};
typedef struct iopb_tss *iopb_tss_t;
struct i386_saved_state {
unsigned int gs;
unsigned int fs;
unsigned int es;
unsigned int ds;
unsigned int edi;
unsigned int esi;
unsigned int ebp;
unsigned int cr2;
unsigned int ebx;
unsigned int edx;
unsigned int ecx;
unsigned int eax;
unsigned int trapno;
unsigned int err;
unsigned int eip;
unsigned int cs;
unsigned int efl;
unsigned int uesp;
unsigned int ss;
struct v86_segs {
unsigned int v86_es;
unsigned int v86_ds;
unsigned int v86_fs;
unsigned int v86_gs;
} v86_segs;
};
struct i386_exception_link {
struct i386_saved_state *saved_state;
};
struct i386_kernel_state {
int k_ebx;
int k_esp;
int k_ebp;
int k_edi;
int k_esi;
int k_eip;
};
struct i386_fpsave_state {
boolean_t fp_valid;
struct i386_fp_save fp_save_state;
struct i386_fp_regs fp_regs;
};
struct v86_assist_state {
vm_offset_t int_table;
unsigned short int_count;
unsigned short flags;
};
struct i386_interrupt_state {
int es;
int ds;
int edx;
int ecx;
int eax;
int eip;
int cs;
int efl;
};
struct i386_machine_state {
iopb_tss_t io_tss;
struct user_ldt * ldt;
struct i386_fpsave_state *ifps;
struct v86_assist_state v86s;
};
typedef struct pcb {
struct i386_interrupt_state iis[2];
struct i386_saved_state iss;
struct i386_machine_state ims;
} *pcb_t;
struct thread {
queue_chain_t links;
run_queue_t runq;
task_t task;
queue_chain_t thread_list;
queue_chain_t pset_threads;
int ref_count;
pcb_t pcb;
vm_offset_t kernel_stack;
vm_offset_t stack_privilege;
int wait_event;
int suspend_count;
kern_return_t wait_result;
boolean_t wake_active;
int state;
void (*swap_func)();
int priority;
int max_priority;
int sched_pri;
int depress_priority;
unsigned int cpu_usage;
unsigned int sched_usage;
unsigned int sched_stamp;
vm_offset_t recover;
boolean_t vm_privilege;
int user_stop_count;
struct thread *ith_next, *ith_prev;
mach_msg_return_t ith_state;
union {
mach_msg_size_t msize;
struct ipc_kmsg *kmsg;
} data;
mach_port_seqno_t ith_seqno;
struct ipc_kmsg_queue {
struct ipc_kmsg *ikmq_base;
} ith_messages;
struct ipc_port *ith_self;
struct ipc_port *ith_sself;
struct ipc_port *ith_exception;
struct ipc_port *ith_reply;
mach_port_t ith_mig_reply;
struct ipc_port *ith_rpc_reply;
union {
struct {
mach_msg_header_t *msg;
mach_msg_option_t option;
mach_msg_size_t rcv_size;
mach_msg_timeout_t timeout;
mach_port_t notify;
struct ipc_object *object;
struct ipc_mqueue *mqueue;
} receive;
struct {
struct ipc_port *port;
int exc;
int code;
int subcode;
} exception;
char *other;
} saved;
timer_data_t user_timer;
timer_data_t system_timer;
timer_save_data_t user_timer_save;
timer_save_data_t system_timer_save;
unsigned int cpu_delta;
unsigned int sched_delta;
timer_elt_data_t timer;
timer_elt_data_t depress_timer;
boolean_t thread_profiled;
boolean_t thread_profiled_own;
struct prof_data *profil_buffer;
boolean_t active;
int ast;
processor_set_t processor_set;
processor_t bound_processor;
};
typedef struct thread *thread_t;
typedef mach_port_t *thread_array_t;
extern thread_t active_threads[1 ];
extern vm_offset_t active_stacks[1 ];
extern kern_return_t thread_create();
extern kern_return_t thread_terminate();
extern kern_return_t thread_suspend();
extern kern_return_t thread_resume();
extern kern_return_t thread_abort();
extern kern_return_t thread_get_state();
extern kern_return_t thread_set_state();
extern kern_return_t thread_get_special_port();
extern kern_return_t thread_set_special_port();
extern kern_return_t thread_info();
extern kern_return_t thread_assign();
extern kern_return_t thread_assign_default();
extern void thread_init();
extern void thread_reference();
extern void thread_deallocate();
extern void thread_hold();
extern kern_return_t thread_dowait();
extern void thread_release();
extern kern_return_t thread_halt();
extern void thread_halt_self();
extern void thread_set_own_priority();
extern thread_t kernel_thread();
extern void reaper_thread();
typedef struct ipc_kmsg_queue *ipc_kmsg_queue_t;
extern void
ipc_kmsg_enqueue( );
extern ipc_kmsg_t
ipc_kmsg_dequeue( );
extern void
ipc_kmsg_rmqueue( );
extern ipc_kmsg_t
ipc_kmsg_queue_next( );
extern void
ipc_kmsg_destroy( );
extern void
ipc_kmsg_clean( );
extern void
ipc_kmsg_free( );
extern mach_msg_return_t
ipc_kmsg_get( );
extern mach_msg_return_t
ipc_kmsg_get_from_kernel(
);
extern mach_msg_return_t
ipc_kmsg_put( );
extern void
ipc_kmsg_put_to_kernel( );
extern mach_msg_return_t
ipc_kmsg_copyin_header( );
extern mach_msg_return_t
ipc_kmsg_copyin( );
extern void
ipc_kmsg_copyin_from_kernel( );
extern mach_msg_return_t
ipc_kmsg_copyout_header( );
extern mach_msg_return_t
ipc_kmsg_copyout_object(
);
extern mach_msg_return_t
ipc_kmsg_copyout_body( );
extern mach_msg_return_t
ipc_kmsg_copyout( );
extern mach_msg_return_t
ipc_kmsg_copyout_pseudo( );
extern void
ipc_kmsg_copyout_dest( );
extern mach_msg_return_t
ipc_kmsg_copyin_compat( );
extern mach_msg_return_t
ipc_kmsg_copyout_compat( );
typedef unsigned int ipc_kobject_t;
typedef unsigned int ipc_kobject_type_t;
extern struct ipc_kmsg *
ipc_kobject_server( );
extern void
ipc_kobject_set( );
extern void
ipc_kobject_destroy( );
typedef unsigned int ipc_object_refs_t;
typedef unsigned int ipc_object_bits_t;
typedef unsigned int ipc_object_type_t;
typedef struct ipc_object {
ipc_object_refs_t io_references;
ipc_object_bits_t io_bits;
} *ipc_object_t;
extern zone_t ipc_object_zones[ 2 ];
extern void
ipc_object_reference( );
extern void
ipc_object_release( );
extern kern_return_t
ipc_object_translate(
);
extern kern_return_t
ipc_object_alloc_dead( );
extern kern_return_t
ipc_object_alloc_dead_name( );
extern kern_return_t
ipc_object_alloc(
);
extern kern_return_t
ipc_object_alloc_name(
);
extern mach_msg_type_name_t
ipc_object_copyin_type( );
extern kern_return_t
ipc_object_copyin(
);
extern void
ipc_object_copyin_from_kernel( );
extern void
ipc_object_destroy( );
extern kern_return_t
ipc_object_copyout(
);
extern kern_return_t
ipc_object_copyout_name(
);
extern void
ipc_object_copyout_dest(
);
extern kern_return_t
ipc_object_rename( );
extern mach_msg_type_name_t
ipc_object_copyout_type_compat( );
extern kern_return_t
ipc_object_copyin_compat(
);
extern kern_return_t
ipc_object_copyin_header(
);
extern kern_return_t
ipc_object_copyout_compat(
);
extern kern_return_t
ipc_object_copyout_name_compat(
);
extern void
ipc_object_print( );
typedef thread_t ipc_thread_t;
typedef struct ipc_thread_queue {
ipc_thread_t ithq_base;
} *ipc_thread_queue_t;
extern void
ipc_thread_enqueue( );
extern ipc_thread_t
ipc_thread_dequeue( );
extern void
ipc_thread_rmqueue( );
typedef struct ipc_mqueue {
struct ipc_kmsg_queue imq_messages;
struct ipc_thread_queue imq_threads;
} *ipc_mqueue_t;
extern void
ipc_mqueue_init( );
extern void
ipc_mqueue_move( );
extern void
ipc_mqueue_changed( );
extern mach_msg_return_t
ipc_mqueue_send( );
extern mach_msg_return_t
ipc_mqueue_receive(
);
typedef unsigned int ipc_table_index_t;
typedef unsigned int ipc_table_elems_t;
typedef struct ipc_table_size {
ipc_table_elems_t its_size;
} *ipc_table_size_t;
extern ipc_table_size_t ipc_table_entries;
extern ipc_table_size_t ipc_table_dnrequests;
extern void
ipc_table_init();
extern vm_offset_t
ipc_table_alloc( );
extern vm_offset_t
ipc_table_realloc( );
extern void
ipc_table_free( );
typedef unsigned int ipc_port_timestamp_t;
typedef struct ipc_port {
struct ipc_object ip_object;
union {
struct ipc_space *receiver;
struct ipc_port *destination;
ipc_port_timestamp_t timestamp;
} data;
mach_port_t ip_receiver_name;
ipc_kobject_t ip_kobject;
mach_port_mscount_t ip_mscount;
mach_port_rights_t ip_srights;
mach_port_rights_t ip_sorights;
struct ipc_port *ip_nsrequest;
struct ipc_port *ip_pdrequest;
struct ipc_port_request *ip_dnrequests;
struct ipc_pset *ip_pset;
mach_port_seqno_t ip_seqno;
unsigned short ip_msgcount;
unsigned short ip_qlimit;
struct ipc_mqueue ip_messages;
struct ipc_thread_queue ip_blocked;
unsigned long ip_norma_uid;
unsigned long ip_norma_dest_node;
long ip_norma_stransit;
long ip_norma_sotransit;
long ip_norma_xmm_object_refs;
boolean_t ip_norma_is_proxy;
boolean_t ip_norma_is_special;
boolean_t ip_norma_atrium_waiter;
boolean_t ip_norma_forward;
boolean_t ip_norma_sync;
struct ipc_port *ip_norma_atrium;
struct ipc_port *ip_norma_queue_next;
struct ipc_port *ip_norma_xmm_object;
struct ipc_port *ip_norma_next;
long ip_norma_spare1;
long ip_norma_spare2;
long ip_norma_spare3;
long ip_norma_spare4;
} *ipc_port_t;
typedef ipc_table_index_t ipc_port_request_index_t;
typedef struct ipc_port_request {
union {
struct ipc_port *port;
ipc_port_request_index_t index;
} notify;
union {
mach_port_t name;
struct ipc_table_size *size;
} name;
} *ipc_port_request_t;
extern ipc_port_timestamp_t ipc_port_timestamp_data;
extern ipc_port_timestamp_t
ipc_port_timestamp();
extern kern_return_t
ipc_port_dnrequest(
);
extern kern_return_t
ipc_port_dngrow( );
extern ipc_port_t
ipc_port_dncancel( );
extern void
ipc_port_pdrequest( );
extern void
ipc_port_nsrequest(
);
extern void
ipc_port_set_qlimit( );
extern void
ipc_port_set_seqno( );
extern void
ipc_port_clear_receiver( );
extern void
ipc_port_init( );
extern kern_return_t
ipc_port_alloc( );
extern kern_return_t
ipc_port_alloc_name( );
extern void
ipc_port_destroy( );
extern boolean_t
ipc_port_check_circularity( );
extern ipc_port_t
ipc_port_lookup_notify( );
extern ipc_port_t
ipc_port_make_send( );
extern ipc_port_t
ipc_port_copy_send( );
extern mach_port_t
ipc_port_copyout_send( );
extern void
ipc_port_release_send( );
extern ipc_port_t
ipc_port_make_sonce( );
extern void
ipc_port_release_sonce( );
extern void
ipc_port_release_receive( );
extern ipc_port_t
ipc_port_alloc_special( );
extern void
ipc_port_dealloc_special( );
extern kern_return_t
ipc_port_alloc_compat( );
extern mach_port_t
ipc_port_copyout_send_compat( );
extern mach_port_t
ipc_port_copyout_receiver( );
extern void
ipc_port_print( );
extern void kmem_init();
extern kern_return_t kmem_alloc();
extern kern_return_t kmem_alloc_pageable();
extern kern_return_t kmem_alloc_wired();
extern kern_return_t kmem_alloc_aligned();
extern kern_return_t kmem_realloc();
extern void kmem_free();
extern vm_map_t kmem_suballoc();
extern kern_return_t kmem_io_map_copyout();
extern void kmem_io_map_deallocate();
extern vm_map_t kernel_map;
extern vm_map_t kernel_pageable_map;
extern vm_map_t ipc_kernel_map;
extern ipc_port_t host_special_port[ 40 ];
struct netvec {
unsigned long addr;
unsigned long size;
};
typedef char * va_list;
struct pginfo {
unsigned long pg_msgh_offset;
boolean_t pg_page_first;
boolean_t pg_page_last;
boolean_t pg_copy_last;
unsigned long pg_copy_offset;
unsigned long pg_copy_size;
unsigned long pg_first_seqid;
unsigned long pg_remote_port;
unsigned long pg_copy_index;
unsigned long pg_copy_npages;
unsigned long pg_msgh_id;
};
struct netipc_hdr {
unsigned long checksum;
unsigned long type;
unsigned long seqid;
struct pginfo pg;
unsigned long remote;
unsigned long ctl;
unsigned long ctl_seqid;
kern_return_t ctl_status;
unsigned long ctl_data;
unsigned long incarnation;
};
extern void netipc_thread_lock();
extern void netipc_thread_unlock();
extern void netipc_copy_ungrab();
typedef struct netipc_packet *netipc_packet_t;
struct netipc_packet {
unsigned long dp_type;
unsigned long dp_remote;
unsigned long dp_seqid;
unsigned long dp_first_seqid;
unsigned long dp_last_seqid;
unsigned long dp_last_unacked;
ipc_kmsg_t dp_kmsg;
unsigned long dp_offset;
netipc_packet_t dp_next;
ipc_port_t dp_remote_port;
vm_map_copy_t dp_copy;
unsigned long dp_copy_index;
unsigned long dp_copy_npages;
unsigned long dp_copy_last;
unsigned long dp_page_list_base;
boolean_t dp_has_continuation;
boolean_t dp_being_continued;
boolean_t dp_reconstruct_complete;
};
typedef struct netipc_packet_state {
netipc_packet_t netipc_packet;
netipc_packet_t suspended_packet;
ipc_port_t suspended_ports;
unsigned int state;
} *netipc_packet_state_t;
struct netipc_packet_state netipc_packet_state[ 256 ];
extern void netipc_start();
extern boolean_t norma_ipc_prepare_dest();
extern void norma_ipc_send_dest();
extern unsigned long norma_ipc_send_port();
static boolean_t dp_advance();
netipc_packet_t netipc_packet_allocate();
void netipc_packet_deallocate();
void netipc_set_node_state();
void norma_ipc_queue_port();
zone_t netipc_packet_zone;
ipc_kmsg_t netipc_kmsg_cache;
vm_size_t netipc_kmsg_first_half;
int netipc_kmsg_cache_hits;
int netipc_kmsg_cache_misses;
int netipc_kmsg_splits;
struct netipc_hdr send_hdr_p;
struct netipc_hdr send_hdr_k;
struct netipc_hdr send_hdr_m;
struct netipc_hdr send_hdr_o;
struct netvec netvec_p[3];
struct netvec netvec_k[3];
struct netvec netvec_m[3];
struct netvec netvec_o[3];
struct vm_map_copy netipc_kmsg_more_copy;
struct vm_map_copy netipc_ool_ports_copy;
unsigned int netipc_output_replenish_cleaned = 0;
extern kern_return_t vm_map_copy_discard_cont();
netipc_send_page(remote, dp)
unsigned long remote;
register netipc_packet_t dp;
{
vm_page_t *page_list;
unsigned long align;
unsigned long length;
unsigned long offset;
char *__ntr_func_name__ = "netipc_send_page" ;
offset = 0;
align = dp->dp_copy->offset & page_mask;
if (dp->dp_copy_index < dp->dp_copy_npages - 1) {
length = page_size ;
} else {
length = ((dp->dp_copy->size + align) & page_mask);
if (length == 0) {
length = page_size ;
} else {
length = ((((unsigned long)(length)) + (4 - 1)
) & ~(4 - 1) ) ;
}
}
do { if (!(((((unsigned long)(offset)) & (4 - 1) ) == 0) ))
Assert("../../../../../src/mk/kernel/norma/ipc_output.c", 1246);
} while ( ((boolean_t) 0) ) ;
do { if (!(((((unsigned long)(length)) & (4 - 1) ) == 0) ))
Assert("../../../../../src/mk/kernel/norma/ipc_output.c", 1247);
} while ( ((boolean_t) 0) ) ;
do { if (!(length > 0))
Assert("../../../../../src/mk/kernel/norma/ipc_output.c", 1248);
} while ( ((boolean_t) 0) ) ;
do { if (!(length <= page_size ))
Assert("../../../../../src/mk/kernel/norma/ipc_output.c", 1249);
} while ( ((boolean_t) 0) ) ;
netipc_set_node_state(&send_hdr_p.type, remote);
send_hdr_p.pg.pg_copy_offset = align;
send_hdr_p.pg.pg_msgh_offset = dp->dp_offset;
send_hdr_p.pg.pg_copy_size = dp->dp_copy->size;
send_hdr_p.pg.pg_page_first = (dp->dp_copy_index == 0);
send_hdr_p.pg.pg_page_last = (dp->dp_copy_index ==
dp->dp_copy_npages - 1);
send_hdr_p.pg.pg_copy_last = dp->dp_copy_last;
send_hdr_p.seqid = dp->dp_seqid;
send_hdr_p.pg.pg_first_seqid = dp->dp_first_seqid;
send_hdr_p.pg.pg_remote_port = (unsigned long)
dp->dp_remote_port->ip_norma_uid;
send_hdr_p.pg.pg_copy_index = (unsigned long) dp->dp_copy_index;
send_hdr_p.pg.pg_msgh_id = (unsigned long)
dp->dp_kmsg->ikm_header.msgh_id;
send_hdr_p.pg.pg_copy_npages = (unsigned long) dp->dp_copy_npages;
page_list = &dp->dp_copy-> c_u.c_p.page_list [dp->dp_copy_index];
if (offset + length > page_size ) {
vm_offset_t first_half = page_size - offset;
netvec_p[1].addr =
(((vm_offset_t)((page_list[0])->phys_addr) + ((vm_offset_t) 0xc0000000)
) ) + offset;
netvec_p[1].size = first_half;
netvec_p[2].addr =
(((vm_offset_t)((page_list[1])->phys_addr) + ((vm_offset_t) 0xc0000000) ) ) ;
netvec_p[2].size = length - first_half;
netipc_send_with_timeout(remote, netvec_p, 3,
(unsigned long) dp, dp->dp_seqid);
} else {
netvec_p[1].addr =
(((vm_offset_t)((page_list[0])->phys_addr) + ((vm_offset_t) 0xc0000000)
) ) + offset;
netvec_p[1].size = length;
netipc_send_with_timeout(remote, netvec_p, 2,
(unsigned long) dp, dp->dp_seqid);
}
}
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads