aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-06-28 03:40:49 +0000
committerDavide Italiano <davide@freebsd.org>2016-06-28 03:40:49 +0000
commit6713238600a53ed59e8f6962db0228ac8d5ba5c0 (patch)
tree56bc801ab5758266f35421bba8e7a14a54ad7592
parent5aea9ad0fe3ea4c9666f20e50bbd9bdfcfe20a8b (diff)
[ELF] Warn for duplicate symbols in version scripts instead of erroring out.
Emitting an error in this case breaks real-world application (e.g. libreoffice). See http://reviews.llvm.org/D21555 for context. Differential Revision: http://reviews.llvm.org/D21781 git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@273989 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--ELF/SymbolTable.cpp2
-rw-r--r--test/ELF/version-script.s6
2 files changed, 4 insertions, 4 deletions
diff --git a/ELF/SymbolTable.cpp b/ELF/SymbolTable.cpp
index eaf09ec4c..770c0cf8f 100644
--- a/ELF/SymbolTable.cpp
+++ b/ELF/SymbolTable.cpp
@@ -534,7 +534,7 @@ template <class ELFT> void SymbolTable<ELFT>::scanVersionScript() {
if (SymbolBody *B = find(Name)) {
if (B->symbol()->VersionId != VER_NDX_GLOBAL &&
B->symbol()->VersionId != VER_NDX_LOCAL)
- error("duplicate symbol " + Name + " in version script");
+ warning("duplicate symbol " + Name + " in version script");
B->symbol()->VersionId = I;
}
++I;
diff --git a/test/ELF/version-script.s b/test/ELF/version-script.s
index de8fb3521..528408d91 100644
--- a/test/ELF/version-script.s
+++ b/test/ELF/version-script.s
@@ -53,9 +53,9 @@
# RUN: VERSION_2.0 { \
# RUN: global: foo1; \
# RUN: local: *; }; " > %t6.script
-# RUN: not ld.lld --version-script %t6.script -shared %t.o %t2.so -o %t6.so 2>&1 | \
-# RUN: FileCheck -check-prefix=ERR2 %s
-# ERR2: duplicate symbol foo1 in version script
+# RUN: ld.lld --version-script %t6.script -shared %t.o %t2.so -o %t6.so 2>&1 | \
+# RUN: FileCheck -check-prefix=WARN2 %s
+# WARN2: duplicate symbol foo1 in version script
# RUN: ld.lld --version-script %t.script --dynamic-list %t.list %t.o %t2.so -o %t2
# RUN: llvm-readobj %t2 > /dev/null