PATCH] PR target/65612: Multiversioning doesn't work with DSO nor PIE

H.J. Lu hjl.tools@gmail.com
Mon Mar 30 02:34:00 GMT 2015


On Sun, Mar 29, 2015 at 7:25 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> We shouldn't call external function, __cpu_indicator_init, while an object
> is being relocated since its .got.plt section hasn't been updated.  It
> works for non-PIE since no update on .got.plt section is required.  This
> patch hides __cpu_indicator_init/__cpu_model from linker to force linker
> to resolve __cpu_indicator_init/__cpu_model to their hidden definitions
> in libgcc.a while providing backward binary compatibility.
>
> OK for trunk, 4.9 and 4.9 branches?
>
> Thanks.
>
>
> H.J.
> ---
> libgcc/
>
>         PR target/65612
>         * config/i386/cpuinfo.c (__cpu_model): Initialize.
>         (__cpu_indicator_init@GCC_4.8.0): New.
>         (__cpu_model@GCC_4.8.0): Likewise.
>
> gcc/testsuite/
>
>         PR target/65612
>         * g++.dg/ext/mv18.C: New test.
>         * g++.dg/ext/mv19.C: Likewise.
>         * g++.dg/ext/mv20.C: Likewise.

It doesn' work for shared C++ library:

/export/build/gnu/gcc-x32/release/usr/gcc-5.0.0-x32/bin/g++ -O2    -c
-o main.o main.cc
/export/build/gnu/gcc-x32/release/usr/gcc-5.0.0-x32/bin/g++ -shared
-fPIC -O2  -o libmv20.so mv20.cc
/export/build/gnu/gcc-x32/release/usr/gcc-5.0.0-x32/bin/g++ -O2  -o x
main.o libmv20.so -Wl,-R,.
/usr/local/bin/ld: x: hidden symbol `__cpu_model' in
/export/build/gnu/gcc-x32/release/usr/gcc-5.0.0-x32/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.0.0/libgcc.a(cpuinfo.o)
is referenced by DSO
/usr/local/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
Makefile:12: recipe for target 'x' failed
make: *** [x] Error 1
[hjl@gnu-tools-1 pr65612]$

-- 
H.J.



More information about the Gcc-patches mailing list