1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 05:01:59 +01:00

[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

llvm-svn: 345614
This commit is contained in:
Jordan Rupprecht 2018-10-30 16:23:38 +00:00
parent d440d234e2
commit c5bafb0b94
3 changed files with 25 additions and 6 deletions

View File

@ -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:]

View File

@ -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

View File

@ -230,11 +230,13 @@ static void handleArgs(const CopyConfig &Config, Object &Obj,
// --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() &&