aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2007-12-10 14:54:42 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2007-12-10 14:54:42 +0000
commita14b6696c049a828970da3a4ffde52ae516f6f3c (patch)
tree5047d23104a89300896c1945b908f4745fe7856c /lib
parent22ad1d72cd4e5054389c94e1c03df4564c4a466a (diff)
Annotate JIT callback function with call frame infromation.
This will allow us (theoretically) to unwind through JITer. The code wasn't verified, so I'm pretty sure offsets are wrong :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44792 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/X86/X86JITInfo.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/Target/X86/X86JITInfo.cpp b/lib/Target/X86/X86JITInfo.cpp
index b9e5d5ba88..f750b56070 100644
--- a/lib/Target/X86/X86JITInfo.cpp
+++ b/lib/Target/X86/X86JITInfo.cpp
@@ -116,11 +116,18 @@ extern "C" {
".align 8\n"
".globl " ASMPREFIX "X86CompilationCallback\n"
ASMPREFIX "X86CompilationCallback:\n"
+ ".cfi_startproc\n"
"pushl %ebp\n"
+ ".cfi_def_cfa_offset 8\n"
+ ".cfi_offset ebp, -8\n"
"movl %esp, %ebp\n" // Standard prologue
+ ".cfi_def_cfa_register ebp\n"
"pushl %eax\n"
+ ".cfi_rel_offset eax, 0\n"
"pushl %edx\n" // Save EAX/EDX/ECX
+ ".cfi_rel_offset edx, 4\n"
"pushl %ecx\n"
+ ".cfi_rel_offset ecx, 8\n"
#if defined(__APPLE__)
"andl $-16, %esp\n" // Align ESP on 16-byte boundary
#endif
@@ -130,12 +137,23 @@ extern "C" {
"movl %ebp, (%esp)\n"
"call " ASMPREFIX "X86CompilationCallback2\n"
"movl %ebp, %esp\n" // Restore ESP
+ ".cfi_def_cfa_register esp\n"
"subl $12, %esp\n"
+ ".cfi_adjust_cfa_offset 12\n"
"popl %ecx\n"
+ ".cfi_adjust_cfa_offset -4\n"
+ ".cfi_restore ecx\n"
"popl %edx\n"
+ ".cfi_adjust_cfa_offset -4\n"
+ ".cfi_restore edx\n"
"popl %eax\n"
+ ".cfi_adjust_cfa_offset -4\n"
+ ".cfi_restore eax\n"
"popl %ebp\n"
- "ret\n");
+ ".cfi_adjust_cfa_offset -4\n"
+ ".cfi_restore ebp\n"
+ "ret\n"
+ ".cfi_endproc\n");
// Same as X86CompilationCallback but also saves XMM argument registers.
void X86CompilationCallback_SSE(void);