From 16526e42c26b00e2424a0d0b5a73c04f010f7a9e Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 28 Apr 2016 06:38:41 -0700 Subject: Add _bfd_elf_record_start_stop --- bfd/elf-bfd.h | 3 +++ bfd/elflink.c | 21 +++++++++++++++++++++ ld/emultempl/elf32.em | 2 ++ 3 files changed, 26 insertions(+) diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 6c05b55..480f1cb 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -2339,6 +2339,9 @@ extern bfd_boolean bfd_elf_gc_common_final_link extern asection *_bfd_elf_is_start_stop (const struct bfd_link_info *, struct elf_link_hash_entry *); +extern void _bfd_elf_record_start_stop + (const struct bfd_link_info *); + extern bfd_boolean bfd_elf_reloc_symbol_deleted_p (bfd_vma, void *); diff --git a/bfd/elflink.c b/bfd/elflink.c index b6ff6b6..6c2ddb4 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -13791,3 +13791,24 @@ elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel) BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size); bed->s->swap_reloc_out (abfd, rel, loc); } + +/* For undefined __start_ and __stop_ symbols, set + def_regular to 1. This is called via elf_link_hash_traverse. */ + +static bfd_boolean +elf_link_record_start_stop (struct elf_link_hash_entry *h, void *data) +{ + const struct bfd_link_info * info + = (const struct bfd_link_info *) data; + if (_bfd_elf_is_start_stop (info, h) != NULL) + h->def_regular = 1; + return TRUE; +} + +void +_bfd_elf_record_start_stop (const struct bfd_link_info * info) +{ + elf_link_hash_traverse (elf_hash_table (info), + elf_link_record_start_stop, + (void *) info); +} diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index cc2f056..ad48ce4 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -1445,6 +1445,8 @@ gld${EMULATION_NAME}_record_link_assignments (lang_phase_type phase) let the ELF backend know about them in case the variables are referred to by dynamic objects. */ lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment); + + _bfd_elf_record_start_stop (&link_info); } } -- cgit v1.1