From: Julian Seward Date: Sun, 13 Mar 2005 18:02:51 +0000 (+0000) Subject: Add support for sys_tgkill (syscall 270), needed by tls gunk on X-Git-Tag: svn/VALGRIND_3_0_0~977 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d2bc233d5e387768d3118577cf79ed3d79cab672;p=thirdparty%2Fvalgrind.git Add support for sys_tgkill (syscall 270), needed by tls gunk on x86-linux. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3341 --- diff --git a/coregrind/linux/core_os.h b/coregrind/linux/core_os.h index b4b7f150c9..d7553ea856 100644 --- a/coregrind/linux/core_os.h +++ b/coregrind/linux/core_os.h @@ -82,6 +82,8 @@ LINUX_SYSCALL_WRAPPER(sys_epoll_create); LINUX_SYSCALL_WRAPPER(sys_epoll_ctl); LINUX_SYSCALL_WRAPPER(sys_epoll_wait); +LINUX_SYSCALL_WRAPPER(sys_tgkill); + LINUX_SYSCALL_WRAPPER(sys_io_setup); LINUX_SYSCALL_WRAPPER(sys_io_destroy); LINUX_SYSCALL_WRAPPER(sys_io_getevents); diff --git a/coregrind/linux/syscalls.c b/coregrind/linux/syscalls.c index 507d17ef9b..4b401bd1be 100644 --- a/coregrind/linux/syscalls.c +++ b/coregrind/linux/syscalls.c @@ -475,6 +475,25 @@ POST(sys_epoll_wait) POST_MEM_WRITE( ARG2, sizeof(struct epoll_event)*RES ) ; } +PRE(sys_tgkill, 0) +{ + /* int tgkill(pid_t tgid, pid_t tid, int sig); */ + PRINT("sys_tgkill ( %d, %d, %d )", ARG1,ARG2,ARG3); + PRE_REG_READ3(long, "tgkill", int, tgid, int, tid, int, sig); + if (!VG_(client_signal_OK)(ARG3)) + SET_RESULT( -VKI_EINVAL ); +} + +POST(sys_tgkill) +{ + if (VG_(clo_trace_signals)) + VG_(message)(Vg_DebugMsg, "tgkill: sent signal %d to pid %d/%d", + ARG3, ARG1, ARG2); + // Check to see if this kill gave us a pending signal + VG_(poll_signals)(tid); +} + + // Nb: this wrapper is "Special" because we have to pad/unpad memory around // the syscall itself, and this allows us to control exactly the code that // gets run while the padding is in place. diff --git a/coregrind/x86-linux/syscalls.c b/coregrind/x86-linux/syscalls.c index d3da367b09..56a8c31d64 100644 --- a/coregrind/x86-linux/syscalls.c +++ b/coregrind/x86-linux/syscalls.c @@ -1590,7 +1590,7 @@ const struct SyscallTableEntry VGA_(syscall_table)[] = { GENXY(__NR_statfs64, sys_statfs64), // 268 GENXY(__NR_fstatfs64, sys_fstatfs64), // 269 - // (__NR_tgkill, sys_tgkill), // 270 */Linux + LINXY(__NR_tgkill, sys_tgkill), // 270 */Linux GENX_(__NR_utimes, sys_utimes), // 271 // (__NR_fadvise64_64, sys_fadvise64_64), // 272 */(Linux?) GENX_(__NR_vserver, sys_ni_syscall), // 273