Alan Modra
|
a485e98ea0
|
Move ELF section headers to end of object file
Currently, section ordering differs a little for non-loaded reloc
sections output by ld -emit-relocs or ld -r and that after passing
such objects through objcopy. Not that it really matters, but it
would be better for a simple objcopy to produce an unchanged output
object file. Also, section headers are put somewhere in the middle of
the non-loaded sections, again slightly differently for ld and
objcopy. This patch fixes these discrepancies and puts section
headers last, which is where gold puts them, and is where
bfd_from_remote_memory wrongly assumed they will be found.
bfd/
* elf.c (assign_file_positions_except_relocs): Move section header
placement to..
(_bfd_elf_assign_file_positions_for_relocs): ..here. Make static.
* elf-bfd.h (_bfd_elf_assign_file_positions_for_relocs): Delete.
* elflink.c (bfd_elf_final_link): Don't call above function.
gas/testsuite/
* gas/arm/got_prel.d: Adjust for changed section header placement.
* gas/i386/ilp32/x86-64-size-1.d: Likewise.
* gas/i386/ilp32/x86-64-size-3.d: Likewise.
* gas/i386/ilp32/x86-64-size-5.d: Likewise.
* gas/i386/ilp32/x86-64-unwind.d: Likewise.
* gas/i386/size-1.d: Likewise.
* gas/i386/size-3.d: Likewise.
* gas/i386/x86-64-size-1.d: Likewise.
* gas/i386/x86-64-size-3.d: Likewise.
* gas/i386/x86-64-size-5.d: Likewise.
* gas/i386/x86-64-unwind.d: Likewise.
* gas/ia64/alias-ilp32.d: Likewise.
* gas/ia64/alias.d: Likewise.
* gas/ia64/group-1.d: Likewise.
* gas/ia64/group-2.d: Likewise.
* gas/ia64/secname-ilp32.d: Likewise.
* gas/ia64/secname.d: Likewise.
* gas/ia64/unwind-ilp32.d: Likewise.
* gas/ia64/unwind.d: Likewise.
* gas/mmix/bspec-1.d: Likewise.
* gas/mmix/bspec-2.d: Likewise.
* gas/mmix/byte-1.d: Likewise.
* gas/mmix/loc-1.d: Likewise.
* gas/mmix/loc-2.d: Likewise.
* gas/mmix/loc-3.d: Likewise.
* gas/mmix/loc-4.d: Likewise.
* gas/mmix/loc-5.d: Likewise.
* gas/tic6x/scomm-directive-4.d: Likewise.
ld/testsuite/
* ld-aarch64/emit-relocs-local-addend.d: Adjust for changed
section header placement.
* ld-aarch64/local-addend-r.d: Likewise.
* ld-mmix/bspec1.d: Likewise.
* ld-mmix/bspec2.d: Likewise.
* ld-mmix/local1.d: Likewise.
* ld-mmix/local3.d: Likewise.
* ld-mmix/local5.d: Likewise.
* ld-mmix/local7.d: Likewise.
* ld-mmix/undef-3.d: Likewise.
* ld-sh/sh64/crange3-cmpct.rd: Likewise.
* ld-sh/sh64/crange3-media.rd: Likewise.
* ld-sh/sh64/crangerel1.rd: Likewise.
* ld-sh/sh64/crangerel2.rd: Likewise.
* ld-tic6x/common.d: Likewise.
* ld-tic6x/shlib-1.rd: Likewise.
* ld-tic6x/shlib-1b.rd: Likewise.
* ld-tic6x/shlib-1r.rd: Likewise.
* ld-tic6x/shlib-1rb.rd: Likewise.
* ld-tic6x/shlib-app-1.rd: Likewise.
* ld-tic6x/shlib-app-1b.rd: Likewise.
* ld-tic6x/shlib-app-1r.rd: Likewise.
* ld-tic6x/shlib-app-1rb.rd: Likewise.
* ld-tic6x/shlib-noindex.rd: Likewise.
* ld-tic6x/static-app-1.rd: Likewise.
* ld-tic6x/static-app-1b.rd: Likewise.
* ld-tic6x/static-app-1r.rd: Likewise.
* ld-tic6x/static-app-1rb.rd: Likewise.
* ld-x86-64/ilp32-4.d: Likewise.
* ld-x86-64/split-by-file-nacl.rd: Likewise.
* ld-x86-64/split-by-file.rd: Likewise.
|
2014-09-11 00:15:51 +09:30 |
|
Jiong Wang
|
2e0488d33f
|
Enable elf_backend_rela_normal for AArch64
If we are generating non-relocatable object and --emit-relocs specified,
aarch64 ld is actually generating wrong addend for rela entry when
relocate against local symbol.
for example, for simple testcase
foo.c
===
const char * const a = "foo";
const char *
foo ()
{
return a;
}
bar.c
===
const char * const b = "bar";
const char * bar ()
{
return b;
}
aarch64-none-linux-gnu-ld --emit-relocs -o x.o foo.o bar.o
aarch64-none-linux-gnu-readelf -r x.o
... R_AARCH64_ADR_PRE 0000000000400018 .rodata + 0
... R_AARCH64_ADD_ABS 0000000000400018 .rodata + 0
... R_AARCH64_ADR_PRE 0000000000400018 .rodata + 0
... R_AARCH64_ADD_ABS 0000000000400018 .rodata + 0
while it should be:
... R_AARCH64_ADR_PRE 0000000000400018 .rodata + 0
... R_AARCH64_ADD_ABS 0000000000400018 .rodata + 0
... R_AARCH64_ADR_PRE 0000000000400018 .rodata + 10
... R_AARCH64_ADD_ABS 0000000000400018 .rodata + 10
bfd generic code could actually handle this properly, but only when
elf_backend_rela_normal set to '1'.
this patch enable this and remove those target specific hack.
bfd/
* elfnn-aarch64.c (elf_backend_rela_normal): Set to 1.
(elfNN_aarch64_relocate_section): Remove duplicated addend adjustment
when info->relocatable be true.
ld/testsuite/
* ld-aarch64/emit-relocs-local-addend-bar.s: * New source file.
* ld-aarch64/emit-relocs-local-addend-foo.s: * Likewise.
* ld-aarch64/emit-relocs-local-addend.d: * New testcase.
* ld-aarch64/local-addend-r.d: Likewise.
|
2014-07-08 09:29:06 +01:00 |
|