diff options
author | Shoaib Meenai <smeenai@fb.com> | 2017-10-17 01:41:14 +0000 |
---|---|---|
committer | Shoaib Meenai <smeenai@fb.com> | 2017-10-17 01:41:14 +0000 |
commit | a42f60e7f7f745a3d7ab9ba4c31044cb16391aa0 (patch) | |
tree | ec38debabbba88401bdf58ad00595dc791352287 | |
parent | 4d1969f22b28356ae37e0b2025c39d4623fe4235 (diff) | |
download | bcm5719-llvm-a42f60e7f7f745a3d7ab9ba4c31044cb16391aa0.tar.gz bcm5719-llvm-a42f60e7f7f745a3d7ab9ba4c31044cb16391aa0.zip |
[ExecutionEngine] Correct the size of a write in a COFF i386 relocation
We want to be writing a 32bit value, so we should be writing 4 bytes
instead of 2.
Patch by Alex Langford <apl@fb.com>.
Differential Revision: https://reviews.llvm.org/D38872
llvm-svn: 315964
-rw-r--r-- | llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h | 2 | ||||
-rw-r--r-- | llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s | 18 |
2 files changed, 12 insertions, 8 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h index 901f77865ba..76c8f956300 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h @@ -209,7 +209,7 @@ public: DEBUG(dbgs() << "\t\tOffset: " << RE.Offset << " RelType: IMAGE_REL_I386_SECREL Value: " << RE.Addend << '\n'); - writeBytesUnaligned(RE.Addend, Target, 2); + writeBytesUnaligned(RE.Addend, Target, 4); break; default: llvm_unreachable("unsupported relocation type"); diff --git a/llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s b/llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s index ddf154e4320..869df79bbdc 100644 --- a/llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s +++ b/llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s @@ -49,11 +49,6 @@ __imp__ExitProcess: .long "_ExitProcess@4" // IMAGE_REL_I386_DIR32 # rtdyld-check: *{4}__imp__ExitProcess = 0xffffffff - .global string - .align 1 -string: - .asciz "Hello World!\n" - .global relocations relocations: rel5: @@ -63,8 +58,8 @@ rel6: # rtdyld-check: *{2}rel6 = 1 .secidx __imp__OutputDebugStringA // IMAGE_REL_I386_SECTION rel7: -# rtdyld-check: *{4}rel7 = relocations - section_addr(COFF_i386.s.tmp.obj, .data) - .secrel32 relocations // IMAGE_REL_I386_SECREL +# rtdyld-check: *{4}rel7 = string - section_addr(COFF_i386.s.tmp.obj, .data) + .secrel32 string // IMAGE_REL_I386_SECREL # Test that addends work. rel8: @@ -79,3 +74,12 @@ rel10: rel11: # rtdyld-check: *{4}rel11 = string - section_addr(COFF_i386.s.tmp.obj, .data) + 1 .long string@SECREL32+1 // IMAGE_REL_I386_SECREL + +# We explicitly add padding to put string outside of the 16bit address space +# (absolute and as an offset from .data), so that relocations involving +# 32bit addresses / offsets are not accidentally truncated to 16 bits. + .space 65536 + .global string + .align 1 +string: + .asciz "Hello World!\n" |