PR23788, objcopy: failed to find link section
authorAlan Modra <amodra@gmail.com>
Fri, 19 Oct 2018 13:32:17 +0000 (00:02 +1030)
committerAlan Modra <amodra@gmail.com>
Sat, 20 Oct 2018 09:16:43 +0000 (19:46 +1030)
Symbol tables can change when a number of objcopy options are used.
I figure string tables are similarly changeable.

PR 23788
* elf.c (section_match): Don't require a size match for SHT_SYMTAB
or SHT_STRTAB.

bfd/ChangeLog
bfd/elf.c

index 0178d97..31ff3d6 100644 (file)
@@ -1,3 +1,9 @@
+2018-10-20  Alan Modra  <amodra@gmail.com>
+
+       PR 23788
+       * elf.c (section_match): Don't require a size match for SHT_SYMTAB
+       or SHT_STRTAB.
+
 2018-10-17  Alan Modra  <amodra@gmail.com>
 
        PR 23653
index 5b3d27c..764c61f 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1299,15 +1299,15 @@ static bfd_boolean
 section_match (const Elf_Internal_Shdr * a,
               const Elf_Internal_Shdr * b)
 {
-  return
-    a->sh_type        == b->sh_type
-    && (a->sh_flags & ~ SHF_INFO_LINK)
-    == (b->sh_flags & ~ SHF_INFO_LINK)
-    && a->sh_addralign == b->sh_addralign
-    && a->sh_size      == b->sh_size
-    && a->sh_entsize   == b->sh_entsize
-    /* FIXME: Check sh_addr ?  */
-    ;
+  if (a->sh_type != b->sh_type
+      || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
+      || a->sh_addralign != b->sh_addralign
+      || a->sh_entsize != b->sh_entsize)
+    return FALSE;
+  if (a->sh_type == SHT_SYMTAB
+      || a->sh_type == SHT_STRTAB)
+    return TRUE;
+  return a->sh_size == b->sh_size;
 }
 
 /* Find a section in OBFD that has the same characteristics