PR30592 objcopy: allow --set-section-flags to add or remove SHF_X86_64_LARGE
authorFangrui Song <maskray@google.com>
Sun, 9 Jul 2023 17:57:19 +0000 (10:57 -0700)
committerFangrui Song <i@maskray.me>
Sun, 9 Jul 2023 17:57:19 +0000 (10:57 -0700)
commit5e24da908dbf6ddeb03e2b194f6b39dea3c660f3
treee794077f7d101002abb3d965f3377ebbbb4ea0a6
parent4fb2abb59d16f6395162f2e8d9494cde4a37e4a1
PR30592 objcopy: allow --set-section-flags to add or remove SHF_X86_64_LARGE

For example, objcopy --set-section-flags .data=alloc,large will add
SHF_X86_64_LARGE to the .data section.  Omitting "large" will drop the
SHF_X86_64_LARGE flag.

The bfd_section flag is named generically, SEC_ELF_LARGE, in case other
processors want to follow SHF_X86_64_LARGE.  SEC_ELF_LARGE has the same
value as SEC_TIC54X_BLOCK used by coff.

bfd/
    * section.c: Define SEC_ELF_LARGE.
    * bfd-in2.h: Regenerate.
    * elf64-x86-64.c (elf_x86_64_section_flags, elf_x86_64_fake_sections,
    elf_x86_64_copy_private_section_data): New.

binutils/
    * NEWS: Mention the new feature for objcopy.
    * doc/binutils.texi: Mention "large".
    * objcopy.c (parse_flags): Parse "large".
    (check_new_section_flags): Error if "large" is used with a
    non-x86-64 ELF target.
    * testsuite/binutils-all/x86-64/large-sections.d: New.
    * testsuite/binutils-all/x86-64/large-sections.s: New.
    * testsuite/binutils-all/x86-64/large-sections-i386.d: New.
    * testsuite/binutils-all/x86-64/large-sections-2.d: New.
    * testsuite/binutils-all/x86-64/large-sections-2-x32.d: New.
13 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/elf64-x86-64.c
bfd/section.c
binutils/ChangeLog
binutils/NEWS
binutils/doc/binutils.texi
binutils/objcopy.c
binutils/testsuite/binutils-all/x86-64/large-sections-2-x32.d [new file with mode: 0644]
binutils/testsuite/binutils-all/x86-64/large-sections-2.d [new file with mode: 0644]
binutils/testsuite/binutils-all/x86-64/large-sections-i386.d [new file with mode: 0644]
binutils/testsuite/binutils-all/x86-64/large-sections.d [new file with mode: 0644]
binutils/testsuite/binutils-all/x86-64/large-sections.s [new file with mode: 0644]