diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h | 6 | ||||
| -rw-r--r-- | llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h index 92fbb7c67d0..44fda87e0f9 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h @@ -174,8 +174,10 @@ public: } case COFF::IMAGE_REL_I386_REL32: { // 32-bit relative displacement to the target. - uint64_t Result = Sections[RE.Sections.SectionA].getLoadAddress() - - Section.getLoadAddress() + RE.Addend - 4 - RE.Offset; + uint64_t Result = RE.Sections.SectionA == static_cast<uint32_t>(-1) + ? Value + : Sections[RE.Sections.SectionA].getLoadAddress(); + Result = Result - Section.getLoadAddress() + RE.Addend - 4 - RE.Offset; assert(static_cast<int32_t>(Result) <= INT32_MAX && "relocation overflow"); assert(static_cast<int32_t>(Result) >= INT32_MIN && diff --git a/llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s b/llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s index c2273da63dd..ddf154e4320 100644 --- a/llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s +++ b/llvm/test/ExecutionEngine/RuntimeDyld/X86/COFF_i386.s @@ -1,5 +1,5 @@ // RUN: llvm-mc -triple i686-windows -filetype obj -o %t.obj %s -// RUN: llvm-rtdyld -triple i686-windows -dummy-extern _OutputDebugStringA@4=0xfffffffe -dummy-extern _ExitProcess@4=0xffffffff -verify -check=%s %t.obj +// RUN: llvm-rtdyld -triple i686-windows -dummy-extern _printf=0xfffffffd -dummy-extern _OutputDebugStringA@4=0xfffffffe -dummy-extern _ExitProcess@4=0xffffffff -verify -check=%s %t.obj .text @@ -13,7 +13,9 @@ rel1: call _function // IMAGE_REL_I386_REL32 # rtdyld-check: decode_operand(rel1, 0) = (_function-_main-4-1) xorl %eax, %eax - retl +rel12: + jmp _printf +# rtdyld-check: decode_operand(rel12, 0)[31:0] = (_printf-_main-4-8) .def _function .scl 2 |

