[0/6] ELF: Strip section header in ELF objects

Message ID 20230530171252.269552-1-hjl.tools@gmail.com
Headers
Series ELF: Strip section header in ELF objects |

Message

H.J. Lu May 30, 2023, 5:12 p.m. UTC
  Section header isn't mandatory on ELF executable nor shared library.
This patch set adds a new linker option, -z nosectionheader, to omit ELF
section header, an new objcopy and strip option, --strip-sections, to
remove ELF section header.

H.J. Lu (4):
  bfd: Improve nm and objdump without section header
  binutils: Add a --strip-sections test
  ld: Add tests for -z nosectionheader and --strip-sections
  ld: Add -z nosectionheader test to bootstrap.exp

Kaylee Blake (2):
  ELF: Strip section header in ELF objects
  ld: Add a simple test for -z nosectionheader

 bfd/bfd-in2.h                                 |   6 +-
 bfd/bfd.c                                     |   6 +-
 bfd/elf-bfd.h                                 |  15 +
 bfd/elf.c                                     | 738 ++++++++++++++++--
 bfd/elfcode.h                                 |  91 ++-
 bfd/elflink.c                                 |  12 +
 bfd/elfxx-target.h                            |   4 +-
 binutils/NEWS                                 |   5 +-
 binutils/doc/binutils.texi                    |  10 +
 binutils/objcopy.c                            |  33 +-
 binutils/testsuite/binutils-all/objcopy.exp   |   5 +
 .../testsuite/binutils-all/strip-sections-1.d |   5 +
 ld/NEWS                                       |   3 +
 ld/emultempl/elf.em                           |   4 +
 ld/ld.h                                       |   3 +
 ld/ld.texi                                    |   5 +
 ld/ldlang.c                                   |   4 +
 ld/lexsup.c                                   |   8 +
 ld/testsuite/ld-bootstrap/bootstrap.exp       |  10 +-
 ld/testsuite/ld-elf/hash-2.d                  |  11 +
 ld/testsuite/ld-elf/no-section-header.exp     | 370 +++++++++
 ld/testsuite/ld-elf/nosectionheader.d         |  12 +
 ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.nd   |   3 +
 ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd   |  20 +
 .../ld-elf/pr25617-1-static-no-sec-hdr.rd     |  12 +
 ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd  |   3 +
 ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd  |  20 +
 ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd     |  19 +
 ld/testsuite/ld-elf/pr25617-1a.c              |  11 +
 ld/testsuite/ld-elf/pr25617-1b.c              |  15 +
 ld/testsuite/ld-elf/start-noheader.rd         |  11 +
 .../ld-elf/start-shared-noheader-gnu.rd       |  22 +
 .../ld-elf/start-shared-noheader-sysv.rd      |  22 +
 ld/testsuite/ld-elf/start-shared-noheader.nd  |   5 +
 34 files changed, 1439 insertions(+), 84 deletions(-)
 create mode 100644 binutils/testsuite/binutils-all/strip-sections-1.d
 create mode 100644 ld/testsuite/ld-elf/hash-2.d
 create mode 100644 ld/testsuite/ld-elf/no-section-header.exp
 create mode 100644 ld/testsuite/ld-elf/nosectionheader.d
 create mode 100644 ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.nd
 create mode 100644 ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd
 create mode 100644 ld/testsuite/ld-elf/pr25617-1-static-no-sec-hdr.rd
 create mode 100644 ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd
 create mode 100644 ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd
 create mode 100644 ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd
 create mode 100644 ld/testsuite/ld-elf/pr25617-1a.c
 create mode 100644 ld/testsuite/ld-elf/pr25617-1b.c
 create mode 100644 ld/testsuite/ld-elf/start-noheader.rd
 create mode 100644 ld/testsuite/ld-elf/start-shared-noheader-gnu.rd
 create mode 100644 ld/testsuite/ld-elf/start-shared-noheader-sysv.rd
 create mode 100644 ld/testsuite/ld-elf/start-shared-noheader.nd
  

Comments

Andreas Schwab May 30, 2023, 6:45 p.m. UTC | #1
On Mai 30 2023, H.J. Lu via Binutils wrote:

> Section header isn't mandatory on ELF executable nor shared library.
> This patch set adds a new linker option, -z nosectionheader, to omit ELF
> section header, an new objcopy and strip option, --strip-sections, to
> remove ELF section header.

IMHO --strip-sections is too easily confused with --remove-section.  How
about naming it --strip-section-headers?
  
H.J. Lu May 30, 2023, 6:51 p.m. UTC | #2
On Tue, May 30, 2023 at 11:45 AM Andreas Schwab <schwab@linux-m68k.org> wrote:
>
> On Mai 30 2023, H.J. Lu via Binutils wrote:
>
> > Section header isn't mandatory on ELF executable nor shared library.
> > This patch set adds a new linker option, -z nosectionheader, to omit ELF
> > section header, an new objcopy and strip option, --strip-sections, to
> > remove ELF section header.
>
> IMHO --strip-sections is too easily confused with --remove-section.  How
> about naming it --strip-section-headers?
>

Good point.

Thanks.
  
Fangrui Song June 1, 2023, 6:24 p.m. UTC | #3
On Tue, May 30, 2023 at 11:51 AM H.J. Lu via Binutils
<binutils@sourceware.org> wrote:
>
> On Tue, May 30, 2023 at 11:45 AM Andreas Schwab <schwab@linux-m68k.org> wrote:
> >
> > On Mai 30 2023, H.J. Lu via Binutils wrote:
> >
> > > Section header isn't mandatory on ELF executable nor shared library.
> > > This patch set adds a new linker option, -z nosectionheader, to omit ELF
> > > section header, an new objcopy and strip option, --strip-sections, to
> > > remove ELF section header.
> >
> > IMHO --strip-sections is too easily confused with --remove-section.  How
> > about naming it --strip-section-headers?
> >
>
> Good point.
>
> Thanks.
>
> --
> H.J.

The option is named --strip-sections in eu-strip. When porting the
feature to llvm-objcopy, llvm-objcopy keeps  --strip-sections as well
https://reviews.llvm.org/D38335 .