Hi,

On older Darwin systems (in particular, Darwin 10), dyld doesn't export '_dyldVersionNumber' symbol so we would have 'undefined reference' error in sanitizer library. We can mitigate this by introducing weak reference to '_dyldVersionNumber' and bailing out if &dyldVersionNumber == 0.

Tested by Dominique on x86_64-apple-darwin10 and x86_64-apple-darwin15 (see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70624#c8). Ok for mainline? If yes, should I back port this patch to gcc-{4.9, 5, 6}-branch?

-Maxim
libsanitizer/ChangeLog:

2016-04-21  Maxim Ostapenko  <m.ostape...@samsung.com>

	PR sanitizer/70624
	* asan/asan_mac.cc: Cherry pick upstream r266868.

diff --git a/libsanitizer/asan/asan_mac.cc b/libsanitizer/asan/asan_mac.cc
index 20e37ff..ab3c656 100644
--- a/libsanitizer/asan/asan_mac.cc
+++ b/libsanitizer/asan/asan_mac.cc
@@ -97,10 +97,14 @@ void DisableReexec() {
   reexec_disabled = true;
 }
 
-extern "C" double dyldVersionNumber;
+extern "C" SANITIZER_WEAK_ATTRIBUTE double dyldVersionNumber;
 static const double kMinDyldVersionWithAutoInterposition = 360.0;
 
 bool DyldNeedsEnvVariable() {
+  // Although sanitizer support was added to LLVM on OS X 10.7+, GCC users
+  // still may want use them on older systems. On older Darwin platforms, dyld
+  // doesn't export dyldVersionNumber symbol and we simply return true.
+  if (!&dyldVersionNumber) return true;
   // If running on OS X 10.11+ or iOS 9.0+, dyld will interpose even if
   // DYLD_INSERT_LIBRARIES is not set. However, checking OS version via
   // GetMacosVersion() doesn't work for the simulator. Let's instead check

Reply via email to