binutils-gdb/ld/testsuite
Indu Bhagat cf0e0a0ba9 bfd: linker: merge .sframe sections
The linker merges all the input .sframe sections.  When merging, the
linker verifies that all the input .sframe sections have the same
abi/arch.

The linker uses libsframe library to perform key actions on the
.sframe sections - decode, read, and create output data.  This
implies buildsystem changes to make and install libsframe before
libbfd.

The linker places the output .sframe section in a new segment of its
own: PT_GNU_SFRAME.  A new segment is not added, however, if the
generated .sframe section is empty.

When a section is discarded from the final link, the corresponding
entries in the .sframe section for those functions are also deleted.

The linker sorts the SFrame FDEs on start address by default and sets
the SFRAME_F_FDE_SORTED flag in the .sframe section.

This patch also adds support for generation of SFrame unwind
information for the .plt* sections on x86_64.  SFrame unwind info is
generated for IBT enabled PLT, lazy/non-lazy PLT.

The existing linker option --no-ld-generated-unwind-info has been
adapted to include the control of whether .sframe unwind information
will be generated for the linker generated sections like PLT.

Changes to the linker script have been made as necessary.

ChangeLog:

	* Makefile.def: Add install dependency on libsframe for libbfd.
	* Makefile.in: Regenerated.
	* bfd/Makefile.am: Add elf-sframe.c
	* bfd/Makefile.in: Regenerated.
	* bfd/bfd-in2.h (SEC_INFO_TYPE_SFRAME): Regenerated.
	* bfd/configure: Regenerate.
	* bfd/configure.ac: Add elf-sframe.lo.
	* bfd/elf-bfd.h (struct sframe_func_bfdinfo): New struct.
	(struct sframe_dec_info): Likewise.
	(struct sframe_enc_info): Likewise.
	(struct elf_link_hash_table): New member for encoded .sframe
	object.
	(struct output_elf_obj_tdata): New member.
	(elf_sframe): New access macro.
	(_bfd_elf_set_section_sframe): New declaration.
	* bfd/elf.c (get_segment_type): Handle new segment
	PT_GNU_SFRAME.
	(bfd_section_from_phdr): Likewise.
	(get_program_header_size): Likewise.
	(_bfd_elf_map_sections_to_segments): Likewise.
	* bfd/elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties): Add
	contents to the .sframe sections or .plt* entries.
	* bfd/elflink.c (elf_section_ignore_discarded_relocs): Handle
	SEC_INFO_TYPE_SFRAME.
	(_bfd_elf_default_action_discarded): Handle .sframe section.
	(elf_link_input_bfd): Merge .sframe section.
	(bfd_elf_final_link): Write the output .sframe section.
	(bfd_elf_discard_info): Handle discarding .sframe section.
	* bfd/elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Create
	.sframe section for .plt and .plt.sec.
	(_bfd_x86_elf_finish_dynamic_sections): Handle .sframe from
	.plt* sections.
	* bfd/elfxx-x86.h (PLT_SFRAME_FDE_START_OFFSET): New
	definition.
	(SFRAME_PLT0_MAX_NUM_FRES): Likewise.
	(SFRAME_PLTN_MAX_NUM_FRES): Likewise.
	(struct elf_x86_sframe_plt): New structure.
	(struct elf_x86_link_hash_table): New member.
	(struct elf_x86_init_table): New members for .sframe
	creation.
	* bfd/section.c: Add new definition SEC_INFO_TYPE_SFRAME.
	* binutils/readelf.c (get_segment_type): Handle new segment
	PT_GNU_SFRAME.
	* ld/ld.texi: Update documentation for
	--no-ld-generated-unwind-info.
	* ld/scripttempl/elf.sc: Support .sframe sections.
	* ld/Makefile.am (TESTSFRAMELIB): Use it.
	(check-DEJAGNU): Likewise.
	* ld/Makefile.in: Regenerated.
	* ld/configure.ac (TESTSFRAMELIB): Set to the .so or .a like TESTBFDLIB.
	* ld/configure: Regenerated.
	* bfd/elf-sframe.c: New file.

include/ChangeLog:

	* elf/common.h (PT_GNU_SFRAME): New definition.
	* elf/internal.h (struct elf_segment_map): Handle new segment
	type PT_GNU_SFRAME.

