From: Tom Hughes Date: Tue, 24 Nov 2009 16:08:40 +0000 (+0000) Subject: Add support for rt_tgsigqueueinfo system call based on patch X-Git-Tag: svn/VALGRIND_3_6_0~466 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=40fa55a53b63792cce9fc2eba8be2cb189c2504a;p=thirdparty%2Fvalgrind.git Add support for rt_tgsigqueueinfo system call based on patch from Dodji Seketeli. Part fix for #215973. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10947 --- diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 9873c87a21..6e914527ae 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -242,6 +242,7 @@ DECL_TEMPLATE(linux, sys_rt_sigprocmask); DECL_TEMPLATE(linux, sys_rt_sigpending); DECL_TEMPLATE(linux, sys_rt_sigtimedwait); DECL_TEMPLATE(linux, sys_rt_sigqueueinfo); +DECL_TEMPLATE(linux, sys_rt_tgsigqueueinfo); DECL_TEMPLATE(linux, sys_rt_sigsuspend); // Linux-specific? diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 29af331f15..6df2867c9e 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -1379,7 +1379,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { LINXY(__NR_preadv, sys_preadv), // 295 LINX_(__NR_pwritev, sys_pwritev), // 296 - // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 297 + LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 297 LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 298 }; diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index c25d08c4b7..3b59fd2130 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -2761,6 +2761,21 @@ POST(sys_rt_sigqueueinfo) SET_STATUS_Failure( VKI_EINVAL ); } +PRE(sys_rt_tgsigqueueinfo) +{ + PRINT("sys_rt_tgsigqueueinfo(%ld, %ld, %ld, %#lx)", ARG1, ARG2, ARG3, ARG4); + PRE_REG_READ4(long, "rt_tgsigqueueinfo", + int, tgid, int, pid, int, sig, vki_siginfo_t *, uinfo); + if (ARG3 != 0) + PRE_MEM_READ( "rt_tgsigqueueinfo(uinfo)", ARG4, VKI_SI_MAX_SIZE ); +} + +POST(sys_rt_tgsigqueueinfo) +{ + if (!ML_(client_signal_OK)(ARG3)) + SET_STATUS_Failure( VKI_EINVAL ); +} + // XXX: x86-specific? The kernel prototypes for the different archs are // hard to decipher. PRE(sys_rt_sigsuspend) diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 527b5fd9b7..bdaa5c0739 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -1871,7 +1871,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { LINXY(__NR_perf_counter_open, sys_perf_counter_open),// 319 LINXY(__NR_preadv, sys_preadv), // 320 LINX_(__NR_pwritev, sys_pwritev), // 321 - // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 322 + LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo) // 322 }; const UInt ML_(syscall_table_size) = diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 691e0a1fce..1d1699b8b3 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -1511,7 +1511,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { LINXY(__NR_perf_counter_open, sys_perf_counter_open),// 319 LINXY(__NR_preadv, sys_preadv), // 320 LINX_(__NR_pwritev, sys_pwritev), // 321 - // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 322 + LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo) // 322 }; const UInt ML_(syscall_table_size) = diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 273893e900..6d9b49860e 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -2258,7 +2258,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { LINXY(__NR_preadv, sys_preadv), // 333 LINX_(__NR_pwritev, sys_pwritev), // 334 - // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 335 + LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 335 LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 336 };