Dynamic TLS GOT entries would not be relocated.

Forgot to set should_relocate to TRUE in case of GOT and TLS relocations of
undefined symbols for shared libraries.
In dynamic libraries if symbol is not known the instruction relocation would
not be resolved to point to the respective .got entry.
A test was created to detect similar future mistakes.

bfd/ChangeLog:

Cupertino Miranda  <cmiranda@synopsys.com>

	* elf32-arc.c (elf_arc_relocate_section): Changed. Set should_relocate
	to TRUE for GOT and TLS relocs.

ld/ChangeLog:

Cupertino Miranda  <cmiranda@synopsys.com>

	* ld/testsuite/ld-arc/tls_gd-01.s: Added a testcase for this patch.
	* ld/testsuite/ld-arc/tls_gd-01.d: Likewise.
This commit is contained in:
Cupertino Miranda 2016-07-21 15:32:35 +02:00
parent 65b94e9097
commit 980aa3e6df
5 changed files with 32 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2016-08-26 Cupertino Miranda <cmiranda@synopsys.com>
* elf32-arc.c (elf_arc_relocate_section): Changed. Set should_relocate
to TRUE for GOT and TLS relocs.
2016-08-26 Cupertino Miranda <cmiranda@synospsys.com>
* elf32-arc.c (elf_arc_finish_dynamic_sections): Changed.

View File

@ -1374,6 +1374,8 @@ elf_arc_relocate_section (bfd * output_bfd,
if ((is_reloc_for_GOT (howto)
|| is_reloc_for_TLS (howto)))
{
reloc_data.should_relocate = TRUE;
struct got_entry **list
= get_got_entry_list_for_symbol (output_bfd, r_symndx, h);

View File

@ -1,3 +1,8 @@
2016-08-26 Cupertino Miranda <cmiranda@synopsys.com>
* ld/testsuite/ld-arc/tls_gd-01.s: Added a testcase for this patch.
* ld/testsuite/ld-arc/tls_gd-01.d: Likewise.
2016-08-26 Cupertino Miranda <cmiranda@synopsys.com>
* testsuite/ld-arc/tls_ie-01.s: Added to verify associated fix.

View File

@ -0,0 +1,13 @@
#source: tls_gd-01.s
#as: -mcpu=arc700
#ld: -shared
#objdump: -d
[^:]+: file format elf32-littlearc
Disassembly of section \.text:
[0-9a-f]+ <__start>:
[0-9a-f]+: 2700 7f80 0000 2080 add r0,pcl,0x2080
[0-9a-f]+: 2700 7f80 0000 2080 add r0,pcl,0x2080

View File

@ -0,0 +1,7 @@
.text
.align 4
.global __start
__start:
add r0, pcl, @baz@tlsgd
add r0, pcl, @bar@tlsgd