diff options
Diffstat (limited to 'llvm/test/tools/llvm-objcopy/ELF/overlapping-sections.test')
-rw-r--r-- | llvm/test/tools/llvm-objcopy/ELF/overlapping-sections.test | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/ELF/overlapping-sections.test b/llvm/test/tools/llvm-objcopy/ELF/overlapping-sections.test new file mode 100644 index 00000000000..2c46b09d6c3 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/ELF/overlapping-sections.test @@ -0,0 +1,56 @@ +## This test shows that llvm-objcopy does not baulk at overlapping sections. +## These don't really make sense, but the tool should still handle invalid +## inputs somehow. +# RUN: yaml2obj %s -o %t.o + +## First, check that the section header table appears immediately after the ELF +## header. +# RUN: llvm-readobj --file-headers %t.o | FileCheck %s --check-prefix=SHDRS-OFFSET +# SHDRS-OFFSET: SectionHeaderOffset: 0x40{{$}} + +## Binary edit the section header sh_offset field of the second section to +## overlap the first one. +# RUN: %python -c "with open('%/t.o', 'r+b') as input: import struct; bytes = struct.pack('<Q', 0x1001); input.seek(216); input.write(bytes)" + +## Sanity check that the binary editing modified the correct field. +# RUN: llvm-readobj --section-headers %t.o | FileCheck %s --check-prefix=VALIDATE + +# VALIDATE: Name: .first +# VALIDATE: Offset: 0x1000 +# VALIDATE: Name: .second +# VALIDATE: Offset: 0x1001 + +## Check that the contents are as expected before the copy. +# RUN: llvm-readobj -x .first -x .second %t.o | FileCheck %s --check-prefix=CONTENTS + +## Now check that the section contents are still correct after the copy. +## Also characterize the behavior of llvm-objcopy in that it "unoverlaps" the +## two sections. +# RUN: llvm-objcopy %t.o %t2.o +# RUN: llvm-readobj --section-headers %t2.o | FileCheck %s +# RUN: llvm-readobj -x .first -x .second %t2.o | FileCheck %s --check-prefix=CONTENTS + +# CHECK: Name: .first +# CHECK: Offset: 0x1000 +# CHECK: Name: .second +# CHECK: Offset: 0x1004 + +# CONTENTS: Hex dump of section '.first': +# CONTENTS-NEXT: 0x00000000 01234567 +# CONTENTS-NEXT: Hex dump of section '.second': +# CONTENTS-NEXT: 0x00000000 23456789 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .first + Type: SHT_PROGBITS + Content: '01234567' + AddressAlign: 0x1000 + - Name: .second + Type: SHT_PROGBITS + Content: '89abcdef' |