bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gas/27109] gas: Omit unused STT_SECTION symbols


From: cvs-commit at gcc dot gnu.org
Subject: [Bug gas/27109] gas: Omit unused STT_SECTION symbols
Date: Thu, 07 Jan 2021 14:47:13 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=27109

--- Comment #2 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The master branch has been updated by H.J. Lu <hjl@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d1bcae833b32f1408485ce69f844dcd7ded093a8

commit d1bcae833b32f1408485ce69f844dcd7ded093a8
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Jan 7 06:42:00 2021 -0800

    ELF: Don't generate unused section symbols

    For ELF targets, section symbols are required only for relocations.
    With -ffunction-sections -fdata-sections, there can be many unused
    section symbols.  Sizes of libstdc++.a on Linux/x86-64 in GCC 11 are

    With unused section symbols   : 39411698 bytes
    Without unused section symbols: 39227002 bytes

    The unused section symbols in libstdc++.a occupy more than 180 KB.

    Add BSF_SECTION_SYM_USED to indicate if a section symbol should be
    included in the symbol table.  The BSF_SECTION_SYM_USED should be set
    if the section symbol is used for relocation or the section symbol is
    always included in the symbol table.

    Add keep_unused_section_symbols to bfd_target to indicate if unused
    section symbols should be kept.  If TARGET_KEEP_UNUSED_SECTION_SYMBOLS
    is defined as FALSE, unused ection symbols will be removed.

    Tested on Linux/x86.  Other ELF backends need to:

    1. Define TARGET_KEEP_UNUSED_SECTION_SYMBOLS to FALSE.
    2. Mark used section symbols in assembler backend.
    3. Remove unused section symbols from expected assembler and linker
    outputs.

    bfd/

            PR 27109
            * aix386-core.c (core_aix386_vec): Initialize
            keep_unused_section_symbol to TARGET_KEEP_UNUSED_SECTION_SYMBOLS.
            * aout-target.h (MY (vec)): Likewise.
            * binary.c (binary_vec): Likewise.
            * cisco-core.c (core_cisco_be_vec): Likewise.
            (core_cisco_le_vec): Likewise.
            * coff-alpha.c (alpha_ecoff_le_vec): Likewise.
            * coff-i386.c (TARGET_SYM): Likewise.
            (TARGET_SYM_BIG): Likewise.
            * coff-ia64.c (TARGET_SYM): Likewise.
            * coff-mips.c (mips_ecoff_le_vec): Likewise.
            (mips_ecoff_be_vec): Likewise.
            (mips_ecoff_bele_vec): Likewise.
            * coff-rs6000.c (rs6000_xcoff_vec): Likewise.
            (powerpc_xcoff_vec): Likewise.
            * coff-sh.c (sh_coff_small_vec): Likewise.
            (sh_coff_small_le_vec): Likewise.
            * coff-tic30.c (tic30_coff_vec): Likewise.
            * coff-tic54x.c (tic54x_coff0_vec): Likewise.
            (tic54x_coff0_beh_vec): Likewise.
            (tic54x_coff1_vec): Likewise.
            (tic54x_coff1_beh_vec): Likewise.
            (tic54x_coff2_vec): Likewise.
            (tic54x_coff2_beh_vec): Likewise.
            * coff-x86_64.c (TARGET_SYM): Likewise.
            (TARGET_SYM_BIG): Likewise.
            * coff64-rs6000.c (rs6000_xcoff64_vec): Likewise.
            (rs6000_xcoff64_aix_vec): Likewise.
            * coffcode.h (CREATE_BIG_COFF_TARGET_VEC): Likewise.
            (CREATE_BIGHDR_COFF_TARGET_VEC): Likewise.
            (CREATE_LITTLE_COFF_TARGET_VEC): Likewise.
            * elfxx-target.h (TARGET_BIG_SYM): Likewise.
            (TARGET_LITTLE_SYM): Likewise.
            * hppabsd-core.c (core_hppabsd_vec): Likewise.
            * hpux-core.c (core_hpux_vec): Likewise.
            * i386msdos.c (i386_msdos_vec): Likewise.
            * ihex.c (ihex_vec): Likewise.
            * irix-core.c (core_irix_vec): Likewise.
            * mach-o-target.c (TARGET_NAME): Likewise.
            * mmo.c (mmix_mmo_vec): Likewise.
            * netbsd-core.c (core_netbsd_vec): Likewise.
            * osf-core.c (core_osf_vec): Likewise.
            * pdp11.c (MY (vec)): Likewise.
            * pef.c (pef_vec): Likewise.
            (pef_xlib_vec): Likewise.
            * plugin.c (plugin_vec): Likewise.
            * ppcboot.c (powerpc_boot_vec): Likewise.
            * ptrace-core.c (core_ptrace_vec): Likewise.
            * sco5-core.c (core_sco5_vec): Likewise.
            * som.c (hppa_som_vec): Likewise.
            * srec.c (srec_vec): Likewise.
            (symbolsrec_vec): Likewise.
            * tekhex.c (tekhex_vec): Likewise.
            * trad-core.c (core_trad_vec): Likewise.
            * verilog.c (verilog_vec): Likewise.
            * vms-alpha.c (alpha_vms_vec): Likewise.
            * vms-lib.c (alpha_vms_lib_txt_vec): Likewise.
            * wasm-module.c (wasm_vec): Likewise.
            * xsym.c (sym_vec): Likewise.
            * elf.c (ignore_section_sym): Return TRUE if BSF_SECTION_SYM_USED
            isn't set.
            (elf_map_symbols): Don't include ignored section symbols.
            * elfcode.h (elf_slurp_symbol_table): Also set
            BSF_SECTION_SYM_USED on STT_SECTION symbols.
            * elflink.c (bfd_elf_final_link): Generated section symbols only
            when emitting relocations or reqired.
            * elfxx-x86.h (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): New.
            * syms.c (BSF_SECTION_SYM_USED): New.
            * targets.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): New.
            (bfd_target): Add keep_unused_section_symbols.
            (bfd_keep_unused_section_symbols): New.
            * bfd-in2.h: Regenerated.

    binutils/

            PR 27109
            * objcopy.c (copy_object): Handle section symbols for
            non-relocatable inputs.
            * testsuite/binutils-all/readelf.exp (readelf_test): Check
            is_elf_unused_section_symbols.
            * testsuite/binutils-all/readelf.s-64: Updated.
            * testsuite/binutils-all/readelf.ss: Likewise.
            * testsuite/binutils-all/readelf.ss-64: Likewise.
            * testsuite/binutils-all/readelf.s-64-unused: New file.
            * testsuite/binutils-all/readelf.ss-64-unused: Likewise.
            * testsuite/binutils-all/readelf.ss-unused: Likewise.
            * testsuite/lib/binutils-common.exp
            (is_elf_unused_section_symbols): New proc.

    gas/ChangeLog:

            PR 27109
            * read.c (s_reloc): Call symbol_mark_used_in_reloc on the
            section symbol.
            * subsegs.c (subseg_set_rest): Set BSF_SECTION_SYM_USED if needed.
            * write.c (adjust_reloc_syms): Call symbol_mark_used_in_reloc
            on the section symbol.
            (set_symtab): Don't generate unused section symbols.
            (maybe_generate_build_notes): Call symbol_mark_used_in_reloc
            on the section symbol.
            * config/obj-elf.c (elf_adjust_symtab): Call
            symbol_mark_used_in_reloc on the group signature symbol.
            * testsuite/gas/cfi/cfi-label.d: Remove unused section symbols
            from expected output.
            * testsuite/gas/elf/elf.exp (run_elf_list_test): Check
            is_elf_unused_section_symbols.
            * testsuite/gas/elf/section2.e: Updated.
            * testsuite/gas/elf/section2.e-unused: New file.
            * testsuite/gas/elf/symver.d: Remove unused section symbols.
            * testsuite/gas/i386/ilp32/elf/symver.d: Likewise.
            * testsuite/gas/i386/ilp32/x86-64-size-1.d: Likewise.
            * testsuite/gas/i386/ilp32/x86-64-size-3.d: Likewise.
            * testsuite/gas/i386/ilp32/x86-64-size-5.d: Likewise.
            * testsuite/gas/i386/ilp32/x86-64-unwind.d: Likewise.
            * testsuite/gas/i386/size-1.d: Likewise.
            * testsuite/gas/i386/size-3.d: Likewise.
            * testsuite/gas/i386/svr4.d: Likewise.
            * testsuite/gas/i386/x86-64-size-1.d: Likewise.
            * testsuite/gas/i386/x86-64-size-3.d: Likewise.
            * testsuite/gas/i386/x86-64-size-5.d: Likewise.
            * testsuite/gas/i386/x86-64-unwind.d: Likewise.

    ld/

            PR 27109
            * testsuite/ld-elf/export-class.sd: Adjust the expected output.
            * testsuite/ld-elf/loadaddr3b.d: Likewise.
            * testsuite/ld-i386/ibt-plt-1.d: Likewise.
            * testsuite/ld-i386/ibt-plt-2a.d: Likewise.
            * testsuite/ld-i386/ibt-plt-2c.d: Likewise.
            * testsuite/ld-i386/ibt-plt-3a.d: Likewise.
            * testsuite/ld-i386/ibt-plt-3c.d: Likewise.
            * testsuite/ld-i386/pr19636-1d.d: Likewise.
            * testsuite/ld-i386/pr19636-1l.d: Likewise.
            * testsuite/ld-i386/pr19636-2c.d: Likewise.
            * testsuite/ld-ifunc/ifunc-2-i386-now.d: Likewise.
            * testsuite/ld-ifunc/ifunc-2-local-i386-now.d: Likewise.
            * testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d: Likewise.
            * testsuite/ld-ifunc/ifunc-2-x86-64-now.d: Likewise.
            * testsuite/ld-ifunc/ifunc-21-x86-64.d: Likewise.
            * testsuite/ld-ifunc/ifunc-22-x86-64.d: Likewise.
            * testsuite/ld-ifunc/pr17154-i386-now.d: Likewise.
            * testsuite/ld-ifunc/pr17154-i386.d: Likewise.
            * testsuite/ld-ifunc/pr17154-x86-64-now.d: Likewise.
            * testsuite/ld-ifunc/pr17154-x86-64.d: Likewise.
            * testsuite/ld-x86-64/bnd-branch-1-now.d: Likewise.
            * testsuite/ld-x86-64/bnd-ifunc-1-now.d: Likewise.
            * testsuite/ld-x86-64/bnd-ifunc-2-now.d: Likewise.
            * testsuite/ld-x86-64/bnd-ifunc-2.d: Likewise.
            * testsuite/ld-x86-64/bnd-plt-1-now.d: Likewise.
            * testsuite/ld-x86-64/bnd-plt-1.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-1-x32.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-1.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-2a-x32.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-2c-x32.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-2c.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-3a-x32.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-3a.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-3c-x32.d: Likewise.
            * testsuite/ld-x86-64/ibt-plt-3c.d: Likewise.
            * testsuite/ld-x86-64/pr19609-4e.d: Likewise.
            * testsuite/ld-x86-64/pr19609-6a.d: Likewise.
            * testsuite/ld-x86-64/pr19609-6b.d: Likewise.
            * testsuite/ld-x86-64/pr19609-7b.d: Likewise.
            * testsuite/ld-x86-64/pr19609-7d.d: Likewise.
            * testsuite/ld-x86-64/pr19636-2l.d: Likewise.
            * testsuite/ld-x86-64/pr20253-1d.d: Likewise.
            * testsuite/ld-x86-64/pr20253-1h.d: Likewise.
            * testsuite/ld-x86-64/pr21038b-now.d: Likewise.
            * testsuite/ld-x86-64/pr21038b.d: Likewise.
            * testsuite/ld-x86-64/pr21038c-now.d: Likewise.
            * testsuite/ld-x86-64/pr21038c.d: Likewise.
            * testsuite/ld-x86-64/pr23854.d: Likewise.
            * testsuite/ld-x86-64/pr25416-3.d: Likewise.
            * testsuite/ld-x86-64/pr25416-4.d: Likewise.
            * testsuite/ld-i386/plt-pic.pd: Likewise.
            * testsuite/ld-i386/plt-pic2.dd: Likewise.
            * testsuite/ld-i386/plt.pd: Likewise.
            * testsuite/ld-i386/plt2.dd: Likewise.
            * testsuite/ld-i386/tlsbin.rd: Likewise.
            * testsuite/ld-i386/tlsbin2.rd: Likewise.
            * testsuite/ld-i386/tlsbindesc.rd: Likewise.
            * testsuite/ld-i386/tlsdesc.rd: Likewise.
            * testsuite/ld-i386/tlsgdesc.rd: Likewise.
            * testsuite/ld-i386/tlsnopic.rd: Likewise.
            * testsuite/ld-i386/tlspic.rd: Likewise.
            * testsuite/ld-i386/tlspic2.rd: Likewise.
            * testsuite/ld-x86-64/mpx3.dd: Likewise.
            * testsuite/ld-x86-64/mpx3n.dd: Likewise.
            * testsuite/ld-x86-64/mpx4.dd: Likewise.
            * testsuite/ld-x86-64/mpx4n.dd: Likewise.
            * testsuite/ld-x86-64/pe-x86-64-1.od: Likewise.
            * testsuite/ld-x86-64/pe-x86-64-2.od: Likewise.
            * testsuite/ld-x86-64/pe-x86-64-3.od: Likewise.
            * testsuite/ld-x86-64/pe-x86-64-4.od: Likewise.
            * testsuite/ld-x86-64/plt.pd: Likewise.
            * testsuite/ld-x86-64/plt2.dd: Likewise.
            * testsuite/ld-x86-64/tlsbin.rd: Likewise.
            * testsuite/ld-x86-64/tlsbin2.rd: Likewise.
            * testsuite/ld-x86-64/tlsbindesc.rd: Likewise.
            * testsuite/ld-x86-64/tlsdesc.rd: Likewise.
            * testsuite/ld-x86-64/tlsgdesc.rd: Likewise.
            * testsuite/ld-x86-64/tlspic.rd: Likewise.
            * testsuite/ld-x86-64/tlspic2.rd: Likewise.
            * testsuite/ld-elf/sec64k.exp: Check
            is_elf_unused_section_symbols.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]