llvm-project/llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test
James Henderson b5de5e25de [llvm-objcopy]Don't implicitly strip sections in segments
This patch changes llvm-objcopy's behaviour to not strip sections that
are in segments, if they otherwise would be due to a stripping operation
(--strip-all, --strip-sections, --strip-non-alloc). This preserves the
segment contents. It does not change the behaviour of --strip-all-gnu
(although we could choose to do so), because GNU objcopy's behaviour in
this case seems to be to strip the section, nor does it prevent removing
of sections in segments with --remove-section (if a user REALLY wants to
remove a section, we should probably let them, although I could be
persuaded that warning might be appropriate). Tests have been added to
show this latter behaviour.

This fixes https://bugs.llvm.org/show_bug.cgi?id=41006.

Reviewed by: grimar, rupprecht, jakehehrlich

Differential Revision: https://reviews.llvm.org/D59293

This is a reland of r356129, attempting to fix greendragon failures
due to a suspected compatibility issue with od on the greendragon bots
versus other versions.

llvm-svn: 356136
2019-03-14 11:47:41 +00:00

48 lines
1.5 KiB
Plaintext

# 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 x1 -N 16 -j 120 %t.copy | 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 x1 -N 16 -j 120 %t.nonalloc | 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 x1 -N 16 -j 120 %t.alloc | 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