From 3064e1ff79ecbe3d6f09667ae09065e347b5605b Mon Sep 17 00:00:00 2001 From: Julian Brown Date: Thu, 28 Feb 2013 10:31:34 +0000 Subject: [PATCH] bfd/ * elf32-arm.c (elf32_arm_size_dynamic_sections): Don't call elf32_arm_allocate_dynrelocs for source reloc for non-dynamic link. ld/testsuite/ * ld-arm/tls-local-static.s: New test. * ld-arm/tls-local-static.d: New. * ld-arm/arm-elf.exp (tls-local-static): Add test. --- bfd/ChangeLog | 5 +++++ bfd/elf32-arm.c | 18 +++++++++++------- ld/testsuite/ChangeLog | 8 +++++++- ld/testsuite/ld-arm/arm-elf.exp | 3 +++ ld/testsuite/ld-arm/tls-local-static.d | 11 +++++++++++ ld/testsuite/ld-arm/tls-local-static.s | 15 +++++++++++++++ 6 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 ld/testsuite/ld-arm/tls-local-static.d create mode 100644 ld/testsuite/ld-arm/tls-local-static.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 27746f2..93ad3cc 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2013-02-28 Nathan Sidwell + + * elf32-arm.c (elf32_arm_size_dynamic_sections): Don't call + elf32_arm_allocate_dynrelocs for source reloc for non-dynamic link. + 2013-02-27 DJ Delorie * reloc.c (BFD_RELOC_RL78_CODE): Add. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index cf5bc6d..aba1814 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -13648,14 +13648,18 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, && (local_iplt == NULL || local_iplt->arm.noncall_refcount == 0)) elf32_arm_allocate_irelocs (info, srel, 1); - else if ((info->shared && !(*local_tls_type & GOT_TLS_GDESC)) - || *local_tls_type & GOT_TLS_GD) - elf32_arm_allocate_dynrelocs (info, srel, 1); - - if (info->shared && *local_tls_type & GOT_TLS_GDESC) + else if (info->shared || output_bfd->flags & DYNAMIC) { - elf32_arm_allocate_dynrelocs (info, htab->root.srelplt, 1); - htab->tls_trampoline = -1; + if ((info->shared && !(*local_tls_type & GOT_TLS_GDESC)) + || *local_tls_type & GOT_TLS_GD) + elf32_arm_allocate_dynrelocs (info, srel, 1); + + if (info->shared && *local_tls_type & GOT_TLS_GDESC) + { + elf32_arm_allocate_dynrelocs (info, + htab->root.srelplt, 1); + htab->tls_trampoline = -1; + } } } else diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 07a01a8..0db8fe7 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,4 +1,10 @@ -013-02-21 H.J. Lu +2013-02-28 Nathan Sidwell + + * ld-arm/tls-local-static.s: New test. + * ld-arm/tls-local-static.d: New. + * ld-arm/arm-elf.exp (tls-local-static): Add test. + +2013-02-21 H.J. Lu PR ld/15167 * ld-unique/unique.exp: Add a test for shared library with diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index 414bc69..d9375ec 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -142,6 +142,9 @@ set armelftests_common { {"TLS descseq relaxation BE32" "-T arm-dyn.ld -EB" "" "-mbig-endian" {tls-descrelax-be32.s} {{objdump -fdw tls-descrelax-be32.d}} "tls-descrelax-be32"} + {"TLS local PIC symbol static link" "-T arm.ld" "" "" {tls-local-static.s} + {{objdump -fdw tls-local-static.d}} + "tls-local-static"} {"Thumb entry point" "-T arm.ld" "" "" {thumb-entry.s} {{readelf -h thumb-entry.d}} "thumb-entry"} diff --git a/ld/testsuite/ld-arm/tls-local-static.d b/ld/testsuite/ld-arm/tls-local-static.d new file mode 100644 index 0000000..d246ab1 --- /dev/null +++ b/ld/testsuite/ld-arm/tls-local-static.d @@ -0,0 +1,11 @@ + +.*/tls-local-static: file format elf32-.*arm.* +architecture: .*, flags 0x[0-9a-f]+: +EXEC_P, HAS_SYMS, D_PAGED +start address 0x[0-9a-f]+ + +Disassembly of section .text: + +[0-9a-f]+ <_start>: + [0-9a-f]+: e12fff1e bx lr + [0-9a-f]+: 00000ff8 .word 0x00000ff8 diff --git a/ld/testsuite/ld-arm/tls-local-static.s b/ld/testsuite/ld-arm/tls-local-static.s new file mode 100644 index 0000000..15a409a --- /dev/null +++ b/ld/testsuite/ld-arm/tls-local-static.s @@ -0,0 +1,15 @@ + .text + .arch armv4t + .global _start +_start: +.LPIC0: + bx lr + .align 2 + .word var(tlsgd) + (. - .LPIC0 - 8) + + .section .tbss,"awT",%nobits + .align 2 + .type var, %object + .size var, 4 +var: + .space 4 -- 2.7.4