aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/gccld/gccld.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/tools/gccld/gccld.cpp b/tools/gccld/gccld.cpp
index 59306ba263..f520ad0ff9 100644
--- a/tools/gccld/gccld.cpp
+++ b/tools/gccld/gccld.cpp
@@ -281,7 +281,24 @@ int main(int argc, char **argv, char **envp) {
if (!Out2.good())
return PrintAndReturn(argv[0], "error opening '" + OutputFilename +
"' for writing!");
- Out2 << "#!/bin/sh\nlli $0.bc $*\n";
+ Out2 << "#!/bin/sh\nlli \\\n";
+ // gcc accepts -l<lib> and implicitly searches /lib and /usr/lib.
+ LibPaths.push_back("/lib");
+ LibPaths.push_back("/usr/lib");
+ // We don't need to link in libc! In fact, /usr/lib/libc.so may not be a
+ // shared object at all! See RH 8: plain text.
+ std::vector<std::string>::iterator libc =
+ std::find(Libraries.begin(), Libraries.end(), "c");
+ if (libc != Libraries.end()) Libraries.erase(libc);
+ // List all the shared object (native) libraries this executable will need
+ // on the command line, so that we don't have to do this manually!
+ for (std::vector<std::string>::iterator i = Libraries.begin(),
+ e = Libraries.end(); i != e; ++i) {
+ std::string FullLibraryPath = FindLib(*i, LibPaths, true);
+ if (!FullLibraryPath.empty())
+ Out2 << " -load=" << FullLibraryPath << " \\\n";
+ }
+ Out2 << " $0.bc $*\n";
Out2.close();
}