That patch could fix the problem:

diff --git a/gcc/config/i386/gnu-user64.h b/gcc/config/i386/gnu-user64.h
index 734310f..f408e5b 100644
--- a/gcc/config/i386/gnu-user64.h
+++ b/gcc/config/i386/gnu-user64.h
@@ -56,6 +56,7 @@ see the files COPYING3 and COPYING.RUNTIME
respectively.  If not, see
                   "%{" SPEC_64 ":-m " GNU_USER_LINK_EMULATION64 "} \
                    %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \
                    %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \
+  --as-needed \
   %{shared:-shared} \
   %{!shared: \
     %{!static: \
diff --git a/gcc/config/i386/linux-common.h b/gcc/config/i386/linux-common.h
index dd79ec6..86a2b48 100644
--- a/gcc/config/i386/linux-common.h
+++ b/gcc/config/i386/linux-common.h
@@ -70,7 +70,9 @@ along with GCC; see the file COPYING3.  If not see
 %{mmpx:%{fcheck-pointer-bounds:\
     %{static:--whole-archive -lmpx --no-whole-archive" LIBMPX_LIBS "}\
     %{!static:%{static-libmpx:" LD_STATIC_OPTION " --whole-archive}\
-    -lmpx %{static-libmpx:--no-whole-archive " LD_DYNAMIC_OPTION \
+    %{!fuse-ld=gold:--push-state} --no-as-needed -lmpx\
+    %{fuse-ld=gold:--as-needed;:--pop-state}
%{static-libmpx:--no-whole-archive "\
+    LD_DYNAMIC_OPTION \
     LIBMPX_LIBS "}}}}"
 #else
 #define LIBMPX_SPEC "\
@@ -84,7 +86,8 @@ along with GCC; see the file COPYING3.  If not see
 %{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers:\
     %{static:-lmpxwrappers}\
     %{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION " --whole-archive}\
-    -lmpxwrappers %{static-libmpxwrappers:--no-whole-archive "\
+    %{!fuse-ld=gold:--push-state} --no-as-needed -lmpxwrappers\
+    %{fuse-ld=gold:--as-needed;:--pop-state}
%{static-libmpxwrappers:--no-whole-archive "\
     LD_DYNAMIC_OPTION "}}}}}"
 #else
 #define LIBMPXWRAPPERS_SPEC "\

2016-08-15 17:55 GMT+03:00 Alexander Ivchenko <aivch...@gmail.com>:
> To: debian-gcc@lists.debian.org
> From: aivch...@gmail.com
> Subject: gcc-as-needed.diff patch broke mpx support in GCC
>
> Package: gcc-5
> Version: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609
>
> gcc-5 from Ubuntu is configured with MPX support, but it is broken due
> to always-added linker option "-as-needed".
>
> This happens because usual invokation of gcc for mpx (e.g gcc
> -fcheck-pointer-bounds -mmpx hello.c) would implicitely add -lmpx and
> -lmpxwrappers during linking,
> but those libraries are not actually linked:
>
>> ldd a.out
>         linux-vdso.so.1 =>  (0x00007ffe725af000)
>         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3ed2513000)
>         /lib64/ld-linux-x86-64.so.2 (0x000055922a9eb000)
> (if we add -Wl,--no-as-needed:
>> ldd a.out
>         linux-vdso.so.1 =>  (0x00007ffe201e5000)
>         libmpx.so.0 => /usr/lib/x86_64-linux-gnu/libmpx.so.0
> (0x00007f9e76a76000)
>         libmpxwrappers.so.0 =>
> /usr/lib/x86_64-linux-gnu/libmpxwrappers.so.0 (0x00007f9e76873000)
>         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9e764a9000)
>         libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
> (0x00007f9e7628c000)
>         /lib64/ld-linux-x86-64.so.2 (0x000055f6e450d000))
>
> The fix for that would be to add the same guards for as-needed as for
> sanitizer libraries

Reply via email to