mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-27 01:28:46 +00:00
Enable unwinding using .eh_frame information through PLT entries. Based on x86-64. This enhances stack traces if the instruction pointer is in a PLT entry. For instance perf call graphs, when using --call-graph=dwarf, and Glibc backtraces, when using backtrace() e.g. from a signal handler. Note that GDB could already unwind through PLT entries using its s390- specific prologue unwinder. Furthermore this lays the foundation to generate SFrame information for the PLT section in the future. bfd/ * elf64-s390.c: Include dwarf2.h. (PLT_CIE_SIZE, PLT_FDE_SIZE, PLT_FDE_START_OFFSET, PLT_FDE_LEN_OFFSET, elf_s390x_eh_frame_plt): New .eh_frame template for .plt section. (elf_s390_link_hash_table): Add plt_eh_frame field. (elf_s390_create_dynamic_sections): New s390-specific wrapper around _bfd_elf_create_dynamic_sections. Create .eh_frame section for .plt section. (elf_backend_create_dynamic_sections): Register s390-specific elf_s390_create_dynamic_sections. (elf_s390_late_size_sections): Fill in .eh_frame section for .plt section. Write .plt section size into .eh_frame FDE covering .plt section. (elf_s390_finish_dynamic_sections): Write .plt section start into .eh_frame FDE covering .plt section. Call _bfd_elf_write_section_eh_frame on on htab->plt_eh_frame section. ld/ * NEWS: Add news entry. * emulparams/elf64_s390.sh: Include plt_unwind.sh. ld/testsuite/ * ld-s390/plt_64-1_eh.wf: New PLT .eh_frame generation test. * ld-s390/s390.exp: Link some existing test cases with --no-ld-generated-unwind-info so that they do not fail. Run new PLT .eh_frame generation test. Signed-off-by: Jens Remus <jremus@linux.ibm.com>
43 lines
989 B
Bash
43 lines
989 B
Bash
source_sh ${srcdir}/emulparams/plt_unwind.sh
|
|
SCRIPT_NAME=elf
|
|
ELFSIZE=64
|
|
OUTPUT_FORMAT="elf64-s390"
|
|
NO_REL_RELOCS=yes
|
|
TEXT_START_ADDR=0x1000000
|
|
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
|
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
|
ARCH="s390:64-bit"
|
|
MACHINE=
|
|
NOP=0x07070707
|
|
TEMPLATE_NAME=elf
|
|
GENERATE_SHLIB_SCRIPT=yes
|
|
GENERATE_PIE_SCRIPT=yes
|
|
GENERATE_RELRO_SCRIPT=yes
|
|
NO_SMALL_DATA=yes
|
|
EXTRA_EM_FILE=s390
|
|
IREL_IN_PLT=
|
|
SEPARATE_GOTPLT=0
|
|
test -z "$RELRO" && unset SEPARATE_GOTPLT
|
|
SYMBOL_ABI_ALIGNMENT=2
|
|
|
|
# Treat a host that matches the target with the possible exception of "x"
|
|
# in the name as if it were native.
|
|
if test `echo "$host" | sed -e s/390x/390/` \
|
|
= `echo "$target" | sed -e s/390x/390/`; then
|
|
case " $EMULATION_LIBPATH " in
|
|
*" ${EMULATION_NAME} "*)
|
|
NATIVE=yes
|
|
esac
|
|
fi
|
|
|
|
# Look for 64 bit target libraries in /lib64, /usr/lib64 etc., first
|
|
# on Linux.
|
|
case "$target" in
|
|
s390*-linux*)
|
|
case "$EMULATION_NAME" in
|
|
*64*)
|
|
LIBPATH_SUFFIX=64 ;;
|
|
esac
|
|
;;
|
|
esac
|