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 + -
显示快捷键?