Correct .dynsym sh_info
authorAlan Modra <amodra@gmail.com>
Fri, 12 Aug 2016 14:33:43 +0000 (00:03 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 12 Aug 2016 14:37:20 +0000 (00:07 +0930)
bfd/
* elf-bfd.h (struct elf_link_hash_table): Add local_dynsymcount.
* elflink.c (_bfd_elf_link_renumber_dynsyms): Set local_dynsymcount.
(bfd_elf_final_link): Set .dynsym sh_info from local_dynsymcount.
ld/
* testsuite/ld-tic6x/shlib-1.rd: Correct expected .dynsym sh_info.
* testsuite/ld-tic6x/shlib-1b.rd: Likewise.
* testsuite/ld-tic6x/shlib-1r.rd: Likewise.
* testsuite/ld-tic6x/shlib-1rb.rd: Likewise.
* testsuite/ld-tic6x/shlib-app-1.rd: Likewise.
* testsuite/ld-tic6x/shlib-app-1b.rd: Likewise.
* testsuite/ld-tic6x/shlib-app-1r.rd: Likewise.
* testsuite/ld-tic6x/shlib-app-1rb.rd: Likewise.
* testsuite/ld-tic6x/shlib-noindex.rd: Likewise.
* testsuite/ld-tic6x/static-app-1.rd: Likewise.
* testsuite/ld-tic6x/static-app-1b.rd: Likewise.
* testsuite/ld-tic6x/static-app-1r.rd: Likewise.
* testsuite/ld-tic6x/static-app-1rb.rd: Likewise.

17 files changed:
bfd/ChangeLog
bfd/elf-bfd.h
bfd/elflink.c
ld/ChangeLog
ld/testsuite/ld-tic6x/shlib-1.rd
ld/testsuite/ld-tic6x/shlib-1b.rd
ld/testsuite/ld-tic6x/shlib-1r.rd
ld/testsuite/ld-tic6x/shlib-1rb.rd
ld/testsuite/ld-tic6x/shlib-app-1.rd
ld/testsuite/ld-tic6x/shlib-app-1b.rd
ld/testsuite/ld-tic6x/shlib-app-1r.rd
ld/testsuite/ld-tic6x/shlib-app-1rb.rd
ld/testsuite/ld-tic6x/shlib-noindex.rd
ld/testsuite/ld-tic6x/static-app-1.rd
ld/testsuite/ld-tic6x/static-app-1b.rd
ld/testsuite/ld-tic6x/static-app-1r.rd
ld/testsuite/ld-tic6x/static-app-1rb.rd

index 94c1fcb8c2767712d7e143e901a92a2cca53c787..7326ecd4a95c2d6376f2bc02e23e94f5ad295658 100644 (file)
@@ -1,3 +1,9 @@
+2016-08-12  Alan Modra  <amodra@gmail.com>
+
+       * elf-bfd.h (struct elf_link_hash_table): Add local_dynsymcount.
+       * elflink.c (_bfd_elf_link_renumber_dynsyms): Set local_dynsymcount.
+       (bfd_elf_final_link): Set .dynsym sh_info from local_dynsymcount.
+
 2016-08-11  Alan Modra  <amodra@gmail.com>
 
        * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Don't exit with
index bb3371fec88c67f359ff145aa7ff8182ef0429b4..424ea30ea461e78165c7c3fa867069bf8315d3f6 100644 (file)
@@ -524,6 +524,7 @@ struct elf_link_hash_table
   /* The number of symbols found in the link which is intended for the
      mandatory DT_SYMTAB tag (.dynsym section) in .dynamic section.  */
   bfd_size_type dynsymcount;
+  bfd_size_type local_dynsymcount;
 
   /* The string table of dynamic symbols, which becomes the .dynstr
      section.  */
index 5bc57408e47056d8c393f7247ab6312927c598cc..9e9a33cb352ca533fbc629c5c7c1535ad6a3c09c 100644 (file)
@@ -904,6 +904,7 @@ _bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
       for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
        p->dynindx = ++dynsymcount;
     }
+  elf_hash_table (info)->local_dynsymcount = dynsymcount;
 
   elf_link_hash_traverse (elf_hash_table (info),
                          elf_link_renumber_hash_table_dynsyms,
@@ -11781,7 +11782,10 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
     {
       Elf_Internal_Sym sym;
       bfd_byte *dynsym = elf_hash_table (info)->dynsym->contents;
-      long last_local = 0;
+
+      o = elf_hash_table (info)->dynsym->output_section;
+      elf_section_data (o)->this_hdr.sh_info
+       = elf_hash_table (info)->local_dynsymcount + 1;
 
       /* Write out the section symbols for the output sections.  */
       if (bfd_link_pic (info)
@@ -11811,8 +11815,6 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
                return FALSE;
              sym.st_value = s->vma;
              dest = dynsym + dynindx * bed->s->sizeof_sym;
-             if (last_local < dynindx)
-               last_local = dynindx;
              bed->s->swap_symbol_out (abfd, &sym, dest, 0);
            }
        }
@@ -11845,16 +11847,10 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
                                  + e->isym.st_value);
                }
 
-             if (last_local < e->dynindx)
-               last_local = e->dynindx;
-
              dest = dynsym + e->dynindx * bed->s->sizeof_sym;
              bed->s->swap_symbol_out (abfd, &sym, dest, 0);
            }
        }
