|
From: <sv...@va...> - 2009-11-24 16:08:58
|
Author: tom
Date: 2009-11-24 16:08:40 +0000 (Tue, 24 Nov 2009)
New Revision: 10947
Log:
Add support for rt_tgsigqueueinfo system call based on patch
from Dodji Seketeli. Part fix for #215973.
Modified:
trunk/coregrind/m_syswrap/priv_syswrap-linux.h
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
Modified: trunk/coregrind/m_syswrap/priv_syswrap-linux.h
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2009-11-24 16:03:19 UTC (rev 10946)
+++ trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2009-11-24 16:08:40 UTC (rev 10947)
@@ -242,6 +242,7 @@
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?
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-11-24 16:03:19 UTC (rev 10946)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-11-24 16:08:40 UTC (rev 10947)
@@ -1379,7 +1379,7 @@
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
};
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2009-11-24 16:03:19 UTC (rev 10946)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2009-11-24 16:08:40 UTC (rev 10947)
@@ -2761,6 +2761,21 @@
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)
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-11-24 16:03:19 UTC (rev 10946)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-11-24 16:08:40 UTC (rev 10947)
@@ -1871,7 +1871,7 @@
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) =
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-11-24 16:03:19 UTC (rev 10946)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-11-24 16:08:40 UTC (rev 10947)
@@ -1511,7 +1511,7 @@
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) =
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2009-11-24 16:03:19 UTC (rev 10946)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2009-11-24 16:08:40 UTC (rev 10947)
@@ -2258,7 +2258,7 @@
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
};
|