diff options
author | Mike Pall <mike> | 2014-06-12 10:58:22 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2014-06-12 10:58:22 +0200 |
commit | 5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c (patch) | |
tree | cab2f12d87f5de895621f98e738da10cc960f9ad | |
parent | 7dc9e5ade487ff2cd81c0c644f4f0953166b1375 (diff) | |
download | luajit-5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c.tar.gz luajit-5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c.tar.bz2 luajit-5e7b9bb8ed5bd8d7fa5263acc19e0869adc87d4c.zip |
FFI: Fix frame traversal for backtraces with FFI callbacks.
-rw-r--r-- | src/Makefile.dep | 2 | ||||
-rw-r--r-- | 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 \ | |||
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 |
91 | lj_debug.o: lj_debug.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 91 | lj_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 |
94 | lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 94 | lj_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 | } |