[ARM] PR ld/21402, only override the symbol dynamic decision on undefined weak symbol.
authorRenlin Li <renlin.li@arm.com>
Mon, 25 Sep 2017 10:41:54 +0000 (11:41 +0100)
committerRenlin Li <renlin.li@arm.com>
Tue, 10 Oct 2017 15:18:07 +0000 (16:18 +0100)
Similar as aarch64 backend, arm backend only overrides the decision on undefined
weak symbols. arm backend part already emits necessary relative relocation for
this case.

bfd/

PR ld/21402
* elf32-arm.c (allocate_dynrelocs_for_symbol): Only make undefined weak
symbols into dynamic.

ld/

PR ld/21402
* testsuite/ld-arm/tls-app.d: Update address.
* testsuite/ld-arm/tls-app.r: Remove relocations.
* testsuite/ld-arm/unresolved-1-dyn.d: Update.

bfd/ChangeLog
bfd/elf32-arm.c
ld/ChangeLog
ld/testsuite/ld-arm/tls-app.d
ld/testsuite/ld-arm/tls-app.r
ld/testsuite/ld-arm/unresolved-1-dyn.d

index f98881266eb6e4ed9fdfac9dd5c63e037d8f8ba4..bf400a93512df0b93c9394eacf8307c027e73cf2 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-10  Renlin Li  <renlin.li@arm.com>
+
+       PR ld/21402
+       * elf32-arm.c (allocate_dynrelocs_for_symbol): Only make undefined weak
+        symbols into dynamic.
+
 2017-10-09  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/22274
index bad8540c6fd31efd0cd170b3154659a1421f20b3..f841da7080306e1cec132108a38a3015e7835312 100644 (file)
@@ -15443,8 +15443,8 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
     {
       /* Make sure this symbol is output as a dynamic symbol.
         Undefined weak syms won't yet be marked as dynamic.  */
-      if (h->dynindx == -1
-         && !h->forced_local)
+      if (h->dynindx == -1 && !h->forced_local
+         && h->root.type == bfd_link_hash_undefweak)
        {
          if (! bfd_elf_link_record_dynamic_symbol (info, h))
            return FALSE;
@@ -15531,8 +15531,8 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
 
       /* Make sure this symbol is output as a dynamic symbol.
         Undefined weak syms won't yet be marked as dynamic.  */
-      if (h->dynindx == -1
-         && !h->forced_local)
+      if (h->dynindx == -1 && !h->forced_local
+         && h->root.type == bfd_link_hash_undefweak)
        {
          if (! bfd_elf_link_record_dynamic_symbol (info, h))
            return FALSE;
@@ -15755,8 +15755,8 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
        {
          /* Make sure this symbol is output as a dynamic symbol.
             Undefined weak syms won't yet be marked as dynamic.  */
-         if (h->dynindx == -1
-             && !h->forced_local)
+         if (h->dynindx == -1 && !h->forced_local
+             && h->root.type == bfd_link_hash_undefweak)
            {
              if (! bfd_elf_link_record_dynamic_symbol (info, h))
                return FALSE;
index 58f64204accc8476c8f001fbb9599022cce50072..2a7f7bcc7edb8248df2bfb7805be1bef2f123582 100644 (file)
@@ -1,3 +1,10 @@
+2017-10-10  Renlin Li  <renlin.li@arm.com>
+
+       PR ld/21402
+       * testsuite/ld-arm/tls-app.d: Update address.
+       * testsuite/ld-arm/tls-app.r: Remove relocations.
+       * testsuite/ld-arm/unresolved-1-dyn.d: Update.
+
 2017-10-10  Alan Modra  <amodra@gmail.com>
 
        * Makefile.am (earmelfb_fuchsia.c): Rename rule from earmelf_fuchsia.c.
index de0cbab9616888e7477cbdcbc6acd8cdeaf196b6..454adcd066cd0696ea38db52a00968d6c9e6f3a1 100644 (file)
@@ -2,17 +2,17 @@
 .*:     file format elf32-.*arm.*
 architecture: arm.*, flags 0x00000112:
 EXEC_P, HAS_SYMS, D_PAGED
-start address 0x000081c8
+start address 0x00008[0-9a-f]+
 
 Disassembly of section .text:
 
-000081c8 <foo>:
-    81c8:      e1a00000        nop                     ; \(mov r0, r0\)
-    81cc:      e1a00000        nop                     ; \(mov r0, r0\)
-    81d0:      e1a0f00e        mov     pc, lr
-    81d4:      000080bc        .word   0x000080bc
-    81d8:      000080b4        .word   0x000080b4
-    81dc:      000080ac        .word   0x000080ac
-    81e0:      00000004        .word   0x00000004
-    81e4:      000080c4        .word   0x000080c4
-    81e8:      00000014        .word   0x00000014
+00008[0-9a-f]+ <foo>:
+    8[0-9a-f]+:        e1a00000        nop                     ; \(mov r0, r0\)
+    8[0-9a-f]+:        e1a00000        nop                     ; \(mov r0, r0\)
+    8[0-9a-f]+:        e1a0f00e        mov     pc, lr
+    8[0-9a-f]+:        000080bc        .word   0x000080bc
+    8[0-9a-f]+:        000080b4        .word   0x000080b4
+    8[0-9a-f]+:        000080ac        .word   0x000080ac
+    8[0-9a-f]+:        00000004        .word   0x00000004
+    8[0-9a-f]+:        000080c4        .word   0x000080c4
+    8[0-9a-f]+:        00000014        .word   0x00000014
index b156d5236866ab30483f285c7be8190fa85a766d..518c18cd58b3f0877f004f22fd9bd866a1c99115 100644 (file)
@@ -3,8 +3,5 @@
 
 DYNAMIC RELOCATION RECORDS
 OFFSET   TYPE              VALUE 
-[0-9a-f]+ R_ARM_TLS_DTPMOD32  app_gd
-[0-9a-f]+ R_ARM_TLS_DTPOFF32  app_gd
 [0-9a-f]+ R_ARM_TLS_DTPMOD32  lib_gd
 [0-9a-f]+ R_ARM_TLS_DTPOFF32  lib_gd
-[0-9a-f]+ R_ARM_TLS_TPOFF32  app_ie
index 21cd9599c680674e7d06818bd58f498977fc2091..529da3734617e3f34dc0bf723060f1f8566b56ef 100644 (file)
@@ -5,4 +5,4 @@
 
 Relocation section '\.rel\.dyn' .*
  Offset .*
-.* R_ARM_GLOB_DAT +00000000 +foo
+^.*  00000000 R_ARM_NONE.+