From f7acddde5b0c9a32371ace1084949e9224a516d8 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Tue, 22 Jul 2014 22:47:39 +0000 Subject: [MCJIT] Refactor and add stub inspection to the RuntimeDyldChecker framework. This patch introduces a 'stub_addr' builtin that can be used to find the address of the stub for a given (,
, ) tuple. This address can be used both to verify the contents of stubs (by loading from the returned address) and to verify references to stubs (by comparing against the returned address). Example (1) - Verifying stub contents: Load 8 bytes (assuming a 64-bit target) from the stub for 'x' in the __text section of f.o, and compare that value against the addres of 'x'. # rtdyld-check: *{8}(stub_addr(f.o, __text, x) = x Example (2) - Verifying references to stubs: Decode the immediate of the instruction at label 'l', and verify that it's equal to the offset from the next instruction's PC to the stub for 'y' in the __text section of f.o (i.e. it's the correct PC-rel difference). # rtdyld-check: decode_operand(l, 4) = stub_addr(f.o, __text, y) - next_pc(l) l: movq y@GOTPCREL(%rip), %rax Since stub inspection requires cooperation with RuntimeDyldImpl this patch pimpl-ifies RuntimeDyldChecker. Its implementation is moved in to a new class, RuntimeDyldCheckerImpl, that has access to the definition of RuntimeDyldImpl. llvm-svn: 213698 --- .../RuntimeDyld/X86/MachO_x86-64_PIC_relocations.s | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'llvm/test/ExecutionEngine') diff --git a/llvm/test/ExecutionEngine/RuntimeDyld/X86/MachO_x86-64_PIC_relocations.s b/llvm/test/ExecutionEngine/RuntimeDyld/X86/MachO_x86-64_PIC_relocations.s index e87b449bb23..847977b9eac 100644 --- a/llvm/test/ExecutionEngine/RuntimeDyld/X86/MachO_x86-64_PIC_relocations.s +++ b/llvm/test/ExecutionEngine/RuntimeDyld/X86/MachO_x86-64_PIC_relocations.s @@ -1,6 +1,6 @@ -# RUN: llvm-mc -triple=x86_64-apple-macosx10.9 -relocation-model=pic -filetype=obj -o %t.o %s -# RUN: llvm-rtdyld -triple=x86_64-apple-macosx10.9 -verify -check=%s %t.o -# RUN: rm %t.o +# RUN: llvm-mc -triple=x86_64-apple-macosx10.9 -relocation-model=pic -filetype=obj -o %T/foo.o %s +# RUN: sed "s,,%T/foo.o,g" %s > %T/foo.s +# RUN: llvm-rtdyld -triple=x86_64-apple-macosx10.9 -verify -check=%T/foo.s %T/foo.o .section __TEXT,__text,regular,pure_instructions .globl foo @@ -20,9 +20,20 @@ insn1: # rtdyld-check: decode_operand(insn2, 4) = x - next_pc(insn2) insn2: movl x(%rip), %eax - movl $0, %eax + +# Test PC-rel GOT relocation. +# Verify both the contents of the GOT entry for y, and that the movq instruction +# references the correct GOT entry address: +# rtdyld-check: *{8}(stub_addr(, __text, y)) = y +# rtdyld-check: decode_operand(insn3, 4) = stub_addr(, __text, y) - next_pc(insn3) +insn3: + movq y@GOTPCREL(%rip), %rax + + movl $0, %eax retq + .comm y,4,2 + .section __DATA,__data .globl x .align 2 -- cgit v1.2.3