[lld] r266230 - Don't set MustBeInDynSym for hidden symbols.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 13 12:03:34 PDT 2016
Author: rafael
Date: Wed Apr 13 14:03:34 2016
New Revision: 266230
URL: http://llvm.org/viewvc/llvm-project?rev=266230&view=rev
Log:
Don't set MustBeInDynSym for hidden symbols.
Added:
lld/trunk/test/ELF/dont-export-hidden.s
Modified:
lld/trunk/ELF/Symbols.cpp
Modified: lld/trunk/ELF/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.cpp?rev=266230&r1=266229&r2=266230&view=diff
==============================================================================
--- lld/trunk/ELF/Symbols.cpp (original)
+++ lld/trunk/ELF/Symbols.cpp Wed Apr 13 14:03:34 2016
@@ -218,10 +218,12 @@ int SymbolBody::compare(SymbolBody *Othe
if (L > R)
return -Other->compare(this);
+ uint8_t V = getMinVisibility(getVisibility(), Other->getVisibility());
if (isShared() != Other->isShared()) {
SymbolBody *Shared = isShared() ? this : Other;
Shared->MustBeInDynSym = true;
- if (Shared->getVisibility() == STV_DEFAULT) {
+ if (Shared->getVisibility() == STV_DEFAULT &&
+ (V == STV_DEFAULT || V == STV_PROTECTED)) {
// We want to export all symbols that exist in the executable and are
// preemptable in DSOs, so that the symbols in the executable can
// preempt symbols in the DSO at runtime.
@@ -231,7 +233,6 @@ int SymbolBody::compare(SymbolBody *Othe
}
if (!isShared() && !Other->isShared()) {
- uint8_t V = getMinVisibility(getVisibility(), Other->getVisibility());
setVisibility(V);
Other->setVisibility(V);
}
Added: lld/trunk/test/ELF/dont-export-hidden.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/dont-export-hidden.s?rev=266230&view=auto
==============================================================================
--- lld/trunk/test/ELF/dont-export-hidden.s (added)
+++ lld/trunk/test/ELF/dont-export-hidden.s Wed Apr 13 14:03:34 2016
@@ -0,0 +1,39 @@
+// RUN: llvm-mc %p/Inputs/shared.s -o %t.o -filetype=obj -triple=x86_64-pc-linux
+// RUN: llvm-mc %s -o %t2.o -filetype=obj -triple=x86_64-pc-linux
+// RUN: ld.lld %t.o -o %t.so -shared
+// RUN: ld.lld %t2.o %t.so -o %t.exe
+// RUN: llvm-readobj --dyn-symbols %t.exe | FileCheck %s
+
+ .global _start
+_start:
+ .global bar
+ .hidden bar
+bar:
+
+ .global bar2
+bar2:
+
+ .global foo
+foo:
+
+// CHECK: DynamicSymbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: @ (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: bar2
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
More information about the llvm-commits
mailing list