Fix computation of sh_info field in the header of .dynsym sections.

This commit is contained in:
Nick Clifton 2016-08-15 09:31:02 +01:00
parent c1bb236faf
commit 8d06b5d1c4
3 changed files with 279 additions and 2 deletions

View File

@ -4,7 +4,7 @@
bfd_malloc (strlen (debug_file_directory) + 1
+ (canon_dirlen > dirlen ? canon_dirlen : dirlen)
+ strlen (".debug/")
+#define FEDORA_LIB_DEBUG_DIR "/usr/lib/debug/"
+#define FEDORA_LIB_DEBUG_DIR "/usr/lib/debug"
+ + strlen (FEDORA_LIB_DEBUG_DIR) + strlen ("usr/")
+ strlen (base)
+ 1);

View File

@ -0,0 +1,271 @@
diff -rup binutils-2.27.orig/bfd/ChangeLog binutils-2.27/bfd/ChangeLog
--- binutils-2.27.orig/bfd/ChangeLog 2016-08-12 17:14:07.621773233 +0100
+++ binutils-2.27/bfd/ChangeLog 2016-08-12 17:17:32.408119156 +0100
@@ -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-03 Tristan Gingold <gingold@adacore.com>
* version.m4: Bump version to 2.27
Only in binutils-2.27/bfd: ChangeLog.orig
Only in binutils-2.27/bfd: ChangeLog.rej
diff -rup binutils-2.27.orig/bfd/elf-bfd.h binutils-2.27/bfd/elf-bfd.h
--- binutils-2.27.orig/bfd/elf-bfd.h 2016-08-12 17:14:07.630773290 +0100
+++ binutils-2.27/bfd/elf-bfd.h 2016-08-12 17:16:08.519549845 +0100
@@ -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. */
diff -rup binutils-2.27.orig/bfd/elflink.c binutils-2.27/bfd/elflink.c
--- binutils-2.27.orig/bfd/elflink.c 2016-08-12 17:14:07.637773334 +0100
+++ binutils-2.27/bfd/elflink.c 2016-08-12 17:16:08.521549858 +0100
@@ -903,6 +903,7 @@ _bfd_elf_link_renumber_dynsyms (bfd *out
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,
@@ -11678,7 +11679,10 @@ bfd_elf_final_link (bfd *abfd, struct bf
{
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)
@@ -11708,8 +11712,6 @@ bfd_elf_final_link (bfd *abfd, struct bf
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);
}
}
@@ -11742,16 +11744,10 @@ bfd_elf_final_link (bfd *abfd, struct bf
+ 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. */
Only in binutils-2.27/bfd: elflink.c.orig
diff -rup binutils-2.27.orig/ld/ChangeLog binutils-2.27/ld/ChangeLog
--- binutils-2.27.orig/ld/ChangeLog 2016-08-12 17:14:08.064776041 +0100
+++ binutils-2.27/ld/ChangeLog 2016-08-12 17:17:00.166900351 +0100
@@ -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-03 Tristan Gingold <gingold@adacore.com>
* configure: Regenerate.
Only in binutils-2.27/ld: ChangeLog.orig
Only in binutils-2.27/ld: ChangeLog.rej
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1b.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-1b.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1b.rd 2016-08-12 17:14:08.200776903 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-1b.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1rb.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-1rb.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1rb.rd 2016-08-12 17:14:08.200776903 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-1rb.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-1.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1.rd 2016-08-12 17:14:08.200776903 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-1.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1r.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-1r.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1r.rd 2016-08-12 17:14:08.200776903 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-1r.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1b.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1b.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1b.rd 2016-08-12 17:14:08.200776903 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1b.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1rb.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1rb.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1rb.rd 2016-08-12 17:14:08.201776909 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1rb.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1.rd 2016-08-12 17:14:08.200776903 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1r.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1r.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1r.rd 2016-08-12 17:14:08.200776903 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1r.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-noindex.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-noindex.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-noindex.rd 2016-08-12 17:14:08.201776909 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-noindex.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1b.rd binutils-2.27/ld/testsuite/ld-tic6x/static-app-1b.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1b.rd 2016-08-12 17:14:08.201776909 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/static-app-1b.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1rb.rd binutils-2.27/ld/testsuite/ld-tic6x/static-app-1rb.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1rb.rd 2016-08-12 17:14:08.201776909 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/static-app-1rb.rd 2016-08-12 17:16:08.523549872 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1.rd binutils-2.27/ld/testsuite/ld-tic6x/static-app-1.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1.rd 2016-08-12 17:14:08.201776909 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/static-app-1.rd 2016-08-12 17:16:08.522549865 +0100
@@ -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
diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1r.rd binutils-2.27/ld/testsuite/ld-tic6x/static-app-1r.rd
--- binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1r.rd 2016-08-12 17:14:08.201776909 +0100
+++ binutils-2.27/ld/testsuite/ld-tic6x/static-app-1r.rd 2016-08-12 17:16:08.523549872 +0100
@@ -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
--- binutils-2.27.orig/binutils/readelf.c 2016-08-12 17:14:07.717773841 +0100
+++ binutils-2.27/binutils/readelf.c 2016-08-12 17:24:25.007897415 +0100
@@ -11110,6 +11110,11 @@ process_symbol_table (FILE * file)
}
putchar ('\n');
+
+ if (ELF_ST_BIND (psym->st_info) == STB_LOCAL
+ && si >= section->sh_info)
+ warn (_("local symbol %u found at index >= %s's sh_info value of %u\n"),
+ si, printable_section_name (section), section->sh_info);
}
free (symtab);

View File

@ -24,7 +24,7 @@
Summary: A GNU collection of binary utilities
Name: %{?cross}binutils%{?_with_debug:-debug}
Version: 2.27
Release: 1%{?dist}
Release: 2%{?dist}
License: GPLv3+
Group: Development/Tools
URL: http://sources.redhat.com/binutils
@ -57,6 +57,8 @@ Patch12: binutils-2.25.1-cleansweep.patch
Patch13: binutils-2.26-fix-compile-warnings.patch
# Import H.J.Lu's Kernel LTO patch.
Patch14: binutils-2.26-lto.patch
# Fix computation of sh_info field for .dynsym sections
Patch15: binutils-2.27-local-dynsym-count.patch
Provides: bundled(libiberty)
@ -179,6 +181,7 @@ using libelf instead of BFD.
%patch12 -p0
%patch13 -p1
%patch14 -p1
%patch15 -p1
# We cannot run autotools as there is an exact requirement of autoconf-2.59.
@ -508,6 +511,9 @@ exit 0
%endif # %{isnative}
%changelog
* Mon Aug 15 2016 Nick Clifton <nickc@redhat.com> 2.27-2
- Fix computation of sh_info field in the header of .dynsym sections.
* Wed Aug 03 2016 Nick Clifton <nickc@redhat.com> 2.27-1
- Rebase on FSF binutils 2.27 release.
- Retire: binutils-2.26-formatting.patch