llvm/test/tools/llvm-objcopy/strip-sections.test
Julie Hockett e2b125cd4d [objcopy] make objcopy follow program header standards
Submitted on behalf of Armando Montanez (amontanez@google.com).

Objects with unused program headers copied by objcopy would always have
nonzero values for program header offset and program header entry size.
While technically valid, this atypical behavior triggers warnings in some
tools. This change sets the two fields to zero when the program header is
unused, better fitting the general expectations for unused program header
data.

Section headers behaved somewhat similarly (though only with the entry size),
and are fixed in this revision as well.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342065 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-12 17:56:31 +00:00

67 lines
1.9 KiB
Plaintext

# RUN: yaml2obj %s > %t
# RUN: llvm-objcopy --strip-sections %t %t2
# RUN: llvm-readobj -file-headers -program-headers %t2 | FileCheck %s
# RUN: od -t x1 -j 4096 %t2 | FileCheck %s --check-prefix=DATA
!ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 0x0000000000001000
Content: "DEADBEEF"
ProgramHeaders:
- Type: PT_LOAD
Flags: [ PF_X, PF_R ]
Sections:
- Section: .text
#DATA: 0010000 de ad be ef
#CHECK: ElfHeader {
#CHECK-NEXT: Ident {
#CHECK-NEXT: Magic: (7F 45 4C 46)
#CHECK-NEXT: Class: 64-bit (0x2)
#CHECK-NEXT: DataEncoding: LittleEndian (0x1)
#CHECK-NEXT: FileVersion: 1
#CHECK-NEXT: OS/ABI: SystemV (0x0)
#CHECK-NEXT: ABIVersion: 0
#CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
#CHECK-NEXT: }
#CHECK-NEXT: Type: Executable (0x2)
#CHECK-NEXT: Machine: EM_X86_64 (0x3E)
#CHECK-NEXT: Version: 1
#CHECK-NEXT: Entry: 0x0
#CHECK-NEXT: ProgramHeaderOffset: 0x40
#CHECK-NEXT: SectionHeaderOffset: 0x0
#CHECK-NEXT: Flags [ (0x0)
#CHECK-NEXT: ]
#CHECK-NEXT: HeaderSize: 64
#CHECK-NEXT: ProgramHeaderEntrySize: 56
#CHECK-NEXT: ProgramHeaderCount: 1
#CHECK-NEXT: SectionHeaderEntrySize: 0
#CHECK-NEXT: SectionHeaderCount: 0
#CHECK-NEXT: StringTableSectionIndex: 0
#CHECK-NEXT: }
#CHECK: ProgramHeaders [
#CHECK-NEXT: ProgramHeader {
#CHECK-NEXT: Type: PT_LOAD (0x1)
#CHECK-NEXT: Offset: 0x1000
#CHECK-NEXT: VirtualAddress: 0x0
#CHECK-NEXT: PhysicalAddress: 0x0
#CHECK-NEXT: FileSize: 4
#CHECK-NEXT: MemSize: 4
#CHECK-NEXT: Flags [ (0x5)
#CHECK-NEXT: PF_R (0x4)
#CHECK-NEXT: PF_X (0x1)
#CHECK-NEXT: ]
#CHECK-NEXT: Alignment: 4096
#CHECK-NEXT: }
#CHECK-NEXT:]