1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- From 7d6e280a0f3b9978b0edb20173d067d071531a3d Mon Sep 17 00:00:00 2001
- From: Szabolcs Nagy <[email protected]>
- Date: Wed, 2 Oct 2019 19:46:46 +0100
- Subject: [PATCH] [PR ld/22263][PR ld/25056] arm: Avoid dynamic TLS relocs in
- PIE
- Dynamic relocs are only needed in an executable for TLS symbols if
- those are defined in an external module and even then TLS access
- can be relaxed to use IE model instead of GD.
- Several bfd_link_pic checks are turned into bfd_link_dll checks
- to fix TLS handling in PIE, for the same fix some other targets
- used !bfd_link_executable checks, but that includes relocatable
- objects so dll seems safer (in most cases either should work, since
- dynamic relocations are not applied in relocatable objects).
- On arm* fixes
- FAIL: Build pr22263-1
- bfd/
- 2019-10-02 Szabolcs Nagy <[email protected]>
- PR ld/22263
- PR ld/25056
- * elf32-arm.c (elf32_arm_tls_transition): Use bfd_link_dll instead of
- bfd_link_pic for TLS checks.
- (elf32_arm_final_link_relocate): Likewise.
- (allocate_dynrelocs_for_symbol): Likewise.
- ---
- bfd/elf32-arm.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
- diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
- index bb53e039e3..451949d278 100644
- --- a/bfd/elf32-arm.c
- +++ b/bfd/elf32-arm.c
- @@ -4914,7 +4914,7 @@ elf32_arm_tls_transition (struct bfd_link_info *info, int r_type,
- {
- int is_local = (h == NULL);
-
- - if (bfd_link_pic (info)
- + if (bfd_link_dll (info)
- || (h && h->root.type == bfd_link_hash_undefweak))
- return r_type;
-
- @@ -11700,7 +11700,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
- {
- /* If we don't know the module number, create a relocation
- for it. */
- - if (bfd_link_pic (info))
- + if (bfd_link_dll (info))
- {
- Elf_Internal_Rela outrel;
-
- @@ -11804,7 +11804,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
- now, and emit any relocations. If both an IE GOT and a
- GD GOT are necessary, we emit the GD first. */
-
- - if ((bfd_link_pic (info) || indx != 0)
- + if ((bfd_link_dll (info) || indx != 0)
- && (h == NULL
- || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
- && !resolved_to_zero)
- @@ -11821,7 +11821,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
- /* We should have relaxed, unless this is an undefined
- weak symbol. */
- BFD_ASSERT ((h && (h->root.type == bfd_link_hash_undefweak))
- - || bfd_link_pic (info));
- + || bfd_link_dll (info));
- BFD_ASSERT (globals->sgotplt_jump_table_size + offplt + 8
- <= globals->root.sgotplt->size);
-
- @@ -16494,7 +16494,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
- indx = h->dynindx;
-
- if (tls_type != GOT_NORMAL
- - && (bfd_link_pic (info) || indx != 0)
- + && (bfd_link_dll (info) || indx != 0)
- && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
- || h->root.type != bfd_link_hash_undefweak))
- {
- --
- 2.17.1
|