diff options
author | Nick Clifton <nickc@redhat.com> | 2023-05-05 11:11:32 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2023-05-05 11:11:32 +0100 |
commit | e4fbcd83c2423221ddde99d50b432df7dda06f5f (patch) | |
tree | 568c4c39c1871246c47b921848aaa27d702438c6 /bfd | |
parent | 6c8a5ab90b0a6d2bb68ab3889ae363cbc9901791 (diff) | |
download | gdb-e4fbcd83c2423221ddde99d50b432df7dda06f5f.zip gdb-e4fbcd83c2423221ddde99d50b432df7dda06f5f.tar.gz gdb-e4fbcd83c2423221ddde99d50b432df7dda06f5f.tar.bz2 |
Debug info is lost for functions only called from functions marked with cmse_nonsecure_entr
PR 30354
* elf32-arm.c (elf32_arm_gc_mark_extra_sections): If any debug sections are marked then rerun the extra marking in order to pick up any dependencies.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf32-arm.c | 17 |
2 files changed, 21 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 013386d..b8150d4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2023-05-05 Nick Clifton <nickc@redhat.com> + + PR 30354 + * elf32-arm.c (elf32_arm_gc_mark_extra_sections): If any debug + sections are marked then rerun the extra marking in order to pick + up any dependencies. + 2023-05-03 Oleg Tolmatcev <oleg.tolmatcev@gmail.com> * archive.c (_bfd_write_archive_contents): Use a larger buffer in diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 7041366..cb22989 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -15937,7 +15937,7 @@ elf32_arm_gc_mark_extra_sections (struct bfd_link_info *info, struct elf_link_hash_entry **sym_hashes; struct elf32_arm_link_hash_entry *cmse_hash; bool again, is_v8m, first_bfd_browse = true; - bool debug_sec_need_to_be_marked = false; + bool extra_marks_added = false; asection *isec; _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook); @@ -15981,6 +15981,8 @@ elf32_arm_gc_mark_extra_sections (struct bfd_link_info *info, of them so no need for a second browsing. */ if (is_v8m && first_bfd_browse) { + bool debug_sec_need_to_be_marked = false; + sym_hashes = elf_sym_hashes (sub); bed = get_elf_backend_data (sub); symtab_hdr = &elf_tdata (sub)->symtab_hdr; @@ -15997,7 +15999,7 @@ elf32_arm_gc_mark_extra_sections (struct bfd_link_info *info, /* Assume it is a special symbol. If not, cmse_scan will warn about it and user can do something about it. */ if (startswith (cmse_hash->root.root.root.string, - CMSE_PREFIX)) + CMSE_PREFIX)) { cmse_sec = cmse_hash->root.root.u.def.section; if (!cmse_sec->gc_mark @@ -16018,15 +16020,24 @@ elf32_arm_gc_mark_extra_sections (struct bfd_link_info *info, { /* If not a debug sections, skip it. */ if (!isec->gc_mark && (isec->flags & SEC_DEBUGGING)) - isec->gc_mark = 1 ; + { + isec->gc_mark = 1; + extra_marks_added = true; + } } debug_sec_need_to_be_marked = false; } } } + first_bfd_browse = false; } + /* PR 30354: If we have added extra marks then make sure that any + dependencies of the newly marked sections are also marked. */ + if (extra_marks_added) + _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook); + return true; } |