I tried to link head linux kernel and faced with fact that objcopy
refuses to proccess one of LLD linked binaries:
RELOCS arch/x86/realmode/rm/realmode.relocs OBJCOPY arch/x86/realmode/rm/realmode.bin
objcopy:arch/x86/realmode/rm/realmode.elf: Bad value
That happens because using script LLD produces 2 relocation sections
that point to the same output section. For example without this patch
output for testcase would be:
[ 1] .foo PROGBITS 0000000000000000 00001000 000000000000000a 0000000000000000 AX 0 0 1 [ 3] .rela.foo RELA 0000000000000000 00001010 0000000000000018 0000000000000018 I 6 1 8 [ 4] .rela.bar RELA 0000000000000000 00001028 0000000000000018 0000000000000018 I 6 1 8
(both .rela.foo and .rela.bar points to .foo).
And implementation of objcopy does not like that. AFAIK
generally tools does not support that. We already workaround this
for non-script case (see PR31986), so looks reasonable to do the same for script too,
since at least kernel uses it.