From: Cerion Armour-Brown Date: Fri, 24 Jun 2005 15:26:49 +0000 (+0000) Subject: Enabled a bunch more syscalls X-Git-Tag: svn/VALGRIND_3_0_0~306 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ce68877be29ed31aafbb0eae60c66082818f832;p=thirdparty%2Fvalgrind.git Enabled a bunch more syscalls A few simple progs make it through memcheck now - bzip2, gzip, xfontsel git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4012 --- diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 8a7acd8ed9..d4f020e132 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -946,8 +946,268 @@ void VG_(cleanup_thread) ( ThreadArchState* arch ) aren't visible outside this file, but that requires even more macro magic. */ +DECL_TEMPLATE(ppc32_linux, sys_socketcall); DECL_TEMPLATE(ppc32_linux, sys_stat64); +DECL_TEMPLATE(ppc32_linux, sys_lstat64); DECL_TEMPLATE(ppc32_linux, sys_fstat64); +DECL_TEMPLATE(ppc32_linux, sys_ipc); + +PRE(sys_socketcall) +{ +# define ARG2_0 (((UWord*)ARG2)[0]) +# define ARG2_1 (((UWord*)ARG2)[1]) +# define ARG2_2 (((UWord*)ARG2)[2]) +# define ARG2_3 (((UWord*)ARG2)[3]) +# define ARG2_4 (((UWord*)ARG2)[4]) +# define ARG2_5 (((UWord*)ARG2)[5]) + + *flags |= SfMayBlock; + PRINT("sys_socketcall ( %d, %p )",ARG1,ARG2); + PRE_REG_READ2(long, "socketcall", int, call, unsigned long *, args); + + switch (ARG1 /* request */) { + + case VKI_SYS_SOCKETPAIR: + /* int socketpair(int d, int type, int protocol, int sv[2]); */ + PRE_MEM_READ( "socketcall.socketpair(args)", ARG2, 4*sizeof(Addr) ); + ML_(generic_PRE_sys_socketpair)( tid, ARG2_0, ARG2_1, ARG2_2, ARG2_3 ); + break; + + case VKI_SYS_SOCKET: + /* int socket(int domain, int type, int protocol); */ + PRE_MEM_READ( "socketcall.socket(args)", ARG2, 3*sizeof(Addr) ); + break; + + case VKI_SYS_BIND: + /* int bind(int sockfd, struct sockaddr *my_addr, + int addrlen); */ + PRE_MEM_READ( "socketcall.bind(args)", ARG2, 3*sizeof(Addr) ); + ML_(generic_PRE_sys_bind)( tid, ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_LISTEN: + /* int listen(int s, int backlog); */ + PRE_MEM_READ( "socketcall.listen(args)", ARG2, 2*sizeof(Addr) ); + break; + + case VKI_SYS_ACCEPT: { + /* int accept(int s, struct sockaddr *addr, int *addrlen); */ + PRE_MEM_READ( "socketcall.accept(args)", ARG2, 3*sizeof(Addr) ); + ML_(generic_PRE_sys_accept)( tid, ARG2_0, ARG2_1, ARG2_2 ); + break; + } + + case VKI_SYS_SENDTO: + /* int sendto(int s, const void *msg, int len, + unsigned int flags, + const struct sockaddr *to, int tolen); */ + PRE_MEM_READ( "socketcall.sendto(args)", ARG2, 6*sizeof(Addr) ); + ML_(generic_PRE_sys_sendto)( tid, ARG2_0, ARG2_1, ARG2_2, + ARG2_3, ARG2_4, ARG2_5 ); + break; + + case VKI_SYS_SEND: + /* int send(int s, const void *msg, size_t len, int flags); */ + PRE_MEM_READ( "socketcall.send(args)", ARG2, 4*sizeof(Addr) ); + ML_(generic_PRE_sys_send)( tid, ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_RECVFROM: + /* int recvfrom(int s, void *buf, int len, unsigned int flags, + struct sockaddr *from, int *fromlen); */ + PRE_MEM_READ( "socketcall.recvfrom(args)", ARG2, 6*sizeof(Addr) ); + ML_(generic_PRE_sys_recvfrom)( tid, ARG2_0, ARG2_1, ARG2_2, + ARG2_3, ARG2_4, ARG2_5 ); + break; + + case VKI_SYS_RECV: + /* int recv(int s, void *buf, int len, unsigned int flags); */ + /* man 2 recv says: + The recv call is normally used only on a connected socket + (see connect(2)) and is identical to recvfrom with a NULL + from parameter. + */ + PRE_MEM_READ( "socketcall.recv(args)", ARG2, 4*sizeof(Addr) ); + ML_(generic_PRE_sys_recv)( tid, ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_CONNECT: + /* int connect(int sockfd, + struct sockaddr *serv_addr, int addrlen ); */ + PRE_MEM_READ( "socketcall.connect(args)", ARG2, 3*sizeof(Addr) ); + ML_(generic_PRE_sys_connect)( tid, ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_SETSOCKOPT: + /* int setsockopt(int s, int level, int optname, + const void *optval, int optlen); */ + PRE_MEM_READ( "socketcall.setsockopt(args)", ARG2, 5*sizeof(Addr) ); + ML_(generic_PRE_sys_setsockopt)( tid, ARG2_0, ARG2_1, ARG2_2, + ARG2_3, ARG2_4 ); + break; + + case VKI_SYS_GETSOCKOPT: + /* int getsockopt(int s, int level, int optname, + void *optval, socklen_t *optlen); */ + PRE_MEM_READ( "socketcall.getsockopt(args)", ARG2, 5*sizeof(Addr) ); + ML_(generic_PRE_sys_getsockopt)( tid, ARG2_0, ARG2_1, ARG2_2, + ARG2_3, ARG2_4 ); + break; + + case VKI_SYS_GETSOCKNAME: + /* int getsockname(int s, struct sockaddr* name, int* namelen) */ + PRE_MEM_READ( "socketcall.getsockname(args)", ARG2, 3*sizeof(Addr) ); + ML_(generic_PRE_sys_getsockname)( tid, ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_GETPEERNAME: + /* int getpeername(int s, struct sockaddr* name, int* namelen) */ + PRE_MEM_READ( "socketcall.getpeername(args)", ARG2, 3*sizeof(Addr) ); + ML_(generic_PRE_sys_getpeername)( tid, ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_SHUTDOWN: + /* int shutdown(int s, int how); */ + PRE_MEM_READ( "socketcall.shutdown(args)", ARG2, 2*sizeof(Addr) ); + break; + + case VKI_SYS_SENDMSG: { + /* int sendmsg(int s, const struct msghdr *msg, int flags); */ + + /* this causes warnings, and I don't get why. glibc bug? + * (after all it's glibc providing the arguments array) + PRE_MEM_READ( "socketcall.sendmsg(args)", ARG2, 3*sizeof(Addr) ); + */ + ML_(generic_PRE_sys_sendmsg)( tid, ARG2_0, ARG2_1 ); + break; + } + + case VKI_SYS_RECVMSG: { + /* int recvmsg(int s, struct msghdr *msg, int flags); */ + + /* this causes warnings, and I don't get why. glibc bug? + * (after all it's glibc providing the arguments array) + PRE_MEM_READ("socketcall.recvmsg(args)", ARG2, 3*sizeof(Addr) ); + */ + ML_(generic_PRE_sys_recvmsg)( tid, ARG2_0, ARG2_1 ); + break; + } + + default: + VG_(message)(Vg_DebugMsg,"Warning: unhandled socketcall 0x%x",ARG1); + SET_STATUS_Failure( VKI_EINVAL ); + break; + } +# undef ARG2_0 +# undef ARG2_1 +# undef ARG2_2 +# undef ARG2_3 +# undef ARG2_4 +# undef ARG2_5 +} + +POST(sys_socketcall) +{ +# define ARG2_0 (((UWord*)ARG2)[0]) +# define ARG2_1 (((UWord*)ARG2)[1]) +# define ARG2_2 (((UWord*)ARG2)[2]) +# define ARG2_3 (((UWord*)ARG2)[3]) +# define ARG2_4 (((UWord*)ARG2)[4]) +# define ARG2_5 (((UWord*)ARG2)[5]) + + SysRes r; + vg_assert(SUCCESS); + switch (ARG1 /* request */) { + + case VKI_SYS_SOCKETPAIR: + r = ML_(generic_POST_sys_socketpair)( + tid, VG_(mk_SysRes_Success)(RES), + ARG2_0, ARG2_1, ARG2_2, ARG2_3 + ); + SET_STATUS_from_SysRes(r); + break; + + case VKI_SYS_SOCKET: + r = ML_(generic_POST_sys_socket)( tid, VG_(mk_SysRes_Success)(RES) ); + SET_STATUS_from_SysRes(r); + break; + + case VKI_SYS_BIND: + /* int bind(int sockfd, struct sockaddr *my_addr, + int addrlen); */ + break; + + case VKI_SYS_LISTEN: + /* int listen(int s, int backlog); */ + break; + + case VKI_SYS_ACCEPT: + /* int accept(int s, struct sockaddr *addr, int *addrlen); */ + r = ML_(generic_POST_sys_accept)( tid, VG_(mk_SysRes_Success)(RES), + ARG2_0, ARG2_1, ARG2_2 ); + SET_STATUS_from_SysRes(r); + break; + + case VKI_SYS_SENDTO: + break; + + case VKI_SYS_SEND: + break; + + case VKI_SYS_RECVFROM: + ML_(generic_POST_sys_recvfrom)( tid, VG_(mk_SysRes_Success)(RES), + ARG2_0, ARG2_1, ARG2_2, + ARG2_3, ARG2_4, ARG2_5 ); + break; + + case VKI_SYS_RECV: + ML_(generic_POST_sys_recv)( tid, RES, ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_CONNECT: + break; + + case VKI_SYS_SETSOCKOPT: + break; + + case VKI_SYS_GETSOCKOPT: + ML_(generic_POST_sys_getsockopt)( tid, VG_(mk_SysRes_Success)(RES), + ARG2_0, ARG2_1, + ARG2_2, ARG2_3, ARG2_4 ); + break; + + case VKI_SYS_GETSOCKNAME: + ML_(generic_POST_sys_getsockname)( tid, VG_(mk_SysRes_Success)(RES), + ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_GETPEERNAME: + ML_(generic_POST_sys_getpeername)( tid, VG_(mk_SysRes_Success)(RES), + ARG2_0, ARG2_1, ARG2_2 ); + break; + + case VKI_SYS_SHUTDOWN: + break; + + case VKI_SYS_SENDMSG: + break; + + case VKI_SYS_RECVMSG: + ML_(generic_POST_sys_recvmsg)( tid, ARG2_0, ARG2_1 ); + break; + + default: + VG_(message)(Vg_DebugMsg,"FATAL: unhandled socketcall 0x%x",ARG1); + VG_(core_panic)("... bye!\n"); + break; /*NOTREACHED*/ + } +# undef ARG2_0 +# undef ARG2_1 +# undef ARG2_2 +# undef ARG2_3 +# undef ARG2_4 +# undef ARG2_5 +} // XXX: lstat64/fstat64/stat64 are generic, but not necessarily // applicable to every architecture -- I think only to 32-bit archs. @@ -966,17 +1226,191 @@ POST(sys_stat64) POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) ); } +PRE(sys_lstat64) +{ + PRINT("sys_lstat64 ( %p(%s), %p )",ARG1,ARG1,ARG2); + PRE_REG_READ2(long, "lstat64", char *, file_name, struct stat64 *, buf); + PRE_MEM_RASCIIZ( "lstat64(file_name)", ARG1 ); + PRE_MEM_WRITE( "lstat64(buf)", ARG2, sizeof(struct vki_stat64) ); +} + +POST(sys_lstat64) +{ + vg_assert(SUCCESS); + if (RES == 0) { + POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) ); + } +} + PRE(sys_fstat64) { PRINT("sys_fstat64 ( %d, %p )",ARG1,ARG2); PRE_REG_READ2(long, "fstat64", unsigned long, fd, struct stat64 *, buf); PRE_MEM_WRITE( "fstat64(buf)", ARG2, sizeof(struct vki_stat64) ); } + POST(sys_fstat64) { POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) ); } +static Addr deref_Addr ( ThreadId tid, Addr a, Char* s ) +{ + Addr* a_p = (Addr*)a; + PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) ); + return *a_p; +} + +// XXX: should use the constants here (eg. SHMAT), not the numbers directly! +PRE(sys_ipc) +{ + PRINT("sys_ipc ( %d, %d, %d, %d, %p, %d )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6); + // XXX: this is simplistic -- some args are not used in all circumstances. + PRE_REG_READ6(int, "ipc", + vki_uint, call, int, first, int, second, int, third, + void *, ptr, long, fifth) + + switch (ARG1 /* call */) { + case VKI_SEMOP: + ML_(generic_PRE_sys_semop)( tid, ARG2, ARG5, ARG3 ); + *flags |= SfMayBlock; + break; + case VKI_SEMGET: + break; + case VKI_SEMCTL: + { + UWord arg = deref_Addr( tid, ARG5, "semctl(arg)" ); + ML_(generic_PRE_sys_semctl)( tid, ARG2, ARG3, ARG4, arg ); + break; + } + case VKI_SEMTIMEDOP: + ML_(generic_PRE_sys_semtimedop)( tid, ARG2, ARG5, ARG3, ARG6 ); + *flags |= SfMayBlock; + break; + case VKI_MSGSND: + ML_(generic_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 ); + if ((ARG4 & VKI_IPC_NOWAIT) == 0) + *flags |= SfMayBlock; + break; + case VKI_MSGRCV: + { + Addr msgp; + Word msgtyp; + + msgp = deref_Addr( tid, + (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp), + "msgrcv(msgp)" ); + msgtyp = deref_Addr( tid, + (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp), + "msgrcv(msgp)" ); + + ML_(generic_PRE_sys_msgrcv)( tid, ARG2, msgp, ARG3, msgtyp, ARG4 ); + + if ((ARG4 & VKI_IPC_NOWAIT) == 0) + *flags |= SfMayBlock; + break; + } + case VKI_MSGGET: + break; + case VKI_MSGCTL: + ML_(generic_PRE_sys_msgctl)( tid, ARG2, ARG3, ARG5 ); + break; + case VKI_SHMAT: + { + UWord w; + PRE_MEM_WRITE( "shmat(raddr)", ARG4, sizeof(Addr) ); + w = ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 ); + if (w == 0) + SET_STATUS_Failure( VKI_EINVAL ); + else + ARG5 = w; + break; + } + case VKI_SHMDT: + if (!ML_(generic_PRE_sys_shmdt)(tid, ARG5)) + SET_STATUS_Failure( VKI_EINVAL ); + break; + case VKI_SHMGET: + break; + case VKI_SHMCTL: /* IPCOP_shmctl */ + ML_(generic_PRE_sys_shmctl)( tid, ARG2, ARG3, ARG5 ); + break; + default: + VG_(message)(Vg_DebugMsg, "FATAL: unhandled syscall(ipc) %d", ARG1 ); + VG_(core_panic)("... bye!\n"); + break; /*NOTREACHED*/ + } +} + +POST(sys_ipc) +{ + vg_assert(SUCCESS); + switch (ARG1 /* call */) { + case VKI_SEMOP: + case VKI_SEMGET: + break; + case VKI_SEMCTL: + { + UWord arg = deref_Addr( tid, ARG5, "semctl(arg)" ); + ML_(generic_PRE_sys_semctl)( tid, ARG2, ARG3, ARG4, arg ); + break; + } + case VKI_SEMTIMEDOP: + case VKI_MSGSND: + break; + case VKI_MSGRCV: + { + Addr msgp; + Word msgtyp; + + msgp = deref_Addr( tid, + (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp), + "msgrcv(msgp)" ); + msgtyp = deref_Addr( tid, + (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp), + "msgrcv(msgp)" ); + + ML_(generic_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4 ); + break; + } + case VKI_MSGGET: + break; + case VKI_MSGCTL: + ML_(generic_POST_sys_msgctl)( tid, RES, ARG2, ARG3, ARG5 ); + break; + case VKI_SHMAT: + { + Addr addr; + + /* force readability. before the syscall it is + * indeed uninitialized, as can be seen in + * glibc/sysdeps/unix/sysv/linux/shmat.c */ + POST_MEM_WRITE( ARG4, sizeof( Addr ) ); + + addr = deref_Addr ( tid, ARG4, "shmat(addr)" ); + if ( addr > 0 ) { + ML_(generic_POST_sys_shmat)( tid, addr, ARG2, ARG5, ARG3 ); + } + break; + } + case VKI_SHMDT: + ML_(generic_POST_sys_shmdt)( tid, RES, ARG5 ); + break; + case VKI_SHMGET: + break; + case VKI_SHMCTL: + ML_(generic_POST_sys_shmctl)( tid, RES, ARG2, ARG3, ARG5 ); + break; + default: + VG_(message)(Vg_DebugMsg, + "FATAL: unhandled syscall(ipc) %d", + ARG1 ); + VG_(core_panic)("... bye!\n"); + break; /*NOTREACHED*/ + } +} + + //.. PRE(old_select, MayBlock) @@ -1510,23 +1944,23 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. GENXY(__NR_creat, sys_creat), // 8 //.. GENX_(__NR_link, sys_link), // 9 //.. -//.. GENX_(__NR_unlink, sys_unlink), // 10 + GENX_(__NR_unlink, sys_unlink), // 10 //.. GENX_(__NR_execve, sys_execve), // 11 //.. GENX_(__NR_chdir, sys_chdir), // 12 //.. GENXY(__NR_time, sys_time), // 13 //.. GENX_(__NR_mknod, sys_mknod), // 14 //.. -//.. GENX_(__NR_chmod, sys_chmod), // 15 + GENX_(__NR_chmod, sys_chmod), // 15 //.. // (__NR_lchown, sys_lchown16), // 16 ## P //.. GENX_(__NR_break, sys_ni_syscall), // 17 //.. // (__NR_oldstat, sys_stat), // 18 (obsolete) //.. GENX_(__NR_lseek, sys_lseek), // 19 //.. -//.. GENX_(__NR_getpid, sys_getpid), // 20 + GENX_(__NR_getpid, sys_getpid), // 20 //.. LINX_(__NR_mount, sys_mount), // 21 //.. LINX_(__NR_umount, sys_oldumount), // 22 -//.. GENX_(__NR_setuid, sys_setuid16), // 23 ## P -//.. GENX_(__NR_getuid, sys_getuid16), // 24 ## P + GENX_(__NR_setuid, sys_setuid16), // 23 ## P + GENX_(__NR_getuid, sys_getuid16), // 24 ## P //.. //.. // (__NR_stime, sys_stime), // 25 * (SVr4,SVID,X/OPEN) //.. PLAXY(__NR_ptrace, sys_ptrace), // 26 @@ -1534,7 +1968,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. // (__NR_oldfstat, sys_fstat), // 28 * L -- obsolete //.. GENX_(__NR_pause, sys_pause), // 29 //.. -//.. GENX_(__NR_utime, sys_utime), // 30 + GENX_(__NR_utime, sys_utime), // 30 //.. GENX_(__NR_stty, sys_ni_syscall), // 31 //.. GENX_(__NR_gtty, sys_ni_syscall), // 32 GENX_(__NR_access, sys_access), // 33 @@ -1556,17 +1990,17 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. GENX_(__NR_setgid, sys_setgid16), // 46 //.. GENX_(__NR_getgid, sys_getgid16), // 47 //.. // (__NR_signal, sys_signal), // 48 */* (ANSI C) -//.. GENX_(__NR_geteuid, sys_geteuid16), // 49 -//.. -//.. GENX_(__NR_getegid, sys_getegid16), // 50 + GENX_(__NR_geteuid, sys_geteuid16), // 49 + + GENX_(__NR_getegid, sys_getegid16), // 50 //.. GENX_(__NR_acct, sys_acct), // 51 //.. LINX_(__NR_umount2, sys_umount), // 52 //.. GENX_(__NR_lock, sys_ni_syscall), // 53 - GENXY(__NR_ioctl, sys_ioctl), // 54 + GENXY(__NR_ioctl, sys_ioctl), // 54 //.. //.. GENXY(__NR_fcntl, sys_fcntl), // 55 //.. GENX_(__NR_mpx, sys_ni_syscall), // 56 -//.. GENX_(__NR_setpgid, sys_setpgid), // 57 + GENX_(__NR_setpgid, sys_setpgid), // 57 //.. GENX_(__NR_ulimit, sys_ni_syscall), // 58 //.. // (__NR_oldolduname, sys_olduname), // 59 Linux -- obsolete //.. @@ -1588,10 +2022,10 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. GENXY(__NR_sigpending, sys_sigpending), // 73 //.. // (__NR_sethostname, sys_sethostname), // 74 */* //.. -//.. GENX_(__NR_setrlimit, sys_setrlimit), // 75 + GENX_(__NR_setrlimit, sys_setrlimit), // 75 //.. GENXY(__NR_getrlimit, sys_old_getrlimit), // 76 //.. GENXY(__NR_getrusage, sys_getrusage), // 77 -//.. GENXY(__NR_gettimeofday, sys_gettimeofday), // 78 + GENXY(__NR_gettimeofday, sys_gettimeofday), // 78 //.. GENX_(__NR_settimeofday, sys_settimeofday), // 79 //.. //.. GENXY(__NR_getgroups, sys_getgroups16), // 80 @@ -1600,14 +2034,14 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. GENX_(__NR_symlink, sys_symlink), // 83 //.. // (__NR_oldlstat, sys_lstat), // 84 -- obsolete //.. -//.. GENX_(__NR_readlink, sys_readlink), // 85 + GENX_(__NR_readlink, sys_readlink), // 85 //.. // (__NR_uselib, sys_uselib), // 86 */Linux //.. // (__NR_swapon, sys_swapon), // 87 */Linux //.. // (__NR_reboot, sys_reboot), // 88 */Linux //.. // (__NR_readdir, old_readdir), // 89 -- superseded GENXY(__NR_mmap, sys_mmap2), // 90 - GENXY(__NR_munmap, sys_munmap), // 91 + GENXY(__NR_munmap, sys_munmap), // 91 //.. GENX_(__NR_truncate, sys_truncate), // 92 //.. GENX_(__NR_ftruncate, sys_ftruncate), // 93 //.. GENX_(__NR_fchmod, sys_fchmod), // 94 @@ -1620,9 +2054,9 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. //.. GENXY(__NR_fstatfs, sys_fstatfs), // 100 //.. LINX_(__NR_ioperm, sys_ioperm), // 101 -//.. GENXY(__NR_socketcall, sys_socketcall), // 102 + PLAXY(__NR_socketcall, sys_socketcall), // 102 //.. LINXY(__NR_syslog, sys_syslog), // 103 -//.. GENXY(__NR_setitimer, sys_setitimer), // 104 + GENXY(__NR_setitimer, sys_setitimer), // 104 //.. //.. GENXY(__NR_getitimer, sys_getitimer), // 105 GENXY(__NR_stat, sys_newstat), // 106 @@ -1638,7 +2072,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. //.. // (__NR_swapoff, sys_swapoff), // 115 */Linux //.. LINXY(__NR_sysinfo, sys_sysinfo), // 116 -//.. PLAXY(__NR_ipc, sys_ipc), // 117 + PLAXY(__NR_ipc, sys_ipc), // 117 //.. GENX_(__NR_fsync, sys_fsync), // 118 //.. PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/Linux //.. @@ -1658,7 +2092,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. // Nb: get_kernel_syms() was removed 2.4-->2.6 //.. GENX_(__NR_get_kernel_syms, sys_ni_syscall), // 130 //.. GENX_(__NR_quotactl, sys_quotactl), // 131 -//.. GENX_(__NR_getpgid, sys_getpgid), // 132 + GENX_(__NR_getpgid, sys_getpgid), // 132 //.. GENX_(__NR_fchdir, sys_fchdir), // 133 //.. // (__NR_bdflush, sys_bdflush), // 134 */Linux //.. @@ -1668,17 +2102,17 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. LINX_(__NR_setfsuid, sys_setfsuid16), // 138 //.. LINX_(__NR_setfsgid, sys_setfsgid16), // 139 //.. -//.. LINXY(__NR__llseek, sys_llseek), // 140 + LINXY(__NR__llseek, sys_llseek), // 140 //.. GENXY(__NR_getdents, sys_getdents), // 141 -//.. GENX_(__NR__newselect, sys_select), // 142 + GENX_(__NR__newselect, sys_select), // 142 //.. GENX_(__NR_flock, sys_flock), // 143 //.. GENX_(__NR_msync, sys_msync), // 144 //.. -//.. GENXY(__NR_readv, sys_readv), // 145 + GENXY(__NR_readv, sys_readv), // 145 GENX_(__NR_writev, sys_writev), // 146 //.. GENX_(__NR_getsid, sys_getsid), // 147 //.. GENX_(__NR_fdatasync, sys_fdatasync), // 148 - LINXY(__NR__sysctl, sys_sysctl), // 149 + LINXY(__NR__sysctl, sys_sysctl), // 149 //.. //.. GENX_(__NR_mlock, sys_mlock), // 150 //.. GENX_(__NR_munlock, sys_munlock), // 151 @@ -1708,9 +2142,9 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. LINXY(__NR_getresgid, sys_getresgid16), // 170 //.. LINX_(__NR_prctl, sys_prctl), // 171 //.. PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 172 - GENXY(__NR_rt_sigaction, sys_rt_sigaction), // 173 + GENXY(__NR_rt_sigaction, sys_rt_sigaction), // 173 - GENXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 174 + GENXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 174 //.. GENXY(__NR_rt_sigpending, sys_rt_sigpending), // 175 //.. GENXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait), // 176 //.. GENXY(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo), // 177 @@ -1718,7 +2152,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. //.. GENXY(__NR_pread64, sys_pread64), // 179 //.. GENX_(__NR_pwrite64, sys_pwrite64), // 180 -//.. GENX_(__NR_chown, sys_chown16), // 181 + GENX_(__NR_chown, sys_chown16), // 181 //.. GENXY(__NR_getcwd, sys_getcwd), // 182 //.. GENXY(__NR_capget, sys_capget), // 183 //.. @@ -1730,15 +2164,15 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. //.. // Nb: we treat vfork as fork //.. GENX_(__NR_vfork, sys_fork), // 189 - GENXY(__NR_ugetrlimit, sys_getrlimit), // 190 + GENXY(__NR_ugetrlimit, sys_getrlimit), // 190 //__NR_readahead // 191 ppc/Linux only? - GENXY(__NR_mmap2, sys_mmap2), // 192 + GENXY(__NR_mmap2, sys_mmap2), // 192 //.. GENX_(__NR_truncate64, sys_truncate64), // 193 //.. GENX_(__NR_ftruncate64, sys_ftruncate64), // 194 //.. PLAXY(__NR_stat64, sys_stat64), // 195 -//.. GENXY(__NR_lstat64, sys_lstat64), // 196 + PLAXY(__NR_lstat64, sys_lstat64), // 196 PLAXY(__NR_fstat64, sys_fstat64), // 197 // __NR_pciconfig_read // 198 @@ -1746,9 +2180,9 @@ const SyscallTableEntry ML_(syscall_table)[] = { // __NR_pciconfig_iobase // 200 // __NR_multiplexer // 201 - GENXY(__NR_getdents64, sys_getdents64), // 202 + GENXY(__NR_getdents64, sys_getdents64), // 202 //.. // (__NR_pivot_root, sys_pivot_root), // 203 */Linux - GENXY(__NR_fcntl64, sys_fcntl64), // 204 + GENXY(__NR_fcntl64, sys_fcntl64), // 204 //.. GENX_(__NR_madvise, sys_madvise), // 205 //.. GENXY(__NR_mincore, sys_mincore), // 206 //.. LINX_(__NR_gettid, sys_gettid), // 207 @@ -1766,7 +2200,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. GENX_(__NR_lremovexattr, sys_lremovexattr), // 219 //.. GENX_(__NR_fremovexattr, sys_fremovexattr), // 220 - LINXY(__NR_futex, sys_futex), // 221 + LINXY(__NR_futex, sys_futex), // 221 //.. GENX_(__NR_sched_setaffinity, sys_sched_setaffinity), // 222 //.. GENXY(__NR_sched_getaffinity, sys_sched_getaffinity), // 223 /* 224 currently unused */ @@ -1781,7 +2215,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. LINX_(__NR_io_submit, sys_io_submit), // 230 //.. LINXY(__NR_io_cancel, sys_io_cancel), // 231 //.. - LINX_(__NR_set_tid_address, sys_set_tid_address), // 232 + LINX_(__NR_set_tid_address, sys_set_tid_address), // 232 //.. LINX_(__NR_fadvise64, sys_fadvise64), // 233 */(Linux?) LINX_(__NR_exit_group, sys_exit_group), // 234 @@ -1797,7 +2231,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. GENX_(__NR_timer_getoverrun, sys_timer_getoverrun), // 243 //.. GENX_(__NR_timer_delete, sys_timer_delete), // 244 //.. GENX_(__NR_clock_settime, sys_clock_settime), // 245 -//.. GENXY(__NR_clock_gettime, sys_clock_gettime), // 246 + GENXY(__NR_clock_gettime, sys_clock_gettime), // 246 //.. GENXY(__NR_clock_getres, sys_clock_getres), // 247 //.. // (__NR_clock_nanosleep, sys_clock_nanosleep), // 248 diff --git a/coregrind/vki_unistd-ppc32-linux.h b/coregrind/vki_unistd-ppc32-linux.h index 50e6dba6c2..c90b6ddf6a 100644 --- a/coregrind/vki_unistd-ppc32-linux.h +++ b/coregrind/vki_unistd-ppc32-linux.h @@ -44,22 +44,22 @@ //#define __NR_chdir 12 //#define __NR_time 13 //#define __NR_mknod 14 -//#define __NR_chmod 15 -//#define __NR_lchown 16 +#define __NR_chmod 15 +#define __NR_lchown 16 //#define __NR_break 17 //#define __NR_oldstat 18 #define __NR_lseek 19 #define __NR_getpid 20 //#define __NR_mount 21 //#define __NR_umount 22 -//#define __NR_setuid 23 -//#define __NR_getuid 24 +#define __NR_setuid 23 +#define __NR_getuid 24 //#define __NR_stime 25 //#define __NR_ptrace 26 //#define __NR_alarm 27 //#define __NR_oldfstat 28 //#define __NR_pause 29 -//#define __NR_utime 30 +#define __NR_utime 30 //#define __NR_stty 31 //#define __NR_gtty 32 #define __NR_access 33 @@ -78,8 +78,8 @@ //#define __NR_setgid 46 //#define __NR_getgid 47 //#define __NR_signal 48 -//#define __NR_geteuid 49 -//#define __NR_getegid 50 +#define __NR_geteuid 49 +#define __NR_getegid 50 //#define __NR_acct 51 //#define __NR_umount2 52 //#define __NR_lock 53 @@ -133,7 +133,7 @@ //#define __NR_ioperm 101 #define __NR_socketcall 102 //#define __NR_syslog 103 -//#define __NR_setitimer 104 +#define __NR_setitimer 104 //#define __NR_getitimer 105 #define __NR_stat 106 //#define __NR_lstat 107 @@ -161,7 +161,7 @@ //#define __NR_delete_module 129 //#define __NR_get_kernel_syms 130 //#define __NR_quotactl 131 -//#define __NR_getpgid 132 +#define __NR_getpgid 132 //#define __NR_fchdir 133 //#define __NR_bdflush 134 //#define __NR_sysfs 135 @@ -169,12 +169,12 @@ //#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ //#define __NR_setfsuid 138 //#define __NR_setfsgid 139 -//#define __NR__llseek 140 +#define __NR__llseek 140 #define __NR_getdents 141 -//#define __NR__newselect 142 +#define __NR__newselect 142 //#define __NR_flock 143 //#define __NR_msync 144 -//#define __NR_readv 145 +#define __NR_readv 145 #define __NR_writev 146 //#define __NR_getsid 147 //#define __NR_fdatasync 148 @@ -210,7 +210,7 @@ //#define __NR_rt_sigsuspend 178 //#define __NR_pread64 179 //#define __NR_pwrite64 180 -//#define __NR_chown 181 +#define __NR_chown 181 #define __NR_getcwd 182 //#define __NR_capget 183 //#define __NR_capset 184 @@ -225,7 +225,7 @@ //#define __NR_truncate64 193 //#define __NR_ftruncate64 194 #define __NR_stat64 195 -//#define __NR_lstat64 196 +#define __NR_lstat64 196 #define __NR_fstat64 197 //#define __NR_pciconfig_read 198 //#define __NR_pciconfig_write 199 @@ -275,7 +275,7 @@ //#define __NR_timer_getoverrun 243 //#define __NR_timer_delete 244 //#define __NR_clock_settime 245 -//#define __NR_clock_gettime 246 +#define __NR_clock_gettime 246 //#define __NR_clock_getres 247 //#define __NR_clock_nanosleep 248 //#define __NR_swapcontext 249 diff --git a/include/vki-ppc32-linux.h b/include/vki-ppc32-linux.h index 129c7bb139..85940d0984 100644 --- a/include/vki-ppc32-linux.h +++ b/include/vki-ppc32-linux.h @@ -789,27 +789,27 @@ struct vki_msqid64_ds { unsigned long __unused5; }; -//.. //---------------------------------------------------------------------- -//.. // From linux-2.6.8.1/include/asm-i386/ipc.h -//.. //---------------------------------------------------------------------- -//.. -//.. struct vki_ipc_kludge { -//.. struct vki_msgbuf __user *msgp; -//.. long msgtyp; -//.. }; -//.. -//.. #define VKI_SEMOP 1 -//.. #define VKI_SEMGET 2 -//.. #define VKI_SEMCTL 3 -//.. #define VKI_SEMTIMEDOP 4 -//.. #define VKI_MSGSND 11 -//.. #define VKI_MSGRCV 12 -//.. #define VKI_MSGGET 13 -//.. #define VKI_MSGCTL 14 -//.. #define VKI_SHMAT 21 -//.. #define VKI_SHMDT 22 -//.. #define VKI_SHMGET 23 -//.. #define VKI_SHMCTL 24 +//---------------------------------------------------------------------- +// From linux-2.6.8.1/include/asm-ppc/ipc.h +//---------------------------------------------------------------------- + +struct vki_ipc_kludge { + struct vki_msgbuf __user *msgp; + long msgtyp; +}; + +#define VKI_SEMOP 1 +#define VKI_SEMGET 2 +#define VKI_SEMCTL 3 +#define VKI_SEMTIMEDOP 4 +#define VKI_MSGSND 11 +#define VKI_MSGRCV 12 +#define VKI_MSGGET 13 +#define VKI_MSGCTL 14 +#define VKI_SHMAT 21 +#define VKI_SHMDT 22 +#define VKI_SHMGET 23 +#define VKI_SHMCTL 24 //---------------------------------------------------------------------- // From linux-2.6.9/include/asm-ppc/shmbuf.h