summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86JITInfo.cpp
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/Target/X86/X86JITInfo.cpp
parent22ad1d72cd4e5054389c94e1c03df4564c4a466a (diff)
downloadllvm-a14b6696c049a828970da3a4ffde52ae516f6f3c.tar.gz
llvm-a14b6696c049a828970da3a4ffde52ae516f6f3c.tar.bz2
llvm-a14b6696c049a828970da3a4ffde52ae516f6f3c.tar.xz
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/Target/X86/X86JITInfo.cpp')
-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);