Don't use '-z defs' with Clang's sanitizers
authorRichard Levitte <levitte@openssl.org>
Mon, 15 Apr 2019 08:40:18 +0000 (10:40 +0200)
committerRichard Levitte <levitte@openssl.org>
Mon, 15 Apr 2019 14:47:25 +0000 (16:47 +0200)
The clang documentation in all sanitizers we currently use says this:

    When linking shared libraries, the {flavor}Sanitizer run-time is
    not linked, so -Wl,-z,defs may cause link errors (don’t use it
    with {flavor}Sanitizer)

(in our case, {flavor} is one of Address, Memory, or UndefinedBehavior)

Therefore, we turn off that particular flag specifically when using
the sanitizers.

Fixes #8735

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/8749)

Configurations/shared-info.pl

index f821ad7..83f28bd 100644 (file)
@@ -32,7 +32,10 @@ my %shared_info;
         return {
             %{$shared_info{'gnu-shared'}},
             shared_defflag    => '-Wl,--version-script=',
-            dso_ldflags       => '-z defs',
+            dso_ldflags       =>
+                $disabled{asan} && $disabled{msan} && $disabled{ubsan}
+                ? '-z defs'
+                : '',
         };
     },
     'bsd-gcc-shared' => sub { return $shared_info{'linux-shared'}; },