diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-08-07 10:28:42 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-08-07 10:35:58 -0700 |
commit | d4ac1f878ecef58f1e4b4ff0cbfb4b475656eaf4 (patch) | |
tree | 95f22b0c72cd452bb7b2114d8e6d0a46f34ad42e /bfd/elf.c | |
parent | f12899e9f081bb857c96999386e64a4252c4a325 (diff) | |
download | gdb-d4ac1f878ecef58f1e4b4ff0cbfb4b475656eaf4.zip gdb-d4ac1f878ecef58f1e4b4ff0cbfb4b475656eaf4.tar.gz gdb-d4ac1f878ecef58f1e4b4ff0cbfb4b475656eaf4.tar.bz2 |
Check sh_type/sh_flags/sh_addralign/sh_entsize when copying sh_link/sh_info
When copying the sh_link and sh_info fields in stripped section headers,
we also check if the sh_type, sh_flags, /sh_addralign and sh_entsize
fields of the output section match the output. Since --only-keep-debug
turns all non-debug sections into SHT_NOBITS sections, the output
SHT_NOBITS type matches any input type.
bfd/
PR binutils/18785
* elf.c (_bfd_elf_copy_private_bfd_data): When copying the
sh_link and sh_info fields in stripped section headers, we also
check if the sh_type, sh_flags, /sh_addralign and sh_entsize
fields of the output section match the output. Since
--only-keep-debug turns all non-debug sections into SHT_NOBITS
sections, the output SHT_NOBITS type matches any input type.
binutils/testsuite/
PR binutils/18785
* binutils-all/objcopy.exp: Run strip-12.
* binutils-all/strip-12.d: New file.
* binutils-all/strip-12.s: Likewise.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r-- | bfd/elf.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -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 |