mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-18 16:03:17 +00:00
Search LLVM_LIB_SEARCH_PATH for objects to allow it to find crtend.o
Implement minor library linking optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6181 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0ec3590664
commit
7cb77e188f
@ -79,12 +79,20 @@ static inline bool FileExists(const std::string &FN) {
|
||||
|
||||
// LoadObject - Read the specified "object file", which should not search the
|
||||
// library path to find it.
|
||||
static inline std::auto_ptr<Module> LoadObject(const std::string &FN,
|
||||
static inline std::auto_ptr<Module> LoadObject(std::string FN,
|
||||
std::string &OutErrorMessage) {
|
||||
if (Verbose) std::cerr << "Loading '" << FN << "'\n";
|
||||
if (!FileExists(FN)) {
|
||||
OutErrorMessage = "could not find input file '" + FN + "'!";
|
||||
return std::auto_ptr<Module>();
|
||||
// Attempt to load from the LLVM_LIB_SEARCH_PATH directory... if we would
|
||||
// otherwise fail. This is used to locate objects like crtend.o.
|
||||
//
|
||||
char *SearchPath = getenv("LLVM_LIB_SEARCH_PATH");
|
||||
if (SearchPath && FileExists(std::string(SearchPath)+"/"+FN))
|
||||
FN = std::string(SearchPath)+"/"+FN;
|
||||
else {
|
||||
OutErrorMessage = "could not find input file '" + FN + "'!";
|
||||
return std::auto_ptr<Module>();
|
||||
}
|
||||
}
|
||||
|
||||
std::string ErrorMessage;
|
||||
@ -224,6 +232,13 @@ static void GetAllUndefinedSymbols(Module *M,
|
||||
|
||||
static bool LinkLibrary(Module *M, const std::string &LibName,
|
||||
std::string &ErrorMessage) {
|
||||
std::set<std::string> UndefinedSymbols;
|
||||
GetAllUndefinedSymbols(M, UndefinedSymbols);
|
||||
if (UndefinedSymbols.empty()) {
|
||||
if (Verbose) std::cerr << " No symbols undefined, don't link library!\n";
|
||||
return false; // No need to link anything in!
|
||||
}
|
||||
|
||||
std::vector<Module*> Objects;
|
||||
bool isArchive;
|
||||
if (LoadLibrary(LibName, Objects, isArchive, ErrorMessage)) return true;
|
||||
@ -234,9 +249,6 @@ static bool LinkLibrary(Module *M, const std::string &LibName,
|
||||
for (unsigned i = 0; i != Objects.size(); ++i)
|
||||
GetAllDefinedSymbols(Objects[i], DefinedSymbols[i]);
|
||||
|
||||
std::set<std::string> UndefinedSymbols;
|
||||
GetAllUndefinedSymbols(M, UndefinedSymbols);
|
||||
|
||||
bool Linked = true;
|
||||
while (Linked) { // While we are linking in object files, loop.
|
||||
Linked = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user