aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-15 00:51:43 +0200
committerMike Pall <mike>2010-09-15 00:51:43 +0200
commit77267bc5384b4211418a05f0897ff336c4e1279e (patch)
tree9109295907b04ce21af9305a8105e8fdb4167a6e
parent8dc76ee3276e504d739818322e4dff37e6ae1c11 (diff)
downloadluajit-77267bc5384b4211418a05f0897ff336c4e1279e.tar.gz
luajit-77267bc5384b4211418a05f0897ff336c4e1279e.tar.bz2
luajit-77267bc5384b4211418a05f0897ff336c4e1279e.zip
Show names of IR calls in disassembler output.
-rw-r--r--lib/dump.lua8
-rw-r--r--src/lib_jit.c14
2 files changed, 19 insertions, 3 deletions
diff --git a/lib/dump.lua b/lib/dump.lua
index a00862d0..b0a334e6 100644
--- a/lib/dump.lua
+++ b/lib/dump.lua
@@ -59,8 +59,8 @@ local jutil = require("jit.util")
59local vmdef = require("jit.vmdef") 59local vmdef = require("jit.vmdef")
60local funcinfo, funcbc = jutil.funcinfo, jutil.funcbc 60local funcinfo, funcbc = jutil.funcinfo, jutil.funcbc
61local traceinfo, traceir, tracek = jutil.traceinfo, jutil.traceir, jutil.tracek 61local traceinfo, traceir, tracek = jutil.traceinfo, jutil.traceir, jutil.tracek
62local tracemc, traceexitstub = jutil.tracemc, jutil.traceexitstub 62local tracemc, tracesnap = jutil.tracemc, jutil.tracesnap
63local tracesnap = jutil.tracesnap 63local traceexitstub, ircalladdr = jutil.traceexitstub, jutil.ircalladdr
64local bit = require("bit") 64local bit = require("bit")
65local band, shl, shr = bit.band, bit.lshift, bit.rshift 65local band, shl, shr = bit.band, bit.lshift, bit.rshift
66local sub, gsub, format = string.sub, string.gsub, string.format 66local sub, gsub, format = string.sub, string.gsub, string.format
@@ -82,6 +82,10 @@ local nexitsym = 0
82-- Fill symbol table with trace exit addresses. 82-- Fill symbol table with trace exit addresses.
83local function fillsymtab(nexit) 83local function fillsymtab(nexit)
84 local t = symtab 84 local t = symtab
85 if nexitsym == 0 then
86 local ircall = vmdef.ircall
87 for i=0,#ircall do t[ircalladdr(i)] = ircall[i] end
88 end
85 if nexit > nexitsym then 89 if nexit > nexitsym then
86 for i=nexitsym,nexit-1 do t[traceexitstub(i)] = tostring(i) end 90 for i=nexitsym,nexit-1 do t[traceexitstub(i)] = tostring(i) end
87 nexitsym = nexit 91 nexitsym = nexit
diff --git a/src/lib_jit.c b/src/lib_jit.c
index bfceab62..57b50749 100644
--- a/src/lib_jit.c
+++ b/src/lib_jit.c
@@ -370,7 +370,18 @@ LJLIB_CF(jit_util_traceexitstub)
370 ExitNo exitno = (ExitNo)lj_lib_checkint(L, 1); 370 ExitNo exitno = (ExitNo)lj_lib_checkint(L, 1);
371 jit_State *J = L2J(L); 371 jit_State *J = L2J(L);
372 if (exitno < EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) { 372 if (exitno < EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) {
373 setnumV(L->top-1, cast_num((intptr_t)exitstub_addr(J, exitno))); 373 setnumV(L->top-1, cast_num((uintptr_t)exitstub_addr(J, exitno)));
374 return 1;
375 }
376 return 0;
377}
378
379/* local addr = jit.util.ircalladdr(idx) */
380LJLIB_CF(jit_util_ircalladdr)
381{
382 uint32_t idx = (uint32_t)lj_lib_checkint(L, 1);
383 if (idx < IRCALL__MAX) {
384 setnumV(L->top-1, cast_num((uintptr_t)(void *)lj_ir_callinfo[idx].func));
374 return 1; 385 return 1;
375 } 386 }
376 return 0; 387 return 0;
@@ -389,6 +400,7 @@ static int trace_nojit(lua_State *L)
389#define lj_cf_jit_util_tracesnap trace_nojit 400#define lj_cf_jit_util_tracesnap trace_nojit
390#define lj_cf_jit_util_tracemc trace_nojit 401#define lj_cf_jit_util_tracemc trace_nojit
391#define lj_cf_jit_util_traceexitstub trace_nojit 402#define lj_cf_jit_util_traceexitstub trace_nojit
403#define lj_cf_jit_util_ircalladdr trace_nojit
392 404
393#endif 405#endif
394 406