On 27 January 2016 at 18:49, Jim Wilson jim.wilson@linaro.org wrote:
On Wed, Jan 27, 2016 at 9:30 AM, Richard Earnshaw Richard.Earnshaw@arm.com wrote:
Long calls would probably solve the problem, but would likely be horribly expensive in performance.
An allyesconfig is presumably only to verify that you haven't accidentally broken any build config with a patch, so performance should not be a concern.
The best solution would be to have an option to prevent ld -r from merging like-named sections (instead just aggregating multiple sections with similar names into one object file). This is possible in ELF.
Another way to do this is to make an archive file instead of using ld -r, and then use --whole-archive <archivefile> --no-whole-archive. That would avoid the need for linker changes.
While it might be possible to make an ELF file with multiple sections with the same name, that would likely confuse lots of tools, and require cascading changes, which could get ugly.
Jim
I've just tried with-ffunction-sections, but I got: drivers/built-in.o:(.text.fixup+0x264): relocation truncated to fit: R_ARM_JUMP24 against `.text.armada_gem_pwrite_ioctl' drivers/built-in.o:(.text.fixup+0x270): relocation truncated to fit: R_ARM_JUMP24 against `.text.armada_gem_pwrite_ioctl' drivers/built-in.o:(.text.fixup+0x278): relocation truncated to fit: R_ARM_JUMP24 against `.text.scsi_ioctl' drivers/built-in.o:(.text.fixup+0x280): relocation truncated to fit: R_ARM_JUMP24 against `.text.scsi_ioctl' drivers/built-in.o:(.text.fixup+0x288): relocation truncated to fit: R_ARM_JUMP24 against `.text.sg_ioctl' drivers/built-in.o:(.text.fixup+0x290): relocation truncated to fit: R_ARM_JUMP24 against `.text.sg_ioctl' drivers/built-in.o:(.text.fixup+0x298): relocation truncated to fit: R_ARM_JUMP24 against `.text.sg_ioctl' drivers/built-in.o:(.text.fixup+0x2a0): relocation truncated to fit: R_ARM_JUMP24 against `.text.sg_ioctl' drivers/built-in.o:(.text.fixup+0x2a8): relocation truncated to fit: R_ARM_JUMP24 against `.text.sg_ioctl' drivers/built-in.o:(.text.fixup+0x2b0): relocation truncated to fit: R_ARM_JUMP24 against `.text.sg_ioctl' drivers/built-in.o:(.text.fixup+0x2b8): additional relocation overflows omitted from the output
Now, with -mlong-calls, I got: drivers/built-in.o: In function `atom_op_mul': sunxi_sid.c:(.text+0xa2c334): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `atom_op_move': sunxi_sid.c:(.text+0xa2c4d4): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `atom_op_mask': sunxi_sid.c:(.text+0xa2c830): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `atom_op_div': sunxi_sid.c:(.text+0xa2cb1c): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `atom_op_compare': sunxi_sid.c:(.text+0xa2cd10): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `atom_op_and': sunxi_sid.c:(.text+0xa2cfa0): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `atom_op_add': sunxi_sid.c:(.text+0xa2d1e0): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `atom_op_delay': sunxi_sid.c:(.text+0xa2d41c): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `atom_op_jump': sunxi_sid.c:(.text+0xa2d624): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `amdgpu_atom_execute_table_locked': sunxi_sid.c:(.text+0xa2da2c): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o
Which is surprising. But maybe I didn't add -mlong-calls where I should have and some files were compiled without it, or there are asm fragments using direct calls?
So... it looks like there is no straight forward route.
Christophe.