[lld] r247475 - Implement -rpath.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 11 14:18:57 PDT 2015
Author: rafael
Date: Fri Sep 11 16:18:56 2015
New Revision: 247475
URL: http://llvm.org/viewvc/llvm-project?rev=247475&view=rev
Log:
Implement -rpath.
Modified:
lld/trunk/ELF/Config.h
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/Options.td
lld/trunk/ELF/Writer.cpp
lld/trunk/test/elf2/shared.s
Modified: lld/trunk/ELF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Config.h?rev=247475&r1=247474&r2=247475&view=diff
==============================================================================
--- lld/trunk/ELF/Config.h (original)
+++ lld/trunk/ELF/Config.h Fri Sep 11 16:18:56 2015
@@ -18,6 +18,7 @@ namespace elf2 {
struct Configuration {
llvm::StringRef OutputFile;
llvm::StringRef DynamicLinker;
+ std::string RPath;
};
extern Configuration *Config;
Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=247475&r1=247474&r2=247475&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Fri Sep 11 16:18:56 2015
@@ -14,6 +14,7 @@
#include "SymbolTable.h"
#include "Writer.h"
#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/FileSystem.h"
using namespace llvm;
@@ -72,6 +73,12 @@ void LinkerDriver::link(ArrayRef<const c
if (auto *Arg = Args.getLastArg(OPT_dynamic_linker))
Config->DynamicLinker = Arg->getValue();
+ std::vector<StringRef> RPaths;
+ for (auto *Arg : Args.filtered(OPT_rpath))
+ RPaths.push_back(Arg->getValue());
+ if (!RPaths.empty())
+ Config->RPath = llvm::join(RPaths.begin(), RPaths.end(), ":");
+
// Create a list of input files.
std::vector<MemoryBufferRef> Inputs;
Modified: lld/trunk/ELF/Options.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Options.td?rev=247475&r1=247474&r2=247475&view=diff
==============================================================================
--- lld/trunk/ELF/Options.td (original)
+++ lld/trunk/ELF/Options.td Fri Sep 11 16:18:56 2015
@@ -9,3 +9,6 @@ def output : Separate<["-"], "o">, MetaV
def dynamic_linker : Separate<["-"], "dynamic-linker">,
HelpText<"Which dynamic linker to use">;
+
+def rpath : Separate<["-"], "rpath">,
+ HelpText<"Which dynamic linker to use">;
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=247475&r1=247474&r2=247475&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Fri Sep 11 16:18:56 2015
@@ -221,6 +221,12 @@ public:
++NumEntries; // DT_STRTAB
++NumEntries; // DT_STRSZ
+ StringRef RPath = Config->RPath;
+ if (!RPath.empty()) {
+ ++NumEntries; // DT_RUNPATH
+ DynStrSec.add(RPath);
+ }
+
const std::vector<std::unique_ptr<SharedFileBase>> &SharedFiles =
SymTab.getSharedFiles();
for (const std::unique_ptr<SharedFileBase> &File : SharedFiles)
@@ -251,6 +257,13 @@ public:
P->d_un.d_val = DynStrSec.data().size();
++P;
+ StringRef RPath = Config->RPath;
+ if (!RPath.empty()) {
+ P->d_tag = DT_RUNPATH;
+ P->d_un.d_val = DynStrSec.getFileOff(RPath);
+ ++P;
+ }
+
const std::vector<std::unique_ptr<SharedFileBase>> &SharedFiles =
SymTab.getSharedFiles();
for (const std::unique_ptr<SharedFileBase> &File : SharedFiles) {
Modified: lld/trunk/test/elf2/shared.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/shared.s?rev=247475&r1=247474&r2=247475&view=diff
==============================================================================
--- lld/trunk/test/elf2/shared.s (original)
+++ lld/trunk/test/elf2/shared.s Fri Sep 11 16:18:56 2015
@@ -1,5 +1,5 @@
// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o
-// RUN: lld -flavor gnu2 -dynamic-linker /lib64/ld-linux-x86-64.so.2 %t.o %p/Inputs/i686-simple-library.so -o %t
+// RUN: lld -flavor gnu2 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -rpath foo -rpath bar %t.o %p/Inputs/i686-simple-library.so -o %t
// RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data %t | FileCheck %s
// REQUIRES: x86
@@ -143,6 +143,7 @@
// CHECK-NEXT: 0x00000006 SYMTAB [[DYNSYMADDR]]
// CHECK-NEXT: 0x00000005 STRTAB [[DYNSTRADDR]]
// CHECK-NEXT: 0x0000000A STRSZ
+// CHECK-NEXT: 0x0000001D RUNPATH foo:bar
// CHECK-NEXT: 0x00000001 NEEDED SharedLibrary ({{.*}}/Inputs/i686-simple-library.so)
// CHECK-NEXT: 0x00000000 NULL 0x0
// CHECK-NEXT: ]
More information about the llvm-commits
mailing list