]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support for rt_tgsigqueueinfo system call based on patch
authorTom Hughes <tom@compton.nu>
Tue, 24 Nov 2009 16:08:40 +0000 (16:08 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 24 Nov 2009 16:08:40 +0000 (16:08 +0000)
from Dodji Seketeli. Part fix for #215973.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10947

coregrind/m_syswrap/priv_syswrap-linux.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c

index 9873c87a21c6dcc21a02dfa50eb8d5cd955a928c..6e914527ae1b3001295969aa1e0d9d21aa79a933 100644 (file)
@@ -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?
index 29af331f152ada2a9ba4e105993194feaf6ca1e7..6df2867c9e62734456e4c5fa856e639c42d18d5b 100644 (file)
@@ -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
 };
 
index c25d08c4b7580ed7bc0703dec31fbe4689200216..3b59fd2130e751fefe312063f241f0cee362bd7c 100644 (file)
@@ -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)
index 527b5fd9b74ec9637095156326d47ad7e9a6df05..bdaa5c0739beb290f268f2143bfd3a019301e8b8 100644 (file)
@@ -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) = 
index 691e0a1fce3bed31bf5618a445e4a6d985a0db53..1d1699b8b31c896b5afafdb27e589be2150a40cf 100644 (file)
@@ -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) = 
index 273893e900764d5ce382e23f14d1ebad7c2e3c6d..6d9b49860e91e8ce3e7cf467c6112549419bbb57 100644 (file)
@@ -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
 };