84 lines · plain
1## This test shows that when symbol/section names are optimized in the string2## table to share the same entry, due to tail merging, llvm-objcopy operations3## function correctly without corrupting the names of unchanged sections/symbols.4 5# RUN: yaml2obj %s -o %t.o6## Validate that the strings have been pooled.7# RUN: llvm-readobj %t.o --string-dump .strtab --string-dump .shstrtab \8# RUN: | FileCheck %s --check-prefix=VALIDATE --implicit-check-not='] bar' --implicit-check-not=.blag9 10# VALIDATE: String dump of section '.strtab':11# VALIDATE-NEXT: [ 1] bazfoobar12# VALIDATE-EMPTY:13# VALIDATE-NEXT: String dump of section '.shstrtab':14# VALIDATE-NEXT: [ 1] .blam.blah.blag15 16## Case 1: Basic copy.17# RUN: llvm-objcopy %t.o %t.copy18# RUN: llvm-readobj --section-headers --symbols %t.copy | FileCheck %s --check-prefix=COPY19 20# COPY: Sections [21# COPY: Name: .blam.blah.blag (22# COPY: Name: .blah.blag (23# COPY: Name: .blag (24# COPY: Symbols [25# COPY: Name: bar (26# COPY: Name: foobar (27# COPY: Name: bazfoobar (28 29## Case 2: Rename section.30# RUN: llvm-objcopy %t.o %t.rename-section --rename-section .blah.blag=.blob.blab31# RUN: llvm-readobj --section-headers %t.rename-section \32# RUN: | FileCheck %s --check-prefix=RENAME-SECTION33 34# RENAME-SECTION: Sections [35# RENAME-SECTION: Name: .blam.blah.blag (36# RENAME-SECTION: Name: .blob.blab (37# RENAME-SECTION: Name: .blag (38 39## Case 3: Rename symbol.40# RUN: llvm-objcopy %t.o %t.rename-symbol --redefine-sym foobar=raboof41# RUN: llvm-readobj --symbols %t.rename-symbol \42# RUN: | FileCheck %s --check-prefix=RENAME-SYMBOL43 44# RENAME-SYMBOL: Symbols [45# RENAME-SYMBOL: Name: bar (46# RENAME-SYMBOL: Name: raboof (47# RENAME-SYMBOL: Name: bazfoobar (48 49## Case 4: Remove section.50# RUN: llvm-objcopy %t.o %t.remove-section -R .blah.blag51# RUN: llvm-readobj --section-headers %t.remove-section \52# RUN: | FileCheck %s --check-prefix=REMOVE-SECTION --implicit-check-not .blah.blag53 54# REMOVE-SECTION: Sections [55# REMOVE-SECTION: Name: .blam.blah.blag (56# REMOVE-SECTION: Name: .blag (57 58## Case 5: Remove symbol.59# RUN: llvm-objcopy %t.o %t.remove-symbol -N foobar60# RUN: llvm-readobj --symbols %t.remove-symbol \61# RUN: | FileCheck %s --check-prefix=REMOVE-SYMBOL --implicit-check-not='Name: foobar'62 63# REMOVE-SYMBOL: Symbols [64# REMOVE-SYMBOL: Name: bar (65# REMOVE-SYMBOL: Name: bazfoobar (66 67--- !ELF68FileHeader:69 Class: ELFCLASS6470 Data: ELFDATA2LSB71 Type: ET_EXEC72 Machine: EM_X86_6473Sections:74 - Name: .blam.blah.blag75 Type: SHT_PROGBITS76 - Name: .blah.blag77 Type: SHT_PROGBITS78 - Name: .blag79 Type: SHT_PROGBITS80Symbols:81 - Name: bar82 - Name: foobar83 - Name: bazfoobar84