]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Show names of IR calls in disassembler output.
authorMike Pall <mike>
Tue, 14 Sep 2010 22:51:43 +0000 (00:51 +0200)
committerMike Pall <mike>
Tue, 14 Sep 2010 22:51:43 +0000 (00:51 +0200)
lib/dump.lua
src/lib_jit.c

index a00862d0172ffcec46c3f5b0915ef1704d0e360a..b0a334e61259dddc539b6891a7af844eef4dfae3 100644 (file)
@@ -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
index bfceab62d42d5e8224b087bc0650de89e10f6472..57b50749f3ff9f41df22b47e6ce10b91af0ed437 100644 (file)
@@ -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