-
-      elf_section_data (elf_hash_table (info)->dynsym->output_section)->this_hdr.sh_info =
-       last_local + 1;
     }
 
   /* We get the global symbols from the hash table.  */
index 6c70b54b131b9f7b8b5012cdbe1d251a1b346903..7fa2283b5331d5fc61f61f220e5d1728ecd22efe 100644 (file)
@@ -1,3 +1,19 @@
+2016-08-12  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/ld-tic6x/shlib-1.rd: Correct expected .dynsym sh_info.
+       * testsuite/ld-tic6x/shlib-1b.rd: Likewise.
+       * testsuite/ld-tic6x/shlib-1r.rd: Likewise.
+       * testsuite/ld-tic6x/shlib-1rb.rd: Likewise.
+       * testsuite/ld-tic6x/shlib-app-1.rd: Likewise.
+       * testsuite/ld-tic6x/shlib-app-1b.rd: Likewise.
+       * testsuite/ld-tic6x/shlib-app-1r.rd: Likewise.
+       * testsuite/ld-tic6x/shlib-app-1rb.rd: Likewise.
+       * testsuite/ld-tic6x/shlib-noindex.rd: Likewise.
+       * testsuite/ld-tic6x/static-app-1.rd: Likewise.
+       * testsuite/ld-tic6x/static-app-1b.rd: Likewise.
+       * testsuite/ld-tic6x/static-app-1r.rd: Likewise.
+       * testsuite/ld-tic6x/static-app-1rb.rd: Likewise.
+
 2016-08-12  Alan Modra  <amodra@gmail.com>
 
        * testsuite/ld-undefined/weak-fundef.s: New.
index 4b6e0263275c7e36c7a61f1de258f265d6990a64..a07ddca49392bd979b22fc406729dcb132b6550a 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c  AI  2  10  4
   \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c  AI  2  11  4
index 4b6e0263275c7e36c7a61f1de258f265d6990a64..a07ddca49392bd979b22fc406729dcb132b6550a 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c  AI  2  10  4
   \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c  AI  2  11  4
index 4b6e0263275c7e36c7a61f1de258f265d6990a64..a07ddca49392bd979b22fc406729dcb132b6550a 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c  AI  2  10  4
   \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c  AI  2  11  4
index 4b6e0263275c7e36c7a61f1de258f265d6990a64..a07ddca49392bd979b22fc406729dcb132b6550a 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c  AI  2  10  4
   \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c  AI  2  11  4
index 35cc92fa575f852a6c11e84e25f45084a0834672..f0e67c9216a818c30d955bb1360963e0c9175dc1 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 000044 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          00008044 001044 0000c0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          00008044 001044 0000c0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          00008104 001104 000035 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            0000813c 00113c 000018 0c  AI  2  11  4
   \[ 5\] \.rela\.neardata    RELA            00008154 001154 000018 0c  AI  2  12  4
index a16c4fae29a6b5dc813e379da78e46d6b919176d..19a73710c916ac72b05909a1361c420494d7ae93 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 000044 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          00008044 001044 0000c0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          00008044 001044 0000c0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          00008104 001104 000036 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            0000813c 00113c 000018 0c  AI  2  11  4
   \[ 5\] \.rela\.neardata    RELA            00008154 001154 000018 0c  AI  2  12  4
index d12ee1ced3bbe8af0129d4311564217e7b1a7169..f4fcf6b1a4603d9bf21df8d07eb91574d989fa35 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 000030 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            0000810c 00110c 000018 0c  AI  2  10  4
   \[ 5\] \.rela\.bss         RELA            00008124 001124 00000c 0c  AI  2  12  4
index 6026e2ab7bdb9538757d850f08f635ceccb60bff..3b7b6a991520a8d4bf73e4313a2e0b7623426671 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 000031 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            00008110 001110 000018 0c  AI  2  10  4
   \[ 5\] \.rela\.bss         RELA            00008128 001128 00000c 0c  AI  2  12  4
index 3d9a724f193ed3a460405b27327f81d7553fd212..fa031309fbc87442e2c9ccde969b37f42f646acf 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
   \[ 4\] \.rela\.text        RELA            00008140 001140 00000c 0c  AI  2  10  4
   \[ 5\] \.rela\.got         RELA            0000814c 00114c 000024 0c  AI  2  11  4
index 1efa574a0b29320869600d3c107cfdc00d5d11ba..c1bfc2fc3368747d87dd5e6c66858b2d80cfc506 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c  AI  2   8  4
   \[ 5\] \.rela\.neardata    RELA            00008120 001120 000030 0c  AI  2   9  4
index 1efa574a0b29320869600d3c107cfdc00d5d11ba..c1bfc2fc3368747d87dd5e6c66858b2d80cfc506 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c  AI  2   8  4
   \[ 5\] \.rela\.neardata    RELA            00008120 001120 000030 0c  AI  2   9  4
index 4ee2c85ae90e9a4d337233679a6cca6ca2b89eea..af8341ed37eb9eca639b437f7a8c3624f0770735 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c  AI  2   8  4
   \[ 5\] \.rela\.neardata    RELA            00008120 001120 000018 0c  AI  2   9  4
index 4ee2c85ae90e9a4d337233679a6cca6ca2b89eea..af8341ed37eb9eca639b437f7a8c3624f0770735 100644 (file)
@@ -4,7 +4,7 @@ Section Headers:
   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
-  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   7  4
   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
   \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c  AI  2   8  4
   \[ 5\] \.rela\.neardata    RELA            00008120 001120 000018 0c  AI  2   9  4