https://sourceware.org/bugzilla/show_bug.cgi?id=23930
Bug ID: 23930 Summary: Problems linking objectfiles optimized for size (-Os) Product: binutils Version: 2.29 Status: NEW Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: asavkov at redhat dot com Target Milestone: --- Created attachment 11416 --> https://sourceware.org/bugzilla/attachment.cgi?id=11416&action=edit Reproducer The issue was found while building linux kernel with CONFIG_CC_OPTIMIZE_FOR_SIZE (adds -Os to cflags) and KCFLAGS="-ffunction-sections", while linking vmlinux I get the fillowing warnings and error: ld: warning: dot moved backwards before `.text.__startup_secondary_64' ld: warning: dot moved backwards before `.text.__startup_secondary_64' ld: final link failed: File truncated make: *** [Makefile:1032: vmlinux] Error 1 .iplt section seem to cause issues during linking. This is only reproducible when vmas and lmas are different, failing section sh_addralign is 1(caused by -Os) and .iplt is before failing section and the section offset needs to be just right. I am attaching a small reproducer that I managed to put together based on linux kernel linker script [1]. This is what I see happening: .iplt does not have ignored flag set on first pass of one_lang_size_sections_pass() but has it set on subsequent passes, this results in dot of the following section moving backwards, resulting in a warning and section lma not being set properly which later results in s_start being set to a negative value in assign_file_positions_for_load_sections() yielding a "File truncated" error. I have bisected this issue to the following commit: 38b123494b "x86-64: Improve PLT generation and synthetic PLT symbols" [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/kernel/vmlinux.lds.S -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils