From ac85e67c053f1555def2c111962f4e68740794f9 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Sat, 20 Oct 2018 00:02:17 +1030 Subject: [PATCH] PR23788, objcopy: failed to find link section 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 | 6 ++++++ bfd/elf.c | 18 +++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0178d97..31ff3d6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2018-10-20 Alan Modra + + PR 23788 + * elf.c (section_match): Don't require a size match for SHT_SYMTAB + or SHT_STRTAB. + 2018-10-17 Alan Modra PR 23653 diff --git a/bfd/elf.c b/bfd/elf.c index 5b3d27c..764c61f 100644 --- 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 -- 2.7.4