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
llvm-svn: 345614
# 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
Size: 8
Section: .text
Value: 0x1008
+ - Name: WeakUndef
Global:
- Name: Global
Type: STT_FUNC
#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:]
# "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
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
# 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
// --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() &&