From: Roland McGrath Date: Mon, 19 May 2008 23:50:24 +0000 (+0000) Subject: 2008-05-08 David S. Miller X-Git-Tag: v4.5.18~83 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5e48c54ddf9c1e7e431701b3a1d920611495e2fa;p=strace 2008-05-08 David S. Miller * syscall.c (socket_map, sparc_socket_decode): Delete. (trace_syscall): Use common socketcall and ipc subcall support on sparc. * linux/sparc/syscall.h (sys_semtimedop): Declare. (SYS_socket_subcall, SYS_sub_socket, SYS_sub_bind, SYS_sub_connect, SYS_sub_listen, SYS_sub_accept, SYS_sub_getsockname, SYS_sub_getpeername, SYS_sub_socketpair, SYS_sub_send, SYS_sub_recv, SYS_sub_sendto, SYS_sub_recvfrom, SYS_sub_shutdown, SYS_sub_setsockopt, SYS_sub_getsockopt, SYS_sub_sendmsg, SYS_sub_recvmsg, SYS_socket_nsubcalls, SYS_ipc_subcall, SYS_sub_semop, SYS_sub_semget, SYS_sub_semctl, SYS_sub_semtimedop, SYS_sub_msgsnd, SYS_sub_msgrcv, SYS_sub_msgget, SYS_sub_msgctl, SYS_sub_shmat, SYS_sub_shmdt, SYS_sub_shmget, SYS_sub_shmctl, SYS_ipc_nsubcalls): Define * linux/sparc/syscallent.h: Add socketcall and ipc entries. --- diff --git a/linux/sparc/syscall.h b/linux/sparc/syscall.h index 7fed2863..ca92e8bb 100644 --- a/linux/sparc/syscall.h +++ b/linux/sparc/syscall.h @@ -92,7 +92,7 @@ int sys_truncate(),sys_ftruncate(),sys_access(),sys_fsync(),sys_sysctl(); int sys_statfs(),sys_fstatfs(),sys_msync(); int sys_stat64(), sys_lstat64(), sys_fstat64(); int sys_truncate64(), sys_ftruncate64(); - +int sys_semtimedop(); /* 2.3 communications */ int sys_socket(),sys_bind(),sys_listen(),sys_accept(),sys_connect(); @@ -214,4 +214,41 @@ int sys_move_pages(), sys_getcpu(); int sys_epoll_pwait(); int sys_signalfd(), sys_timerfd(), sys_eventfd(); +# define SYS_socket_subcall 353 +#define SYS_sub_socket (SYS_socket_subcall + 1) +#define SYS_sub_bind (SYS_socket_subcall + 2) +#define SYS_sub_connect (SYS_socket_subcall + 3) +#define SYS_sub_listen (SYS_socket_subcall + 4) +#define SYS_sub_accept (SYS_socket_subcall + 5) +#define SYS_sub_getsockname (SYS_socket_subcall + 6) +#define SYS_sub_getpeername (SYS_socket_subcall + 7) +#define SYS_sub_socketpair (SYS_socket_subcall + 8) +#define SYS_sub_send (SYS_socket_subcall + 9) +#define SYS_sub_recv (SYS_socket_subcall + 10) +#define SYS_sub_sendto (SYS_socket_subcall + 11) +#define SYS_sub_recvfrom (SYS_socket_subcall + 12) +#define SYS_sub_shutdown (SYS_socket_subcall + 13) +#define SYS_sub_setsockopt (SYS_socket_subcall + 14) +#define SYS_sub_getsockopt (SYS_socket_subcall + 15) +#define SYS_sub_sendmsg (SYS_socket_subcall + 16) +#define SYS_sub_recvmsg (SYS_socket_subcall + 17) + +#define SYS_socket_nsubcalls 18 + +#define SYS_ipc_subcall ((SYS_socket_subcall)+(SYS_socket_nsubcalls)) +#define SYS_sub_semop (SYS_ipc_subcall + 1) +#define SYS_sub_semget (SYS_ipc_subcall + 2) +#define SYS_sub_semctl (SYS_ipc_subcall + 3) +#define SYS_sub_semtimedop (SYS_ipc_subcall + 4) +#define SYS_sub_msgsnd (SYS_ipc_subcall + 11) +#define SYS_sub_msgrcv (SYS_ipc_subcall + 12) +#define SYS_sub_msgget (SYS_ipc_subcall + 13) +#define SYS_sub_msgctl (SYS_ipc_subcall + 14) +#define SYS_sub_shmat (SYS_ipc_subcall + 21) +#define SYS_sub_shmdt (SYS_ipc_subcall + 22) +#define SYS_sub_shmget (SYS_ipc_subcall + 23) +#define SYS_sub_shmctl (SYS_ipc_subcall + 24) + +#define SYS_ipc_nsubcalls 25 + #include "syscall1.h" diff --git a/linux/sparc/syscallent.h b/linux/sparc/syscallent.h index aadb269f..ecb40187 100644 --- a/linux/sparc/syscallent.h +++ b/linux/sparc/syscallent.h @@ -351,3 +351,57 @@ { 5, 0, printargs, "SYS_350" }, /* 350 */ { 5, 0, printargs, "SYS_351" }, /* 351 */ { 5, 0, printargs, "SYS_352" }, /* 352 */ +#if SYS_socket_subcall != 353 + #error fix me +#endif + { 8, 0, printargs, "socket_subcall"}, /* 353 */ + { 3, TN, sys_socket, "socket" }, /* 354 */ + { 3, TN, sys_bind, "bind" }, /* 355 */ + { 3, TN, sys_connect, "connect" }, /* 356 */ + { 2, TN, sys_listen, "listen" }, /* 357 */ + { 3, TN, sys_accept, "accept" }, /* 358 */ + { 3, TN, sys_getsockname, "getsockname" }, /* 359 */ + { 3, TN, sys_getpeername, "getpeername" }, /* 360 */ + { 4, TN, sys_socketpair, "socketpair" }, /* 361 */ + { 4, TN, sys_send, "send" }, /* 362 */ + { 4, TN, sys_recv, "recv" }, /* 363 */ + { 6, TN, sys_sendto, "sendto" }, /* 364 */ + { 6, TN, sys_recvfrom, "recvfrom" }, /* 365 */ + { 2, TN, sys_shutdown, "shutdown" }, /* 366 */ + { 5, TN, sys_setsockopt, "setsockopt" }, /* 367 */ + { 5, TN, sys_getsockopt, "getsockopt" }, /* 368 */ + { 5, TN, sys_sendmsg, "sendmsg" }, /* 369 */ + { 5, TN, sys_recvmsg, "recvmsg" }, /* 370 */ +#if SYS_ipc_subcall != 371 + #error fix me +#endif + { 4, 0, printargs, "ipc_subcall" }, /* 371 */ + { 4, TI, printargs, "semop" }, /* 372 */ + { 4, TI, sys_semget, "semget" }, /* 373 */ + { 4, TI, sys_semctl, "semctl" }, /* 374 */ + { 5, TI, sys_semtimedop, "semtimedop" }, /* 375 */ + { 4, 0, printargs, "ipc_subcall" }, /* 376 */ + { 4, 0, printargs, "ipc_subcall" }, /* 377 */ + { 4, 0, printargs, "ipc_subcall" }, /* 378 */ + { 4, 0, printargs, "ipc_subcall" }, /* 379 */ + { 4, 0, printargs, "ipc_subcall" }, /* 380 */ + { 4, 0, printargs, "ipc_subcall" }, /* 381 */ + { 4, TI, sys_msgsnd, "msgsnd" }, /* 382 */ + { 4, TI, sys_msgrcv, "msgrcv" }, /* 383 */ + { 4, TI, sys_msgget, "msgget" }, /* 384 */ + { 4, TI, sys_msgctl, "msgctl" }, /* 385 */ + { 4, 0, printargs, "ipc_subcall" }, /* 386 */ + { 4, 0, printargs, "ipc_subcall" }, /* 387 */ + { 4, 0, printargs, "ipc_subcall" }, /* 388 */ + { 4, 0, printargs, "ipc_subcall" }, /* 389 */ + { 4, 0, printargs, "ipc_subcall" }, /* 390 */ + { 4, 0, printargs, "ipc_subcall" }, /* 391 */ + { 4, TI, sys_shmat, "shmat" }, /* 392 */ + { 4, TI, sys_shmdt, "shmdt" }, /* 393 */ + { 4, TI, sys_shmget, "shmget" }, /* 394 */ + { 4, TI, sys_shmctl, "shmctl" }, /* 395 */ + { 5, 0, printargs, "SYS_343" }, /* 396 */ + { 5, 0, printargs, "SYS_344" }, /* 397 */ + { 5, 0, printargs, "SYS_345" }, /* 398 */ + { 5, 0, printargs, "SYS_346" }, /* 399 */ + { 5, 0, printargs, "SYS_347" }, /* 400 */ diff --git a/syscall.c b/syscall.c index ba176458..f42b1218 100644 --- a/syscall.c +++ b/syscall.c @@ -584,50 +584,6 @@ static const struct subcall subcalls_table[] = { #if !(defined(LINUX) && ( defined(ALPHA) || defined(MIPS) )) -static const int socket_map [] = { - /* SYS_SOCKET */ 97, - /* SYS_BIND */ 104, - /* SYS_CONNECT */ 98, - /* SYS_LISTEN */ 106, - /* SYS_ACCEPT */ 99, - /* SYS_GETSOCKNAME */ 150, - /* SYS_GETPEERNAME */ 141, - /* SYS_SOCKETPAIR */ 135, - /* SYS_SEND */ 101, - /* SYS_RECV */ 102, - /* SYS_SENDTO */ 133, - /* SYS_RECVFROM */ 125, - /* SYS_SHUTDOWN */ 134, - /* SYS_SETSOCKOPT */ 105, - /* SYS_GETSOCKOPT */ 118, - /* SYS_SENDMSG */ 114, - /* SYS_RECVMSG */ 113 -}; - -#if defined (SPARC) || defined (SPARC64) -static void -sparc_socket_decode (tcp) -struct tcb *tcp; -{ - volatile long addr; - volatile int i, n; - - if (tcp->u_arg [0] < 1 || tcp->u_arg [0] > sizeof(socket_map)/sizeof(int)+1){ - return; - } - tcp->scno = socket_map [tcp->u_arg [0]-1]; - n = tcp->u_nargs = sysent [tcp->scno].nargs; - addr = tcp->u_arg [1]; - for (i = 0; i < n; i++){ - int arg; - if (umoven (tcp, addr, sizeof (arg), (void *) &arg) < 0) - arg = 0; - tcp->u_arg [i] = arg; - addr += sizeof (arg); - } -} -#endif - static void decode_subcall(tcp, subcall, nsubcalls, style) struct tcb *tcp; @@ -2394,7 +2350,7 @@ trace_syscall(struct tcb *tcp) switch (known_scno(tcp)) { #ifdef LINUX -#if !defined (ALPHA) && !defined(SPARC) && !defined(SPARC64) && !defined(MIPS) && !defined(HPPA) +#if !defined (ALPHA) && !defined(MIPS) && !defined(HPPA) case SYS_socketcall: decode_subcall(tcp, SYS_socket_subcall, SYS_socket_nsubcalls, deref_style); @@ -2403,12 +2359,7 @@ trace_syscall(struct tcb *tcp) decode_subcall(tcp, SYS_ipc_subcall, SYS_ipc_nsubcalls, shift_style); break; -#endif /* !ALPHA && !MIPS && !SPARC && !SPARC64 && !HPPA */ -#if defined (SPARC) || defined (SPARC64) - case SYS_socketcall: - sparc_socket_decode (tcp); - break; -#endif +#endif /* !(ALPHA || MIPS || HPPA) */ #endif /* LINUX */ #ifdef SVR4 #ifdef SYS_pgrpsys_subcall