forked from OSchip/llvm-project
[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
This commit is contained in:
parent
94976f70af
commit
b4eb64ef6a
|
@ -101,11 +101,6 @@ public:
|
|||
static bool parse(int argc, const char *argv[], MachOLinkingContext &info,
|
||||
raw_ostream &diagnostics = llvm::errs());
|
||||
|
||||
// Reads a file from disk to memory. Returns only a needed chunk
|
||||
// if a fat binary.
|
||||
static ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
getMemoryBuffer(MachOLinkingContext &ctx, StringRef path);
|
||||
|
||||
private:
|
||||
DarwinLdDriver() LLVM_DELETED_FUNCTION;
|
||||
};
|
||||
|
|
|
@ -253,6 +253,10 @@ public:
|
|||
/// Used to keep track of direct and indirect dylibs.
|
||||
void registerDylib(mach_o::MachODylibFile *dylib, bool upward) const;
|
||||
|
||||
// Reads a file from disk to memory. Returns only a needed chunk
|
||||
// if a fat binary.
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> getMemoryBuffer(StringRef path);
|
||||
|
||||
/// Used to find indirect dylibs. Instantiates a MachODylibFile if one
|
||||
/// has not already been made for the requested dylib. Uses -L and -F
|
||||
/// search paths to allow indirect dylibs to be overridden.
|
||||
|
|
|
@ -77,8 +77,7 @@ loadFile(MachOLinkingContext &ctx, StringRef path,
|
|||
if (ctx.logInputFiles())
|
||||
diag << path << "\n";
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> mbOrErr =
|
||||
DarwinLdDriver::getMemoryBuffer(ctx, path);
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> mbOrErr = ctx.getMemoryBuffer(path);
|
||||
if (std::error_code ec = mbOrErr.getError())
|
||||
return makeErrorFile(path, ec);
|
||||
std::vector<std::unique_ptr<File>> files;
|
||||
|
@ -264,25 +263,6 @@ static bool parseNumberBase16(StringRef numStr, uint64_t &baseAddress) {
|
|||
|
||||
namespace lld {
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
DarwinLdDriver::getMemoryBuffer(MachOLinkingContext &ctx, StringRef path) {
|
||||
ctx.addInputFileDependency(path);
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> mbOrErr =
|
||||
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 (ctx.sliceFromFatFile(*mb, offset, size))
|
||||
return MemoryBuffer::getFileSlice(path, size, offset);
|
||||
return std::move(mb);
|
||||
}
|
||||
|
||||
bool DarwinLdDriver::linkMachO(int argc, const char *argv[],
|
||||
raw_ostream &diagnostics) {
|
||||
MachOLinkingContext ctx;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue