[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