diff options
| author | Jordan Rupprecht <rupprecht@google.com> | 2018-08-17 22:34:48 +0000 |
|---|---|---|
| committer | Jordan Rupprecht <rupprecht@google.com> | 2018-08-17 22:34:48 +0000 |
| commit | be8ebccaed22135669fd3716ed4cd235085ef5fd (patch) | |
| tree | 3e49c58a2d41d305e9c27d1b54d9049ad6881131 /llvm/test/tools/llvm-objcopy | |
| parent | 04df67e268eaf4c63b7fd0712b0c54a6db89c1cf (diff) | |
| download | bcm5719-llvm-be8ebccaed22135669fd3716ed4cd235085ef5fd.tar.gz bcm5719-llvm-be8ebccaed22135669fd3716ed4cd235085ef5fd.zip | |
[llvm-objcopy] Implement -G/--keep-global-symbol(s).
Summary:
Port GNU Objcopy -G/--keep-global-symbol(s).
This is slightly different than the already-implemented --globalize-symbol, which marks a symbol as global when copying. When --keep-global-symbol (alias -G) is used, *only* those symbols marked will stay global, and all other globals are demoted to local. (Also note that it doesn't *promote* a symbol to global). Additionally, there is a pluralized version of the flag --keep-global-symbols, which effectively applies --keep-global-symbol for every non-comment in a file.
Reviewers: jakehehrlich, jhenderson, alexshap
Reviewed By: jhenderson
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D50589
llvm-svn: 340105
Diffstat (limited to 'llvm/test/tools/llvm-objcopy')
| -rw-r--r-- | llvm/test/tools/llvm-objcopy/keep-global-symbols-mix-globalize.test | 51 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-objcopy/keep-global-symbols.test | 95 |
2 files changed, 146 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/keep-global-symbols-mix-globalize.test b/llvm/test/tools/llvm-objcopy/keep-global-symbols-mix-globalize.test new file mode 100644 index 00000000000..2de5807173c --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/keep-global-symbols-mix-globalize.test @@ -0,0 +1,51 @@ +# RUN: yaml2obj %s > %t.o + +# Tests --keep-global-symbol when used in combination with --globalize-symbol on +# a different symbol. + +# RUN: llvm-objcopy \ +# RUN: --globalize-symbol Local1 \ +# RUN: --keep-global-symbol Local2 \ +# RUN: --globalize-symbol Weak1 \ +# RUN: --keep-global-symbol Weak2 \ +# RUN: --globalize-symbol Global1 \ +# RUN: --keep-global-symbol Global2 \ +# RUN: %t.o %t.2.o +# RUN: llvm-readobj -elf-output-style=GNU -symbols %t.2.o | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] +Symbols: + Local: + - Name: Local1 + Section: .text + - Name: Local2 + Section: .text + Weak: + - Name: Weak1 + Section: .text + - Name: Weak2 + Section: .text + Global: + - Name: Global1 + Section: .text + - Name: Global2 + Section: .text + +# CHECK: Symbol table '.symtab' contains 7 entries: +# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name +# CHECK-NEXT: 0: {{.*}} LOCAL {{.*}} +# CHECK-NEXT: 1: {{.*}} LOCAL {{.*}} Local2 +# CHECK-NEXT: 2: {{.*}} GLOBAL {{.*}} Local1 +# CHECK-NEXT: 3: {{.*}} GLOBAL {{.*}} Global1 +# CHECK-NEXT: 4: {{.*}} GLOBAL {{.*}} Global2 +# CHECK-NEXT: 5: {{.*}} GLOBAL {{.*}} Weak1 +# CHECK-NEXT: 6: {{.*}} WEAK {{.*}} Weak2 diff --git a/llvm/test/tools/llvm-objcopy/keep-global-symbols.test b/llvm/test/tools/llvm-objcopy/keep-global-symbols.test new file mode 100644 index 00000000000..4f580b4ae8a --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/keep-global-symbols.test @@ -0,0 +1,95 @@ +# RUN: yaml2obj %s > %t.o + +# Tests that only global symbols (via -G/--keep-global-symbols) are kept via +# the several different variants of -G/--keep-global-symbol(s). +# +# Local1: Local because "-G Local1" doesn't make symbols global. +# Local2: Global because of "--globalize-symbol Local2". +# Weak1: Weak because "-G Weak1" doesn't make symbols global. +# Weak2: Global because of "--globalize-symbol Weak2". +# Weak3: Local because no -G flag covers it. +# Global1: Global because of "-G Global1". +# Global2: Global because of "--keep-global-symbol Global2". +# Global3: Global because of "--keep-global-symbols %t-globals1.txt". +# Global4: Global because of "--keep-global-symbols %t-globals2.txt". +# Global5: Local, it appears in %t-globals2.txt but only in comments and as +# part of another symbol +# Global6: Local, it appears in %t-globals2.txt but only part of another symbol +# "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. + +# RUN: echo Global2 > %t-globals1.txt +# RUN: echo " Global3 " > %t-globals2.txt +# RUN: echo "Global4 # Global5" >> %t-globals2.txt +# RUN: echo " Global5 Global6 " >> %t-globals2.txt +# RUN: echo "Unknown" >> %t-globals2.txt +# RUN: echo " " >> %t-globals2.txt +# RUN: echo "# File with no symbols" > %t-globals3.txt + +# RUN: llvm-objcopy \ +# RUN: -G Global1 \ +# RUN: --keep-global-symbol Global2 \ +# RUN: --keep-global-symbols %t-globals1.txt \ +# RUN: --keep-global-symbols %t-globals2.txt \ +# RUN: -G Local1 \ +# RUN: --globalize-symbol Local2 \ +# RUN: -G Weak1 \ +# RUN: --globalize-symbol Weak2 \ +# RUN: %t.o %t.2.o +# RUN: llvm-readobj -elf-output-style=GNU -symbols %t.2.o | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] +Symbols: + Local: + - Name: Local1 + Section: .text + - Name: Local2 + Section: .text + Weak: + - Name: Weak1 + Section: .text + - Name: Weak2 + Section: .text + - Name: Weak3 + Section: .text + Global: + - Name: Global1 + Section: .text + - Name: Global2 + Section: .text + - Name: Global3 + Section: .text + - Name: Global4 + Section: .text + - Name: Global5 + Section: .text + - Name: Global6 + Section: .text + - Name: "Global5 Global6" + Section: .text + +# CHECK: Symbol table '.symtab' contains 13 entries: +# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name +# CHECK-NEXT: 0: {{.*}} LOCAL {{.*}} +# CHECK-NEXT: 1: {{.*}} LOCAL {{.*}} Local1 +# CHECK-NEXT: 2: {{.*}} LOCAL {{.*}} Global5 +# CHECK-NEXT: 3: {{.*}} LOCAL {{.*}} Global6 +# CHECK-NEXT: 4: {{.*}} LOCAL {{.*}} Weak3 +# CHECK-NEXT: 5: {{.*}} GLOBAL {{.*}} Local2 +# CHECK-NEXT: 6: {{.*}} GLOBAL {{.*}} Global1 +# CHECK-NEXT: 7: {{.*}} GLOBAL {{.*}} Global2 +# 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 |

