GNU Binutils with patches for OS216
Revisão | 16526e42c26b00e2424a0d0b5a73c04f010f7a9e (tree) |
---|---|
Hora | 2016-04-28 22:38:41 |
Autor | H.J. Lu <hjl.tools@gmai...> |
Commiter | H.J. Lu |
Add _bfd_elf_record_start_stop
@@ -2339,6 +2339,9 @@ extern bfd_boolean bfd_elf_gc_common_final_link | ||
2339 | 2339 | extern asection *_bfd_elf_is_start_stop |
2340 | 2340 | (const struct bfd_link_info *, struct elf_link_hash_entry *); |
2341 | 2341 | |
2342 | +extern void _bfd_elf_record_start_stop | |
2343 | + (const struct bfd_link_info *); | |
2344 | + | |
2342 | 2345 | extern bfd_boolean bfd_elf_reloc_symbol_deleted_p |
2343 | 2346 | (bfd_vma, void *); |
2344 | 2347 |
@@ -13791,3 +13791,24 @@ elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel) | ||
13791 | 13791 | BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size); |
13792 | 13792 | bed->s->swap_reloc_out (abfd, rel, loc); |
13793 | 13793 | } |
13794 | + | |
13795 | +/* For undefined __start_<name> and __stop_<name> symbols, set | |
13796 | + def_regular to 1. This is called via elf_link_hash_traverse. */ | |
13797 | + | |
13798 | +static bfd_boolean | |
13799 | +elf_link_record_start_stop (struct elf_link_hash_entry *h, void *data) | |
13800 | +{ | |
13801 | + const struct bfd_link_info * info | |
13802 | + = (const struct bfd_link_info *) data; | |
13803 | + if (_bfd_elf_is_start_stop (info, h) != NULL) | |
13804 | + h->def_regular = 1; | |
13805 | + return TRUE; | |
13806 | +} | |
13807 | + | |
13808 | +void | |
13809 | +_bfd_elf_record_start_stop (const struct bfd_link_info * info) | |
13810 | +{ | |
13811 | + elf_link_hash_traverse (elf_hash_table (info), | |
13812 | + elf_link_record_start_stop, | |
13813 | + (void *) info); | |
13814 | +} |
@@ -1445,6 +1445,8 @@ gld${EMULATION_NAME}_record_link_assignments (lang_phase_type phase) | ||
1445 | 1445 | let the ELF backend know about them in case the variables are |
1446 | 1446 | referred to by dynamic objects. */ |
1447 | 1447 | lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment); |
1448 | + | |
1449 | + _bfd_elf_record_start_stop (&link_info); | |
1448 | 1450 | } |
1449 | 1451 | } |
1450 | 1452 |