diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-02-06 19:37:54 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-02-06 19:40:38 -0800 |
commit | 5242a0a000ad7d3f2fa1cd0023f692d53261b302 (patch) | |
tree | d63d80ceaf397af290aadb5619a6a20299984ded /bfd | |
parent | b7d072167715829eed0622616f6ae0182900de3e (diff) | |
download | gdb-5242a0a000ad7d3f2fa1cd0023f692d53261b302.zip gdb-5242a0a000ad7d3f2fa1cd0023f692d53261b302.tar.gz gdb-5242a0a000ad7d3f2fa1cd0023f692d53261b302.tar.bz2 |
ld: Issue an error for GC on __patchable_function_entries section
__patchable_function_entries section is generated by a compiler with
-fpatchable-function-entry=XX. The assembly code looks like this:
---
.text
.globl _start
.type _start, %function
_start:
.section __patchable_function_entries,"aw",%progbits
.dc.a .LPFE1
.text
.LPFE1:
.byte 0
---
But --gc-sections will silently remove __patchable_function_entries
section and generate corrupt result. This patch disallows garbage
collection on __patchable_function_entries section without linked-to
section.
bfd/
PR ld/25490
* elflink.c (_bfd_elf_gc_mark_extra_sections): Issue an error
for garbage collection on __patchable_function_entries section
without linked-to section.
ld/
PR ld/25490
* testsuite/ld-elf/pr25490-1.d: New file.
* testsuite/ld-elf/pr25490-1.s: Likewise.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elflink.c | 7 |
2 files changed, 14 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 9971885..e1a8412 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,12 @@ 2020-02-06 H.J. Lu <hongjiu.lu@intel.com> + PR ld/25490 + * elflink.c (_bfd_elf_gc_mark_extra_sections): Issue an error + for garbage collection on __patchable_function_entries section + without linked-to section. + +2020-02-06 H.J. Lu <hongjiu.lu@intel.com> + PR gas/25381 * bfd-in2.h: Regenerated. * elflink.c (_bfd_elf_gc_mark_extra_sections): Call mark_hook diff --git a/bfd/elflink.c b/bfd/elflink.c index 30a572d..3add9f1 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -13365,6 +13365,13 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info, && (isec->flags & SEC_DEBUGGING) && CONST_STRNEQ (isec->name, ".debug_line.")) debug_frag_seen = TRUE; + else if (strcmp (bfd_section_name (isec), + "__patchable_function_entries") == 0 + && elf_linked_to_section (isec) == NULL) + info->callbacks->einfo (_("%F%P: %pB(%pA): error: " + "need linked-to section " + "for --gc-sections\n"), + isec->owner, isec); } /* If no non-note alloc section in this file will be kept, then |