forked from OSchip/llvm-project
[asan] don't require __cxa_throw to be present in the process. This is the last dependency on libstdc++
llvm-svn: 145821
This commit is contained in:
parent
97a6028b3a
commit
93927f9e01
|
@ -37,18 +37,33 @@
|
|||
#include "mach_override/mach_override.h"
|
||||
#define WRAP(x) wrap_##x
|
||||
#define WRAPPER_NAME(x) "wrap_"#x
|
||||
|
||||
#define OVERRIDE_FUNCTION(oldfunc, newfunc) \
|
||||
CHECK(0 == mach_override_ptr((void*)(oldfunc), \
|
||||
(void*)(newfunc), \
|
||||
(void**)&real_##oldfunc)); \
|
||||
CHECK(real_##oldfunc != NULL);
|
||||
|
||||
#define OVERRIDE_FUNCTION_IF_EXISTS(oldfunc, newfunc) \
|
||||
do { mach_override_ptr((void*)(oldfunc), \
|
||||
(void*)(newfunc), \
|
||||
(void**)&real_##oldfunc); } while (0)
|
||||
|
||||
#define INTERCEPT_FUNCTION(func) \
|
||||
OVERRIDE_FUNCTION(func, WRAP(func))
|
||||
#else
|
||||
|
||||
#define INTERCEPT_FUNCTION_IF_EXISTS(func) \
|
||||
OVERRIDE_FUNCTION_IF_EXISTS(func, WRAP(func))
|
||||
|
||||
#else // __linux__
|
||||
#define WRAP(x) x
|
||||
#define WRAPPER_NAME(x) #x
|
||||
|
||||
#define INTERCEPT_FUNCTION(func) \
|
||||
CHECK((real_##func = (func##_f)dlsym(RTLD_NEXT, #func)));
|
||||
|
||||
#define INTERCEPT_FUNCTION_IF_EXISTS(func) \
|
||||
do { real_##func = (func##_f)dlsym(RTLD_NEXT, #func); } while (0)
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
|
|
@ -507,6 +507,7 @@ extern "C" void __cxa_throw(void *a, void *b, void *c);
|
|||
|
||||
#if ASAN_HAS_EXCEPTIONS
|
||||
extern "C" void WRAP(__cxa_throw)(void *a, void *b, void *c) {
|
||||
CHECK(&real___cxa_throw);
|
||||
UnpoisonStackFromHereToTop();
|
||||
real___cxa_throw(a, b, c);
|
||||
}
|
||||
|
@ -690,7 +691,7 @@ void __asan_init() {
|
|||
INTERCEPT_FUNCTION(signal);
|
||||
INTERCEPT_FUNCTION(longjmp);
|
||||
INTERCEPT_FUNCTION(_longjmp);
|
||||
INTERCEPT_FUNCTION(__cxa_throw);
|
||||
INTERCEPT_FUNCTION_IF_EXISTS(__cxa_throw);
|
||||
INTERCEPT_FUNCTION(pthread_create);
|
||||
#ifdef __APPLE__
|
||||
INTERCEPT_FUNCTION(dispatch_async_f);
|
||||
|
|
Loading…
Reference in New Issue