Browse Source

Show names of IR calls in disassembler output.

Mike Pall 15 years ago
parent
commit
77267bc538
2 changed files with 19 additions and 3 deletions
  1. 6 2
      lib/dump.lua
  2. 13 1
      src/lib_jit.c

+ 6 - 2
lib/dump.lua

@@ -59,8 +59,8 @@ local jutil = require("jit.util")
 local vmdef = require("jit.vmdef")
 local funcinfo, funcbc = jutil.funcinfo, jutil.funcbc
 local traceinfo, traceir, tracek = jutil.traceinfo, jutil.traceir, jutil.tracek
-local tracemc, traceexitstub = jutil.tracemc, jutil.traceexitstub
-local tracesnap = jutil.tracesnap
+local tracemc, tracesnap = jutil.tracemc, jutil.tracesnap
+local traceexitstub, ircalladdr = jutil.traceexitstub, jutil.ircalladdr
 local bit = require("bit")
 local band, shl, shr = bit.band, bit.lshift, bit.rshift
 local sub, gsub, format = string.sub, string.gsub, string.format
@@ -82,6 +82,10 @@ local nexitsym = 0
 -- Fill symbol table with trace exit addresses.
 local function fillsymtab(nexit)
   local t = symtab
+  if nexitsym == 0 then
+    local ircall = vmdef.ircall
+    for i=0,#ircall do t[ircalladdr(i)] = ircall[i] end
+  end
   if nexit > nexitsym then
     for i=nexitsym,nexit-1 do t[traceexitstub(i)] = tostring(i) end
     nexitsym = nexit

+ 13 - 1
src/lib_jit.c

@@ -370,7 +370,18 @@ LJLIB_CF(jit_util_traceexitstub)
   ExitNo exitno = (ExitNo)lj_lib_checkint(L, 1);
   jit_State *J = L2J(L);
   if (exitno < EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) {
-    setnumV(L->top-1, cast_num((intptr_t)exitstub_addr(J, exitno)));
+    setnumV(L->top-1, cast_num((uintptr_t)exitstub_addr(J, exitno)));
+    return 1;
+  }
+  return 0;
+}
+
+/* local addr = jit.util.ircalladdr(idx) */
+LJLIB_CF(jit_util_ircalladdr)
+{
+  uint32_t idx = (uint32_t)lj_lib_checkint(L, 1);
+  if (idx < IRCALL__MAX) {
+    setnumV(L->top-1, cast_num((uintptr_t)(void *)lj_ir_callinfo[idx].func));
     return 1;
   }
   return 0;
@@ -389,6 +400,7 @@ static int trace_nojit(lua_State *L)
 #define lj_cf_jit_util_tracesnap	trace_nojit
 #define lj_cf_jit_util_tracemc		trace_nojit
 #define lj_cf_jit_util_traceexitstub	trace_nojit
+#define lj_cf_jit_util_ircalladdr	trace_nojit
 
 #endif