diff options
author | Alan Modra <amodra@bigpond.net.au> | 2012-10-17 11:58:39 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2012-10-17 11:58:39 +0000 |
commit | 7ba7107d0a819a4e6ec2dbfdaeada41b12302309 (patch) | |
tree | 60d15c02ed682dce0287b591956465a6ef24240a | |
parent | 1b4e62b46d7d9894e0c42a881005bd47d97be402 (diff) | |
download | binutils-7ba7107d0a819a4e6ec2dbfdaeada41b12302309.tar.gz |
PR gold/14726
* gold.cc (queue_middle_tasks): Call gc_mark_symbol on _init and _fini.
-rw-r--r-- | gold/ChangeLog | 5 | ||||
-rw-r--r-- | gold/gold.cc | 12 |
2 files changed, 14 insertions, 3 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 7f7c01206..1f13f224a 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,8 @@ +2012-10-17 Alan Modra <amodra@gmail.com> + + PR gold/14726 + * gold.cc (queue_middle_tasks): Call gc_mark_symbol on _init and _fini. + 2012-10-16 Sriraman Tallam <tmsriram@google.com> * layout.cc (Layout::include_section): Keep sections marked diff --git a/gold/gold.cc b/gold/gold.cc index 0f9a22804..30d623e7f 100644 --- a/gold/gold.cc +++ b/gold/gold.cc @@ -502,9 +502,15 @@ queue_middle_tasks(const General_options& options, if (parameters->options().gc_sections()) { // Find the start symbol if any. - Symbol* start_sym = symtab->lookup(parameters->entry()); - if (start_sym != NULL) - symtab->gc_mark_symbol(start_sym); + Symbol* sym = symtab->lookup(parameters->entry()); + if (sym != NULL) + symtab->gc_mark_symbol(sym); + sym = symtab->lookup(parameters->options().init()); + if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj()) + symtab->gc_mark_symbol(sym); + sym = symtab->lookup(parameters->options().fini()); + if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj()) + symtab->gc_mark_symbol(sym); // Symbols named with -u should not be considered garbage. symtab->gc_mark_undef_symbols(layout); gold_assert(symtab->gc() != NULL); |