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

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


On Sun, Mar 29, 2015 at 7:34 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> 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.

We need something like libgcc_nonshared.a, which contains cpuinfo.o, and
link together with -lgcc_s when creating executable or DSO.


-- 
H.J.



More information about the Gcc-patches mailing list