aboutsummaryrefslogtreecommitdiff
path: root/src/lj_frame.h
diff options
context:
space:
mode:
authorMike Pall <mike>2010-01-05 22:39:46 +0100
committerMike Pall <mike>2010-01-05 22:39:46 +0100
commitc31ac26fb9803d4b09c27668b7c2d9a01385c9ba (patch)
tree620bc1af468b94d4676f5b6e335b5983e9f1ef8b /src/lj_frame.h
parentb3e3bad0ffffe9e1a23c658b99810c687905005d (diff)
downloadluajit-c31ac26fb9803d4b09c27668b7c2d9a01385c9ba.tar.gz
luajit-c31ac26fb9803d4b09c27668b7c2d9a01385c9ba.tar.bz2
luajit-c31ac26fb9803d4b09c27668b7c2d9a01385c9ba.zip
Add support for WIN64 exception handling to external unwinder.
Modify unwinding to always return _ff or _c unwind type. Generate PE object .pdata/.xdata sections for x64 interpreter. Can drop r12-r15 saves in Windows/x64 interpreter now.
Diffstat (limited to '')
-rw-r--r--src/lj_frame.h21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/lj_frame.h b/src/lj_frame.h
index 0bfcb005..c86818e0 100644
--- a/src/lj_frame.h
+++ b/src/lj_frame.h
@@ -67,13 +67,13 @@ enum {
67#define CFRAME_SIZE (12*4) 67#define CFRAME_SIZE (12*4)
68#elif LJ_TARGET_X64 68#elif LJ_TARGET_X64
69#if _WIN64 69#if _WIN64
70#define CFRAME_OFS_PREV (17*8) 70#define CFRAME_OFS_PREV (13*8)
71#define CFRAME_OFS_PC (33*4) 71#define CFRAME_OFS_PC (25*4)
72#define CFRAME_OFS_L (32*4) 72#define CFRAME_OFS_L (24*4)
73#define CFRAME_OFS_ERRF (31*4) 73#define CFRAME_OFS_ERRF (23*4)
74#define CFRAME_OFS_NRES (30*4) 74#define CFRAME_OFS_NRES (22*4)
75#define CFRAME_OFS_MULTRES (29*4) 75#define CFRAME_OFS_MULTRES (21*4)
76#define CFRAME_SIZE (14*8) 76#define CFRAME_SIZE (10*8)
77#else 77#else
78#define CFRAME_OFS_PREV (4*8) 78#define CFRAME_OFS_PREV (4*8)
79#define CFRAME_OFS_PC (5*4) 79#define CFRAME_OFS_PC (5*4)
@@ -88,8 +88,8 @@ enum {
88#endif 88#endif
89 89
90#define CFRAME_RESUME 1 90#define CFRAME_RESUME 1
91#define CFRAME_CANYIELD ((intptr_t)(CFRAME_RESUME)) 91#define CFRAME_UNWIND_FF 2 /* Only used in unwinder. */
92#define CFRAME_RAWMASK (~CFRAME_CANYIELD) 92#define CFRAME_RAWMASK (~(intptr_t)(CFRAME_RESUME|CFRAME_UNWIND_FF))
93 93
94#define cframe_errfunc(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_ERRF)) 94#define cframe_errfunc(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_ERRF))
95#define cframe_nres(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_NRES)) 95#define cframe_nres(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_NRES))
@@ -101,7 +101,8 @@ enum {
101 (mref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), const BCIns)) 101 (mref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), const BCIns))
102#define setcframe_pc(cf, pc) \ 102#define setcframe_pc(cf, pc) \
103 (setmref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), (pc))) 103 (setmref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), (pc)))
104#define cframe_canyield(cf) ((intptr_t)(cf) & CFRAME_CANYIELD) 104#define cframe_canyield(cf) ((intptr_t)(cf) & CFRAME_RESUME)
105#define cframe_unwind_ff(cf) ((intptr_t)(cf) & CFRAME_UNWIND_FF)
105#define cframe_raw(cf) ((void *)((intptr_t)(cf) & CFRAME_RAWMASK)) 106#define cframe_raw(cf) ((void *)((intptr_t)(cf) & CFRAME_RAWMASK))
106#define cframe_Lpc(L) cframe_pc(cframe_raw(L->cframe)) 107#define cframe_Lpc(L) cframe_pc(cframe_raw(L->cframe))
107 108