summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp9
-rw-r--r--llvm/test/ExecutionEngine/JITLink/X86/MachO_x86-64_relocations.s9
2 files changed, 17 insertions, 1 deletions
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp b/llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp
index b24b2256826..062bbda6f2a 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp
@@ -252,15 +252,22 @@ Error MachOAtomGraphBuilder::addNonCustomAtoms() {
DA.setCallable(*SymType & object::SymbolRef::ST_Function);
- // Check alt-entry.
+ // Check NDesc flags.
{
uint16_t NDesc = 0;
if (Obj.is64Bit())
NDesc = Obj.getSymbolTableEntry(SymI->getRawDataRefImpl()).n_desc;
else
NDesc = Obj.getSymbolTableEntry(SymI->getRawDataRefImpl()).n_desc;
+
+ // Record atom for alt-entry post-processing (where the layout-next
+ // constraints will be added).
if (NDesc & MachO::N_ALT_ENTRY)
AltEntryAtoms.push_back(&DA);
+
+ // If this atom has a no-dead-strip attr attached then mark it live.
+ if (NDesc & MachO::N_NO_DEAD_STRIP)
+ DA.setLive(true);
}
LLVM_DEBUG({
diff --git a/llvm/test/ExecutionEngine/JITLink/X86/MachO_x86-64_relocations.s b/llvm/test/ExecutionEngine/JITLink/X86/MachO_x86-64_relocations.s
index 568faebd965..c1792f65b8b 100644
--- a/llvm/test/ExecutionEngine/JITLink/X86/MachO_x86-64_relocations.s
+++ b/llvm/test/ExecutionEngine/JITLink/X86/MachO_x86-64_relocations.s
@@ -272,6 +272,15 @@ subtractor_with_alt_entry_subtrahend_quad_B:
.section __DATA,__nds_test_sect,regular,no_dead_strip
.quad 0
+# Check that unreferenced local symbols that have been marked no-dead-strip are
+# not dead-striped.
+#
+# jitlink-check: *{8}section_addr(macho_reloc.o, __nds_test_nlst) = 0
+ .section __DATA,__nds_test_nlst,regular
+ .no_dead_strip no_dead_strip_test_symbol
+no_dead_strip_test_symbol:
+ .quad 0
+
# Check that explicit zero-fill symbols are supported
# jitlink-check: *{8}zero_fill_test = 0
.globl zero_fill_test
OpenPOWER on IntegriCloud