[lld] Keep full library path in DT_NEEDED.
Fixes PR32572.
When
(a) a library has no soname
and (b) library is given on the command line with path (and not through -L/-l flags)
DT_NEEDED entry for such library keeps the path as given.
This behavior is consistent with gold and bfd, and is used in compiler-rt test suite.
This is a second attempt after r300007 got reverted. This time relro-omagic test is
changed in a way to avoid hardcoding the path to the test directory in the objdump'd
binary.
llvm-svn: 300011
This commit is contained in:
@@ -243,25 +243,26 @@ void ScriptParser::addFile(StringRef S) {
|
||||
SmallString<128> PathData;
|
||||
StringRef Path = (Config->Sysroot + S).toStringRef(PathData);
|
||||
if (sys::fs::exists(Path)) {
|
||||
Driver->addFile(Saver.save(Path));
|
||||
Driver->addFile(Saver.save(Path), /*WithLOption=*/false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (sys::path::is_absolute(S)) {
|
||||
Driver->addFile(S);
|
||||
Driver->addFile(S, /*WithLOption=*/false);
|
||||
} else if (S.startswith("=")) {
|
||||
if (Config->Sysroot.empty())
|
||||
Driver->addFile(S.substr(1));
|
||||
Driver->addFile(S.substr(1), /*WithLOption=*/false);
|
||||
else
|
||||
Driver->addFile(Saver.save(Config->Sysroot + "/" + S.substr(1)));
|
||||
Driver->addFile(Saver.save(Config->Sysroot + "/" + S.substr(1)),
|
||||
/*WithLOption=*/false);
|
||||
} else if (S.startswith("-l")) {
|
||||
Driver->addLibrary(S.substr(2));
|
||||
} else if (sys::fs::exists(S)) {
|
||||
Driver->addFile(S);
|
||||
Driver->addFile(S, /*WithLOption=*/false);
|
||||
} else {
|
||||
if (Optional<std::string> Path = findFromSearchPaths(S))
|
||||
Driver->addFile(Saver.save(*Path));
|
||||
Driver->addFile(Saver.save(*Path), /*WithLOption=*/true);
|
||||
else
|
||||
setError("unable to find " + S);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user