summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-objcopy/check-addr-offset-align-binary.test
diff options
context:
space:
mode:
authorJake Ehrlich <jakehehrlich@google.com>2017-11-02 23:24:04 +0000
committerJake Ehrlich <jakehehrlich@google.com>2017-11-02 23:24:04 +0000
commit13153eef561c5eb3295e1d0f3018ff32b54510af (patch)
tree08d75e8f895fe9076c7fb099adefc6da24e3b1bb /llvm/test/tools/llvm-objcopy/check-addr-offset-align-binary.test
parent086c04c8a795778f60a243f080e18bca3a4de144 (diff)
downloadbcm5719-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.test40
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
OpenPOWER on IntegriCloud