Message ID | 20131114142404.GA13112@bromo.med.uc.edu |
---|---|
State | New |
Headers | show |
On Thu, Nov 14, 2013 at 6:24 PM, Jack Howarth <howarth@bromo.med.uc.edu> wrote: > The attached patch backports http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20131111/194748.html > to gcc trunk and eliminates the asan.exp failures at -m64 on darwin. Bootstrap and regression tested on > x86_64-apple-darwin12 and x86_64-apple-darwin13. > Jack > ps Kostya, can you handled the commit? Thanks in advance. Will do (tomorrow) --kcc > > 2013-11-14 Kostya Serebryany <kcc@google.com> > Jack Howarth <howarth@bromo.med.uc.edu> > > libsanitizer/ > > PR sanitizer/58994 > Backport from upstream revision 194573 > * asan/asan_interceptors.cc (COMMON_INTERCEPTOR_ENTER): Fall > back to the original functions in the common libsanitizer > interceptors and the __cxa_atexit() interceptor on Darwin. > > > Index: libsanitizer/asan/asan_interceptors.cc > =================================================================== > --- libsanitizer/asan/asan_interceptors.cc (revision 204753) > +++ libsanitizer/asan/asan_interceptors.cc (working copy) > @@ -106,12 +106,13 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, > #define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \ > ASAN_WRITE_RANGE(ptr, size) > #define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) ASAN_READ_RANGE(ptr, size) > -#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ > - do { \ > - if (asan_init_is_running) return REAL(func)(__VA_ARGS__); \ > - ctx = 0; \ > - (void) ctx; \ > - ENSURE_ASAN_INITED(); \ > +#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ > + do { \ > + if (asan_init_is_running) return REAL(func)(__VA_ARGS__); \ > + ctx = 0; \ > + (void) ctx; \ > + if (SANITIZER_MAC && !asan_inited) return REAL(func)(__VA_ARGS__); \ > + ENSURE_ASAN_INITED(); \ > } while (false) > #define COMMON_INTERCEPTOR_FD_ACQUIRE(ctx, fd) \ > do { \ > @@ -634,6 +635,9 @@ static void AtCxaAtexit(void *unused) { > #if ASAN_INTERCEPT___CXA_ATEXIT > INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg, > void *dso_handle) { > +#if SANITIZER_MAC > + if (!asan_inited) return REAL(__cxa_atexit)(func, arg, dso_handle); > +#endif > ENSURE_ASAN_INITED(); > int res = REAL(__cxa_atexit)(func, arg, dso_handle); > REAL(__cxa_atexit)(AtCxaAtexit, 0, 0);
Index: libsanitizer/asan/asan_interceptors.cc =================================================================== --- libsanitizer/asan/asan_interceptors.cc (revision 204753) +++ libsanitizer/asan/asan_interceptors.cc (working copy) @@ -106,12 +106,13 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, #define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \ ASAN_WRITE_RANGE(ptr, size) #define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) ASAN_READ_RANGE(ptr, size) -#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ - do { \ - if (asan_init_is_running) return REAL(func)(__VA_ARGS__); \ - ctx = 0; \ - (void) ctx; \ - ENSURE_ASAN_INITED(); \ +#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ + do { \ + if (asan_init_is_running) return REAL(func)(__VA_ARGS__); \ + ctx = 0; \ + (void) ctx; \ + if (SANITIZER_MAC && !asan_inited) return REAL(func)(__VA_ARGS__); \ + ENSURE_ASAN_INITED(); \ } while (false) #define COMMON_INTERCEPTOR_FD_ACQUIRE(ctx, fd) \ do { \ @@ -634,6 +635,9 @@ static void AtCxaAtexit(void *unused) { #if ASAN_INTERCEPT___CXA_ATEXIT INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg, void *dso_handle) { +#if SANITIZER_MAC + if (!asan_inited) return REAL(__cxa_atexit)(func, arg, dso_handle); +#endif ENSURE_ASAN_INITED(); int res = REAL(__cxa_atexit)(func, arg, dso_handle); REAL(__cxa_atexit)(AtCxaAtexit, 0, 0);