On Thu, Apr 21, 2016 at 02:52:12PM +0300, Maxim Ostapenko wrote:
> 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.

Ok, for all branches, including 6.1 (if you commit it today).
Thanks.

> 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


        Jakub

Reply via email to