diff options
author | Julie Hockett <juliehockett@google.com> | 2018-09-12 17:56:31 +0000 |
---|---|---|
committer | Julie Hockett <juliehockett@google.com> | 2018-09-12 17:56:31 +0000 |
commit | 468722ee9f74cf4eedc4b6bf2db34e43be6b7ec7 (patch) | |
tree | 6a0dc7df03eacc16b6b68d31e27c60788ab0830f /llvm/test | |
parent | ebd4c906d870bc0e64e63fdf0fec3169bc4fc7d0 (diff) | |
download | bcm5719-llvm-468722ee9f74cf4eedc4b6bf2db34e43be6b7ec7.tar.gz bcm5719-llvm-468722ee9f74cf4eedc4b6bf2db34e43be6b7ec7.zip |
[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
llvm-svn: 342065
Diffstat (limited to 'llvm/test')
4 files changed, 21 insertions, 5 deletions
diff --git a/llvm/test/tools/llvm-objcopy/binary-input-arch.test b/llvm/test/tools/llvm-objcopy/binary-input-arch.test index 3cca1928911..08f02da882b 100644 --- a/llvm/test/tools/llvm-objcopy/binary-input-arch.test +++ b/llvm/test/tools/llvm-objcopy/binary-input-arch.test @@ -65,8 +65,8 @@ # CHECK-NEXT: ] # 32-NEXT: HeaderSize: 52 # 64-NEXT: HeaderSize: 64 -# 32-NEXT: ProgramHeaderEntrySize: 32 -# 64-NEXT: ProgramHeaderEntrySize: 56 +# 32-NEXT: ProgramHeaderEntrySize: 0 +# 64-NEXT: ProgramHeaderEntrySize: 0 # CHECK-NEXT: ProgramHeaderCount: 0 # 32-NEXT: SectionHeaderEntrySize: 40 # 64-NEXT: SectionHeaderEntrySize: 64 diff --git a/llvm/test/tools/llvm-objcopy/many-sections.test b/llvm/test/tools/llvm-objcopy/many-sections.test index 7aaa3a7fe7f..e9e12cf913f 100644 --- a/llvm/test/tools/llvm-objcopy/many-sections.test +++ b/llvm/test/tools/llvm-objcopy/many-sections.test @@ -22,12 +22,12 @@ EHDR-NEXT: Type: Relocatable (0x1) EHDR-NEXT: Machine: EM_X86_64 (0x3E) EHDR-NEXT: Version: 1 EHDR-NEXT: Entry: 0x0 -EHDR-NEXT: ProgramHeaderOffset: 0x40 +EHDR-NEXT: ProgramHeaderOffset: 0x0 EHDR-NEXT: SectionHeaderOffset: EHDR-NEXT: Flags [ (0x0) EHDR-NEXT: ] EHDR-NEXT: HeaderSize: 64 -EHDR-NEXT: ProgramHeaderEntrySize: 56 +EHDR-NEXT: ProgramHeaderEntrySize: 0 EHDR-NEXT: ProgramHeaderCount: 0 EHDR-NEXT: SectionHeaderEntrySize: 64 EHDR-NEXT: SectionHeaderCount: 0 diff --git a/llvm/test/tools/llvm-objcopy/relocatable-phdr.test b/llvm/test/tools/llvm-objcopy/relocatable-phdr.test new file mode 100644 index 00000000000..b6218956aff --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/relocatable-phdr.test @@ -0,0 +1,16 @@ +# This test ensures an object without a program header will retain zero values +# for offset and header size when copied with llvm-objcopy. +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy %t %t2 +# RUN: llvm-readobj -file-headers %t2 | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 + +# CHECK: ProgramHeaderOffset: 0x0 +# CHECK: ProgramHeaderEntrySize: 0 +# CHECK-NEXT: ProgramHeaderCount: 0 diff --git a/llvm/test/tools/llvm-objcopy/strip-sections.test b/llvm/test/tools/llvm-objcopy/strip-sections.test index 66cb34e89b0..fd8e224d27c 100644 --- a/llvm/test/tools/llvm-objcopy/strip-sections.test +++ b/llvm/test/tools/llvm-objcopy/strip-sections.test @@ -44,7 +44,7 @@ ProgramHeaders: #CHECK-NEXT: HeaderSize: 64 #CHECK-NEXT: ProgramHeaderEntrySize: 56 #CHECK-NEXT: ProgramHeaderCount: 1 -#CHECK-NEXT: SectionHeaderEntrySize: 64 +#CHECK-NEXT: SectionHeaderEntrySize: 0 #CHECK-NEXT: SectionHeaderCount: 0 #CHECK-NEXT: StringTableSectionIndex: 0 #CHECK-NEXT: } |