]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
fix PR sanitizer/58994
authorKostya Serebryany <kcc@google.com>
Fri, 15 Nov 2013 10:31:14 +0000 (10:31 +0000)
committerKostya Serebryany <kcc@gcc.gnu.org>
Fri, 15 Nov 2013 10:31:14 +0000 (10:31 +0000)
From-SVN: r204838

libsanitizer/ChangeLog
libsanitizer/asan/asan_interceptors.cc

index 47f93db4e7d01b7a84426f4f708ac5cb1d0347e5..a0a8a8e6db053c31b3a5d65d1543c60e1f04ce59 100644 (file)
@@ -1,3 +1,11 @@
+2013-11-15  Kostya Serebryany  <kcc@google.com>
+
+       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.
+
 2013-11-13  Peter Bergner  <bergner@vnet.ibm.com>
 
        PR sanitizer/59009
index 6fa968da0a38ff0caaa9172993a87bccf72efb73..72f7aae814a9715b8f1320089eab4925688d6994 100644 (file)
@@ -106,12 +106,13 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *)
 #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);