From d49c92b12433a641b089611fa3ca8f53005c97a0 Mon Sep 17 00:00:00 2001 From: Jake Ehrlich Date: Wed, 15 Nov 2017 19:13:31 +0000 Subject: [llvm-objcopy] Change -O binary to respect section removal and behave like GNU objcopy The original -O binary implementation just copied segment data from the object and dumped it into a file. This doesn't take into account any operations performed on objects such as section removal. GNU objcopy has some specific behavior that we'd also like to respect. For instance using -O binary and -j will dump to a file. This change implements GNU objcopy style -O binary to as close of an approximation as I can determine. Differential Revision: https://reviews.llvm.org/D39713 llvm-svn: 318324 --- .../llvm-objcopy/two-seg-remove-third-sec.test | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 llvm/test/tools/llvm-objcopy/two-seg-remove-third-sec.test (limited to 'llvm/test/tools/llvm-objcopy/two-seg-remove-third-sec.test') diff --git a/llvm/test/tools/llvm-objcopy/two-seg-remove-third-sec.test b/llvm/test/tools/llvm-objcopy/two-seg-remove-third-sec.test new file mode 100644 index 00000000000..ad7af7f1221 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/two-seg-remove-third-sec.test @@ -0,0 +1,62 @@ +# RUN: yaml2obj %s -o %t +# RUN: llvm-objcopy -R .text3 -O binary %t %t2 +# RUN: od -Ax -v -t x1 %t2 | FileCheck %s +# RUN: wc -c %t2 | FileCheck %s -check-prefix=SIZE + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x1000 + AddressAlign: 0x1000 + Content: "c3c3c3c3" + Size: 0x1000 + - Name: .text2 + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x2000 + AddressAlign: 0x1000 + Content: "DEADBEEF" + Size: 0x1000 + - Name: .text3 + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x3000 + AddressAlign: 0x1000 + Content: "32323232" + Size: 0x1000 + - Name: .text4 + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x4000 + AddressAlign: 0x1000 + Content: "FFFFFFFF" + Size: 0x1000 +ProgramHeaders: + - Type: PT_LOAD + Flags: [ PF_R ] + VAddr: 0x1000 + PAddr: 0x1000 + Sections: + - Section: .text + - Section: .text2 + - Type: PT_LOAD + Flags: [ PF_R ] + VAddr: 0x1000 + PAddr: 0x1000 + Sections: + - Section: .text3 + - Section: .text4 + +# CHECK: 000000 c3 c3 c3 c3 +# CHECK: 001000 de ad be ef +# CHECK: 002000 00 00 00 00 +# CHECK: 003000 ff ff ff ff + +# SIZE: 16384 -- cgit v1.2.3