mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
68b007788a
Linker generated relative relocations don't have symbol info: [hjl@gnu-cfl-2 tmpdir]$ readelf -rW dump Relocation section '.rela.dyn' at offset 0x180 contains 2 entries: Offset Info Type Sym. Value Symbol's Name + Addend 00002f70 00000008 R_X86_64_RELATIVE 1000 00002f68 00000025 R_X86_64_IRELATIVE 1007 [hjl@gnu-cfl-2 tmpdir]$ Add -z report-relative-reloc to x86 ELF linker to report dynamic relative relocations: [hjl@gnu-cfl-2 tmpdir]$ ../ld-new -pie -melf32_x86_64 -z report-relative-reloc -o dump report-reloc-1.o dump: R_X86_64_IRELATIVE (offset: 0x00002f68, info: 0x00000025, addend: 0x00001007) against 'ifunc' for section '.data.rel.ro.local' in report-reloc-1.o dump: R_X86_64_RELATIVE (offset: 0x00002f70, info: 0x00000008, addend: 0x00001000) against '_start' for section '.data.rel.ro.local' in report-reloc-1.o [hjl@gnu-cfl-2 tmpdir]$ It can be used to map relative relocations to corresponding symbols. bfd/ * elf-linker-x86.h (elf_linker_x86_params): Add report_relative_reloc. * elf32-i386.c (elf_i386_relocate_section): Call _bfd_x86_elf_link_report_relative_reloc to report relative relocations for -z report-relative-reloc. (elf_i386_finish_dynamic_symbol): Likewse. * elf64-x86-64.c (elf_x86_64_relocate_section): Likewse. (elf_x86_64_finish_dynamic_symbol): Likewse. * elfxx-x86.c (_bfd_x86_elf_link_report_relative_reloc): New function. * elfxx-x86.h (_bfd_x86_elf_link_report_relative_reloc): New prototype. ld/ * NEWS: Mention -z report-relative-reloc. * ld.texi: Document -z report-relative-reloc. * emulparams/elf32_x86_64.sh: Source x86-report-relative.sh. * emulparams/elf_i386.sh: Likewse. * emulparams/elf_x86_64.sh: Likewse. * emulparams/x86-report-relative.sh: New file. * testsuite/ld-i386/report-reloc-1.d: Likewse. * testsuite/ld-i386/report-reloc-1.l: Likewse. * testsuite/ld-i386/report-reloc-1.s: Likewse. * testsuite/ld-x86-64/report-reloc-1-x32.d: Likewse. * testsuite/ld-x86-64/report-reloc-1.d: Likewse. * testsuite/ld-x86-64/report-reloc-1.l: Likewse. * testsuite/ld-x86-64/report-reloc-1.s: Likewse. * testsuite/ld-i386/i386.exp: Run report-reloc-1. * testsuite/ld-x86-64/x86-64.exp: Run report-reloc-1 and report-reloc-1-x32.
42 lines
1.2 KiB
Bash
42 lines
1.2 KiB
Bash
source_sh ${srcdir}/emulparams/plt_unwind.sh
|
|
source_sh ${srcdir}/emulparams/extern_protected_data.sh
|
|
source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
|
|
source_sh ${srcdir}/emulparams/call_nop.sh
|
|
source_sh ${srcdir}/emulparams/cet.sh
|
|
source_sh ${srcdir}/emulparams/x86-report-relative.sh
|
|
source_sh ${srcdir}/emulparams/x86-64-level.sh
|
|
source_sh ${srcdir}/emulparams/static.sh
|
|
SCRIPT_NAME=elf
|
|
OUTPUT_FORMAT="elf32-i386"
|
|
NO_RELA_RELOCS=yes
|
|
TEXT_START_ADDR=0x08048000
|
|
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
|
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
|
ARCH=i386
|
|
MACHINE=
|
|
TEMPLATE_NAME=elf
|
|
EXTRA_EM_FILE="elf-x86"
|
|
GENERATE_SHLIB_SCRIPT=yes
|
|
GENERATE_PIE_SCRIPT=yes
|
|
NO_SMALL_DATA=yes
|
|
SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 12 ? 12 : 0"
|
|
IREL_IN_PLT=
|
|
# These sections are placed right after .plt section.
|
|
OTHER_PLT_SECTIONS="
|
|
.plt.got ${RELOCATING-0} : { *(.plt.got) }
|
|
.plt.sec ${RELOCATING-0} : { *(.plt.sec) }
|
|
"
|
|
|
|
# Linux modify the default library search path to first include
|
|
# a 32-bit specific directory.
|
|
case "$target" in
|
|
x86_64*-linux* | i[3-7]86*-linux*)
|
|
case "$EMULATION_NAME" in
|
|
*i386*)
|
|
LIBPATH_SUFFIX=32
|
|
LIBPATH_SUFFIX_SKIP=64
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|