[AArch64] Create .got section if _GLOBAL_OFFSET_TABLE_ referenced
2016-03-07 Jiong Wang <jiong.wang@arm.com> bfd/ * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Always create .got section if the symbol "_GLOBAL_OFFSET_TABLE_" referenced. ld/ * testsuite/ld-aarch64/implicit_got_section_1.s: New test source file. * testsuite/ld-aarch64/implicit_got_section_1.d: New test expected result. * testsuite/ld-aarch64/aarch64-elf.exp: Run new test.
This commit is contained in:
parent
f86f586366
commit
18f822a08f
6 changed files with 37 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2016-03-07 Jiong Wang <jiong.wang@arm.com>
|
||||
|
||||
* elfnn-aarch64.c (elfNN_aarch64_check_relocs): Always create .got
|
||||
section if the symbol "_GLOBAL_OFFSET_TABLE_" is referenced.
|
||||
|
||||
2016-03-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/19579
|
||||
|
|
|
@ -7080,6 +7080,22 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||
|
||||
if (h != NULL)
|
||||
{
|
||||
/* If a relocation refers to _GLOBAL_OFFSET_TABLE_, create the .got.
|
||||
This shows up in particular in an R_AARCH64_PREL64 in large model
|
||||
when calculating the pc-relative address to .got section which is
|
||||
used to initialize the gp register. */
|
||||
if (h->root.root.string
|
||||
&& strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
|
||||
{
|
||||
if (htab->root.dynobj == NULL)
|
||||
htab->root.dynobj = abfd;
|
||||
|
||||
if (! aarch64_elf_create_got_section (htab->root.dynobj, info))
|
||||
return FALSE;
|
||||
|
||||
BFD_ASSERT (h == htab->root.hgot);
|
||||
}
|
||||
|
||||
/* Create the ifunc sections for static executables. If we
|
||||
never see an indirect function symbol nor we are building
|
||||
a static executable, those sections will be empty and
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2016-03-07 Jiong Wang <jiong.wang@arm.com>
|
||||
|
||||
* testsuite/ld-aarch64/implicit_got_section_1.s: New test source file.
|
||||
* testsuite/ld-aarch64/implicit_got_section_1.d: New test expected
|
||||
result.
|
||||
* testsuite/ld-aarch64/aarch64-elf.exp: Run new test.
|
||||
|
||||
2016-03-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* testsuite/ld-i386/i386.exp: Link tmpdir/copyreloc-main.o
|
||||
|
|
|
@ -229,6 +229,7 @@ run_dump_test "gc-tls-relocs"
|
|||
run_dump_test "gc-plt-relocs"
|
||||
run_dump_test "gc-relocs-257-dyn"
|
||||
run_dump_test "gc-relocs-257"
|
||||
run_dump_test "implicit_got_section_1"
|
||||
run_dump_test "pr17415"
|
||||
run_dump_test "tprel_g2_overflow"
|
||||
run_dump_test "tprel_add_lo12_overflow"
|
||||
|
|
5
ld/testsuite/ld-aarch64/implicit_got_section_1.d
Normal file
5
ld/testsuite/ld-aarch64/implicit_got_section_1.d
Normal file
|
@ -0,0 +1,5 @@
|
|||
#source: implicit_got_section_1.s
|
||||
#ld: -e0
|
||||
#readelf: -r
|
||||
|
||||
There are no relocations in this file.
|
3
ld/testsuite/ld-aarch64/implicit_got_section_1.s
Normal file
3
ld/testsuite/ld-aarch64/implicit_got_section_1.s
Normal file
|
@ -0,0 +1,3 @@
|
|||
.text
|
||||
test:
|
||||
.word _GLOBAL_OFFSET_TABLE_ - .
|
Loading…
Reference in a new issue