mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
[ARC] Fixed issue with DTSOFF relocs.
Inserted offset in final section in the GOT entry of type DTSOFF soon to be relocated by the dynamic loader. bfd/ 2018-09-06 Cupertino Miranda <cmiranda@synopsys.com> * arc-got.h (relocate_fix_got_relocs_for_got_info): Changed. Take TLS section alignment in consideration for this relocation. * elf32-arc.c (FINAL_SECTSTART): Added this formula macro. (ARC_TLS_DTPOFF) Updated reloc to use new created macro instead.
This commit is contained in:
@ -335,7 +335,11 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p,
|
|||||||
bfd_vma sec_vma = tls_sec->output_section->vma;
|
bfd_vma sec_vma = tls_sec->output_section->vma;
|
||||||
|
|
||||||
bfd_put_32 (output_bfd,
|
bfd_put_32 (output_bfd,
|
||||||
sym_value - sec_vma,
|
sym_value - sec_vma
|
||||||
|
+ (elf_hash_table (info)->dynamic_sections_created
|
||||||
|
? 0
|
||||||
|
: (align_power (TCB_SIZE,
|
||||||
|
tls_sec->alignment_power))),
|
||||||
htab->sgot->contents + entry->offset
|
htab->sgot->contents + entry->offset
|
||||||
+ (entry->existing_entries == TLS_GOT_MOD_AND_OFF
|
+ (entry->existing_entries == TLS_GOT_MOD_AND_OFF
|
||||||
? 4 : 0));
|
? 4 : 0));
|
||||||
@ -346,7 +350,7 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p,
|
|||||||
"GOT_TLS_IE"),
|
"GOT_TLS_IE"),
|
||||||
(long) (sym_value - sec_vma),
|
(long) (sym_value - sec_vma),
|
||||||
(long) (htab->sgot->output_section->vma
|
(long) (htab->sgot->output_section->vma
|
||||||
+ htab->sgot->output_offset->vma
|
+ htab->sgot->output_offset
|
||||||
+ entry->offset
|
+ entry->offset
|
||||||
+ (entry->existing_entries == TLS_GOT_MOD_AND_OFF
|
+ (entry->existing_entries == TLS_GOT_MOD_AND_OFF
|
||||||
? 4 : 0)),
|
? 4 : 0)),
|
||||||
@ -376,7 +380,7 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p,
|
|||||||
"GOT_TLS_IE"),
|
"GOT_TLS_IE"),
|
||||||
(long) (sym_value - sec_vma),
|
(long) (sym_value - sec_vma),
|
||||||
(long) (htab->sgot->output_section->vma
|
(long) (htab->sgot->output_section->vma
|
||||||
+ htab->sgot->output_offset->vma
|
+ htab->sgot->output_offset
|
||||||
+ entry->offset
|
+ entry->offset
|
||||||
+ (entry->existing_entries == TLS_GOT_MOD_AND_OFF
|
+ (entry->existing_entries == TLS_GOT_MOD_AND_OFF
|
||||||
? 4 : 0)),
|
? 4 : 0)),
|
||||||
|
@ -1214,6 +1214,8 @@ arc_special_overflow_checks (const struct arc_relocation_data reloc_data,
|
|||||||
+ (reloc_data.reloc_offset))))
|
+ (reloc_data.reloc_offset))))
|
||||||
#define SECTSTART (bfd_signed_vma) (reloc_data.sym_section->output_section->vma \
|
#define SECTSTART (bfd_signed_vma) (reloc_data.sym_section->output_section->vma \
|
||||||
+ reloc_data.sym_section->output_offset)
|
+ reloc_data.sym_section->output_offset)
|
||||||
|
#define FINAL_SECTSTART \
|
||||||
|
(bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
|
||||||
#define JLI (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
|
#define JLI (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
|
||||||
#define _SDA_BASE_ (bfd_signed_vma) (reloc_data.sdata_begin_symbol_vma)
|
#define _SDA_BASE_ (bfd_signed_vma) (reloc_data.sdata_begin_symbol_vma)
|
||||||
#define TLS_REL (bfd_signed_vma) \
|
#define TLS_REL (bfd_signed_vma) \
|
||||||
|
@ -468,7 +468,7 @@ ARC_RELOC_HOWTO(ARC_TLS_DTPOFF, 67, \
|
|||||||
32, \
|
32, \
|
||||||
replace_word32, \
|
replace_word32, \
|
||||||
dont, \
|
dont, \
|
||||||
( ME ( S - SECTSTART ) + A ))
|
( ME ( S - FINAL_SECTSTART ) + A ))
|
||||||
|
|
||||||
ARC_RELOC_HOWTO(ARC_TLS_DTPOFF_S9, 73, \
|
ARC_RELOC_HOWTO(ARC_TLS_DTPOFF_S9, 73, \
|
||||||
2, \
|
2, \
|
||||||
|
Reference in New Issue
Block a user