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 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c
index 8a7acd8..d4f020e 100644
--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c
+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c
@@ -946,8 +946,268 @@
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_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 @@
//.. 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 @@
//.. // (__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 @@
//.. 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 @@
//.. 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 @@
//.. 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 @@
//..
//.. 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 @@
//..
//.. // (__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 @@
//.. // 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 @@
//.. 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 @@
//.. 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 @@
//..
//.. 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 @@
//..
//.. // 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 @@
// __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 @@
//.. 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 @@
//.. 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 @@
//.. 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 50e6dba..c90b6dd 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 129c7bb..85940d0 100644
--- a/include/vki-ppc32-linux.h
+++ b/include/vki-ppc32-linux.h
@@ -789,27 +789,27 @@
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