summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2014-06-12 10:58:22 +0200
committerMike Pall <mike>2014-06-12 10:58:22 +0200
commit5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c (patch)
treecab2f12d87f5de895621f98e738da10cc960f9ad
parent7dc9e5ade487ff2cd81c0c644f4f0953166b1375 (diff)
downloadluajit-5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c.tar.gz
luajit-5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c.tar.bz2
luajit-5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c.zip
FFI: Fix frame traversal for backtraces with FFI callbacks.
-rw-r--r--src/Makefile.dep2
-rw-r--r--src/lj_debug.c4
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 \
90 lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_ccallback.h 90 lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_ccallback.h
91lj_debug.o: lj_debug.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ 91lj_debug.o: lj_debug.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
92 lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_state.h lj_frame.h \ 92 lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_state.h lj_frame.h \
93 lj_bc.h lj_jit.h lj_ir.h 93 lj_bc.h lj_vm.h lj_jit.h lj_ir.h
94lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ 94lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
95 lj_err.h lj_errmsg.h lj_func.h lj_str.h lj_tab.h lj_meta.h lj_debug.h \ 95 lj_err.h lj_errmsg.h lj_func.h lj_str.h lj_tab.h lj_meta.h lj_debug.h \
96 lj_state.h lj_frame.h lj_bc.h lj_ff.h lj_ffdef.h lj_jit.h lj_ir.h \ 96 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 @@
14#include "lj_state.h" 14#include "lj_state.h"
15#include "lj_frame.h" 15#include "lj_frame.h"
16#include "lj_bc.h" 16#include "lj_bc.h"
17#include "lj_vm.h"
17#if LJ_HASJIT 18#if LJ_HASJIT
18#include "lj_jit.h" 19#include "lj_jit.h"
19#endif 20#endif
@@ -86,7 +87,8 @@ static BCPos debug_framepc(lua_State *L, GCfunc *fn, cTValue *nextframe)
86 if (frame_islua(f)) { 87 if (frame_islua(f)) {
87 f = frame_prevl(f); 88 f = frame_prevl(f);
88 } else { 89 } else {
89 if (frame_isc(f)) 90 if (frame_isc(f) || (LJ_HASFFI && frame_iscont(f) &&
91 (f-1)->u32.lo == LJ_CONT_FFI_CALLBACK))
90 cf = cframe_raw(cframe_prev(cf)); 92 cf = cframe_raw(cframe_prev(cf));
91 f = frame_prevd(f); 93 f = frame_prevd(f);
92 } 94 }