Hi, I use buildroot to create a cross-toolchain targeting blackfin. Default is the usage of gcc 4.5.4 and binutils 2.22. This works fine. When I reconfigure to use binutils 2.23.2 or binutils 2.24 the build fails with a log of failures like this one: bfin-buildroot-linux-uclibc/bin/ld: fde encoding in _divdi3_s.o(.eh_frame) prevents .eh_frame_hdr table being created. Seems like a regression or do we need some special options for gcc when switching to a newer binutils version? I can provide full logs, if required. Thanks in advance Waldemar
you need to always provide logs as attachments the warnings you refer to are, iirc, just warnings. there is most likely an unrelated error message buried in there.
Created attachment 8179 [details] buildroot log
Created attachment 8180 [details] buildroot config
Hi, I added the buildroot config and full log. best regards Waldemar
here's the failure: /home/wbx/buildroot/output/host/usr/bfin-buildroot-linux-uclibc/bin/ld: BFD (GNU Binutils) 2.25 assertion fail elf32-bfin.c:4457
I think the assert might be not required. I used git bisect and found that following commit made the assert to be fatal for toolchain creation: 2b56b3f35a62c569ff20889aa22aef7fde73f81d When I just simply remove the assert I can just build a toolchain and a Linux system including uClibc-ng and buildroot boots up fine in the GDB simulator. (FPIC) So is this assert really required? diff -Nur binutils-2.26.orig/bfd/elf32-bfin.c binutils-2.26/bfd/elf32-bfin.c --- binutils-2.26.orig/bfd/elf32-bfin.c 2015-11-13 09:27:40.000000000 +0100 +++ binutils-2.26/bfd/elf32-bfin.c 2016-02-08 01:14:15.360648022 +0100 @@ -4456,9 +4456,6 @@ if (bfinfdpic_got_section (info)) { - BFD_ASSERT (bfinfdpic_gotrel_section (info)->size - == (bfinfdpic_gotrel_section (info)->reloc_count - * sizeof (Elf32_External_Rel))); if (bfinfdpic_gotfixup_section (info)) {
Hi Waldemar, > I think the assert might be not required. I think that it is needed. At the very least I would like to know why the assertion is wrong before removing it. Please can you create a testcase that we can use to reproduce the problem ? It would also be very helpful to know if the problem still persists with the current mainline development binutils sources, and not just the old 2.24 sources. Cheers Nick
Hi Nick, it still happens with gcc/binutils git from today: /bin/bash /home/wbx/bfin/toolchain_build_sim-bfin_uclibc-ng_bf512/w-gcc-git-1/gcc-git/libgcc/../mkinstalldirs . /home/wbx/bfin/toolchain_build_sim-bfin_uclibc-ng_bf512/w-gcc-git-1/gcc-git-final/./gcc/xgcc -B/home/wbx/bfin/toolchain_build_sim-bfin_uclibc-ng_bf512/w-gcc-git-1/gcc-git-final/./gcc/ -B/home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ -B/home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/lib/ -isystem /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/include -isystem /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/sys-include --sysroot=/home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/../../target_sim-bfin_uclibc-ng_bf512 -O2 -fwrapv -fno-ident -mcpu=bf512 -Os -pipe -fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fPIC -fPIC -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 -fwrapv -fno-ident -mcpu=bf512 -Os -pipe -fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables -B./ _divsi3_s.o _udivsi3_s.o _umodsi3_s.o _modsi3_s.o _muldi3_s.o _umulsi3_highpart_s.o _smulsi3_highpart_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 _fixtfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _fixunstfdi_s.o _floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatditf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o _floatunditf_s.o _divdi3_s.o _moddi3_s.o _udivdi3_s.o _umoddi3_s.o _udiv_w_sdiv_s.o _udivmoddi4_s.o _pack_sf_s.o _unpack_sf_s.o _addsub_sf_s.o _mul_sf_s.o _div_sf_s.o _fpcmp_parts_sf_s.o _compare_sf_s.o _eq_sf_s.o _ne_sf_s.o _gt_sf_s.o _ge_sf_s.o _lt_sf_s.o _le_sf_s.o _unord_sf_s.o _si_to_sf_s.o _sf_to_si_s.o _negate_sf_s.o _make_sf_s.o _sf_to_df_s.o _thenan_sf_s.o _sf_to_usi_s.o _usi_to_sf_s.o _pack_df_s.o _unpack_df_s.o _addsub_df_s.o _mul_df_s.o _div_df_s.o _fpcmp_parts_df_s.o _compare_df_s.o _eq_df_s.o _ne_df_s.o _gt_df_s.o _ge_df_s.o _lt_df_s.o _le_df_s.o _unord_df_s.o _si_to_df_s.o _df_to_si_s.o _negate_df_s.o _make_df_s.o _df_to_sf_s.o _thenan_df_s.o _df_to_usi_s.o _usi_to_df_s.o enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde_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 && ln -s libgcc_s.so.1 ./libgcc_s.so /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in _divdi3_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in _moddi3_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in _udivdi3_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in _umoddi3_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in _udiv_w_sdiv_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in _udivmoddi4_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in unwind-dw2_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in unwind-dw2_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in unwind-dw2_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: FDE encoding in unwind-dw2_s.o(.eh_frame) prevents .eh_frame_hdr table being created. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: Further warnings about FDE encoding preventing .eh_frame_hdr generation dropped. /home/wbx/bfin/toolchain_sim-bfin_uclibc-ng_bf512/usr/bfin-openadk-linux-uclibc/bin/ld: BFD (GNU Binutils) 2.26.51.20160319 assertion fail elf32-bfin.c:4461 collect2: error: ld returned 1 exit status make[8]: *** [libgcc_s.so] Error 1 make[7]: *** [all-target-libgcc] Error 2 make[6]: *** [all] Error 2 make[5]: *** [/home/wbx/bfin/toolchain_build_sim-bfin_uclibc-ng_bf512/w-gcc-git-1/gcc-git/.compiled] Error 2 make[4]: *** [gcc-compile] Error 2 make[3]: *** [toolchain/final] Error 2 make[2]: *** [world] Error 2 I am not sure how to make a simple test case out of it. best regards Waldemar
Created attachment 9118 [details] Proposed patch Hi Waldemar, Does this patch fix the problem ? I still do not like removing this assert, or even changing it in the way that this patch changes it, without knowing what is really going on. But at least maybe this change will let you carry on building your toolchains whilst we try to find a test case that can let us investigate the problem properly. Cheers Nick
Hi, yes, this change works for me. Tested with binutils 2.26 and git. best regards Waldemar
The master branch has been updated by Nick Clifton <nickc@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ed3056ebdb9795446157af03d3e08fbb93c1b01d commit ed3056ebdb9795446157af03d3e08fbb93c1b01d Author: Nick Clifton <nickc@redhat.com> Date: Tue Mar 29 10:24:16 2016 +0100 Relax assertion in BFIN linker to allow for discard GOT relocs. PR 17334 * elf32-bfin.c (elf32_bfinfdpic_finish_dynamic_sections): Relax assertion on the size of the got section to allow it to be bigger than the number of relocs.
.