summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp')
-rw-r--r--lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp b/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
index 8333d099ccc..780c9c02fc8 100644
--- a/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
+++ b/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
@@ -167,6 +167,7 @@ private:
DylibPathToInfo _dylibInfo;
const DefinedAtom *_entryAtom;
AtomToIndex _atomToSymbolIndex;
+ std::vector<const Atom *> _machHeaderAliasAtoms;
};
@@ -331,7 +332,10 @@ void Util::appendAtom(SectionInfo *sect, const DefinedAtom *atom) {
void Util::assignAtomsToSections(const lld::File &atomFile) {
for (const DefinedAtom *atom : atomFile.defined()) {
- appendAtom(sectionForAtom(atom), atom);
+ if (atom->contentType() == DefinedAtom::typeMachHeader)
+ _machHeaderAliasAtoms.push_back(atom);
+ else
+ appendAtom(sectionForAtom(atom), atom);
}
}
@@ -653,6 +657,14 @@ void Util::buildAtomToAddressMap() {
<< " name=" << info.atom->name() << "\n");
}
}
+ for (const Atom *atom : _machHeaderAliasAtoms) {
+ _atomToAddress[atom] = _context.baseAddress();
+ DEBUG_WITH_TYPE("WriterMachO-address", llvm::dbgs()
+ << " address="
+ << llvm::format("0x%016X", _atomToAddress[atom])
+ << " atom=" << atom
+ << " name=" << atom->name() << "\n");
+ }
}
uint16_t Util::descBits(const DefinedAtom* atom) {
OpenPOWER on IntegriCloud