[llvm] r345614 - [llvm-objcopy] Fix --keep-global-symbol/--globalize-symbol for undefined symbols.
Jordan Rupprecht via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 30 09:23:39 PDT 2018
Author: rupprecht
Date: Tue Oct 30 09:23:38 2018
New Revision: 345614
URL: http://llvm.org/viewvc/llvm-project?rev=345614&view=rev
Log:
[llvm-objcopy] Fix --keep-global-symbol/--globalize-symbol for undefined symbols.
Summary: --keep-global-symbol and --globalize-symbol don't make sense for undefined symbols, so it should be ignored for those symbols. This matches GNU objcopy behavior.
Reviewers: jhenderson, alexshap, jakehehrlich, espindola
Reviewed By: jhenderson, jakehehrlich
Subscribers: emaste, arichardson, llvm-commits
Differential Revision: https://reviews.llvm.org/D53733
Modified:
llvm/trunk/test/tools/llvm-objcopy/globalize.test
llvm/trunk/test/tools/llvm-objcopy/keep-global-symbols.test
llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
Modified: llvm/trunk/test/tools/llvm-objcopy/globalize.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/globalize.test?rev=345614&r1=345613&r2=345614&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/globalize.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/globalize.test Tue Oct 30 09:23:38 2018
@@ -1,5 +1,8 @@
# RUN: yaml2obj %s > %t
-# RUN: llvm-objcopy --globalize-symbol Global --globalize-symbol Local --globalize-symbol Weak %t %t2
+# RUN: llvm-objcopy --globalize-symbol Global \
+# RUN: --globalize-symbol Local \
+# RUN: --globalize-symbol Weak \
+# RUN: --globalize-symbol WeakUndef %t %t2
# RUN: llvm-readobj -symbols %t2 | FileCheck %s
!ELF
@@ -28,6 +31,7 @@ Symbols:
Size: 8
Section: .text
Value: 0x1008
+ - Name: WeakUndef
Global:
- Name: Global
Type: STT_FUNC
@@ -72,4 +76,13 @@ Symbols:
#CHECK-NEXT: Other: 0
#CHECK-NEXT: Section: .text
#CHECK-NEXT: }
+#CHECK-NEXT: Symbol {
+#CHECK-NEXT: Name: WeakUndef
+#CHECK-NEXT: Value: 0x0
+#CHECK-NEXT: Size: 0
+#CHECK-NEXT: Binding: Weak
+#CHECK-NEXT: Type: None
+#CHECK-NEXT: Other: 0
+#CHECK-NEXT: Section: Undefined
+#CHECK-NEXT: }
#CHECK-NEXT:]
Modified: llvm/trunk/test/tools/llvm-objcopy/keep-global-symbols.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/keep-global-symbols.test?rev=345614&r1=345613&r2=345614&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/keep-global-symbols.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/keep-global-symbols.test Tue Oct 30 09:23:38 2018
@@ -18,6 +18,8 @@
# "Global5 Global6": Global, because it appears in %t-globals2.txt, but we only
# trim leading and trailing whitespace. We don't just take the first chunk
# that looks like a symbol.
+# Global7: Global, because even though it doesn't appear as any -G flags, does
+# not get demoted since it's undefined.
# RUN: echo Global2 > %t-globals1.txt
# RUN: echo " Global3 " > %t-globals2.txt
@@ -77,8 +79,9 @@ Symbols:
Section: .text
- Name: "Global5 Global6"
Section: .text
+ - Name: Global7
-# CHECK: Symbol table '.symtab' contains 13 entries:
+# CHECK: Symbol table '.symtab' contains 14 entries:
# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name
# CHECK-NEXT: 0: {{.*}} LOCAL {{.*}}
# CHECK-NEXT: 1: {{.*}} LOCAL {{.*}} Local1
@@ -91,5 +94,6 @@ Symbols:
# CHECK-NEXT: 8: {{.*}} GLOBAL {{.*}} Global3
# CHECK-NEXT: 9: {{.*}} GLOBAL {{.*}} Global4
# CHECK-NEXT: 10: {{.*}} GLOBAL {{.*}} Global5 Global6
-# CHECK-NEXT: 11: {{.*}} WEAK {{.*}} Weak1
-# CHECK-NEXT: 12: {{.*}} GLOBAL {{.*}} Weak2
+# CHECK-NEXT: 11: {{.*}} GLOBAL {{.*}} UND Global7
+# CHECK-NEXT: 12: {{.*}} WEAK {{.*}} Weak1
+# CHECK-NEXT: 13: {{.*}} GLOBAL {{.*}} Weak2
Modified: llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp?rev=345614&r1=345613&r2=345614&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp (original)
+++ llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp Tue Oct 30 09:23:38 2018
@@ -230,11 +230,13 @@ static void handleArgs(const CopyConfig
// --keep-global-symbol. Because of that, make sure to check
// --globalize-symbol second.
if (!Config.SymbolsToKeepGlobal.empty() &&
- !is_contained(Config.SymbolsToKeepGlobal, Sym.Name))
+ !is_contained(Config.SymbolsToKeepGlobal, Sym.Name) &&
+ Sym.getShndx() != SHN_UNDEF)
Sym.Binding = STB_LOCAL;
if (!Config.SymbolsToGlobalize.empty() &&
- is_contained(Config.SymbolsToGlobalize, Sym.Name))
+ is_contained(Config.SymbolsToGlobalize, Sym.Name) &&
+ Sym.getShndx() != SHN_UNDEF)
Sym.Binding = STB_GLOBAL;
if (!Config.SymbolsToWeaken.empty() &&
More information about the llvm-commits
mailing list