From: Julian Brown Date: Thu, 28 Feb 2013 10:31:34 +0000 (+0000) Subject: bfd/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3064e1ff79ecbe3d6f09667ae09065e347b5605b;p=binutils-gdb.git 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 27746f20f21..93ad3cc7893 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 cf5bc6db2c8..aba1814f855 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 07a01a894a1..0db8fe702ad 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 414bc6925d3..d9375ecb980 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 00000000000..d246ab139f8 --- /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 00000000000..15a409af159 --- /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