win64: add tiny unwind data for setjmp/longjmp
This enables native unwind semantics with longjmp on win64 by putting an entry into the .pdata section for each compiled fuction. Also, the function now use a fixed stack and store arguments into X(%rsp) rather than using push.
This commit is contained in:
@ -58,7 +58,7 @@ typedef unsigned __int64 uintptr_t;
|
||||
#define _AMD64_ 1
|
||||
#define __x86_64 1
|
||||
#define USE_MINGW_SETJMP_TWO_ARGS
|
||||
#define mingw_getsp tinyc_getsp
|
||||
#define mingw_getsp tinyc_getbp
|
||||
#else
|
||||
typedef __int32 intptr_t;
|
||||
typedef unsigned __int32 uintptr_t;
|
||||
|
||||
@ -57,11 +57,19 @@ P0:
|
||||
jmp *8(%rax)
|
||||
|
||||
/* ---------------------------------------------- */
|
||||
/* avoid msvcrt unwind stuff for setjmp/longjmp */
|
||||
/* setjmp/longjmp support */
|
||||
|
||||
.globl tinyc_getsp
|
||||
tinyc_getsp:
|
||||
.globl tinyc_no_getbp
|
||||
tinyc_no_getbp:
|
||||
.byte 0x90
|
||||
|
||||
.globl tinyc_getbp
|
||||
tinyc_getbp:
|
||||
xor %rax,%rax
|
||||
cmp %al,tinyc_no_getbp(%rax)
|
||||
je t1
|
||||
mov %rbp,%rax
|
||||
t1:
|
||||
ret
|
||||
|
||||
/* ---------------------------------------------- */
|
||||
|
||||
Reference in New Issue
Block a user