| # RUN: yaml2obj %s -o %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. |
| # 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 |
| # 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: echo "^Global[0-9]+([[:space:]]Global6)*$" > %t-globals-regexp.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-readelf --symbols %t.2.o | FileCheck %s |
| |
| # RUN: llvm-objcopy --regex --keep-global-symbols %t-globals-regexp.txt %t.o %t.3.o |
| # RUN: llvm-readelf --symbols %t.3.o | FileCheck %s --check-prefix=REGEXP |
| |
| # RUN: llvm-objcopy --regex --keep-global-symbol='^Global[0-9]+([[:space:]]Global6)*$' %t.o %t.4.o |
| # RUN: cmp %t.3.o %t.4.o |
| |
| !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: |
| - Name: Local1 |
| Section: .text |
| - Name: Local2 |
| Section: .text |
| - Name: Global1 |
| Section: .text |
| Binding: STB_GLOBAL |
| - Name: Global2 |
| Section: .text |
| Binding: STB_GLOBAL |
| - Name: Global3 |
| Section: .text |
| Binding: STB_GLOBAL |
| - Name: Global4 |
| Section: .text |
| Binding: STB_GLOBAL |
| - Name: Global5 |
| Section: .text |
| Binding: STB_GLOBAL |
| - Name: Global6 |
| Section: .text |
| Binding: STB_GLOBAL |
| - Name: "Global5 Global6" |
| Section: .text |
| Binding: STB_GLOBAL |
| - Name: Global7 |
| Binding: STB_GLOBAL |
| - Name: Weak1 |
| Section: .text |
| Binding: STB_WEAK |
| - Name: Weak2 |
| Section: .text |
| Binding: STB_WEAK |
| - Name: Weak3 |
| Section: .text |
| Binding: STB_WEAK |
| |
| # 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: 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: {{.*}} GLOBAL {{.*}} UND Global7 |
| # CHECK-NEXT: 12: {{.*}} WEAK {{.*}} Weak1 |
| # CHECK-NEXT: 13: {{.*}} GLOBAL {{.*}} Weak2 |
| |
| # REGEXP: 6: {{.*}} GLOBAL {{.*}} Global1 |
| # REGEXP-NEXT: 7: {{.*}} GLOBAL {{.*}} Global2 |
| # REGEXP-NEXT: 8: {{.*}} GLOBAL {{.*}} Global3 |
| # REGEXP-NEXT: 9: {{.*}} GLOBAL {{.*}} Global4 |
| # REGEXP-NEXT: 10: {{.*}} GLOBAL {{.*}} Global5 |
| # REGEXP-NEXT: 11: {{.*}} GLOBAL {{.*}} Global6 |
| # REGEXP-NEXT: 12: {{.*}} GLOBAL {{.*}} Global5 Global6 |
| # REGEXP-NEXT: 13: {{.*}} GLOBAL {{.*}} UND Global7 |