http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59188

Dmitry Vyukov <dvyukov at google dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dvyukov at google dot com

--- Comment #3 from Dmitry Vyukov <dvyukov at google dot com> ---
Hi,

Can you please try the following patch?
If it does not work, please check what else references sigsetjmp.


--- rtl/tsan_interceptors.cc    (revision 194823)
+++ rtl/tsan_interceptors.cc    (working copy)
@@ -2034,6 +2034,9 @@
   Die();
 }

+extern "C" uptr dlsym(uptr, const char*);
+const uptr RTLD_NEXT = -1;
+
 void InitializeInterceptors() {
   CHECK_GT(cur_thread()->in_rtl, 0);

@@ -2048,10 +2051,11 @@

   SANITIZER_COMMON_INTERCEPTORS_INIT;

-  TSAN_INTERCEPT(setjmp);
-  TSAN_INTERCEPT(_setjmp);
-  TSAN_INTERCEPT(sigsetjmp);
-  TSAN_INTERCEPT(__sigsetjmp);
+  *(uptr*)&REAL(setjmp) = dlsym(RTLD_NEXT, "setjmp");
+  *(uptr*)&REAL(_setjmp) = dlsym(RTLD_NEXT, "_setjmp");
+  *(uptr*)&REAL(sigsetjmp) = dlsym(RTLD_NEXT, "sigsetjmp");
+  *(uptr*)&REAL(__sigsetjmp) = dlsym(RTLD_NEXT, "__sigsetjmp");
+
   TSAN_INTERCEPT(longjmp);
   TSAN_INTERCEPT(siglongjmp);

Reply via email to