https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101115
Bug ID: 101115 Summary: ld.bfd: warning: .init_array section has zero size Product: gcc Version: 11.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: other Assignee: unassigned at gcc dot gnu.org Reporter: judge.packham at gmail dot com Target Milestone: --- When cross-compiling for arm using GCC 11.1.0 the linker complains that .init_array and .fini_array have a zero size. x-tool@063c4281c760:~$ rm -f test test.o; make CC=arm-unknown-linux-gnueabi-gcc test arm-unknown-linux-gnueabi-gcc test.c -o test /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/bin/ld.bfd: warning: .init_array section has zero size /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/bin/ld.bfd: warning: .fini_array section has zero size The program being compiled is a simple "hello world". I've also seen the same problem with GCC 10.3.0. I do not see the problem with GCC 9.3.0. Based on some debugging with the help of the bintutils mailing list[1] it seems that crtbegin.o has a zero sized init_array/.fini_array find . -name 'crtbegin.o' | xargs readelf -SW File: ./x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/crtbegin.o There are 13 section headers, starting at offset 0x2bc: Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 00000000 000034 000000 00 AX 0 0 1 [ 2] .data PROGBITS 00000000 000034 000004 00 WA 0 0 4 [ 3] .bss NOBITS 00000000 000038 000000 00 WA 0 0 1 [ 4] .rodata PROGBITS 00000000 000038 000090 00 A 0 0 4 [ 5] .init_array INIT_ARRAY 00000000 0000c8 000000 04 WA 0 0 1 [ 6] .fini_array FINI_ARRAY 00000000 0000c8 000000 04 WA 0 0 1 [ 7] .comment PROGBITS 00000000 0000c8 00002f 01 MS 0 0 1 [ 8] .note.GNU-stack PROGBITS 00000000 0000f7 000000 00 0 0 1 [ 9] .ARM.attributes ARM_ATTRIBUTES 00000000 0000f7 000031 00 0 0 1 [10] .symtab SYMTAB 00000000 000128 0000f0 10 11 14 4 [11] .strtab STRTAB 00000000 000218 00002e 00 0 0 1 [12] .shstrtab STRTAB 00000000 000246 000075 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings), I (info), L (link order), O (extra OS processing required), G (group), T (TLS), C (compressed), x (unknown), o (OS specific), E (exclude), y (purecode), p (processor specific) With GCC 9.3.0 it does not File: ./x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/9.3.0/crtbegin.o There are 16 section headers, starting at offset 0x518: Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 00000000 000034 000090 00 AX 0 0 4 [ 2] .rel.text REL 00000000 000444 000038 08 I 13 1 4 [ 3] .data PROGBITS 00000000 0000c4 000004 00 WA 0 0 4 [ 4] .bss NOBITS 00000000 0000c8 000001 00 WA 0 0 1 [ 5] .init_array INIT_ARRAY 00000000 0000c8 000004 04 WA 0 0 4 [ 6] .rel.init_array REL 00000000 00047c 000008 08 I 13 5 4 [ 7] .fini_array FINI_ARRAY 00000000 0000cc 000004 04 WA 0 0 4 readelf: Warning: [ 8]: Info field (7) should index a relocatable section. [ 8] .rel.fini_array REL 00000000 000484 000008 08 I 13 7 4 [ 9] .tm_clone_table PROGBITS 00000000 0000d0 000000 00 WA 0 0 4 [10] .comment PROGBITS 00000000 0000d0 00002e 01 MS 0 0 1 [11] .note.GNU-stack PROGBITS 00000000 0000fe 000000 00 0 0 1 [12] .ARM.attributes ARM_ATTRIBUTES 00000000 0000fe 00002a 00 0 0 1 [13] .symtab SYMTAB 00000000 000128 000220 10 14 30 4 [14] .strtab STRTAB 00000000 000348 0000fa 00 0 0 1 [15] .shstrtab STRTAB 00000000 00048c 000089 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings), I (info), L (link order), O (extra OS processing required), G (group), T (TLS), C (compressed), x (unknown), o (OS specific), E (exclude), y (purecode), p (processor specific) I'm also tracking this problem on the crosstool-ng issue tracker[2] there is a little bit more info there. I'll try to keep these two issues in sync so no need to follow the link. For completeness here's the output with the -v flag passed to GCC. x-tool@063c4281c760:~$ rm -f test test.o; make CC=arm-unknown-linux-gnueabi-gcc CFLAGS=-v test arm-unknown-linux-gnueabi-gcc -v test.c -o test Using built-in specs. COLLECT_GCC=arm-unknown-linux-gnueabi-gcc COLLECT_LTO_WRAPPER=/home/x-tool/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm-unknown-linux-gnueabi/11.1.0/lto-wrapper Target: arm-unknown-linux-gnueabi Configured with: /home/x-tool/.build/arm-unknown-linux-gnueabi/src/gcc/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-unknown-linux-gnueabi --prefix=/home/x-tool/x-tools/arm-unknown-linux-gnueabi --exec_prefix=/home/x-tool/x-tools/arm-unknown-linux-gnueabi --with-sysroot=/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot --enable-languages=c,c++ --with-float=soft --with-pkgversion='crosstool-NG 1.24.0.373_5ab29fb' --disable-sjlj-exceptions --enable-__cxa_atexit --disable-tm-clone-registry --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --disable-libmpx --with-gmp=/home/x-tool/.build/arm-unknown-linux-gnueabi/buildtools --with-mpfr=/home/x-tool/.build/arm-unknown-linux-gnueabi/buildtools --with-mpc=/home/x-tool/.build/arm-unknown-linux-gnueabi/buildtools --with-isl=/home/x-tool/.build/arm-unknown-linux-gnueabi/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --enable-plugin --enable-gold --disable-nls --disable-multilib --with-local-prefix=/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot --enable-long-long Thread model: posix Supported LTO compression algorithms: zlib gcc version 11.1.0 (crosstool-NG 1.24.0.373_5ab29fb) COLLECT_GCC_OPTIONS='-v' '-o' 'test' '-mcpu=arm10tdmi' '-mfloat-abi=soft' '-mtls-dialect=gnu' '-marm' '-march=armv5t' /home/x-tool/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm-unknown-linux-gnueabi/11.1.0/cc1 -quiet -v test.c -quiet -dumpbase test.c -dumpbase-ext .c -mcpu=arm10tdmi -mfloat-abi=soft -mtls-dialect=gnu -marm -march=armv5t -version -o /tmp/cc4QsweE.s GNU C17 (crosstool-NG 1.24.0.373_5ab29fb) version 11.1.0 (arm-unknown-linux-gnueabi) compiled by GNU C version 8.3.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.0, isl version isl-0.24-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/include" #include "..." search starts here: #include <...> search starts here: /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/include /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/include-fixed /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/include /home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/include End of search list. GNU C17 (crosstool-NG 1.24.0.373_5ab29fb) version 11.1.0 (arm-unknown-linux-gnueabi) compiled by GNU C version 8.3.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.0, isl version isl-0.24-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: e9288bd94a72e0d2532aee1fd8ebe463 COLLECT_GCC_OPTIONS='-v' '-o' 'test' '-mcpu=arm10tdmi' '-mfloat-abi=soft' '-mtls-dialect=gnu' '-marm' '-march=armv5t' /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/bin/as -v -march=armv5t -mfloat-abi=soft -meabi=5 -o /tmp/ccjAz6OZ.o /tmp/cc4QsweE.s GNU assembler version 2.36.1 (arm-unknown-linux-gnueabi) using BFD version (crosstool-NG 1.24.0.373_5ab29fb) 2.36.1 COMPILER_PATH=/home/x-tool/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm-unknown-linux-gnueabi/11.1.0/:/home/x-tool/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm-unknown-linux-gnueabi/11.1.0/:/home/x-tool/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm-unknown-linux-gnueabi/:/home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/:/home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/:/home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/bin/ LIBRARY_PATH=/home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/:/home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/lib/:/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/lib/:/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-o' 'test' '-mcpu=arm10tdmi' '-mfloat-abi=soft' '-mtls-dialect=gnu' '-marm' '-march=armv5t' '-dumpdir' 'test.' /home/x-tool/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm-unknown-linux-gnueabi/11.1.0/collect2 -plugin /home/x-tool/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm-unknown-linux-gnueabi/11.1.0/liblto_plugin.so -plugin-opt=/home/x-tool/x-tools/arm-unknown-linux-gnueabi/libexec/gcc/arm-unknown-linux-gnueabi/11.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUgJcql.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot --eh-frame-hdr -dynamic-linker /lib/ld-linux.so.3 -X -m armelf_linux_eabi -o test /home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/lib/crt1.o /home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/lib/crti.o /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/crtbegin.o -L/home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0 -L/home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/lib -L/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/lib -L/home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/lib /tmp/ccjAz6OZ.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/crtend.o /home/x-tool/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/lib/crtn.o /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/bin/ld.bfd: warning: .init_array section has zero size /home/x-tool/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/11.1.0/../../../../arm-unknown-linux-gnueabi/bin/ld.bfd: warning: .fini_array section has zero size COLLECT_GCC_OPTIONS='-v' '-o' 'test' '-mcpu=arm10tdmi' '-mfloat-abi=soft' '-mtls-dialect=gnu' '-marm' '-march=armv5t' '-dumpdir' 'test.' -- [1] - https://sourceware.org/pipermail/binutils/2021-June/116962.html [2] - https://github.com/crosstool-ng/crosstool-ng/issues/1531