Index: sandbox/linux/services/syscall_wrappers.cc |
diff --git a/sandbox/linux/services/syscall_wrappers.cc b/sandbox/linux/services/syscall_wrappers.cc |
index 2806e94c59f2b265dfc40433144a4b79a433be4d..3a276f14fb5398ad6c1177524f3b26f66452e891 100644 |
--- a/sandbox/linux/services/syscall_wrappers.cc |
+++ b/sandbox/linux/services/syscall_wrappers.cc |
@@ -151,48 +151,20 @@ int sys_sigprocmask(int how, const sigset_t* set, decltype(nullptr) oldset) { |
sizeof(linux_value)); |
} |
-#if (defined(MEMORY_SANITIZER) || defined(THREAD_SANITIZER) || \ |
- (defined(ARCH_CPU_X86_FAMILY) && !defined(__clang__))) && \ |
- !defined(OS_NACL_NONSFI) |
-// If MEMORY_SANITIZER or THREAD_SANITIZER is enabled, it is necessary to call |
-// sigaction() here, rather than the direct syscall (sys_sigaction() defined |
-// by ourselves). |
-// It is because, if MEMORY_SANITIZER or THREAD_SANITIZER is enabled, sigaction |
-// is wrapped, and |act->sa_handler| is injected in order to unpoisonize the |
-// memory passed via callback's arguments for MEMORY_SANITIZER, or handle |
-// signals to check thread consistency for THREAD_SANITIZER. Please see |
-// msan_interceptors.cc and tsan_interceptors.cc for more details. |
-// So, specifically, if MEMORY_SANITIZER is enabled while the direct syscall is |
-// used, as MEMORY_SANITIZER does not know about it, sigaction() invocation in |
-// other places would be broken (in more precise, returned |oldact| would have |
-// a broken |sa_handler| callback). |
-// Practically, it would break NaCl's signal handler installation. |
-// cf) native_client/src/trusted/service_runtime/linux/nacl_signal.c. |
-// As for THREAD_SANITIZER, the intercepted signal handlers are processed more |
-// in other libc functions' interceptors (such as for raise()), so that it |
-// would not work properly. |
-// |
-// Also on x86 architectures, we need naked function for rt_sigreturn. |
-// However, there is no simple way to define it with GCC. Note that the body |
-// of function is actually very small (only two instructions), but we need to |
-// define much debug information in addition, otherwise backtrace() used by |
-// base::StackTrace would not work so that some tests would fail. |
-// |
// When this is built with PNaCl toolchain, we should always use sys_sigaction |
// below, because sigaction() provided by the toolchain is incompatible with |
-// Linux's ABI. So, otherwise, it would just fail. Note that it is not |
-// necessary to think about sigaction() invocation in other places even with |
-// MEMORY_SANITIZER or THREAD_SANITIZER, because it would just fail there. |
+// Linux's ABI. |
+#if !defined(OS_NACL_NONSFI) |
int sys_sigaction(int signum, |
const struct sigaction* act, |
struct sigaction* oldact) { |
return sigaction(signum, act, oldact); |
} |
#else |
-// On X86_64, sa_restorer is required. We specify it on x86 as well in order to |
-// support kernels with VDSO disabled. |
#if defined(ARCH_CPU_X86_FAMILY) |
+// On x86_64, sa_restorer is required. We specify it on x86 as well in order to |
+// support kernels with VDSO disabled. |
#if !defined(SA_RESTORER) |
#define SA_RESTORER 0x04000000 |
#endif |
@@ -205,6 +177,8 @@ int sys_sigaction(int signum, |
// rt_sigreturn is a special system call that interacts with the user land |
// stack. Thus, here prologue must not be created, which implies syscall() |
// does not work properly, too. Note that rt_sigreturn does not return. |
+// TODO(rickyz): These assembly functions may still break stack unwinding on |
+// nonsfi NaCl builds. |
#if defined(ARCH_CPU_X86_64) |
extern "C" { |