aboutsummaryrefslogtreecommitdiff
path: root/gold/resolve.cc
diff options
context:
space:
mode:
authorDoug Kwan <dougkwan@google.com>2010-08-13 00:18:19 +0000
committerDoug Kwan <dougkwan@google.com>2010-08-13 00:18:19 +0000
commit74f67560959c1ba65f6be4571d846b759522fcd5 (patch)
tree4fe9c88f4c8f983f92e2ce4ea93a411cf6ee15f9 /gold/resolve.cc
parente06bb621dfe6e7877c3f53c9c8d8ee4bee2c0268 (diff)
downloadgdb-74f67560959c1ba65f6be4571d846b759522fcd5.zip
gdb-74f67560959c1ba65f6be4571d846b759522fcd5.tar.gz
gdb-74f67560959c1ba65f6be4571d846b759522fcd5.tar.bz2
2010-08-12 Cary Coutant <ccoutant@google.com>
Doug Kwan <dougkwan@google.com> * resolve.cc (Symbol_table::should_override): When a weak dynamic defintion overrides non-weak undef, remember that the original undef is not weak. * symtab.cc (Symbol_table::sized_write_global): For undef without an original weak binding, set binding to global in output. * testsuite/Makefile.am: Add new test strong_ref_weak_def. * testsuite/Makefile.in: Regenerate. * testsuite/strong_ref_weak_def.sh: New file. * testsuite/strong_ref_weak_def_1.c: Ditto. * testsuite/strong_ref_weak_def_2.c: Ditto.
Diffstat (limited to 'gold/resolve.cc')
-rw-r--r--gold/resolve.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/gold/resolve.cc b/gold/resolve.cc
index af3d489..29d9d79 100644
--- a/gold/resolve.cc
+++ b/gold/resolve.cc
@@ -576,6 +576,11 @@ Symbol_table::should_override(const Symbol* to, unsigned int frombits,
return false;
case UNDEF * 16 + DYN_WEAK_DEF:
+ // When overriding an undef by a dynamic weak definition,
+ // we need to remember that the original undef was not weak.
+ *adjust_dyndef = true;
+ return true;
+
case DYN_UNDEF * 16 + DYN_WEAK_DEF:
case DYN_WEAK_UNDEF * 16 + DYN_WEAK_DEF:
// Use a weak dynamic definition if we have a reference.