diff options
author | Jake Ehrlich <jakehehrlich@google.com> | 2017-11-02 23:24:04 +0000 |
---|---|---|
committer | Jake Ehrlich <jakehehrlich@google.com> | 2017-11-02 23:24:04 +0000 |
commit | 13153eef561c5eb3295e1d0f3018ff32b54510af (patch) | |
tree | 08d75e8f895fe9076c7fb099adefc6da24e3b1bb /llvm/test/tools/llvm-objcopy/check-addr-offset-align-binary.test | |
parent | 086c04c8a795778f60a243f080e18bca3a4de144 (diff) | |
download | bcm5719-llvm-13153eef561c5eb3295e1d0f3018ff32b54510af.tar.gz bcm5719-llvm-13153eef561c5eb3295e1d0f3018ff32b54510af.zip |
[llvm-objcopy] Fix bug in how segment alignment was being handled
Just aligning segment offsets to segment alignment is incorrect and also
wastes more space than is needed. The requirement is that p_offset ==
p_addr modulo p_align *not* that p_offset == 0 modulo p_align. Generally
speaking we've been using p_addr == 0 modulo p_align. In fact yaml2obj
can't even produce a valid situation which causes llvm-objcopy to
produce incorrect results because alignment and offset were both
inherited from the sections the program header covers. This change fixes
this bad behavior in llvm-objcopy.
Differential Revision: https://reviews.llvm.org/D39132
llvm-svn: 317284
Diffstat (limited to 'llvm/test/tools/llvm-objcopy/check-addr-offset-align-binary.test')
-rw-r--r-- | llvm/test/tools/llvm-objcopy/check-addr-offset-align-binary.test | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/check-addr-offset-align-binary.test b/llvm/test/tools/llvm-objcopy/check-addr-offset-align-binary.test new file mode 100644 index 00000000000..755acceeda2 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/check-addr-offset-align-binary.test @@ -0,0 +1,40 @@ +# RUN: yaml2obj %s -o %t +# RUN: llvm-objcopy -O binary %t %t2 +# RUN: od -t x1 %t2 | FileCheck %s + +!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: 0x0000000000001000 + Content: "c3c3c3c3" + - Name: .data + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC ] + Address: 0x1008 + AddressAlign: 0x0000000000000008 + Content: "3232" +ProgramHeaders: + - Type: PT_LOAD + Flags: [ PF_X, PF_R ] + VAddr: 0x1000 + PAddr: 0x1000 + Align: 0x1000 + Sections: + - Section: .text + - Type: PT_LOAD + Flags: [ PF_R, PF_W ] + VAddr: 0x1008 + PAddr: 0x1008 + Align: 0x1000 + Sections: + - Section: .data + +# CHECK: 0000000 c3 c3 c3 c3 00 00 00 00 32 32 |