Check sh_type/sh_flags/sh_addralign/sh_entsize when copying sh_link/sh_info
[external/binutils.git] / bfd / elf.c
index 67e4240..9e401c8 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1233,7 +1233,14 @@ _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
            {
              Elf_Internal_Shdr * iheader = iheaders[j];
              
-             if (iheader->sh_type != SHT_NOBITS
+             /* Since --only-keep-debug turns all non-debug sections
+                into SHT_NOBITS sections, the output SHT_NOBITS type
+                matches any input type.  */
+             if ((oheader->sh_type == SHT_NOBITS
+                  || oheader->sh_type == oheader->sh_type)
+                 && iheader->sh_flags == oheader->sh_flags
+                 && iheader->sh_addralign == oheader->sh_addralign
+                 && iheader->sh_entsize == oheader->sh_entsize
                  && iheader->sh_size == oheader->sh_size
                  && iheader->sh_addr == oheader->sh_addr
                  && (iheader->sh_info != oheader->sh_info