|
|
1.1 ! root 1: #ifndef GEMU_H ! 2: #define GEMU_H ! 3: ! 4: #include "thunk.h" ! 5: ! 6: #include <signal.h> ! 7: #include <string.h> ! 8: ! 9: #include "cpu.h" ! 10: ! 11: #include "gdbstub.h" ! 12: ! 13: typedef siginfo_t target_siginfo_t; ! 14: #define target_sigaction sigaction ! 15: #ifdef TARGET_I386 ! 16: struct target_pt_regs { ! 17: long ebx; ! 18: long ecx; ! 19: long edx; ! 20: long esi; ! 21: long edi; ! 22: long ebp; ! 23: long eax; ! 24: int xds; ! 25: int xes; ! 26: long orig_eax; ! 27: long eip; ! 28: int xcs; ! 29: long eflags; ! 30: long esp; ! 31: int xss; ! 32: }; ! 33: struct target_sigcontext { ! 34: int sc_onstack; ! 35: int sc_mask; ! 36: int sc_eax; ! 37: int sc_ebx; ! 38: int sc_ecx; ! 39: int sc_edx; ! 40: int sc_edi; ! 41: int sc_esi; ! 42: int sc_ebp; ! 43: int sc_esp; ! 44: int sc_ss; ! 45: int sc_eflags; ! 46: int sc_eip; ! 47: int sc_cs; ! 48: int sc_ds; ! 49: int sc_es; ! 50: int sc_fs; ! 51: int sc_gs; ! 52: }; ! 53: ! 54: #define __USER_CS (0x17) ! 55: #define __USER_DS (0x1F) ! 56: ! 57: #elif defined(TARGET_PPC) ! 58: struct target_pt_regs { ! 59: unsigned long gpr[32]; ! 60: unsigned long nip; ! 61: unsigned long msr; ! 62: unsigned long orig_gpr3; /* Used for restarting system calls */ ! 63: unsigned long ctr; ! 64: unsigned long link; ! 65: unsigned long xer; ! 66: unsigned long ccr; ! 67: unsigned long mq; /* 601 only (not used at present) */ ! 68: /* Used on APUS to hold IPL value. */ ! 69: unsigned long trap; /* Reason for being here */ ! 70: unsigned long dar; /* Fault registers */ ! 71: unsigned long dsisr; ! 72: unsigned long result; /* Result of a system call */ ! 73: }; ! 74: ! 75: struct target_sigcontext { ! 76: int sc_onstack; /* sigstack state to restore */ ! 77: int sc_mask; /* signal mask to restore */ ! 78: int sc_ir; /* pc */ ! 79: int sc_psw; /* processor status word */ ! 80: int sc_sp; /* stack pointer if sc_regs == NULL */ ! 81: void *sc_regs; /* (kernel private) saved state */ ! 82: }; ! 83: ! 84: #endif ! 85: ! 86: typedef struct TaskState { ! 87: struct TaskState *next; ! 88: int used; /* non zero if used */ ! 89: uint8_t stack[0]; ! 90: } __attribute__((aligned(16))) TaskState; ! 91: ! 92: void syscall_init(void); ! 93: long do_mach_syscall(void *cpu_env, int num, uint32_t arg1, uint32_t arg2, uint32_t arg3, ! 94: uint32_t arg4, uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8); ! 95: long do_thread_syscall(void *cpu_env, int num, uint32_t arg1, uint32_t arg2, uint32_t arg3, ! 96: uint32_t arg4, uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8); ! 97: long do_unix_syscall(void *cpu_env, int num); ! 98: int do_sigaction(int sig, const struct sigaction *act, ! 99: struct sigaction *oact); ! 100: int do_sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss); ! 101: ! 102: void gemu_log(const char *fmt, ...) __attribute__((format(printf,1,2))); ! 103: void qerror(const char *fmt, ...); ! 104: ! 105: void write_dt(void *ptr, unsigned long addr, unsigned long limit, int flags); ! 106: ! 107: extern CPUState *global_env; ! 108: void cpu_loop(CPUState *env); ! 109: void init_paths(const char *prefix); ! 110: const char *path(const char *pathname); ! 111: ! 112: extern int loglevel; ! 113: extern FILE *logfile; ! 114: ! 115: /* commpage.c */ ! 116: void commpage_init(); ! 117: void do_commpage(void *cpu_env, int num, uint32_t arg1, uint32_t arg2, uint32_t arg3, ! 118: uint32_t arg4, uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8); ! 119: ! 120: /* signal.c */ ! 121: void process_pending_signals(void *cpu_env); ! 122: void signal_init(void); ! 123: int queue_signal(int sig, target_siginfo_t *info); ! 124: void host_to_target_siginfo(target_siginfo_t *tinfo, const siginfo_t *info); ! 125: void target_to_host_siginfo(siginfo_t *info, const target_siginfo_t *tinfo); ! 126: long do_sigreturn(CPUState *env, int num); ! 127: ! 128: /* machload.c */ ! 129: int mach_exec(const char * filename, char ** argv, char ** envp, ! 130: struct target_pt_regs * regs); ! 131: ! 132: /* mmap.c */ ! 133: int target_mprotect(unsigned long start, unsigned long len, int prot); ! 134: long target_mmap(unsigned long start, unsigned long len, int prot, ! 135: int flags, int fd, unsigned long offset); ! 136: int target_munmap(unsigned long start, unsigned long len); ! 137: long target_mremap(unsigned long old_addr, unsigned long old_size, ! 138: unsigned long new_size, unsigned long flags, ! 139: unsigned long new_addr); ! 140: int target_msync(unsigned long start, unsigned long len, int flags); ! 141: ! 142: /* user access */ ! 143: ! 144: /* XXX: todo protect every memory access */ ! 145: #define lock_user(x,y,z) (void*)(x) ! 146: #define unlock_user(x,y,z) ! 147: ! 148: /* Mac OS X ABI arguments processing */ ! 149: #ifdef TARGET_I386 ! 150: static inline uint32_t get_int_arg(int *i, CPUX86State *cpu_env) ! 151: { ! 152: uint32_t *args = (uint32_t*)(cpu_env->regs[R_ESP] + 4 + *i); ! 153: *i+=4; ! 154: return tswap32(*args); ! 155: } ! 156: static inline uint64_t get_int64_arg(int *i, CPUX86State *cpu_env) ! 157: { ! 158: uint64_t *args = (uint64_t*)(cpu_env->regs[R_ESP] + 4 + *i); ! 159: *i+=8; ! 160: return tswap64(*args); ! 161: } ! 162: #elif defined(TARGET_PPC) ! 163: static inline uint32_t get_int_arg(int *i, CPUPPCState *cpu_env) ! 164: { ! 165: /* XXX: won't work when args goes on stack after gpr10 */ ! 166: uint32_t args = (uint32_t)(cpu_env->gpr[3+(*i & 0xff)/4]); ! 167: *i+=4; ! 168: return tswap32(args); ! 169: } ! 170: static inline uint64_t get_int64_arg(int *i, CPUPPCState *cpu_env) ! 171: { ! 172: /* XXX: won't work when args goes on stack after gpr10 */ ! 173: uint64_t args = (uint64_t)(cpu_env->fpr[1+(*i >> 8)/8]); ! 174: *i+=(8 << 8) + 8; ! 175: return tswap64(args); ! 176: } ! 177: #endif ! 178: ! 179: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.