diff options
| author | Nick Kledzik <kledzik@apple.com> | 2014-08-21 22:18:30 +0000 |
|---|---|---|
| committer | Nick Kledzik <kledzik@apple.com> | 2014-08-21 22:18:30 +0000 |
| commit | 7820c80f7db81b29911568613b6f01f481c65c2f (patch) | |
| tree | cec955a62b4277541a6ab08623cf09c2b283ea1e /lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp | |
| parent | 34fcca723b223caad4a48110be4269be3ca00321 (diff) | |
| download | bcm5719-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.cpp | 13 |
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 §ion, // 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, - §ion); + file.addZeroFillDefinedAtom(symbolName, symbolScope, offset, size, + noDeadStrip, copyRefs, §ion); } else { DefinedAtom::Merge merge = (symbolDescFlags & N_WEAK_DEF) ? DefinedAtom::mergeAsWeak : DefinedAtom::mergeNo; @@ -239,15 +240,15 @@ void atomFromSymbol(DefinedAtom::ContentType atomType, const Section §ion, std::string segSectName = section.segmentName.str() + "/" + section.sectionName.str(); file.addDefinedAtomInCustomSection(symbolName, symbolScope, atomType, - merge, thumb,offset, size, segSectName, - true, §ion); + merge, thumb, noDeadStrip, offset, + size, segSectName, true, §ion); } else { if ((atomType == lld::DefinedAtom::typeCode) && (symbolDescFlags & N_SYMBOL_RESOLVER)) { atomType = lld::DefinedAtom::typeResolver; } file.addDefinedAtom(symbolName, symbolScope, atomType, merge, - offset, size, thumb, copyRefs, §ion); + offset, size, thumb, noDeadStrip, copyRefs, §ion); } } } @@ -419,7 +420,7 @@ std::error_code processSection(DefinedAtom::ContentType atomType, "not zero terminated."); } file.addDefinedAtom(StringRef(), scope, atomType, merge, offset, size, - false, copyRefs, §ion); + false, false, copyRefs, §ion); offset += size; } } |

