New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lld can't be used with GCC 7 #28788
Comments
You might want to try ld.lld instead. ld is the universal driver so you need to specify |
A little bit better. Now I got /export/build/gnu/gcc-test/build-x86_64-linux/./gcc/xgcc -B/export/build/gnu/gcc-test/build-x86_64-linux/./gcc/ -B/usr/gcc-7.0.0/x86_64-pc-linux-gnu/bin/ -B/usr/gcc-7.0.0/x86_64-pc-linux-gnu/lib/ -isystem /usr/gcc-7.0.0/x86_64-pc-linux-gnu/include -isystem /usr/gcc-7.0.0/x86_64-pc-linux-gnu/sys-include -O2 -O2 -g -DIN_GCC -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fpic -mlong-double-80 -DUSE_ELF_SYMVER -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc.map -o 32/libgcc_s.so.1.tmp -O2 -g -m32 -B./ _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o _powixf2_s.o _powitf2_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _multc3_s.o _divsc3_s.o _divdc3_s.o _divxc3_s.o _divtc3_s.o _bswapsi2_s.o _bswapdi2_s.o _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o _divdi3_s.o _moddi3_s.o _udivdi3_s.o _umoddi3_s.o _udiv_w_sdiv_s.o _udivmoddi4_s.o cpuinfo_s.o tf-signs_s.o sfp-exceptions_s.o addtf3_s.o divtf3_s.o eqtf2_s.o getf2_s.o letf2_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o floatunditf_s.o extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde-dip_s.o unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc && rm -f 32/libgcc_s.so && if [ -f 32/libgcc_s.so.1 ]; then mv -f 32/libgcc_s.so.1 32/libgcc_s.so.1.backup; else true; fi && mv 32/libgcc_s.so.1.tmp 32/libgcc_s.so.1 && (echo "/* GNU ld script"; echo " Use the shared library, but some functions are only in"; echo " the static library. */"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > 32/libgcc_s.so |
This seems to be a bug :) |
Would you mind passing "--reproduce foo" and attaching foo.cpio to this bug? |
File size is 5MB which is too big to upload. |
We generally recommend to upload on any ftp/fileserver or using something like google drive/dropbox if the attachment exceeds bugzilla limit. Can you please do that if it's not too much hassle? |
xz or bzip2 might put it under the limit. If you don't have a public place to put it, could you just email me the file? |
A testcase |
[hjl@gnu-tools-1 pr28414]$ make LD=ld x.so |
Another testcase z.so: file format elf32-i386 Disassembly of section .text: 00000170 <_start>: |
At least the reduced test case passes with r274690. Can you give gcc another try? |
r275003 gave me: /export/build/gnu/gcc-lld/build-x86_64-linux/./gcc/xgcc -B/export/build/gnu/gcc-lld/build-x86_64-linux/./gcc/ -B/usr/gcc-7.0.0/x86_64-pc-linux-gnu/bin/ -B/usr/gcc-7.0.0/x86_64-pc-linux-gnu/lib/ -isystem /usr/gcc-7.0.0/x86_64-pc-linux-gnu/include -isystem /usr/gcc-7.0.0/x86_64-pc-linux-gnu/sys-include -O2 -g -O2 -DIN_GCC -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fpic -mlong-double-80 -DUSE_ELF_SYMVER -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc.map -o ./libgcc_s.so.1.tmp -g -O2 -B./ _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o _powixf2_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _divsc3_s.o _divdc3_s.o _divxc3_s.o _bswapsi2_s.o _bswapdi2_s.o _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o _divdi3_s.o _moddi3_s.o _udivdi3_s.o _umoddi3_s.o _udiv_w_sdiv_s.o _udivmoddi4_s.o cpuinfo_s.o sfp-exceptions_s.o addtf3_s.o divtf3_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o floatunditf_s.o fixtfti_s.o fixunstfti_s.o floattitf_s.o floatuntitf_s.o extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o getf2_s.o letf2_s.o eqtf2_s.o _divtc3_s.o _multc3_s.o _powitf2_s.o enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde-dip_s.o unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc && rm -f ./libgcc_s.so && if [ -f ./libgcc_s.so.1 ]; then mv -f ./libgcc_s.so.1 ./libgcc_s.so.1.backup; else true; fi && mv ./libgcc_s.so.1.tmp ./libgcc_s.so.1 && (echo "/* GNU ld script"; echo " Use the shared library, but some functions are only in"; echo " the static library. */"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > ./libgcc_s.so |
Interesting. I fist thought it would be the archive member lookup logic, but the only reference to libgcc is clearly after the .o files. Can you put the cpio created by "--reproduce foo" somewhere? |
A testcase |
Further reduced (as lit test case) repro.tar is here: https://reviews.llvm.org/F3117406 It seems that LLD does not recognize that %t.o defines test/ELF/Inputs/pr28414.s .global foo test/ELF/pr28414.s // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o .global _start |
Further reduced: test/ELF/pr28414.s // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o .global _start |
This case was fixed in r306813, not sure if it is enough to close whole PR. |
lld r306813 still fails. |
A testcase
|
Thanks for sample ! Possible patch posted here: https://reviews.llvm.org/D35059 |
Committed, r307364. |
Is this fixed then? |
Initial issue is about 1 year old, honestly I am a bit lost what we are fixing here. |
Version info is wrong: [hjl@gnu-skl-1 pr28414b]$ cat x.c asm (".globl __netf2_compat"); asm (".symver __netf2_compat,__netf2@GCC_3.0"); void Version symbols section '.gnu.version' contains 3 entries: Version definition section '.gnu.version_d' contains 3 entries: [hjl@gnu-skl-1 pr28414b]$ make LD=ld Version symbols section '.gnu.version' contains 5 entries: Version definition section '.gnu.version_d' contains 3 entries: |
So this is issue you are talking about and nothing else wrong here, right ? If so - that is probably not an issue, because we removed support of |
Is lld designed to be compatible with ld in term of symbol versioning? |
It should be mostly compatible, so we need a bit more information to decide. According to https://www.akkadia.org/drepper/dsohowto.pdf "The fourth point, the VERS 1.0 version being referred to in the VERS 2.0 definition, is not really important in symbol versioning. It marks the predecessor relationship of the two versions and it is done to maintain the similar- ities with Solaris’ internal versioning. It does not cause any problem it might in fact be useful to a human reader so predecessors should always be mentioned." If that is still the case, then we will probably keep the difference from BFD. If something changed (or that paragraph was wrong to begin with), then we can change lld. |
O tried removing parent version info in glibc by hand and it doesn't seem to Version definitions: includes useful info for ABI versions. It shows that no versions are skipped. |
BTW, I am OK to close this bug. But it is probably means that there will be |
r307364 claims it fixes the last testcase from this PR, but that change breaks linking FreeBSD/arm64. See details in https://reviews.llvm.org/rL307364 |
As of r308492 every issue listed here other than version references has been fixed. Since dropping support for version references was an explicit decision, I am closing this for now. |
Extended Description
On Linux/x86-64, when GCC 7 configured with
/export/gnu/import/git/sources/gcc/configure --enable-languages=c,c++,fortran --disable-bootstrap --enable-libmpx --with-ld=/export/build/gnu/llvm-clang/release/opt/llvm/master/bin/lld --with-plugin-ld=/export/build/gnu/llvm-clang/release/opt/llvm/master/bin/lld --prefix=/usr/gcc-7.0.0 --with-local-prefix=/usr/local --enable-gnu-indirect-function --with-fpmath=sse
I got
mkdir -p -- 32
/export/build/gnu/gcc-test/build-x86_64-linux/./gcc/xgcc -B/export/build/gnu/gcc-test/build-x86_64-linux/./gcc/ -B/usr/gcc-7.0.0/x86_64-pc-linux-gnu/bin/ -B/usr/gcc-7.0.0/x86_64-pc-linux-gnu/lib/ -isystem /usr/gcc-7.0.0/x86_64-pc-linux-gnu/include -isystem /usr/gcc-7.0.0/x86_64-pc-linux-gnu/sys-include -O2 -O2 -g -DIN_GCC -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fpic -mlong-double-80 -DUSE_ELF_SYMVER -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc.map -o 32/libgcc_s.so.1.tmp -O2 -g -m32 -B./ _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o _powixf2_s.o _powitf2_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _multc3_s.o _divsc3_s.o _divdc3_s.o _divxc3_s.o _divtc3_s.o _bswapsi2_s.o _bswapdi2_s.o _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o _divdi3_s.o _moddi3_s.o _udivdi3_s.o _umoddi3_s.o _udiv_w_sdiv_s.o _udivmoddi4_s.o cpuinfo_s.o tf-signs_s.o sfp-exceptions_s.o addtf3_s.o divtf3_s.o eqtf2_s.o getf2_s.o letf2_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o floatunditf_s.o extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde-dip_s.o unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc && rm -f 32/libgcc_s.so && if [ -f 32/libgcc_s.so.1 ]; then mv -f 32/libgcc_s.so.1 32/libgcc_s.so.1.backup; else true; fi && mv 32/libgcc_s.so.1.tmp 32/libgcc_s.so.1 && (echo "/* GNU ld script"; echo " Use the shared library, but some functions are only in"; echo " the static library. */"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > 32/libgcc_s.so
-flavor option is missing. Available flavors are gnu, darwin or link.
collect2: error: ld returned 1 exit status
Makefile:945: recipe for target 'libgcc_s.so' failed
make[5]: *** [libgcc_s.so] Error 1
make[5]: Leaving directory '/export/build/gnu/gcc-test/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgcc'
The text was updated successfully, but these errors were encountered: