strip --reloc-debug-sections-only is expected to be a no-op for
non-ET_REL files. This was not enforced in the code. Sections
were copied over to a new output file and normally its contents
would be identical to the input file.
However the output file is not identical to a non-ET_REL input
file if the linker organized sections such that the indices of
SHF_ALLOC sections are not in a contigous group.
In this case strip will modify sections in order to keep all SHF_ALLOC
sections in a contiguous group.
Fix this by ignoring --reloc-debug-sections-only for non-ET_REL files.
https://sourceware.org/bugzilla/show_bug.cgi?id=32253
Signed-off-by: Aaron Merey <amerey@redhat.com>
if (reloc_debug_only)
{
+ if (ehdr->e_type != ET_REL)
+ {
+ /* Only ET_REL files can have debug relocations to remove. */
+ error (0, 0, _("Ignoring --reloc-debug-sections-only for " \
+ "non-ET_REL file '%s'"), fname);
+ goto fail_close;
+ }
if (handle_debug_relocs (elf, ebl, newelf, ehdr, fname, shstrndx,
&lastsec_offset, &lastsec_size) != 0)
{