124 lines · plain
1# RUN: yaml2obj %s -o %t.o2 3# Tests that only global symbols (via -G/--keep-global-symbols) are kept via4# the several different variants of -G/--keep-global-symbol(s).5#6# Local1: Local because "-G Local1" doesn't make symbols global.7# Local2: Global because of "--globalize-symbol Local2".8# Weak1: Weak because "-G Weak1" doesn't make symbols global.9# Weak2: Global because of "--globalize-symbol Weak2".10# Weak3: Local because no -G flag covers it.11# Global1: Global because of "-G Global1".12# Global2: Global because of "--keep-global-symbol Global2".13# Global3: Global because of "--keep-global-symbols %t-globals1.txt".14# Global4: Global because of "--keep-global-symbols %t-globals2.txt".15# Global5: Local, it appears in %t-globals2.txt but only in comments and as16# part of another symbol17# Global6: Local, it appears in %t-globals2.txt but only part of another symbol18# "Global5 Global6": Global, because it appears in %t-globals2.txt, but we only19# trim leading and trailing whitespace. We don't just take the first chunk20# that looks like a symbol.21# Global7: Global, because even though it doesn't appear as any -G flags, does22# not get demoted since it's undefined.23 24# RUN: echo Global2 > %t-globals1.txt25# RUN: echo " Global3 " > %t-globals2.txt26# RUN: echo "Global4 # Global5" >> %t-globals2.txt27# RUN: echo " Global5 Global6 " >> %t-globals2.txt28# RUN: echo "Unknown" >> %t-globals2.txt29# RUN: echo " " >> %t-globals2.txt30# RUN: echo "# File with no symbols" > %t-globals3.txt31# RUN: echo "^Global[0-9]+([[:space:]]Global6)*$" > %t-globals-regexp.txt32 33# RUN: llvm-objcopy \34# RUN: -G Global1 \35# RUN: --keep-global-symbol Global2 \36# RUN: --keep-global-symbols %t-globals1.txt \37# RUN: --keep-global-symbols %t-globals2.txt \38# RUN: -G Local1 \39# RUN: --globalize-symbol Local2 \40# RUN: -G Weak1 \41# RUN: --globalize-symbol Weak2 \42# RUN: %t.o %t.2.o43# RUN: llvm-readelf --symbols %t.2.o | FileCheck %s44 45# RUN: llvm-objcopy --regex --keep-global-symbols %t-globals-regexp.txt %t.o %t.3.o46# RUN: llvm-readelf --symbols %t.3.o | FileCheck %s --check-prefix=REGEXP47 48# RUN: llvm-objcopy --regex --keep-global-symbol='^Global[0-9]+([[:space:]]Global6)*$' %t.o %t.4.o49# RUN: cmp %t.3.o %t.4.o50 51!ELF52FileHeader:53 Class: ELFCLASS6454 Data: ELFDATA2LSB55 Type: ET_REL56 Machine: EM_X86_6457Sections:58 - Name: .text59 Type: SHT_PROGBITS60 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]61Symbols:62 - Name: Local163 Section: .text64 - Name: Local265 Section: .text66 - Name: Global167 Section: .text68 Binding: STB_GLOBAL69 - Name: Global270 Section: .text71 Binding: STB_GLOBAL72 - Name: Global373 Section: .text74 Binding: STB_GLOBAL75 - Name: Global476 Section: .text77 Binding: STB_GLOBAL78 - Name: Global579 Section: .text80 Binding: STB_GLOBAL81 - Name: Global682 Section: .text83 Binding: STB_GLOBAL84 - Name: "Global5 Global6"85 Section: .text86 Binding: STB_GLOBAL87 - Name: Global788 Binding: STB_GLOBAL89 - Name: Weak190 Section: .text91 Binding: STB_WEAK92 - Name: Weak293 Section: .text94 Binding: STB_WEAK95 - Name: Weak396 Section: .text97 Binding: STB_WEAK98 99# CHECK: Symbol table '.symtab' contains 14 entries:100# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name101# CHECK-NEXT: 0: {{.*}} LOCAL {{.*}}102# CHECK-NEXT: 1: {{.*}} LOCAL {{.*}} Local1103# CHECK-NEXT: 2: {{.*}} LOCAL {{.*}} Global5104# CHECK-NEXT: 3: {{.*}} LOCAL {{.*}} Global6105# CHECK-NEXT: 4: {{.*}} LOCAL {{.*}} Weak3106# CHECK-NEXT: 5: {{.*}} GLOBAL {{.*}} Local2107# CHECK-NEXT: 6: {{.*}} GLOBAL {{.*}} Global1108# CHECK-NEXT: 7: {{.*}} GLOBAL {{.*}} Global2109# CHECK-NEXT: 8: {{.*}} GLOBAL {{.*}} Global3110# CHECK-NEXT: 9: {{.*}} GLOBAL {{.*}} Global4111# CHECK-NEXT: 10: {{.*}} GLOBAL {{.*}} Global5 Global6112# CHECK-NEXT: 11: {{.*}} GLOBAL {{.*}} UND Global7113# CHECK-NEXT: 12: {{.*}} WEAK {{.*}} Weak1114# CHECK-NEXT: 13: {{.*}} GLOBAL {{.*}} Weak2115 116# REGEXP: 6: {{.*}} GLOBAL {{.*}} Global1117# REGEXP-NEXT: 7: {{.*}} GLOBAL {{.*}} Global2118# REGEXP-NEXT: 8: {{.*}} GLOBAL {{.*}} Global3119# REGEXP-NEXT: 9: {{.*}} GLOBAL {{.*}} Global4120# REGEXP-NEXT: 10: {{.*}} GLOBAL {{.*}} Global5121# REGEXP-NEXT: 11: {{.*}} GLOBAL {{.*}} Global6122# REGEXP-NEXT: 12: {{.*}} GLOBAL {{.*}} Global5 Global6123# REGEXP-NEXT: 13: {{.*}} GLOBAL {{.*}} UND Global7124