syscall.c
来自「ppc750 system design simulator using sys」· C语言 代码 · 共 1,548 行 · 第 1/4 页
C
1,548 行
/*************************************************************************** syscall.c - description ------------------- begin : Wed Sep 26 2001 copyright : (C) 2001 Universite Paris Sud and CEA author : Gilles Mouchard email : gilles.mouchard@lri.fr, gilles.mouchard@cea.fr ***************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/#ifdef linux#ifndef _GNU_SOURCE#define _GNU_SOURCE#endif#endif#include <syscall.h>#include <ppcemul.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/times.h>#include <xmlize.h>#define __SYSCALL_exit 1#define __SYSCALL_fork 2#define __SYSCALL_read 3#define __SYSCALL_write 4#define __SYSCALL_open 5#define __SYSCALL_close 6#define __SYSCALL_waitpid 7#define __SYSCALL_creat 8#define __SYSCALL_link 9#define __SYSCALL_unlink 10#define __SYSCALL_execve 11#define __SYSCALL_chdir 12#define __SYSCALL_time 13#define __SYSCALL_mknod 14#define __SYSCALL_chmod 15#define __SYSCALL_lchown 16#define __SYSCALL_break 17#define __SYSCALL_oldstat 18#define __SYSCALL_lseek 19#define __SYSCALL_getpid 20#define __SYSCALL_mount 21#define __SYSCALL_umount 22#define __SYSCALL_setuid 23#define __SYSCALL_getuid 24#define __SYSCALL_stime 25#define __SYSCALL_ptrace 26#define __SYSCALL_alarm 27#define __SYSCALL_oldfstat 28#define __SYSCALL_pause 29#define __SYSCALL_utime 30#define __SYSCALL_stty 31#define __SYSCALL_gtty 32#define __SYSCALL_access 33#define __SYSCALL_nice 34#define __SYSCALL_ftime 35#define __SYSCALL_sync 36#define __SYSCALL_kill 37#define __SYSCALL_rename 38#define __SYSCALL_mkdir 39#define __SYSCALL_rmdir 40#define __SYSCALL_dup 41#define __SYSCALL_pipe 42#define __SYSCALL_times 43#define __SYSCALL_prof 44#define __SYSCALL_brk 45#define __SYSCALL_setgid 46#define __SYSCALL_getgid 47#define __SYSCALL_signal 48#define __SYSCALL_geteuid 49#define __SYSCALL_getegid 50#define __SYSCALL_acct 51#define __SYSCALL_umount2 52#define __SYSCALL_lock 53#define __SYSCALL_ioctl 54#define __SYSCALL_fcntl 55#define __SYSCALL_mpx 56#define __SYSCALL_setpgid 57#define __SYSCALL_ulimit 58#define __SYSCALL_oldolduname 59#define __SYSCALL_umask 60#define __SYSCALL_chroot 61#define __SYSCALL_ustat 62#define __SYSCALL_dup2 63#define __SYSCALL_getppid 64#define __SYSCALL_getpgrp 65#define __SYSCALL_setsid 66#define __SYSCALL_sigaction 67#define __SYSCALL_sgetmask 68#define __SYSCALL_ssetmask 69#define __SYSCALL_setreuid 70#define __SYSCALL_setregid 71#define __SYSCALL_sigsuspend 72#define __SYSCALL_sigpending 73#define __SYSCALL_sethostname 74#define __SYSCALL_setrlimit 75#define __SYSCALL_getrlimit 76#define __SYSCALL_getrusage 77#define __SYSCALL_gettimeofday 78#define __SYSCALL_settimeofday 79#define __SYSCALL_getgroups 80#define __SYSCALL_setgroups 81#define __SYSCALL_select 82#define __SYSCALL_symlink 83#define __SYSCALL_oldlstat 84#define __SYSCALL_readlink 85#define __SYSCALL_uselib 86#define __SYSCALL_swapon 87#define __SYSCALL_reboot 88#define __SYSCALL_readdir 89#define __SYSCALL_mmap 90#define __SYSCALL_munmap 91#define __SYSCALL_truncate 92#define __SYSCALL_ftruncate 93#define __SYSCALL_fchmod 94#define __SYSCALL_fchown 95#define __SYSCALL_getpriority 96#define __SYSCALL_setpriority 97#define __SYSCALL_profil 98#define __SYSCALL_statfs 99#define __SYSCALL_fstatfs 100#define __SYSCALL_ioperm 101#define __SYSCALL_socketcall 102#define __SYSCALL_syslog 103#define __SYSCALL_setitimer 104#define __SYSCALL_getitimer 105#define __SYSCALL_stat 106#define __SYSCALL_lstat 107#define __SYSCALL_fstat 108#define __SYSCALL_olduname 109#define __SYSCALL_iopl 110#define __SYSCALL_vhangup 111#define __SYSCALL_idle 112#define __SYSCALL_vm86old 113#define __SYSCALL_wait4 114#define __SYSCALL_swapoff 115#define __SYSCALL_sysinfo 116#define __SYSCALL_ipc 117#define __SYSCALL_fsync 118#define __SYSCALL_sigreturn 119#define __SYSCALL_clone 120#define __SYSCALL_setdomainname 121#define __SYSCALL_uname 122#define __SYSCALL_modify_ldt 123#define __SYSCALL_adjtimex 124#define __SYSCALL_mprotect 125#define __SYSCALL_sigprocmask 126#define __SYSCALL_create_module 127#define __SYSCALL_init_module 128#define __SYSCALL_delete_module 129#define __SYSCALL_get_kernel_syms 130#define __SYSCALL_quotactl 131#define __SYSCALL_getpgid 132#define __SYSCALL_fchdir 133#define __SYSCALL_bdflush 134#define __SYSCALL_sysfs 135#define __SYSCALL_personality 136#define __SYSCALL_afs_syscall 137#define __SYSCALL_setfsuid 138#define __SYSCALL_setfsgid 139#define __SYSCALL__llseek 140#define __SYSCALL_getdents 141#define __SYSCALL__newselect 142#define __SYSCALL_flock 143#define __SYSCALL_msync 144#define __SYSCALL_readv 145#define __SYSCALL_writev 146#define __SYSCALL_getsid 147#define __SYSCALL_fdatasync 148#define __SYSCALL__sysctl 149#define __SYSCALL_mlock 150#define __SYSCALL_munlock 151#define __SYSCALL_mlockall 152#define __SYSCALL_munlockall 153#define __SYSCALL_sched_setparam 154#define __SYSCALL_sched_getparam 155#define __SYSCALL_sched_setscheduler 156#define __SYSCALL_sched_getscheduler 157#define __SYSCALL_sched_yield 158#define __SYSCALL_sched_get_priority_max 159#define __SYSCALL_sched_get_priority_min 160#define __SYSCALL_sched_rr_get_interval 161#define __SYSCALL_nanosleep 162#define __SYSCALL_mremap 163#define __SYSCALL_setresuid 164#define __SYSCALL_getresuid 165#define __SYSCALL_vm86 166#define __SYSCALL_query_module 167#define __SYSCALL_poll 168#define __SYSCALL_nfsservctl 169#define __SYSCALL_setresgid 170#define __SYSCALL_getresgid 171#define __SYSCALL_prctl 172#define __SYSCALL_rt_sigreturn 173#define __SYSCALL_rt_sigaction 174#define __SYSCALL_rt_sigprocmask 175#define __SYSCALL_rt_sigpending 176#define __SYSCALL_rt_sigtimedwait 177#define __SYSCALL_rt_sigqueueinfo 178#define __SYSCALL_rt_sigsuspend 179#define __SYSCALL_pread 180#define __SYSCALL_pwrite 181#define __SYSCALL_chown 182#define __SYSCALL_getcwd 183#define __SYSCALL_capget 184#define __SYSCALL_capset 185#define __SYSCALL_sigaltstack 186#define __SYSCALL_sendfile 187#define __SYSCALL_getpmsg 188#define __SYSCALL_putpmsg 189#define __SYSCALL_vfork 190#define __SYSCALL_ugetrlimit 191#define __SYSCALL_mmap2 192#define __SYSCALL_truncate64 193#define __SYSCALL_ftruncate64 194#define __SYSCALL_stat64 195#define __SYSCALL_lstat64 196#define __SYSCALL_fstat64 197#define __SYSCALL_lchown32 198#define __SYSCALL_getuid32 199#define __SYSCALL_getgid32 200#define __SYSCALL_geteuid32 201#define __SYSCALL_getegid32 202#define __SYSCALL_setreuid32 203#define __SYSCALL_setregid32 204#define __SYSCALL_getgroups32 205#define __SYSCALL_setgroups32 206#define __SYSCALL_fchown32 207#define __SYSCALL_setresuid32 208#define __SYSCALL_getresuid32 209#define __SYSCALL_setresgid32 210#define __SYSCALL_getresgid32 211#define __SYSCALL_chown32 212#define __SYSCALL_setuid32 213#define __SYSCALL_setgid32 214#define __SYSCALL_setfsuid32 215#define __SYSCALL_setfsgid32 216#define __SYSCALL_pivot_root 217#define __SYSCALL_mincore 218#define __SYSCALL_madvise 219#define __SYSCALL_getdents64 220#define __SYSCALL_fcntl64 221extern BOOL debuging;static addr_t brk_point = 0;static BOOL swap = FALSE;static BOOL verbose = FALSE;BOOL emulate_syscall = FALSE;static syscall_cb_t syscall_cb;static void (*exit_proc)(int) = NULL;static void default_exit_proc(int code){ exit(code);}static void cb_write_gpr(void *instance, int n, word_t value){ my_regs.gpr[n] = value;}static word_t cb_read_gpr(void *instance, int n){ return my_regs.gpr[n];}static void cb_set_cr0so(void *instance){ my_regs.cr = my_regs.cr | 0x10000000;}static void cb_reset_cr0so(void *instance){ my_regs.cr = my_regs.cr & 0xefffffff;}static void cb_mem_write_byte(void *instance, addr_t addr, byte_t value){ mem_write_byte(mem, addr, value);}static byte_t cb_mem_read_byte(void *instance, addr_t addr){ return mem_read_byte(mem, addr);}static void cb_mem_write_half_word(void *instance, addr_t addr, halfword_t value){ mem_write_half_word(mem, addr, value);}static halfword_t cb_mem_read_half_word(void *instance, addr_t addr){ return mem_read_half_word(mem, addr);}static void cb_mem_write_word(void *instance, addr_t addr, word_t value){ mem_write_word(mem, addr, value);}static word_t cb_mem_read_word(void *instance, addr_t addr){ return mem_read_word(mem, addr);}static void cb_mem_write_dword(void *instance, addr_t addr, dword_t value){ mem_write_dword(mem, addr, value);}static dword_t cb_mem_read_dword(void *instance, addr_t addr){ return mem_read_dword(mem, addr);}static void cb_mem_read(void *instance, void *buf, addr_t addr, int size){ mem_read(mem, buf, addr, size);}static void cb_mem_write(void *instance, addr_t addr, void *buf, int size){ mem_write(mem, addr, buf, size);}static void cb_mem_set(void *instance, addr_t addr, byte_t value, int size){ mem_set(mem, addr, value, size);}static syscall_cb_t cb_default = { cb_write_gpr, cb_read_gpr, cb_reset_cr0so, cb_set_cr0so, cb_mem_read_byte, cb_mem_write_byte, cb_mem_read_half_word, cb_mem_write_half_word, cb_mem_read_word, cb_mem_write_word, cb_mem_read_dword, cb_mem_write_dword, cb_mem_set, cb_mem_read, cb_mem_write};void syscall_setcb(syscall_cb_t *cb){ syscall_cb = cb ? *cb : cb_default;}void syscall_getcb(syscall_cb_t *cb){ *cb = syscall_cb;}void syscall_init(syscall_cb_t *cb, BOOL _verbose, BOOL emulate, void (*_exit_proc)(int)){ int a = 0x1234; swap = *(unsigned char *) &a == 0x34; syscall_cb = cb ? *cb : cb_default; verbose = _verbose; emulate_syscall = emulate; exit_proc = _exit_proc ? _exit_proc : default_exit_proc;}void sc_impl(ppc_inst_t inst){
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?