summaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/plugin.cc4
-rw-r--r--gold/resolve.cc5
3 files changed, 11 insertions, 4 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 98fa100d3c8..02e95caf6f9 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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>
diff --git a/gold/plugin.cc b/gold/plugin.cc
index 65197322dd2..0339d4289d4 100644
--- a/gold/plugin.cc
+++ b/gold/plugin.cc
@@ -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);
diff --git a/gold/resolve.cc b/gold/resolve.cc
index 8cc637a0f0d..abb5d90d772 100644
--- a/gold/resolve.cc
+++ b/gold/resolve.cc
@@ -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;