summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
diff options
context:
space:
mode:
authorNick Kledzik <kledzik@apple.com>2014-08-21 22:18:30 +0000
committerNick Kledzik <kledzik@apple.com>2014-08-21 22:18:30 +0000
commit7820c80f7db81b29911568613b6f01f481c65c2f (patch)
treecec955a62b4277541a6ab08623cf09c2b283ea1e /lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
parent34fcca723b223caad4a48110be4269be3ca00321 (diff)
downloadbcm5719-llvm-7820c80f7db81b29911568613b6f01f481c65c2f.tar.gz
bcm5719-llvm-7820c80f7db81b29911568613b6f01f481c65c2f.zip
[mach-o] support N_NO_DEAD_STRIP nlist.desc bit
Mach-O symbols can have an attribute on them means their content should never be dead code stripped. This translates to deadStrip() == deadStripNever. llvm-svn: 216234
Diffstat (limited to 'lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp')
-rw-r--r--lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp b/lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
index 9b9c625ab76..aa4249fc8cd 100644
--- a/lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
+++ b/lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
@@ -225,9 +225,10 @@ void atomFromSymbol(DefinedAtom::ContentType atomType, const Section &section,
// difference between this and the next symbol.
uint64_t size = nextSymbolAddr - symbolAddr;
uint64_t offset = symbolAddr - section.address;
+ bool noDeadStrip = (symbolDescFlags & N_NO_DEAD_STRIP);
if (section.type == llvm::MachO::S_ZEROFILL) {
- file.addZeroFillDefinedAtom(symbolName, symbolScope, offset, size, copyRefs,
- &section);
+ file.addZeroFillDefinedAtom(symbolName, symbolScope, offset, size,
+ noDeadStrip, copyRefs, &section);
} else {
DefinedAtom::Merge merge = (symbolDescFlags & N_WEAK_DEF)
? DefinedAtom::mergeAsWeak : DefinedAtom::mergeNo;
@@ -239,15 +240,15 @@ void atomFromSymbol(DefinedAtom::ContentType atomType, const Section &section,
std::string segSectName = section.segmentName.str()
+ "/" + section.sectionName.str();
file.addDefinedAtomInCustomSection(symbolName, symbolScope, atomType,
- merge, thumb,offset, size, segSectName,
- true, &section);
+ merge, thumb, noDeadStrip, offset,
+ size, segSectName, true, &section);
} else {
if ((atomType == lld::DefinedAtom::typeCode) &&
(symbolDescFlags & N_SYMBOL_RESOLVER)) {
atomType = lld::DefinedAtom::typeResolver;
}
file.addDefinedAtom(symbolName, symbolScope, atomType, merge,
- offset, size, thumb, copyRefs, &section);
+ offset, size, thumb, noDeadStrip, copyRefs, &section);
}
}
}
@@ -419,7 +420,7 @@ std::error_code processSection(DefinedAtom::ContentType atomType,
"not zero terminated.");
}
file.addDefinedAtom(StringRef(), scope, atomType, merge, offset, size,
- false, copyRefs, &section);
+ false, false, copyRefs, &section);
offset += size;
}
}
OpenPOWER on IntegriCloud