home *** CD-ROM | disk | FTP | other *** search
- #define DEFAULT_TEXT_MIN ((unsigned long)0x00400000)
- #define DEFAULT_DATA_MIN ((unsigned long)0x10000000)
-
- #define STACK_MAX ((unsigned long)0x7FFFFFFF)
- #define STACK_WMAX (STACK_MAX + 1 - sizeof(unsigned long))
-
- /*
- * Arbitrary...
- */
- #define STACK_MIN ((STACK_MAX + 1) / 2)
- #define DATA_MAX (STACK_MIN - 1)
-
- typedef struct process process;
- struct process
- {
- char *p_adotout;
- unsigned long p_entry_point;
- int p_pid;
- unsigned long p_state[R_MAX];
- symtab p_symtab;
-
- /*
- * Text space.
- *
- * p_text_region_limit =
- * p->p_text_region_min + p_text_region_size - 1;
- */
- unsigned char *p_text_region;
- unsigned long p_text_region_min;
- unsigned long p_text_region_limit;
- unsigned long p_text_region_wlimit;
- int p_text_region_is_readonly;
-
- /*
- * Data space.
- *
- * p_data_region_limit =
- * p_data_region_min + p_data_region_size - 1;
- * ((p_data_region_limit + sizeof(unsigned char)) is
- * also known as The Break.)
- *
- * p_writable_data >= p_data_region_min
- * &&
- * p_writable_data <= DATA_MAX
- */
- unsigned char *p_data_region;
- unsigned long p_data_region_min;
- unsigned long p_data_region_limit;
- unsigned long p_data_region_wlimit;
- unsigned long p_writable_data;
-
- /*
- * Stack space.
- *
- * p_stack_region_min =
- * STACK_MAX + 1 - p_stack_region_size;
- */
- unsigned char *p_stack_region;
- unsigned long p_stack_region_min;
- };
-
- #define check_word_align(dipc,i) \
- { \
- if ((i) & 0x3) \
- { \
- GLOBALdipc = dipc; \
- vcouldnot("access memory at non word-aligned address 0x%x", (i)); \
- } \
- }
-
- #define check_halfword_align(dipc,i) \
- { \
- if ((i) & 0x1) \
- { \
- GLOBALdipc = dipc; \
- vcouldnot("access memory at non halfword-aligned address 0x%x", (i)); \
- } \
- }
-
- #define do_known_delayed_branch \
- { \
- dinstrn *bdslot_dipc; \
- \
- bdslot_dipc = (dinstrn *)dipc->di_2; \
- \
- (void)(*bdslot_dipc->di_handler)(bdslot_dipc); \
- \
- dipc = (dinstrn *)dipc->di_3; \
- }
-
- #define do_unknown_delayed_branch \
- { \
- dinstrn *bdslot_dipc; \
- \
- bdslot_dipc = (dinstrn *)dipc->di_1; \
- \
- (void)(*bdslot_dipc->di_handler)(bdslot_dipc); \
- \
- if (sigs_pending > 0) \
- dipc = deliver_signal(addr_to_decoded_instrnp(dipc, *dipc->di_0)); \
- else \
- dipc = addr_to_decoded_instrnp(dipc, *dipc->di_0) - 1; \
- }
-
- #define do_known_delayed_upbranch \
- { \
- do_known_delayed_branch; \
- \
- if (sigs_pending > 0) \
- dipc = deliver_signal(dipc + 1); \
- }
-
- #define procsput(regi,value) \
- { \
- if (Rflag) \
- procsput_trace(regi, value); \
- \
- switch (regi) \
- { \
- case R_0: \
- /* \
- * Register 0 is special. \
- */ \
- break; \
- \
- case R_K0: \
- case R_K1: \
- if (give_warnings) \
- warning("write to kernel-reserved register %s", say_register(regi)); \
- /* fall thru. */ \
- default: \
- P.p_state[regi] = value; \
- break; \
- } \
- }
-
- #define procsget(regi,r) \
- { \
- switch (regi) \
- { \
- case R_K0: \
- case R_K1: \
- if (give_warnings) \
- procsget_warning(regi); \
- /* fall thru. */ \
- default: \
- r = P.p_state[regi]; \
- break; \
- } \
- \
- if (Rflag) \
- procsget_trace(regi, r); \
- }
-
- extern char *malloc();
- extern char *calloc();
- extern char *realloc();
-
- extern int procopen();
- extern void procsget_trace();
- extern void procsput_trace();
- extern void procsget_warning();
- extern void procmget_trace();
- extern int quiet_procmget();
- extern int quiet_procmput();
- extern int quiet_procsget();
- extern int quiet_procsput();
- extern int quiet_procbreakget();
- extern int quiet_procbreakput();
- extern char *proc_text_address();
- extern int proc_grow_stack();
- extern int proc_mem_contiguous();
-
- extern int Mflag;
- extern int Rflag;
-
- extern process P;
- extern int give_warnings;
- extern int sigs_pending;
-