[ELF] Determine default search directories from Context.

Target specific LinkingContext's  determine the default search directory.

No change in functionality.

llvm-svn: 227784
This commit is contained in:
Shankar Easwaran 2015-02-02 06:00:04 +00:00
parent b0a52838fa
commit 148cd8e8e9
4 changed files with 16 additions and 17 deletions

View File

@ -87,10 +87,6 @@ private:
static bool applyEmulation(llvm::Triple &triple, static bool applyEmulation(llvm::Triple &triple,
llvm::opt::InputArgList &args, llvm::opt::InputArgList &args,
raw_ostream &diag); raw_ostream &diag);
static void addPlatformSearchDirs(ELFLinkingContext &ctx,
llvm::Triple &triple,
llvm::Triple &baseTriple);
GnuLdDriver() LLVM_DELETED_FUNCTION; GnuLdDriver() LLVM_DELETED_FUNCTION;
}; };

View File

@ -291,6 +291,11 @@ public:
bool alignSegments() const { return _alignSegments; } bool alignSegments() const { return _alignSegments; }
void setAlignSegments(bool align) { _alignSegments = align; } void setAlignSegments(bool align) { _alignSegments = align; }
/// \brief add platform specific search directories.
virtual void addDefaultSearchDirs(llvm::Triple & /*triple*/) {
addSearchPath("=/usr/lib");
}
private: private:
ELFLinkingContext() LLVM_DELETED_FUNCTION; ELFLinkingContext() LLVM_DELETED_FUNCTION;

View File

@ -311,18 +311,6 @@ bool GnuLdDriver::applyEmulation(llvm::Triple &triple,
return true; return true;
} }
void GnuLdDriver::addPlatformSearchDirs(ELFLinkingContext &ctx,
llvm::Triple &triple,
llvm::Triple &baseTriple) {
if (triple.getOS() == llvm::Triple::NetBSD &&
triple.getArch() == llvm::Triple::x86 &&
baseTriple.getArch() == llvm::Triple::x86_64) {
ctx.addSearchPath("=/usr/lib/i386");
return;
}
ctx.addSearchPath("=/usr/lib");
}
#define LLVM_TARGET(targetName) \ #define LLVM_TARGET(targetName) \
if ((p = elf::targetName##LinkingContext::create(triple))) return p; if ((p = elf::targetName##LinkingContext::create(triple))) return p;
@ -403,8 +391,9 @@ bool GnuLdDriver::parse(int argc, const char *argv[],
for (auto libDir : parsedArgs->filtered(OPT_L)) for (auto libDir : parsedArgs->filtered(OPT_L))
ctx->addSearchPath(libDir->getValue()); ctx->addSearchPath(libDir->getValue());
// Add the default search directory specific to the target.
if (!parsedArgs->hasArg(OPT_nostdlib)) if (!parsedArgs->hasArg(OPT_nostdlib))
addPlatformSearchDirs(*ctx, triple, baseTriple); ctx->addDefaultSearchDirs(baseTriple);
// Handle --demangle option(For compatibility) // Handle --demangle option(For compatibility)
if (parsedArgs->getLastArg(OPT_demangle)) if (parsedArgs->getLastArg(OPT_demangle))

View File

@ -36,6 +36,15 @@ public:
return false; return false;
} }
} }
void addDefaultSearchDirs(llvm::Triple &baseTriple) override {
if (_triple.getOS() == llvm::Triple::NetBSD &&
baseTriple.getArch() == llvm::Triple::x86_64) {
addSearchPath("=/usr/lib/i386");
return;
}
ELFLinkingContext::addDefaultSearchDirs(baseTriple);
}
}; };
} // end namespace elf } // end namespace elf
} // end namespace lld } // end namespace lld