diff options
Diffstat (limited to 'llvm/test/tools/llvm-objcopy/ELF')
5 files changed, 95 insertions, 6 deletions
diff --git a/llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test b/llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test new file mode 100644 index 00000000000..d464e0d414c --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test @@ -0,0 +1,47 @@ +# Show that --remove-section removes sections in segments. + +# RUN: yaml2obj %s -o %t + +# Validate the offsets for the later parts of the test. +# RUN: llvm-objcopy %t %t.copy +# Skip to the start of the sections, which should be immediately after the +# program header table (i.e. sizeof(Elf64_Ehdr) + sizeof(Elf64_Phdr) == 120). +# RUN: od %t.copy -t x1 -N 16 -j 120 | FileCheck %s --check-prefix=COPY + +# COPY: 11 22 33 44 55 66 77 88 + +# RUN: llvm-objcopy --remove-section non_alloc %t %t.nonalloc +# RUN: llvm-readelf --sections %t.nonalloc | FileCheck %s --check-prefix=NONALLOC-SHDRS +# RUN: od %t.nonalloc -t x1 -N 16 -j 120 | FileCheck %s --check-prefix=NONALLOC-BYTES + +# NONALLOC-SHDRS-NOT: non_alloc +# NONALLOC-BYTES: 11 22 33 44 00 00 00 00 + +# RUN: llvm-objcopy --remove-section shf_alloc %t %t.alloc +# RUN: llvm-readelf --sections %t.alloc | FileCheck %s --check-prefix=ALLOC-SHDRS +# RUN: od %t.alloc -t x1 -N 16 -j 120 | FileCheck %s --check-prefix=ALLOC-BYTES + +# ALLOC-SHDRS-NOT: shf_alloc +# ALLOC-BYTES: 00 00 00 00 55 66 77 88 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: shf_alloc + Type: SHT_PROGBITS + Flags: [SHF_ALLOC] + Content: '11223344' + - Name: non_alloc + Type: SHT_PROGBITS + Flags: [] + Content: '55667788' +ProgramHeaders: + # Use an arbitrary segment type to show that the segment type is unimportant. + - Type: 0x61234567 + Sections: + - Section: shf_alloc + - Section: non_alloc diff --git a/llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test b/llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test index 8253526d23c..95e7356d024 100644 --- a/llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test +++ b/llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test @@ -1,10 +1,15 @@ # RUN: yaml2obj %s > %t -# RUN: cp %t %t1 # RUN: llvm-objcopy --strip-all-gnu %t %t2 # RUN: llvm-strip --strip-all-gnu %t -o %t3 # RUN: llvm-readobj --file-headers --sections %t2 | FileCheck %s # RUN: cmp %t2 %t3 +# Show that the debug section in a segment was removed, to match GNU. +# First validate that the offset in use is correct. +# RUN: llvm-objcopy %t %t4 +# RUN: od %t4 -t x1 -N 4 -j 120 | FileCheck %s --check-prefix=COPY-BYTES +# RUN: od %t2 -t x1 -N 4 -j 120 | FileCheck %s --check-prefix=STRIP-BYTES + !ELF FileHeader: Class: ELFCLASS64 @@ -12,6 +17,10 @@ FileHeader: Type: ET_REL Machine: EM_X86_64 Sections: + - Name: .debug_in_segment + Type: SHT_PROGBITS + Flags: [ ] + Content: "deadbeef" - Name: .dynstr Type: SHT_STRTAB Flags: [ SHF_ALLOC ] @@ -45,6 +54,11 @@ Sections: - Name: .rela.text Type: SHT_RELA Info: .text +ProgramHeaders: + # Use an arbitrary segment type to show that the segment type is unimportant. + - Type: 0x61234567 + Sections: + - Section: .debug_in_segment # CHECK: SectionHeaderCount: 8 @@ -55,3 +69,6 @@ Sections: # CHECK: Name: .comment # CHECK: Name: .random_section_name # CHECK: Name: .shstrtab + +# COPY-BYTES: de ad be ef +# STRIP-BYTES: 00 00 00 00 diff --git a/llvm/test/tools/llvm-objcopy/ELF/strip-all.test b/llvm/test/tools/llvm-objcopy/ELF/strip-all.test index 87388e09747..32a801d7a6c 100644 --- a/llvm/test/tools/llvm-objcopy/ELF/strip-all.test +++ b/llvm/test/tools/llvm-objcopy/ELF/strip-all.test @@ -57,6 +57,10 @@ FileHeader: Type: ET_REL Machine: EM_X86_64 Sections: + - Name: non_alloc_in_segment + Type: SHT_PROGBITS + Flags: [ ] + Size: 4 - Name: .bss Type: SHT_NOBITS Flags: [ SHF_ALLOC ] @@ -68,9 +72,15 @@ Sections: Flags: [ ] - Name: .gnu.warning.foo Type: SHT_PROGBITS +ProgramHeaders: + # Use an arbitrary segment type to show that the segment type is unimportant. + - Type: 0x61234567 + Sections: + - Section: non_alloc_in_segment -# CHECK: SectionHeaderCount: 5 +# CHECK: SectionHeaderCount: 6 +# CHECK: Name: non_alloc_in_segment # CHECK: Name: .bss # CHECK: Name: .text # CHECK: Name: .gnu.warning.foo diff --git a/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test b/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test index 8db732147d3..1f082bf4734 100644 --- a/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test +++ b/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test @@ -9,6 +9,10 @@ FileHeader: Type: ET_REL Machine: EM_X86_64 Sections: + - Name: non_alloc_in_segment + Type: SHT_PROGBITS + Flags: [ ] + Size: 4 - Name: .bss Type: SHT_NOBITS Flags: [ SHF_ALLOC ] @@ -18,9 +22,15 @@ Sections: - Name: .blarg Type: SHT_PROGBITS Flags: [ ] +ProgramHeaders: + # Use an arbitrary segment type to show that the segment type is unimportant. + - Type: 0x61234567 + Sections: + - Section: non_alloc_in_segment -# CHECK: SectionHeaderCount: 4 +# CHECK: SectionHeaderCount: 5 +# CHECK: Name: non_alloc_in_segment # CHECK: Name: .bss # CHECK: Name: .text # CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/ELF/strip-sections.test b/llvm/test/tools/llvm-objcopy/ELF/strip-sections.test index 2dee6e2808d..244cdb31ba9 100644 --- a/llvm/test/tools/llvm-objcopy/ELF/strip-sections.test +++ b/llvm/test/tools/llvm-objcopy/ELF/strip-sections.test @@ -15,13 +15,18 @@ Sections: Flags: [ SHF_ALLOC, SHF_EXECINSTR ] AddressAlign: 0x0000000000001000 Content: "DEADBEEF" + - Name: .non_alloc_in_segment + Type: SHT_PROGBITS + Flags: [ ] + Content: "CAFEBABE" ProgramHeaders: - Type: PT_LOAD Flags: [ PF_X, PF_R ] Sections: - Section: .text + - Section: .non_alloc_in_segment -#DATA: 0010000 de ad be ef +#DATA: 0010000 de ad be ef ca fe ba be #CHECK: ElfHeader { #CHECK-NEXT: Ident { @@ -55,8 +60,8 @@ ProgramHeaders: #CHECK-NEXT: Offset: 0x1000 #CHECK-NEXT: VirtualAddress: 0x0 #CHECK-NEXT: PhysicalAddress: 0x0 -#CHECK-NEXT: FileSize: 4 -#CHECK-NEXT: MemSize: 4 +#CHECK-NEXT: FileSize: 8 +#CHECK-NEXT: MemSize: 8 #CHECK-NEXT: Flags [ (0x5) #CHECK-NEXT: PF_R (0x4) #CHECK-NEXT: PF_X (0x1) |