ld/testsuite/ChangeLog:

	* ld/testsuite/ld-bootstrap/bootstrap.exp: Add SFRAMELIB.
	* ld/testsuite/ld-aarch64/aarch64-elf.exp: Add new test
	  sframe-simple-1.
	* ld/testsuite/ld-aarch64/sframe-bar.s: New file.
	* ld/testsuite/ld-aarch64/sframe-foo.s: Likewise.
	* ld/testsuite/ld-aarch64/sframe-simple-1.d: Likewise.
	* ld/testsuite/ld-sframe/sframe-empty.d: New test.
	* ld/testsuite/ld-sframe/sframe-empty.s: New file.
	* ld/testsuite/ld-sframe/sframe.exp: New testsuite.
	* ld/testsuite/ld-x86-64/sframe-bar.s: New file.
	* ld/testsuite/ld-x86-64/sframe-foo.s: Likewise.
	* ld/testsuite/ld-x86-64/sframe-simple-1.d: Likewise.
	* ld/testsuite/ld-x86-64/sframe-plt-1.d: Likewise.
	* ld/testsuite/ld-x86-64/sframe-simple-1.d: Likewise.
	* ld/testsuite/ld-x86-64/x86-64.exp: Add new tests -
	  sframe-simple-1, sframe-plt-1.
	* ld/testsuite/lib/ld-lib.exp: Add new proc to check if
	  assembler supports SFrame section.
	* ld/testsuite/ld-sframe/discard.d: New file.
	* ld/testsuite/ld-sframe/discard.ld: Likewise.
	* ld/testsuite/ld-sframe/discard.s: Likewise.
2022-11-15 15:49:47 -08:00
..
config ld/testsuite: allow to force another directory for gcc linker 2022-09-22 09:23:18 +02:00
ld-aarch64 bfd: linker: merge .sframe sections 2022-11-15 15:49:47 -08:00
ld-alpha Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-arc Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-arm arm: PR 29739 Fix typo where ';' should not have been replaced with '@' 2022-11-02 17:58:53 +00:00
ld-auto-import Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-avr Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-bootstrap bfd: linker: merge .sframe sections 2022-11-15 15:49:47 -08:00
ld-bpf Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-cdtest Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-checks Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-cris Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-crx Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-csky Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-ctf Modify ld-ctf test files to suit ARM 2022-09-14 10:19:57 +09:30
ld-cygwin Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-d10v Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-discard Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-dynamic Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-elf pru: bfd: Correct default to no execstack 2022-11-14 17:42:22 +02:00
ld-elfcomm Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-elfvers ld/testsuite: skip tests related to -shared when disabled 2022-11-07 13:16:41 +01:00
ld-elfweak ld/testsuite: skip tests related to -shared when disabled 2022-11-07 13:16:41 +01:00
ld-fastcall Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-frv Add linker warning for when it creates an executable stack. 2022-04-20 13:39:05 +01:00
ld-gc Add linker warning for when it creates an executable stack. 2022-04-20 13:39:05 +01:00
ld-h8300 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-i386 i386: Don't allow GOTOFF relocation against IFUNC symbol for PIC 2022-07-21 11:40:27 -07:00
ld-ia64 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-ifunc i386: Don't allow GOTOFF relocation against IFUNC symbol for PIC 2022-07-21 11:40:27 -07:00
ld-libs Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-linkonce Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-loongarch-elf LoongArch: Fix R_LARCH_IRELATIVE insertion after elf_link_sort_relocs 2022-09-20 17:16:06 +08:00
ld-m68hc11 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-m68k Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-mep Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-metag Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-mips-elf BFD_RELOC_MIPS_16 2022-06-14 10:03:55 +09:30
ld-misc Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-mmix Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-mn10300 Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-msp430-elf Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-nds32 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-nios2 Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-or1k Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-pdp11 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-pe ld: Add module information substream to PDB files 2022-11-10 04:50:43 +00:00
ld-pie Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-plugin LTO: Handle __real_SYM reference in IR 2022-05-04 16:26:51 -07:00
ld-powerpc PowerPC32 ld test fails with --enable-targets=all 2022-07-26 22:14:20 +09:30
ld-pru Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-riscv-elf RISC-V: re-arrange opcode table for consistent alias handling 2022-09-30 10:19:00 +02:00
ld-s12z Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-s390 IBM zSystems: Issue error for *DBL relocs on misaligned symbols 2022-10-19 09:03:17 +02:00
ld-scripts ld testsuite xcoff XPASS 2022-04-21 15:30:50 +09:30
ld-selective Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-sframe bfd: linker: merge .sframe sections 2022-11-15 15:49:47 -08:00
ld-sh PR10372, SH: ld test with sim/sh/run fails always 2022-08-25 13:33:39 +09:30
ld-shared ld/testsuite: skip tests related to -shared when disabled 2022-11-07 13:16:41 +01:00
ld-size ld/testsuite: skip ld-size when -shared is not supported 2022-11-10 13:19:15 +01:00
ld-sparc Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-spu Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-srec Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-tic6x Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-tilegx Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-tilepro Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-undefined Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-unique ld/testsuite: consistently add board_ldflags when linking with GCC 2022-10-17 13:02:54 +02:00
ld-v850 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-vax-elf Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-visium Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-vsb ld: add hidden and internal visibility support for XCOFF 2022-01-12 09:08:25 +01:00
ld-vxworks Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-x86-64 bfd: linker: merge .sframe sections 2022-11-15 15:49:47 -08:00
ld-xstormy16 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-xtensa xtensa: bfd: fix TLS relocations generated for PIE 2022-09-02 09:54:49 -07:00
ld-z8k Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-z80 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
lib bfd: linker: merge .sframe sections 2022-11-15 15:49:47 -08:00
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012
ChangeLog-2013
ChangeLog-2014
ChangeLog-2015
ChangeLog-9303