mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 10:03:47 +08:00
Fix handling of common symbols with plugins.
gold/ChangeLog: 2014-09-17 Rafael Ávila de Espíndola <rafael.espindola@gmail.com> * plugin.cc (Sized_pluginobj::do_add_symbols): Ignore isym->size. * resolve.cc (Symbol_table::resolve): Don't override common symbols during the replacement phase.
This commit is contained in:
parent
3a53193762
commit
6168c2a1c6
@ -1,3 +1,9 @@
|
||||
2014-09-17 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
|
||||
|
||||
* plugin.cc (Sized_pluginobj::do_add_symbols): Ignore isym->size.
|
||||
* resolve.cc (Symbol_table::resolve): Don't override common symbols
|
||||
during the replacement phase.
|
||||
|
||||
2014-09-17 Han Shen <shenhan@google.com>
|
||||
Jing Yu <jingyu@google.com>
|
||||
|
||||
|
@ -1053,8 +1053,6 @@ Sized_pluginobj<size, big_endian>::do_add_symbols(Symbol_table* symtab,
|
||||
elfcpp::Sym<size, big_endian> sym(symbuf);
|
||||
elfcpp::Sym_write<size, big_endian> osym(symbuf);
|
||||
|
||||
typedef typename elfcpp::Elf_types<size>::Elf_WXword Elf_size_type;
|
||||
|
||||
this->symbols_.resize(this->nsyms_);
|
||||
|
||||
for (int i = 0; i < this->nsyms_; ++i)
|
||||
@ -1125,7 +1123,7 @@ Sized_pluginobj<size, big_endian>::do_add_symbols(Symbol_table* symtab,
|
||||
|
||||
osym.put_st_name(0);
|
||||
osym.put_st_value(0);
|
||||
osym.put_st_size(static_cast<Elf_size_type>(isym->size));
|
||||
osym.put_st_size(0);
|
||||
osym.put_st_info(bind, elfcpp::STT_NOTYPE);
|
||||
osym.put_st_other(vis, 0);
|
||||
osym.put_st_shndx(shndx);
|
||||
|
@ -303,11 +303,14 @@ Symbol_table::resolve(Sized_symbol<size>* to,
|
||||
|
||||
// If we're processing replacement files, allow new symbols to override
|
||||
// the placeholders from the plugin objects.
|
||||
// Treat common symbols specially since it is possible that an ELF
|
||||
// file increased the size of the alignment.
|
||||
if (to->source() == Symbol::FROM_OBJECT)
|
||||
{
|
||||
Pluginobj* obj = to->object()->pluginobj();
|
||||
if (obj != NULL
|
||||
&& parameters->options().plugins()->in_replacement_phase())
|
||||
&& parameters->options().plugins()->in_replacement_phase()
|
||||
&& !to->is_common())
|
||||
{
|
||||
this->override(to, sym, st_shndx, is_ordinary, object, version);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user