diff options
author | Kamil Rytarowski <n54@gmx.com> | 2017-11-28 10:54:58 +0000 |
---|---|---|
committer | Kamil Rytarowski <n54@gmx.com> | 2017-11-28 10:54:58 +0000 |
commit | 1b95f61d36f009cbddab3462b04af800848759b1 (patch) | |
tree | 9005d8e3152991ac3caf21f5f79023f823e06f68 /lib | |
parent | 43d241f94bf12ce02bc180957547ddf06a5b3eaa (diff) |
Handle symbol renaming of sigaction for NetBSD
Summary:
NetBSD uses the __sigaction14 symbol name for historical and compat
reasons for the sigaction(2) function name.
Rename the interceptors and users of sigaction to sigaction_symname
and reuse it in the code base.
This change fixes 4 failing tests in TSan/NetBSD:
- ThreadSanitizer-x86_64 :: signal_errno.cc
- ThreadSanitizer-x86_64 :: signal_malloc.cc
- ThreadSanitizer-x86_64 :: signal_sync2.cc
- ThreadSanitizer-x86_64 :: signal_thread.cc
Sponsored by <The NetBSD Foundation>
Reviewers: joerg, vitalybuka, eugenis, dvyukov, kcc
Reviewed By: dvyukov
Subscribers: kubamracek, llvm-commits, #sanitizers
Tags: #sanitizers
Differential Revision: https://reviews.llvm.org/D40341
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@319160 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sanitizer_common/sanitizer_signal_interceptors.inc | 16 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_interceptors.cc | 2 |
2 files changed, 12 insertions, 6 deletions
diff --git a/lib/sanitizer_common/sanitizer_signal_interceptors.inc b/lib/sanitizer_common/sanitizer_signal_interceptors.inc index 92a073a6a..f51fc049e 100644 --- a/lib/sanitizer_common/sanitizer_signal_interceptors.inc +++ b/lib/sanitizer_common/sanitizer_signal_interceptors.inc @@ -18,6 +18,12 @@ using namespace __sanitizer; +#if SANITIZER_NETBSD +#define sigaction_symname __sigaction14 +#else +#define sigaction_symname sigaction +#endif + #ifndef SIGNAL_INTERCEPTOR_SIGNAL_IMPL #define SIGNAL_INTERCEPTOR_SIGNAL_IMPL(func, signum, handler) \ { return REAL(func)(signum, handler); } @@ -25,7 +31,7 @@ using namespace __sanitizer; #ifndef SIGNAL_INTERCEPTOR_SIGACTION_IMPL #define SIGNAL_INTERCEPTOR_SIGACTION_IMPL(signum, act, oldact) \ - { return REAL(sigaction)(signum, act, oldact); } + { return REAL(sigaction_symname)(signum, act, oldact); } #endif #if SANITIZER_INTERCEPT_BSD_SIGNAL @@ -46,16 +52,16 @@ INTERCEPTOR(uptr, signal, int signum, uptr handler) { } #define INIT_SIGNAL COMMON_INTERCEPT_FUNCTION(signal) -INTERCEPTOR(int, sigaction, int signum, const __sanitizer_sigaction *act, - __sanitizer_sigaction *oldact) { +INTERCEPTOR(int, sigaction_symname, int signum, + const __sanitizer_sigaction *act, __sanitizer_sigaction *oldact) { if (GetHandleSignalMode(signum) == kHandleSignalExclusive) return 0; SIGNAL_INTERCEPTOR_SIGACTION_IMPL(signum, act, oldact); } -#define INIT_SIGACTION COMMON_INTERCEPT_FUNCTION(sigaction) +#define INIT_SIGACTION COMMON_INTERCEPT_FUNCTION(sigaction_symname) namespace __sanitizer { int real_sigaction(int signum, const void *act, void *oldact) { - return REAL(sigaction)(signum, (const __sanitizer_sigaction *)act, + return REAL(sigaction_symname)(signum, (const __sanitizer_sigaction *)act, (__sanitizer_sigaction *)oldact); } } // namespace __sanitizer diff --git a/lib/tsan/rtl/tsan_interceptors.cc b/lib/tsan/rtl/tsan_interceptors.cc index 611a3f7de..f14b3c496 100644 --- a/lib/tsan/rtl/tsan_interceptors.cc +++ b/lib/tsan/rtl/tsan_interceptors.cc @@ -2337,7 +2337,7 @@ static __sanitizer_sighandler_ptr signal_impl(int sig, internal_memset(&act.sa_mask, -1, sizeof(act.sa_mask)); act.sa_flags = 0; __sanitizer_sigaction old; - int res = sigaction(sig, &act, &old); + int res = sigaction_symname(sig, &act, &old); if (res) return (__sanitizer_sighandler_ptr)sig_err; return old.handler; } |