diff options
| author | Greg Fitzgerald <garious@gmail.com> | 2015-01-23 23:26:13 +0000 |
|---|---|---|
| committer | Greg Fitzgerald <garious@gmail.com> | 2015-01-23 23:26:13 +0000 |
| commit | b4eb64ef6a26c361f246c4441db4a29b2c3acdb1 (patch) | |
| tree | cd48a77cf226f5e30a910963333ed9f4d7387f02 /lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp | |
| parent | 94976f70af5d5e2384f9cf7820728c1962d195bc (diff) | |
| download | bcm5719-llvm-b4eb64ef6a26c361f246c4441db4a29b2c3acdb1.tar.gz bcm5719-llvm-b4eb64ef6a26c361f246c4441db4a29b2c3acdb1.zip | |
[MachO] Remove dependency on lldDriver
Moved getMemoryBuffer from DarwnLdDriver to MachOLinkingContext.
lldMachO shared library target now builds.
Differential Review: http://reviews.llvm.org/D7155
llvm-svn: 226963
Diffstat (limited to 'lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp')
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp index 9fe16108a56..41da4e7d126 100644 --- a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp +++ b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp @@ -605,9 +605,27 @@ Writer &MachOLinkingContext::writer() const { return *_writer; } -MachODylibFile* MachOLinkingContext::loadIndirectDylib(StringRef path) { +ErrorOr<std::unique_ptr<MemoryBuffer>> +MachOLinkingContext::getMemoryBuffer(StringRef path) { + addInputFileDependency(path); + ErrorOr<std::unique_ptr<MemoryBuffer>> mbOrErr = - DarwinLdDriver::getMemoryBuffer(*this, path); + MemoryBuffer::getFileOrSTDIN(path); + if (std::error_code ec = mbOrErr.getError()) + return ec; + std::unique_ptr<MemoryBuffer> mb = std::move(mbOrErr.get()); + + // If buffer contains a fat file, find required arch in fat buffer + // and switch buffer to point to just that required slice. + uint32_t offset; + uint32_t size; + if (sliceFromFatFile(*mb, offset, size)) + return MemoryBuffer::getFileSlice(path, size, offset); + return std::move(mb); +} + +MachODylibFile* MachOLinkingContext::loadIndirectDylib(StringRef path) { + ErrorOr<std::unique_ptr<MemoryBuffer>> mbOrErr = getMemoryBuffer(path); if (mbOrErr.getError()) return nullptr; |

