diff options
author | Kamil Rytarowski <n54@gmx.com> | 2017-08-08 12:10:08 +0000 |
---|---|---|
committer | Kamil Rytarowski <n54@gmx.com> | 2017-08-08 12:10:08 +0000 |
commit | 70a3511bd5a83d85ef277bb7b088e15917ba7915 (patch) | |
tree | 1c880771c8574948ab776d6a584133e627156209 /compiler-rt/lib/interception | |
parent | 71dfb3eb074eb6237f631c23ba24fd5ca5fdd917 (diff) | |
download | bcm5719-llvm-70a3511bd5a83d85ef277bb7b088e15917ba7915.tar.gz bcm5719-llvm-70a3511bd5a83d85ef277bb7b088e15917ba7915.zip |
Reuse interception_linux for NetBSD
Summary:
Part of the code inspired by the original work on libsanitizer in GCC 5.4 by Christos Zoulas.
Sponsored by <The NetBSD Foundation>
Reviewers: joerg, kcc, vitalybuka, filcab
Reviewed By: vitalybuka
Subscribers: llvm-commits, #sanitizers
Tags: #sanitizers
Differential Revision: https://reviews.llvm.org/D36321
llvm-svn: 310351
Diffstat (limited to 'compiler-rt/lib/interception')
-rw-r--r-- | compiler-rt/lib/interception/interception_linux.cc | 13 | ||||
-rw-r--r-- | compiler-rt/lib/interception/interception_linux.h | 4 |
2 files changed, 12 insertions, 5 deletions
diff --git a/compiler-rt/lib/interception/interception_linux.cc b/compiler-rt/lib/interception/interception_linux.cc index 6e908ac017b..23780429d0a 100644 --- a/compiler-rt/lib/interception/interception_linux.cc +++ b/compiler-rt/lib/interception/interception_linux.cc @@ -12,14 +12,22 @@ // Linux-specific interception methods. //===----------------------------------------------------------------------===// -#if defined(__linux__) || defined(__FreeBSD__) +#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) #include "interception.h" #include <dlfcn.h> // for dlsym() and dlvsym() +#ifdef __NetBSD__ +#include "sanitizer_common/sanitizer_libc.h" +#endif + namespace __interception { bool GetRealFunctionAddress(const char *func_name, uptr *func_addr, uptr real, uptr wrapper) { +#ifdef __NetBSD__ + // XXX: Find a better way to handle renames + if (internal_strcmp(func_name, "sigaction") == 0) func_name = "__sigaction14"; +#endif *func_addr = (uptr)dlsym(RTLD_NEXT, func_name); return real == wrapper; } @@ -32,5 +40,4 @@ void *GetFuncAddrVer(const char *func_name, const char *ver) { } // namespace __interception - -#endif // __linux__ || __FreeBSD__ +#endif // __linux__ || __FreeBSD__ || __NetBSD__ diff --git a/compiler-rt/lib/interception/interception_linux.h b/compiler-rt/lib/interception/interception_linux.h index 27a66c88204..0e15bd8e1b4 100644 --- a/compiler-rt/lib/interception/interception_linux.h +++ b/compiler-rt/lib/interception/interception_linux.h @@ -12,7 +12,7 @@ // Linux-specific interception methods. //===----------------------------------------------------------------------===// -#if defined(__linux__) || defined(__FreeBSD__) +#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) #if !defined(INCLUDED_FROM_INTERCEPTION_LIB) # error "interception_linux.h should be included from interception library only" @@ -44,4 +44,4 @@ void *GetFuncAddrVer(const char *func_name, const char *ver); #endif // !defined(__ANDROID__) #endif // INTERCEPTION_LINUX_H -#endif // __linux__ || __FreeBSD__ +#endif // __linux__ || __FreeBSD__ || __NetBSD__ |