summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
diff options
context:
space:
mode:
authorGreg Fitzgerald <garious@gmail.com>2015-01-23 23:26:13 +0000
committerGreg Fitzgerald <garious@gmail.com>2015-01-23 23:26:13 +0000
commitb4eb64ef6a26c361f246c4441db4a29b2c3acdb1 (patch)
treecd48a77cf226f5e30a910963333ed9f4d7387f02 /lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
parent94976f70af5d5e2384f9cf7820728c1962d195bc (diff)
downloadbcm5719-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.cpp22
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;
OpenPOWER on IntegriCloud