diff mbox

: backport fix for PR sanitizer/58994

Message ID 20131114142404.GA13112@bromo.med.uc.edu
State New
Headers show

Commit Message

Jack Howarth Nov. 14, 2013, 2:24 p.m. UTC
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.

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.
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);

Comments

Kostya Serebryany Nov. 14, 2013, 3:05 p.m. UTC | #1
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);
diff mbox

Patch

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);