File:  [Qemu by Fabrice Bellard] / qemu / darwin-user / qemu.h
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:55:05 2018 UTC (3 years, 3 months ago) by root
Branches: qemu, MAIN
CVS tags: qemu0130, qemu0125, qemu0124, qemu0123, qemu0122, qemu0121, qemu0120, qemu0111, qemu0110, qemu0105, qemu0104, qemu0103, qemu0102, qemu0101, qemu0100, HEAD
qemu 0.10.0

    1: #ifndef GEMU_H
    2: #define GEMU_H
    3: 
    4: #include <signal.h>
    5: #include <string.h>
    6: 
    7: #include "cpu.h"
    8: 
    9: #include "thunk.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: #include "qemu-log.h"
  113: 
  114: /* commpage.c */
  115: void commpage_init(void);
  116: void do_commpage(void *cpu_env, int num, uint32_t arg1, uint32_t arg2, uint32_t arg3,
  117:                 uint32_t arg4, uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8);
  118: 
  119: /* signal.c */
  120: void process_pending_signals(void *cpu_env);
  121: void signal_init(void);
  122: int queue_signal(int sig, target_siginfo_t *info);
  123: void host_to_target_siginfo(target_siginfo_t *tinfo, const siginfo_t *info);
  124: void target_to_host_siginfo(siginfo_t *info, const target_siginfo_t *tinfo);
  125: long do_sigreturn(CPUState *env, int num);
  126: 
  127: /* machload.c */
  128: int mach_exec(const char * filename, char ** argv, char ** envp,
  129: 			  struct target_pt_regs * regs);
  130: 
  131: /* mmap.c */
  132: int target_mprotect(unsigned long start, unsigned long len, int prot);
  133: long target_mmap(unsigned long start, unsigned long len, int prot,
  134:                  int flags, int fd, unsigned long offset);
  135: int target_munmap(unsigned long start, unsigned long len);
  136: long target_mremap(unsigned long old_addr, unsigned long old_size,
  137:                    unsigned long new_size, unsigned long flags,
  138:                    unsigned long new_addr);
  139: int target_msync(unsigned long start, unsigned long len, int flags);
  140: 
  141: /* user access */
  142: 
  143: /* XXX: todo protect every memory access */
  144: #define lock_user(x,y,z)    (void*)(x)
  145: #define unlock_user(x,y,z)
  146: 
  147: /* Mac OS X ABI arguments processing */
  148: #ifdef TARGET_I386
  149: static inline uint32_t get_int_arg(int *i, CPUX86State *cpu_env)
  150: {
  151:     uint32_t *args = (uint32_t*)(cpu_env->regs[R_ESP] + 4 + *i);
  152:     *i+=4;
  153:     return tswap32(*args);
  154: }
  155: static inline uint64_t get_int64_arg(int *i, CPUX86State *cpu_env)
  156: {
  157:     uint64_t *args = (uint64_t*)(cpu_env->regs[R_ESP] + 4 + *i);
  158:     *i+=8;
  159:     return tswap64(*args);
  160: }
  161: #elif defined(TARGET_PPC)
  162: static inline uint32_t get_int_arg(int *i, CPUPPCState *cpu_env)
  163: {
  164:     /* XXX: won't work when args goes on stack after gpr10 */
  165:     uint32_t args = (uint32_t)(cpu_env->gpr[3+(*i & 0xff)/4]);
  166:     *i+=4;
  167:     return tswap32(args);
  168: }
  169: static inline uint64_t get_int64_arg(int *i, CPUPPCState *cpu_env)
  170: {
  171:     /* XXX: won't work when args goes on stack after gpr10 */
  172:     uint64_t args = (uint64_t)(cpu_env->fpr[1+(*i >> 8)/8]);
  173:     *i+=(8 << 8) + 8;
  174:     return tswap64(args);
  175: }
  176: #endif
  177: 
  178: #endif

unix.superglobalmegacorp.com