?? qemu.h
字號:
#ifndef GEMU_H#define GEMU_H#include <signal.h>#include <string.h>#include "cpu.h"#include "thunk.h"#include "gdbstub.h"typedef siginfo_t target_siginfo_t;#define target_sigaction sigaction#ifdef TARGET_I386struct target_pt_regs { long ebx; long ecx; long edx; long esi; long edi; long ebp; long eax; int xds; int xes; long orig_eax; long eip; int xcs; long eflags; long esp; int xss;};struct target_sigcontext { int sc_onstack; int sc_mask; int sc_eax; int sc_ebx; int sc_ecx; int sc_edx; int sc_edi; int sc_esi; int sc_ebp; int sc_esp; int sc_ss; int sc_eflags; int sc_eip; int sc_cs; int sc_ds; int sc_es; int sc_fs; int sc_gs;};#define __USER_CS (0x17)#define __USER_DS (0x1F)#elif defined(TARGET_PPC)struct target_pt_regs { unsigned long gpr[32]; unsigned long nip; unsigned long msr; unsigned long orig_gpr3; /* Used for restarting system calls */ unsigned long ctr; unsigned long link; unsigned long xer; unsigned long ccr; unsigned long mq; /* 601 only (not used at present) */ /* Used on APUS to hold IPL value. */ unsigned long trap; /* Reason for being here */ unsigned long dar; /* Fault registers */ unsigned long dsisr; unsigned long result; /* Result of a system call */};struct target_sigcontext { int sc_onstack; /* sigstack state to restore */ int sc_mask; /* signal mask to restore */ int sc_ir; /* pc */ int sc_psw; /* processor status word */ int sc_sp; /* stack pointer if sc_regs == NULL */ void *sc_regs; /* (kernel private) saved state */};#endiftypedef struct TaskState { struct TaskState *next; int used; /* non zero if used */ uint8_t stack[0];} __attribute__((aligned(16))) TaskState;void syscall_init(void);long do_mach_syscall(void *cpu_env, int num, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4, uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8);long do_thread_syscall(void *cpu_env, int num, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4, uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8);long do_unix_syscall(void *cpu_env, int num);int do_sigaction(int sig, const struct sigaction *act, struct sigaction *oact);int do_sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss);void gemu_log(const char *fmt, ...) __attribute__((format(printf,1,2)));void qerror(const char *fmt, ...);void write_dt(void *ptr, unsigned long addr, unsigned long limit, int flags);extern CPUState *global_env;void cpu_loop(CPUState *env);void init_paths(const char *prefix);const char *path(const char *pathname);extern int loglevel;extern FILE *logfile;/* commpage.c */void commpage_init();void do_commpage(void *cpu_env, int num, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4, uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8);/* signal.c */void process_pending_signals(void *cpu_env);void signal_init(void);int queue_signal(int sig, target_siginfo_t *info);void host_to_target_siginfo(target_siginfo_t *tinfo, const siginfo_t *info);void target_to_host_siginfo(siginfo_t *info, const target_siginfo_t *tinfo);long do_sigreturn(CPUState *env, int num);/* machload.c */int mach_exec(const char * filename, char ** argv, char ** envp, struct target_pt_regs * regs);/* mmap.c */int target_mprotect(unsigned long start, unsigned long len, int prot);long target_mmap(unsigned long start, unsigned long len, int prot, int flags, int fd, unsigned long offset);int target_munmap(unsigned long start, unsigned long len);long target_mremap(unsigned long old_addr, unsigned long old_size, unsigned long new_size, unsigned long flags, unsigned long new_addr);int target_msync(unsigned long start, unsigned long len, int flags);/* user access *//* XXX: todo protect every memory access */#define lock_user(x,y,z) (void*)(x)#define unlock_user(x,y,z)/* Mac OS X ABI arguments processing */#ifdef TARGET_I386static inline uint32_t get_int_arg(int *i, CPUX86State *cpu_env){ uint32_t *args = (uint32_t*)(cpu_env->regs[R_ESP] + 4 + *i); *i+=4; return tswap32(*args);}static inline uint64_t get_int64_arg(int *i, CPUX86State *cpu_env){ uint64_t *args = (uint64_t*)(cpu_env->regs[R_ESP] + 4 + *i); *i+=8; return tswap64(*args);}#elif defined(TARGET_PPC)static inline uint32_t get_int_arg(int *i, CPUPPCState *cpu_env){ /* XXX: won't work when args goes on stack after gpr10 */ uint32_t args = (uint32_t)(cpu_env->gpr[3+(*i & 0xff)/4]); *i+=4; return tswap32(args);}static inline uint64_t get_int64_arg(int *i, CPUPPCState *cpu_env){ /* XXX: won't work when args goes on stack after gpr10 */ uint64_t args = (uint64_t)(cpu_env->fpr[1+(*i >> 8)/8]); *i+=(8 << 8) + 8; return tswap64(args);}#endif#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -