summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2017-04-11 22:37:54 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2017-04-11 22:37:54 +0000
commit6c973d647f20483bfd1c1e9f92a0cde5cba816f8 (patch)
treeab6b9c9320a15163db5ea070d3ffb6cbad52ae58
parent304ef22e6eac477726e7d35693d2b1f56238477d (diff)
downloadbcm5719-llvm-6c973d647f20483bfd1c1e9f92a0cde5cba816f8.tar.gz
bcm5719-llvm-6c973d647f20483bfd1c1e9f92a0cde5cba816f8.zip
[lld] --export-dynamic overrides --dynamic-list.
Fixes PR32573. --export-dynamic exports everything, even in the presence of a --dynamic-list, or --export-dynamic-symbol. llvm-svn: 300002
-rw-r--r--lld/ELF/Driver.cpp3
-rw-r--r--lld/test/ELF/dynamic-list.s59
2 files changed, 62 insertions, 0 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 9f66360e6e2..8e7ada6ec10 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -713,6 +713,9 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
Config->DefaultSymbolVersion = VER_NDX_LOCAL;
}
+ if (getArg(Args, OPT_export_dynamic, OPT_no_export_dynamic, false))
+ Config->DefaultSymbolVersion = VER_NDX_GLOBAL;
+
if (auto *Arg = Args.getLastArg(OPT_version_script))
if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue()))
readVersionScript(*Buffer);
diff --git a/lld/test/ELF/dynamic-list.s b/lld/test/ELF/dynamic-list.s
index 80e480b9e3d..7cd587380e5 100644
--- a/lld/test/ELF/dynamic-list.s
+++ b/lld/test/ELF/dynamic-list.s
@@ -95,6 +95,65 @@
# CHECK2-NEXT: }
# CHECK2-NEXT: ]
+
+## --export-dynamic overrides --dynamic-list, i.e. --export-dynamic with an
+## incomplete dynamic-list still exports everything.
+# RUN: echo "{ foo2; };" > %t.list
+# RUN: ld.lld --dynamic-list %t.list --export-dynamic %t %t2.so -o %t.exe
+# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK3 %s
+
+## The same with --export-dynamic-symbol.
+# RUN: ld.lld --export-dynamic-symbol=foo2 --export-dynamic %t %t2.so -o %t.exe
+# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK3 %s
+
+# CHECK3: DynamicSymbols [
+# CHECK3-NEXT: Symbol {
+# CHECK3-NEXT: Name: @
+# CHECK3-NEXT: Value: 0x0
+# CHECK3-NEXT: Size: 0
+# CHECK3-NEXT: Binding: Local
+# CHECK3-NEXT: Type: None
+# CHECK3-NEXT: Other: 0
+# CHECK3-NEXT: Section: Undefined
+# CHECK3-NEXT: }
+# CHECK3-NEXT: Symbol {
+# CHECK3-NEXT: Name: _start@
+# CHECK3-NEXT: Value: 0x201003
+# CHECK3-NEXT: Size: 0
+# CHECK3-NEXT: Binding: Global (0x1)
+# CHECK3-NEXT: Type: None (0x0)
+# CHECK3-NEXT: Other: 0
+# CHECK3-NEXT: Section: .text (0x4)
+# CHECK3-NEXT: }
+# CHECK3-NEXT: Symbol {
+# CHECK3-NEXT: Name: foo1@
+# CHECK3-NEXT: Value: 0x201000
+# CHECK3-NEXT: Size: 0
+# CHECK3-NEXT: Binding: Global (0x1)
+# CHECK3-NEXT: Type: None (0x0)
+# CHECK3-NEXT: Other: 0
+# CHECK3-NEXT: Section: .text (0x4)
+# CHECK3-NEXT: }
+# CHECK3-NEXT: Symbol {
+# CHECK3-NEXT: Name: foo2@
+# CHECK3-NEXT: Value: 0x201001
+# CHECK3-NEXT: Size: 0
+# CHECK3-NEXT: Binding: Global (0x1)
+# CHECK3-NEXT: Type: None (0x0)
+# CHECK3-NEXT: Other: 0
+# CHECK3-NEXT: Section: .text (0x4)
+# CHECK3-NEXT: }
+# CHECK3-NEXT: Symbol {
+# CHECK3-NEXT: Name: foo31@
+# CHECK3-NEXT: Value: 0x201002
+# CHECK3-NEXT: Size: 0
+# CHECK3-NEXT: Binding: Global (0x1)
+# CHECK3-NEXT: Type: None (0x0)
+# CHECK3-NEXT: Other: 0
+# CHECK3-NEXT: Section: .text (0x4)
+# CHECK3-NEXT: }
+# CHECK3-NEXT: ]
+
.globl foo1
foo1:
ret
OpenPOWER on IntegriCloud