summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2018-02-23 10:08:15 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2018-02-23 10:08:15 +0000
commit1fdb280bec1ff9c41a3bdbc6b4385696aa7fe0be (patch)
tree147d41d0ae0e9b6a8bb5669a67e94569b3be1084
parent4e6f52c9a4f057256f081abe644be04ac782ebec (diff)
downloadbcm5719-llvm-1fdb280bec1ff9c41a3bdbc6b4385696aa7fe0be.tar.gz
bcm5719-llvm-1fdb280bec1ff9c41a3bdbc6b4385696aa7fe0be.zip
[ELF] - Added testcase for testing visibility of weak_odr symbols.
This is relative to "Bug 36166 - tools/gold/X86/comdat.ll is failing only on Debian Unstable" (PR36166). Something changed in newer versions of gold and now together with gold-plugin there is an issue shown in PR, symbol may get wrong visibility. LLD works fine, but we have no testcase for the same use case, patch adds it. Differential revision: https://reviews.llvm.org/D43193 llvm-svn: 325874
-rw-r--r--lld/test/ELF/lto/Inputs/weakodr-visibility.ll6
-rw-r--r--lld/test/ELF/lto/weakodr-visibility.ll40
2 files changed, 46 insertions, 0 deletions
diff --git a/lld/test/ELF/lto/Inputs/weakodr-visibility.ll b/lld/test/ELF/lto/Inputs/weakodr-visibility.ll
new file mode 100644
index 00000000000..1bd956059d2
--- /dev/null
+++ b/lld/test/ELF/lto/Inputs/weakodr-visibility.ll
@@ -0,0 +1,6 @@
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define weak_odr protected i32 @foo(i8* %this) {
+ ret i32 42
+}
diff --git a/lld/test/ELF/lto/weakodr-visibility.ll b/lld/test/ELF/lto/weakodr-visibility.ll
new file mode 100644
index 00000000000..95bd3e4c5a2
--- /dev/null
+++ b/lld/test/ELF/lto/weakodr-visibility.ll
@@ -0,0 +1,40 @@
+; REQUIRES: x86
+; RUN: llvm-as %s -o %t1.o
+; RUN: llvm-as %p/Inputs/weakodr-visibility.ll -o %t2.o
+
+; Testcase checks we keep desired visibility of weak
+; symbol in a library even if select different definition.
+; We change the order of input files in command line and
+; check that linker selects different symbol definitions,
+; but keeps `protected` visibility.
+
+; RUN: ld.lld %t1.o %t2.o -o %t.so -shared
+; RUN: llvm-readobj -t %t.so | FileCheck %s
+; RUN: llvm-objdump -d %t.so | FileCheck %s --check-prefix=FIRST
+; CHECK: Symbol {
+; CHECK: Name: foo
+; CHECK-NEXT: Value:
+; CHECK-NEXT: Size:
+; CHECK-NEXT: Binding: Weak
+; CHECK-NEXT: Type: Function
+; CHECK-NEXT: Other [
+; CHECK-NEXT: STV_PROTECTED
+; CHECK-NEXT: ]
+; CHECK-NEXT: Section:
+; CHECK-NEXT: }
+; FIRST: foo:
+; FIRST-NEXT: movl $41, %eax
+
+; Now swap the files order.
+; RUN: ld.lld %t2.o %t1.o -o %t.so -shared
+; RUN: llvm-readobj -t %t.so | FileCheck %s
+; RUN: llvm-objdump -d %t.so | FileCheck %s --check-prefix=SECOND
+; SECOND: foo:
+; SECOND-NEXT: movl $42, %eax
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define weak_odr i32 @foo(i8* %this) {
+ ret i32 41
+}
OpenPOWER on IntegriCloud