From 5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Thu, 12 Jun 2014 10:58:22 +0200 Subject: [PATCH] FFI: Fix frame traversal for backtraces with FFI callbacks. --- src/Makefile.dep | 2 +- src/lj_debug.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Makefile.dep b/src/Makefile.dep index 8ca33151..9e14d617 100644 --- a/src/Makefile.dep +++ b/src/Makefile.dep @@ -90,7 +90,7 @@ lj_ctype.o: lj_ctype.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_ccallback.h lj_debug.o: lj_debug.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_state.h lj_frame.h \ - lj_bc.h lj_jit.h lj_ir.h + lj_bc.h lj_vm.h lj_jit.h lj_ir.h lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ lj_err.h lj_errmsg.h lj_func.h lj_str.h lj_tab.h lj_meta.h lj_debug.h \ lj_state.h lj_frame.h lj_bc.h lj_ff.h lj_ffdef.h lj_jit.h lj_ir.h \ diff --git a/src/lj_debug.c b/src/lj_debug.c index effb4841..e4ab9c12 100644 --- a/src/lj_debug.c +++ b/src/lj_debug.c @@ -14,6 +14,7 @@ #include "lj_state.h" #include "lj_frame.h" #include "lj_bc.h" +#include "lj_vm.h" #if LJ_HASJIT #include "lj_jit.h" #endif @@ -86,7 +87,8 @@ static BCPos debug_framepc(lua_State *L, GCfunc *fn, cTValue *nextframe) if (frame_islua(f)) { f = frame_prevl(f); } else { - if (frame_isc(f)) + if (frame_isc(f) || (LJ_HASFFI && frame_iscont(f) && + (f-1)->u32.lo == LJ_CONT_FFI_CALLBACK)) cf = cframe_raw(cframe_prev(cf)); f = frame_prevd(f); }