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:
parent
d440d234e2
commit
c5bafb0b94
@ -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:]
|
||||
|
@ -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
|
||||
|
@ -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() &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user