mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 15:14:08 +00:00
Add frame info for x64 GDB JIT API.
This commit is contained in:
parent
2144d55eb8
commit
956065fd04
@ -66,6 +66,7 @@ enum {
|
||||
#define CFRAME_OFS_PC (6*4)
|
||||
#define CFRAME_OFS_MULTRES (5*4)
|
||||
#define CFRAME_SIZE (12*4)
|
||||
#define CFRAME_SIZE_JIT CFRAME_SIZE
|
||||
#elif LJ_TARGET_X64
|
||||
#if _WIN64
|
||||
#define CFRAME_OFS_PREV (13*8)
|
||||
@ -75,6 +76,7 @@ enum {
|
||||
#define CFRAME_OFS_NRES (22*4)
|
||||
#define CFRAME_OFS_MULTRES (21*4)
|
||||
#define CFRAME_SIZE (10*8)
|
||||
#define CFRAME_SIZE_JIT (CFRAME_SIZE + 9*16 + 4*8)
|
||||
#else
|
||||
#define CFRAME_OFS_PREV (4*8)
|
||||
#define CFRAME_OFS_PC (7*4)
|
||||
@ -83,6 +85,7 @@ enum {
|
||||
#define CFRAME_OFS_NRES (4*4)
|
||||
#define CFRAME_OFS_MULTRES (1*4)
|
||||
#define CFRAME_SIZE (10*8)
|
||||
#define CFRAME_SIZE_JIT (CFRAME_SIZE + 16)
|
||||
#endif
|
||||
#else
|
||||
#error "Missing CFRAME_* definitions for this architecture"
|
||||
|
@ -528,7 +528,13 @@ static void LJ_FASTCALL gdbjit_ehframe(GDBJITctx *ctx)
|
||||
DB(DW_CFA_offset|DW_REG_SI); DUV(4);
|
||||
DB(DW_CFA_offset|DW_REG_BX); DUV(5);
|
||||
#elif LJ_TARGET_X64
|
||||
/* Add saved registers for x64 CFRAME. */
|
||||
DB(DW_CFA_offset|DW_REG_BP); DUV(2);
|
||||
DB(DW_CFA_offset|DW_REG_BX); DUV(3);
|
||||
DB(DW_CFA_offset|DW_REG_15); DUV(4);
|
||||
DB(DW_CFA_offset|DW_REG_14); DUV(5);
|
||||
/* Extra registers saved for JIT-compiled code. */
|
||||
DB(DW_CFA_offset|DW_REG_13); DUV(9);
|
||||
DB(DW_CFA_offset|DW_REG_12); DUV(10);
|
||||
#else
|
||||
#error "Unsupported target architecture"
|
||||
#endif
|
||||
@ -703,8 +709,8 @@ void lj_gdbjit_addtrace(jit_State *J, Trace *T, TraceNo traceno)
|
||||
ctx.T = T;
|
||||
ctx.mcaddr = (uintptr_t)T->mcode;
|
||||
ctx.szmcode = T->szmcode;
|
||||
ctx.spadjp = CFRAME_SIZE + (MSize)(parent ? J->trace[parent]->spadjust : 0);
|
||||
ctx.spadj = CFRAME_SIZE + T->spadjust;
|
||||
ctx.spadjp = CFRAME_SIZE_JIT + (MSize)(parent?J->trace[parent]->spadjust:0);
|
||||
ctx.spadj = CFRAME_SIZE_JIT + T->spadjust;
|
||||
ctx.lineno = proto_line(pt, proto_bcpos(pt, startpc));
|
||||
ctx.filename = strdata(proto_chunkname(pt));
|
||||
if (*ctx.filename == '@' || *ctx.filename == '=')
|
||||
|
Loading…
Reference in New Issue
Block a user