Patch to fix a bug with version scripts and gc-sections in the GOLD linker.
Sriraman Tallam
tmsriram@google.com
Sun Jul 24 14:23:00 GMT 2011
More information about the Binutils mailing list
Sun Jul 24 14:23:00 GMT 2011
- Previous message (by thread): Patch to fix a bug with version scripts and gc-sections in the GOLD linker.
- Next message (by thread): [PATCH] Using -fPIC for libiberty on s390x
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Ian, That change does not break any test case. I submitted it after changing it. Thanks, -Sri. 2011-07-22 Sriraman Tallam <tmsriram@google.com> * symtab.cc (Symbol_table::add_from_relobj): Mark symbol as referenced only after checking if it cannot be forced local. * symtab.h (is_externally_visible): Check if the symbol is not forced local. Index: symtab.cc =================================================================== RCS file: /cvs/src/src/gold/symtab.cc,v retrieving revision 1.157 diff -u -u -p -r1.157 symtab.cc --- symtab.cc 8 Jul 2011 23:49:11 -0000 1.157 +++ symtab.cc 22 Jul 2011 22:30:19 -0000 @@ -1238,15 +1238,15 @@ Symbol_table::add_from_relobj( is_default_version, *psym, st_shndx, is_ordinary, orig_st_shndx); + if (is_forced_local) + this->force_local(res); + // If building a shared library using garbage collection, do not // treat externally visible symbols as garbage. if (parameters->options().gc_sections() && parameters->options().shared()) this->gc_mark_symbol_for_shlib(res); - if (is_forced_local) - this->force_local(res); - if (is_defined_in_discarded_section) res->set_is_defined_in_discarded_section(); Index: symtab.h =================================================================== RCS file: /cvs/src/src/gold/symtab.h,v retrieving revision 1.124 diff -u -u -p -r1.124 symtab.h --- symtab.h 8 Jul 2011 23:49:11 -0000 1.124 +++ symtab.h 22 Jul 2011 22:30:19 -0000 @@ -538,8 +538,9 @@ class Symbol bool is_externally_visible() const { - return (this->visibility_ == elfcpp::STV_DEFAULT - || this->visibility_ == elfcpp::STV_PROTECTED); + return ((this->visibility_ == elfcpp::STV_DEFAULT + || this->visibility_ == elfcpp::STV_PROTECTED) + && !this->is_forced_local_); } Thanks, -Sri. On Fri, Jul 22, 2011 at 3:09 PM, Ian Lance Taylor <iant@google.com> wrote: > Sriraman Tallam <tmsriram@google.com> writes: > >> Function bar is not garbage collected even though it is local. >> >> This simple patch fixes it. >> >> * symtab.cc (Symbol_table::gc_mark_symbol_for_shlib): Check if symbol >> is not forced local before marking it as referenced. >> (Symbol_table::add_from_relobj): Mark symbol as referenced only after >> checking if they cannot be forced local. > > I would like to suggest that you instead change > Symbol::is_externally_visible to return false if this->is_forced_local() > is true. I think that will fix your problem, and I don't think think > that will break anything--but, then, I haven't tried it. > > If that patch works, it is preapproved. > > Thanks. > > Ian >
- Previous message (by thread): Patch to fix a bug with version scripts and gc-sections in the GOLD linker.
- Next message (by thread): [PATCH] Using -fPIC for libiberty on s390x
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list