diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-08-11 12:58:52 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-08-11 12:59:11 -0700 |
commit | 97dc35c88dd470465a99edeb0b491012a368f2bf (patch) | |
tree | dbbd0ec476974879e80a24140beed3c941f315a8 /bfd/elf32-i386.c | |
parent | 922c5db5e733526f12e2fbfeb72c7f1f90089d53 (diff) | |
download | gdb-97dc35c88dd470465a99edeb0b491012a368f2bf.zip gdb-97dc35c88dd470465a99edeb0b491012a368f2bf.tar.gz gdb-97dc35c88dd470465a99edeb0b491012a368f2bf.tar.bz2 |
Skip IFUNC relocations in debug sections
Skip IFUNC relocations in debug sections ignored by ld.so.
bfd/
PR ld/18808
* elf32-i386.c (elf_i386_relocate_section): Skip IFUNC
relocations in debug sections.
* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
ld/testsuite/
PR ld/18808
* ld-ifunc/ifunc.exp: Add a test for PR ld/18808.
* ld-ifunc/pr18808.out: New file.
* ld-ifunc/pr18808a.c: Likewise.
* ld-ifunc/pr18808b.c: Likewise.
Diffstat (limited to 'bfd/elf32-i386.c')
-rw-r--r-- | bfd/elf32-i386.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 92e7f72..fb87421 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -3503,8 +3503,16 @@ elf_i386_relocate_section (bfd *output_bfd, bfd_vma plt_index; const char *name; - if ((input_section->flags & SEC_ALLOC) == 0 - || h->plt.offset == (bfd_vma) -1) + if ((input_section->flags & SEC_ALLOC) == 0) + { + /* Dynamic relocs are not propagated for SEC_DEBUGGING + sections because such sections are not SEC_ALLOC and + thus ld.so will not process them. */ + if ((input_section->flags & SEC_DEBUGGING) != 0) + break; + abort (); + } + else if (h->plt.offset == (bfd_vma) -1) abort (); /* STT_GNU_IFUNC symbol must go through PLT. */ |