diff options
author | Ian Lance Taylor <ian@airs.com> | 2012-03-13 16:08:53 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 2012-03-13 16:08:53 +0000 |
commit | fd325007590a9f768fa93840eb1f6af48e9d25f7 (patch) | |
tree | afe2a929d91b92ad9e84d361a8b6f325b76a09a0 /gold | |
parent | 87b0bb13cbbea83ec1896b3ab915c8ce48ab6d44 (diff) | |
download | gdb-fd325007590a9f768fa93840eb1f6af48e9d25f7.zip gdb-fd325007590a9f768fa93840eb1f6af48e9d25f7.tar.gz gdb-fd325007590a9f768fa93840eb1f6af48e9d25f7.tar.bz2 |
* resolve.cc (Symbol_table::resolve): When merging common symbols,
keep the larger alignment.
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 5 | ||||
-rw-r--r-- | gold/resolve.cc | 19 |
2 files changed, 20 insertions, 4 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 0a72132..47d15a9 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -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 diff --git a/gold/resolve.cc b/gold/resolve.cc index 780038a..0da8da2 100644 --- a/gold/resolve.cc +++ b/gold/resolve.cc @@ -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. |