[PATCH v3] gas: add --reloc-section-sym={all,internal,none} option for ELF
Fangrui Song
i@maskray.me
Thu Mar 19 16:49:08 GMT 2026
On Fri, Feb 27, 2026 at 10:19 PM Fangrui Song <i@maskray.me> wrote:
>
> From: Fangrui Song <maskray@sourceware.org>
>
> When generating relocations for non-ifunc local symbols that satisfies
> several conditions, GAS converts them to reference the section symbol
> (STT_SECTION) instead, folding the original symbol's offset into the
> addend. This allows the original local symbol to be omitted from
> .symtab, but the STT_SECTION symbol itself must be present, so the
> conversion saves .symtab entries only when a section has more than one
> local symbol referenced by relocations.
>
> Add --reloc-section-sym to control this conversion:
>
> - all (default): convert all eligible local symbols
> - internal: only convert compiler-generated locals (.L prefix)
> - none: never convert; keep all symbols as-is in relocations
>
> This is useful for debugging and for tools that benefit from preserved
> symbol names.
>
> PR gas/33885
> ---
> gas/NEWS | 4 ++++
> gas/as.c | 20 +++++++++++++++-
> gas/as.h | 10 ++++++++
> gas/doc/as.texi | 11 +++++++++
> gas/testsuite/gas/elf/elf.exp | 9 +++++---
> gas/testsuite/gas/elf/reloc-section-sym-all.d | 12 ++++++++++
> .../gas/elf/reloc-section-sym-internal.d | 12 ++++++++++
> .../gas/elf/reloc-section-sym-none.d | 12 ++++++++++
> gas/testsuite/gas/elf/reloc-section-sym.s | 9 ++++++++
> .../gas/i386/reloc-section-sym-all.d | 23 +++++++++++++++++++
> .../gas/i386/reloc-section-sym-internal.d | 23 +++++++++++++++++++
> .../gas/i386/reloc-section-sym-none.d | 23 +++++++++++++++++++
> gas/testsuite/gas/i386/reloc-section-sym.s | 14 +++++++++++
> gas/testsuite/gas/i386/x86-64.exp | 4 ++++
> gas/write.c | 8 +++++++
> 15 files changed, 190 insertions(+), 4 deletions(-)
> create mode 100644 gas/testsuite/gas/elf/reloc-section-sym-all.d
> create mode 100644 gas/testsuite/gas/elf/reloc-section-sym-internal.d
> create mode 100644 gas/testsuite/gas/elf/reloc-section-sym-none.d
> create mode 100644 gas/testsuite/gas/elf/reloc-section-sym.s
> create mode 100644 gas/testsuite/gas/i386/reloc-section-sym-all.d
> create mode 100644 gas/testsuite/gas/i386/reloc-section-sym-internal.d
> create mode 100644 gas/testsuite/gas/i386/reloc-section-sym-none.d
> create mode 100644 gas/testsuite/gas/i386/reloc-section-sym.s
>
Ping:)
More information about the Binutils
mailing list