summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/Core/Resolver.cpp7
-rw-r--r--lld/test/core/absolute-basic.objtxt2
2 files changed, 7 insertions, 2 deletions
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp
index 63c2b317f48..ff217f248ea 100644
--- a/lld/lib/Core/Resolver.cpp
+++ b/lld/lib/Core/Resolver.cpp
@@ -383,11 +383,16 @@ void Resolver::deadStripOptimize() {
// Some type of references prevent referring atoms to be dead-striped.
// Make a reverse map of such references before traversing the graph.
- for (const Atom *atom : _atoms)
+ // While traversing the list of atoms, mark AbsoluteAtoms as live
+ // in order to avoid reclaim.
+ for (const Atom *atom : _atoms) {
if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(atom))
for (const Reference *ref : *defAtom)
if (isBackref(ref))
_reverseRef[ref->target()].insert(atom);
+ if (const AbsoluteAtom *absAtom = dyn_cast<AbsoluteAtom>(atom))
+ markLive(absAtom);
+ }
// By default, shared libraries are built with all globals as dead strip roots
if (_context.globalsAreDeadStripRoots())
diff --git a/lld/test/core/absolute-basic.objtxt b/lld/test/core/absolute-basic.objtxt
index af64794514a..edfbe8629b0 100644
--- a/lld/test/core/absolute-basic.objtxt
+++ b/lld/test/core/absolute-basic.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core --dead-strip %s | FileCheck %s
#
# Test that absolute symbols are parsed and preserved
OpenPOWER on IntegriCloud