summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2019-04-09 05:41:52 +0000
committerSam Clegg <sbc@chromium.org>2019-04-09 05:41:52 +0000
commit0cfaa2470f5552a33352454fec08fea66dcba071 (patch)
treef4bdbf3e90d0ee37e71c0bda620f64a62d3675dc
parent3f2096833a7bce99aea7b06468621a3a5be6475e (diff)
downloadbcm5719-llvm-0cfaa2470f5552a33352454fec08fea66dcba071.tar.gz
bcm5719-llvm-0cfaa2470f5552a33352454fec08fea66dcba071.zip
[WebAssembly] Ensure ArchiveName is set even in the presence of --whole-archive.
Differential Revision: https://reviews.llvm.org/D60431 llvm-svn: 357966
-rw-r--r--lld/test/wasm/archive.ll2
-rw-r--r--lld/wasm/Driver.cpp2
-rw-r--r--lld/wasm/InputFiles.cpp10
-rw-r--r--lld/wasm/InputFiles.h12
-rw-r--r--lld/wasm/SymbolTable.cpp2
-rw-r--r--lld/wasm/SymbolTable.h2
6 files changed, 19 insertions, 11 deletions
diff --git a/lld/test/wasm/archive.ll b/lld/test/wasm/archive.ll
index f2eee96a611..84054536a92 100644
--- a/lld/test/wasm/archive.ll
+++ b/lld/test/wasm/archive.ll
@@ -47,6 +47,8 @@ entry:
; Verfiy errors include library name
; RUN: not wasm-ld -u archive2_symbol -u archive3_symbol %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-DUP %s
+; And that this also works with --whole-archive
+; RUN: not wasm-ld -u archive2_symbol -u archive3_symbol --whole-archive %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-DUP %s
; CHECK-DUP: error: duplicate symbol: bar
; CHECK-DUP: >>> defined in {{.*}}.a({{.*}}.a2.o)
; CHECK-DUP: >>> defined in {{.*}}.a({{.*}}.a3.o)
diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp
index c102bcaab9d..f65722fdf2d 100644
--- a/lld/wasm/Driver.cpp
+++ b/lld/wasm/Driver.cpp
@@ -226,7 +226,7 @@ void LinkerDriver::addFile(StringRef Path) {
// Handle -whole-archive.
if (InWholeArchive) {
for (MemoryBufferRef &M : getArchiveMembers(MBRef))
- Files.push_back(createObjectFile(M));
+ Files.push_back(createObjectFile(M, Path));
return;
}
diff --git a/lld/wasm/InputFiles.cpp b/lld/wasm/InputFiles.cpp
index 914b7313b79..e118b041ca0 100644
--- a/lld/wasm/InputFiles.cpp
+++ b/lld/wasm/InputFiles.cpp
@@ -42,18 +42,19 @@ Optional<MemoryBufferRef> lld::wasm::readFile(StringRef Path) {
return MBRef;
}
-InputFile *lld::wasm::createObjectFile(MemoryBufferRef MB) {
+InputFile *lld::wasm::createObjectFile(MemoryBufferRef MB,
+ StringRef ArchiveName) {
file_magic Magic = identify_magic(MB.getBuffer());
if (Magic == file_magic::wasm_object) {
std::unique_ptr<Binary> Bin = check(createBinary(MB));
auto *Obj = cast<WasmObjectFile>(Bin.get());
if (Obj->isSharedObject())
return make<SharedFile>(MB);
- return make<ObjFile>(MB);
+ return make<ObjFile>(MB, ArchiveName);
}
if (Magic == file_magic::bitcode)
- return make<BitcodeFile>(MB);
+ return make<BitcodeFile>(MB, ArchiveName);
fatal("unknown file type: " + MB.getBufferIdentifier());
}
@@ -435,8 +436,7 @@ void ArchiveFile::addMember(const Archive::Symbol *Sym) {
"could not get the buffer for the member defining symbol " +
Sym->getName());
- InputFile *Obj = createObjectFile(MB);
- Obj->ArchiveName = getName();
+ InputFile *Obj = createObjectFile(MB, getName());
Symtab->addFile(Obj);
}
diff --git a/lld/wasm/InputFiles.h b/lld/wasm/InputFiles.h
index ac1e27314ea..7b2c4d5ae1e 100644
--- a/lld/wasm/InputFiles.h
+++ b/lld/wasm/InputFiles.h
@@ -82,7 +82,10 @@ private:
// .o file (wasm object file)
class ObjFile : public InputFile {
public:
- explicit ObjFile(MemoryBufferRef M) : InputFile(ObjectKind, M) {}
+ explicit ObjFile(MemoryBufferRef M, StringRef ArchiveName)
+ : InputFile(ObjectKind, M) {
+ this->ArchiveName = ArchiveName;
+ }
static bool classof(const InputFile *F) { return F->kind() == ObjectKind; }
void parse() override;
@@ -144,7 +147,10 @@ public:
// .bc file
class BitcodeFile : public InputFile {
public:
- explicit BitcodeFile(MemoryBufferRef M) : InputFile(BitcodeKind, M) {}
+ explicit BitcodeFile(MemoryBufferRef M, StringRef ArchiveName)
+ : InputFile(BitcodeKind, M) {
+ this->ArchiveName = ArchiveName;
+ }
static bool classof(const InputFile *F) { return F->kind() == BitcodeKind; }
void parse() override;
@@ -153,7 +159,7 @@ public:
// Will report a fatal() error if the input buffer is not a valid bitcode
// or wasm object file.
-InputFile *createObjectFile(MemoryBufferRef MB);
+InputFile *createObjectFile(MemoryBufferRef MB, StringRef ArchiveName = "");
// Opens a given file.
llvm::Optional<MemoryBufferRef> readFile(StringRef Path);
diff --git a/lld/wasm/SymbolTable.cpp b/lld/wasm/SymbolTable.cpp
index 4fe455a2247..bbce07486f2 100644
--- a/lld/wasm/SymbolTable.cpp
+++ b/lld/wasm/SymbolTable.cpp
@@ -58,7 +58,7 @@ void SymbolTable::addCombinedLTOObject() {
LTO->add(*F);
for (StringRef Filename : LTO->compile()) {
- auto *Obj = make<ObjFile>(MemoryBufferRef(Filename, "lto.tmp"));
+ auto *Obj = make<ObjFile>(MemoryBufferRef(Filename, "lto.tmp"), "");
Obj->parse();
ObjectFiles.push_back(Obj);
}
diff --git a/lld/wasm/SymbolTable.h b/lld/wasm/SymbolTable.h
index afb1bb97d44..22cae65a90c 100644
--- a/lld/wasm/SymbolTable.h
+++ b/lld/wasm/SymbolTable.h
@@ -39,7 +39,7 @@ public:
void addCombinedLTOObject();
std::vector<ObjFile *> ObjectFiles;
- std::vector<InputFile *> SharedFiles;
+ std::vector<SharedFile *> SharedFiles;
std::vector<BitcodeFile *> BitcodeFiles;
std::vector<InputFunction *> SyntheticFunctions;
std::vector<InputGlobal *> SyntheticGlobals;
OpenPOWER on IntegriCloud