[Bug sanitizer/87880] [9 regression] All macOS asan execution tests FAIL
iains at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jan 3 10:48:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87880
--- Comment #9 from Iain Sandoe <iains at gcc dot gnu.org> ---
So.. this is somewhat puzzling.
Essentially, it seems that on macOS and Linux (at least) currently
ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION is set unconditionally to "on"
(for any target that has ASAN_HAS_EXCEPTIONS).
libsupc++'s implementation doesn't include this, so ..
.. the mystery is not so much why it's failing sometimes on macOS - so much as
why it's not failing always, when the c++ library is libstdc++ (and also on
Linux).
Hypothesis, could be that since the search is being carried out in the flat
namespace, any library that happens to pull in libc++ (as a dependent) will
cause the libc++abi version of __cxa_rethrow_primary_exception to become
visible in that flat namespace.
using the following hack the results go from wholesale fail on C to a handfull
of fails and on c++ similarly.
I guess this could be a dyld bug too - if the lookup is supposed to be a weak
reference (not checked).
.. obviously, this is incomplete .. it just jams the hook off (not looked at
the configuration stuff yet, or whether there's a weak symbol problem).
[this appears distinct from failure mode on Darwin10 and also distinct from
some fails caused by missing symbolization (atos) on m64 / darwin14]
diff --git a/libsanitizer/asan/asan_interceptors.h
b/libsanitizer/asan/asan_interceptors.h
index b599ebb..10b6d2c 100644
--- a/libsanitizer/asan/asan_interceptors.h
+++ b/libsanitizer/asan/asan_interceptors.h
@@ -79,7 +79,11 @@ void InitializePlatformInterceptors();
#if ASAN_HAS_EXCEPTIONS && !SANITIZER_WINDOWS && !SANITIZER_SOLARIS && \
!SANITIZER_NETBSD
# define ASAN_INTERCEPT___CXA_THROW 1
-# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1
+# if ASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION
+# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1
+#else
+# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 0
+# endif
# if defined(_GLIBCXX_SJLJ_EXCEPTIONS) || (SANITIZER_IOS && defined(__arm__))
# define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 1
# else
More information about the Gcc-bugs
mailing list