From d512afe3daabb46149f504445b6c0a401bf8fab3 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Wed, 12 Apr 2017 00:01:21 +0000 Subject: [PATCH] Revert "[lld] Keep full library path in DT_NEEDED." This reverts commit r300007. Reason: breaks all the bots. llvm-svn: 300008 --- lld/ELF/Driver.cpp | 11 +++-------- lld/ELF/Driver.h | 2 +- lld/ELF/InputFiles.cpp | 2 +- lld/ELF/InputFiles.h | 4 ---- lld/ELF/ScriptParser.cpp | 13 ++++++------- lld/test/ELF/as-needed-no-reloc.s | 2 +- lld/test/ELF/no-soname.s | 31 ------------------------------- lld/test/ELF/relro-omagic.s | 24 ++++++++++-------------- 8 files changed, 22 insertions(+), 67 deletions(-) delete mode 100644 lld/test/ELF/no-soname.s diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 8eb95f188b74..8e7ada6ec10e 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -153,7 +153,7 @@ LinkerDriver::getArchiveMembers(MemoryBufferRef MB) { // Opens and parses a file. Path has to be resolved already. // Newly created memory buffers are owned by this driver. -void LinkerDriver::addFile(StringRef Path, bool WithLOption) { +void LinkerDriver::addFile(StringRef Path) { using namespace sys::fs; Optional Buffer = readFile(Path); @@ -184,11 +184,6 @@ void LinkerDriver::addFile(StringRef Path, bool WithLOption) { return; } Files.push_back(createSharedFile(MBRef)); - // If the library is found at an explicitly given path use the entire path - // as he default soname. Such libraries should not require RPATH or - // LD_LIBRARY_PATH to run. - Files.back()->DefaultSoName = - WithLOption ? sys::path::filename(Path) : Path; return; default: if (InLib) @@ -201,7 +196,7 @@ void LinkerDriver::addFile(StringRef Path, bool WithLOption) { // Add a given library by searching it from input search paths. void LinkerDriver::addLibrary(StringRef Name) { if (Optional Path = searchLibrary(Name)) - addFile(*Path, /*WithLOption=*/true); + addFile(*Path); else error("unable to find library -l" + Name); } @@ -767,7 +762,7 @@ void LinkerDriver::createFiles(opt::InputArgList &Args) { addLibrary(Arg->getValue()); break; case OPT_INPUT: - addFile(Arg->getValue(), /*WithLOption=*/false); + addFile(Arg->getValue()); break; case OPT_alias_script_T: case OPT_script: diff --git a/lld/ELF/Driver.h b/lld/ELF/Driver.h index 6a75a8942ca0..8bb2093e86ca 100644 --- a/lld/ELF/Driver.h +++ b/lld/ELF/Driver.h @@ -27,7 +27,7 @@ extern class LinkerDriver *Driver; class LinkerDriver { public: void main(ArrayRef Args, bool CanExitEarly); - void addFile(StringRef Path, bool WithLOption); + void addFile(StringRef Path); void addLibrary(StringRef Name); private: diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 6c884cdf0559..5b4064ef189a 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -661,7 +661,7 @@ template void SharedFile::parseSoName() { // DSOs are identified by soname, and they usually contain // DT_SONAME tag in their header. But if they are missing, // filenames are used as default sonames. - SoName = this->DefaultSoName; + SoName = sys::path::filename(this->getName()); if (!DynamicSec) return; diff --git a/lld/ELF/InputFiles.h b/lld/ELF/InputFiles.h index a597d453da2e..c27aa64d4e1c 100644 --- a/lld/ELF/InputFiles.h +++ b/lld/ELF/InputFiles.h @@ -93,10 +93,6 @@ public: uint16_t EMachine = llvm::ELF::EM_NONE; uint8_t OSABI = 0; - // For SharedKind inputs, the string to use in DT_NEEDED when the library - // has no soname. - std::string DefaultSoName; - // Cache for toString(). Only toString() should use this member. mutable std::string ToStringCache; diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index 0ba00a2ae353..bdc733d00828 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -243,26 +243,25 @@ 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), /*WithLOption=*/false); + Driver->addFile(Saver.save(Path)); return; } } if (sys::path::is_absolute(S)) { - Driver->addFile(S, /*WithLOption=*/false); + Driver->addFile(S); } else if (S.startswith("=")) { if (Config->Sysroot.empty()) - Driver->addFile(S.substr(1), /*WithLOption=*/false); + Driver->addFile(S.substr(1)); else - Driver->addFile(Saver.save(Config->Sysroot + "/" + S.substr(1)), - /*WithLOption=*/false); + Driver->addFile(Saver.save(Config->Sysroot + "/" + S.substr(1))); } else if (S.startswith("-l")) { Driver->addLibrary(S.substr(2)); } else if (sys::fs::exists(S)) { - Driver->addFile(S, /*WithLOption=*/false); + Driver->addFile(S); } else { if (Optional Path = findFromSearchPaths(S)) - Driver->addFile(Saver.save(*Path), /*WithLOption=*/true); + Driver->addFile(Saver.save(*Path)); else setError("unable to find " + S); } diff --git a/lld/test/ELF/as-needed-no-reloc.s b/lld/test/ELF/as-needed-no-reloc.s index 68f03d782c24..9cbe25cf1767 100644 --- a/lld/test/ELF/as-needed-no-reloc.s +++ b/lld/test/ELF/as-needed-no-reloc.s @@ -16,7 +16,7 @@ # CHECK-NEXT: Other: 0 # CHECK-NEXT: Section: Undefined -# CHECK: NEEDED SharedLibrary ({{.*}}as-needed-no-reloc{{.*}}2.so) +# CHECK: NEEDED SharedLibrary (as-needed-no-reloc{{.*}}2.so) .globl _start _start: diff --git a/lld/test/ELF/no-soname.s b/lld/test/ELF/no-soname.s deleted file mode 100644 index d2c15ed8f9cd..000000000000 --- a/lld/test/ELF/no-soname.s +++ /dev/null @@ -1,31 +0,0 @@ -// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o -// RUN: mkdir -p %T/no-soname -// RUN: ld.lld %t.o -shared -o %T/no-soname/libfoo.so - -// RUN: ld.lld %t.o %T/no-soname/libfoo.so -o %t -// RUN: llvm-readobj --dynamic-table %t | FileCheck %s - -// CHECK: 0x0000000000000001 NEEDED SharedLibrary ({{.*}}/no-soname/libfoo.so) -// CHECK-NOT: NEEDED - -// RUN: ld.lld %t.o %T/no-soname/../no-soname/libfoo.so -o %t -// RUN: llvm-readobj --dynamic-table %t | FileCheck %s --check-prefix=CHECK2 - -// CHECK2: 0x0000000000000001 NEEDED SharedLibrary ({{.*}}/no-soname/../no-soname/libfoo.so) -// CHECK2-NOT: NEEDED - -// RUN: ld.lld %t.o -L%T/no-soname/../no-soname -lfoo -o %t -// RUN: llvm-readobj --dynamic-table %t | FileCheck %s --check-prefix=CHECK3 - -// CHECK3: 0x0000000000000001 NEEDED SharedLibrary (libfoo.so) -// CHECK3-NOT: NEEDED - -// RUN: ld.lld %t.o -shared -soname libbar.so -o %T/no-soname/libbar.so -// RUN: ld.lld %t.o %T/no-soname/libbar.so -o %t -// RUN: llvm-readobj --dynamic-table %t | FileCheck %s --check-prefix=CHECK4 - -// CHECK4: 0x0000000000000001 NEEDED SharedLibrary (libbar.so) -// CHECK4-NOT: NEEDED - -.global _start -_start: diff --git a/lld/test/ELF/relro-omagic.s b/lld/test/ELF/relro-omagic.s index ebee79d983fc..35a92db2f07a 100644 --- a/lld/test/ELF/relro-omagic.s +++ b/lld/test/ELF/relro-omagic.s @@ -10,20 +10,16 @@ # NORELRO-NEXT: 0 00000000 0000000000000000 # NORELRO-NEXT: 1 .dynsym 00000048 0000000000200120 # NORELRO-NEXT: 2 .hash 00000020 0000000000200168 -# NORELRO-NEXT: 3 .dynstr 0000004c 0000000000200188 -# NORELRO-NEXT: 4 .rela.dyn 00000018 00000000002001d8 -# NORELRO-NEXT: 5 .rela.plt 00000018 00000000002001f0 -# NORELRO-NEXT: 6 .text 0000000a 0000000000200208 TEXT DATA -# NORELRO-NEXT: 7 .plt 00000020 0000000000200220 TEXT DATA -# NORELRO-NEXT: 8 .data 00000008 0000000000200240 DATA -# NORELRO-NEXT: 9 .foo 00000004 0000000000200248 DATA -# NORELRO-NEXT: 10 .dynamic 000000f0 0000000000200250 -# NORELRO-NEXT: 11 .got 00000008 0000000000200340 DATA -# NORELRO-NEXT: 12 .got.plt 00000020 0000000000200348 DATA -# NORELRO-NEXT: 13 .comment 00000008 0000000000000000 -# NORELRO-NEXT: 14 .symtab 00000060 0000000000000000 -# NORELRO-NEXT: 15 .shstrtab 0000007b 0000000000000000 -# NORELRO-NEXT: 16 .strtab 00000013 0000000000000000 +# NORELRO-NEXT: 3 .dynstr 00000021 0000000000200188 +# NORELRO-NEXT: 4 .rela.dyn 00000018 00000000002001b0 +# NORELRO-NEXT: 5 .rela.plt 00000018 00000000002001c8 +# NORELRO-NEXT: 6 .text 0000000a 00000000002001e0 TEXT DATA +# NORELRO-NEXT: 7 .plt 00000020 00000000002001f0 TEXT DATA +# NORELRO-NEXT: 8 .data 00000008 0000000000200210 DATA +# NORELRO-NEXT: 9 .foo 00000004 0000000000200218 DATA +# NORELRO-NEXT: 10 .dynamic 000000f0 0000000000200220 +# NORELRO-NEXT: 11 .got 00000008 0000000000200310 DATA +# NORELRO-NEXT: 12 .got.plt 00000020 0000000000200318 DATA # NOPHDRS: ProgramHeaders [ # NOPHDRS-NOT: PT_GNU_RELRO