* resolve.cc (Symbol_table::resolve): When merging common symbols,
authorIan Lance Taylor <ian@airs.com>
Tue, 13 Mar 2012 16:08:53 +0000 (16:08 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 13 Mar 2012 16:08:53 +0000 (16:08 +0000)
keep the larger alignment.

gold/ChangeLog
gold/resolve.cc

index 0a72132fe02e26a85d449e606e5eebb95182e923..47d15a93ed2b076f70013840ed10227bee646280 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-13  Ian Lance Taylor  <iant@google.com>
+
+       * resolve.cc (Symbol_table::resolve): When merging common symbols,
+       keep the larger alignment.
+
 2012-03-12  Cary Coutant  <ccoutant@google.com>
 
        * dwarf_reader.cc (Sized_dwarf_line_info::process_one_opcode): Fix
index 780038aee5ed383912072bf9cdc1b241223013da..0da8da2218a13e977b2889dd0c5bbf80836e41ae 100644 (file)
@@ -356,9 +356,15 @@ Symbol_table::resolve(Sized_symbol<size>* to,
                                    &adjust_dyndef))
     {
       elfcpp::STB tobinding = to->binding();
+      typename Sized_symbol<size>::Value_type tovalue = to->value();
       this->override(to, sym, st_shndx, is_ordinary, object, version);
-      if (adjust_common_sizes && tosize > to->symsize())
-        to->set_symsize(tosize);
+      if (adjust_common_sizes)
+       {
+         if (tosize > to->symsize())
+           to->set_symsize(tosize);
+         if (tovalue > to->value())
+           to->set_value(tovalue);
+       }
       if (adjust_dyndef)
        {
          // We are overriding an UNDEF or WEAK UNDEF with a DYN DEF.
@@ -368,8 +374,13 @@ Symbol_table::resolve(Sized_symbol<size>* to,
     }
   else
     {
-      if (adjust_common_sizes && sym.get_st_size() > tosize)
-        to->set_symsize(sym.get_st_size());
+      if (adjust_common_sizes)
+       {
+         if (sym.get_st_size() > tosize)
+           to->set_symsize(sym.get_st_size());
+         if (sym.get_st_value() > to->value())
+           to->set_value(sym.get_st_value());
+       }
       if (adjust_dyndef)
        {
          // We are keeping a DYN DEF after seeing an UNDEF or WEAK UNDEF.