Snapshot. Includes first cut at output relocation sections.
[deliverable/binutils-gdb.git] / gold / resolve.cc
index 86645a4a188eb95b227e8c624a3692e9b159b9ff..2b6d65cd6b83d098d1f9b091a29c2e674a076e17 100644 (file)
@@ -106,7 +106,8 @@ Symbol_table::resolve(Sized_symbol<size>* to,
       abort();
     }
 
-  if (to->object() != NULL && to->object()->is_dynamic())
+  if (to->source() == Symbol::FROM_OBJECT
+      && to->object()->is_dynamic())
     tobits |= (1 << 1);
 
   switch (to->shnum())
@@ -174,6 +175,15 @@ Symbol_table::resolve(Sized_symbol<size>* to,
       break;
     }
 
+  if ((tobits & (1 << 1)) != (frombits & (1 << 1)))
+    {
+      // This symbol is seen in both a dynamic object and a regular
+      // object.  That means that we need the symbol to go into the
+      // dynamic symbol table, so that the dynamic linker can use the
+      // regular symbol to override or define the dynamic symbol.
+      to->set_needs_dynsym_entry();
+    }
+
   // FIXME: Warn if either but not both of TO and SYM are STT_TLS.
 
   // We use a giant switch table for symbol resolution.  This code is
This page took 0.027252 seconds and 4 git commands to generate.