diff options
| author | Aaron Merey <[email protected]> | 2024-11-05 17:41:26 -0500 |
|---|---|---|
| committer | Aaron Merey <[email protected]> | 2024-11-05 17:41:26 -0500 |
| commit | e425a70469436c704e6c24dd4bc2abb8fb24b61d (patch) | |
| tree | f1c0345defe2c4af9bf0619370e58e958b0d9eef | |
| parent | 567d080473b63597acbe3a0bae9a729f0dbee722 (diff) | |
strip: Ignore --reloc-debug-sections-only for non-ET_REL files.
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 <[email protected]>
| -rw-r--r-- | src/strip.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/strip.c b/src/strip.c index 403e0f6f..3812fb17 100644 --- a/src/strip.c +++ b/src/strip.c @@ -1139,6 +1139,13 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, 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) { |
