mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 15:14:08 +00:00
Make embedded bytecode readable and forward-compatible.
This commit is contained in:
parent
6053b04815
commit
0065cff7e0
@ -4,42 +4,67 @@ static const int libbc_endian = 0;
|
|||||||
|
|
||||||
static const uint8_t libbc_code[] = {
|
static const uint8_t libbc_code[] = {
|
||||||
#if LJ_FR2
|
#if LJ_FR2
|
||||||
0,1,2,0,0,1,2,24,1,0,0,76,1,2,0,241,135,158,166,3,220,203,178,130,4,0,1,2,0,
|
/* math.deg */ 0,1,2,0,0,1,2,BC_MULVN,1,0,0,BC_RET1,1,2,0,241,135,158,166,3,
|
||||||
0,1,2,24,1,0,0,76,1,2,0,243,244,148,165,20,198,190,199,252,3,0,1,2,0,0,0,3,
|
220,203,178,130,4,
|
||||||
16,0,5,0,21,1,0,0,76,1,2,0,0,2,10,0,0,0,15,16,0,12,0,16,1,9,0,41,2,1,0,21,3,
|
/* math.rad */ 0,1,2,0,0,1,2,BC_MULVN,1,0,0,BC_RET1,1,2,0,243,244,148,165,20,
|
||||||
0,0,41,4,1,0,77,2,8,128,18,6,1,0,18,8,5,0,59,9,5,0,66,6,3,2,10,6,0,0,88,7,1,
|
198,190,199,252,3,
|
||||||
128,76,6,2,0,79,2,248,127,75,0,1,0,0,2,11,0,0,1,16,16,0,12,0,16,1,9,0,43,2,
|
/* string.len */ 0,1,2,0,0,0,3,BC_ISTYPE,0,5,0,BC_LEN,1,0,0,BC_RET1,1,2,0,
|
||||||
0,0,18,3,0,0,42,4,0,0,88,5,7,128,18,7,1,0,18,9,5,0,18,10,6,0,66,7,3,2,10,7,
|
/* table.foreachi */ 0,2,10,0,0,0,15,BC_ISTYPE,0,12,0,BC_ISTYPE,1,9,0,
|
||||||
0,0,88,8,1,128,76,7,2,0,70,5,3,3,82,5,247,127,75,0,1,0,1,255,255,249,255,15,
|
BC_KSHORT,2,1,0,BC_LEN,3,0,0,BC_KSHORT,4,1,0,BC_FORI,2,8,128,BC_MOV,6,1,0,
|
||||||
0,1,2,0,0,0,3,16,0,12,0,21,1,0,0,76,1,2,0,0,2,10,0,0,2,30,16,0,12,0,21,2,0,
|
BC_MOV,8,5,0,BC_TGETR,9,5,0,BC_CALL,6,3,2,BC_ISEQP,6,0,0,BC_JMP,7,1,128,
|
||||||
0,11,1,0,0,88,3,7,128,8,2,0,0,88,3,23,128,59,3,2,0,43,4,0,0,64,4,2,0,76,3,2,
|
BC_RET1,6,2,0,BC_FORL,2,248,127,BC_RET0,0,1,0,
|
||||||
0,88,3,18,128,16,1,14,0,41,3,1,0,3,3,1,0,88,3,14,128,3,1,2,0,88,3,12,128,59,
|
/* table.foreach */ 0,2,11,0,0,1,16,BC_ISTYPE,0,12,0,BC_ISTYPE,1,9,0,BC_KPRI,
|
||||||
3,1,0,22,4,1,1,18,5,2,0,41,6,1,0,77,4,4,128,23,8,1,7,59,9,7,0,64,9,8,0,79,4,
|
2,0,0,BC_MOV,3,0,0,BC_KNUM,4,0,0,BC_JMP,5,7,128,BC_MOV,7,1,0,BC_MOV,9,5,0,
|
||||||
252,127,43,4,0,0,64,4,2,0,76,3,2,0,75,0,1,0,0,2,0,5,12,0,0,0,35,16,0,12,0,16,
|
BC_MOV,10,6,0,BC_CALL,7,3,2,BC_ISEQP,7,0,0,BC_JMP,8,1,128,BC_RET1,7,2,0,
|
||||||
1,14,0,16,2,14,0,16,3,14,0,11,4,0,0,88,5,1,128,18,4,0,0,16,4,12,0,3,1,2,0,88,
|
BC_ITERN,5,3,3,BC_ITERL,5,247,127,BC_RET0,0,1,0,1,255,255,249,255,15,
|
||||||
5,24,128,33,5,1,3,0,2,3,0,88,6,4,128,2,3,1,0,88,6,2,128,4,4,0,0,88,6,9,128,
|
/* table.getn */ 0,1,2,0,0,0,3,BC_ISTYPE,0,12,0,BC_LEN,1,0,0,BC_RET1,1,2,0,
|
||||||
18,6,1,0,18,7,2,0,41,8,1,0,77,6,4,128,32,10,5,9,59,11,9,0,64,11,10,4,79,6,252,
|
/* table.remove */ 0,2,10,0,0,2,30,BC_ISTYPE,0,12,0,BC_LEN,2,0,0,BC_ISNEP,1,0,
|
||||||
127,88,6,8,128,18,6,2,0,18,7,1,0,41,8,255,255,77,6,4,128,32,10,5,9,59,11,9,
|
0,BC_JMP,3,7,128,BC_ISEQN,2,0,0,BC_JMP,3,23,128,BC_TGETR,3,2,0,BC_KPRI,4,0,0,
|
||||||
0,64,11,10,4,79,6,252,127,76,4,2,0,0
|
BC_TSETR,4,2,0,BC_RET1,3,2,0,BC_JMP,3,18,128,BC_ISTYPE,1,14,0,BC_KSHORT,3,1,0,
|
||||||
|
BC_ISGT,3,1,0,BC_JMP,3,14,128,BC_ISGT,1,2,0,BC_JMP,3,12,128,BC_TGETR,3,1,0,
|
||||||
|
BC_ADDVN,4,1,1,BC_MOV,5,2,0,BC_KSHORT,6,1,0,BC_FORI,4,4,128,BC_SUBVN,8,1,7,
|
||||||
|
BC_TGETR,9,7,0,BC_TSETR,9,8,0,BC_FORL,4,252,127,BC_KPRI,4,0,0,BC_TSETR,4,2,0,
|
||||||
|
BC_RET1,3,2,0,BC_RET0,0,1,0,0,2,
|
||||||
|
/* table.move */ 0,5,12,0,0,0,35,BC_ISTYPE,0,12,0,BC_ISTYPE,1,14,0,BC_ISTYPE,
|
||||||
|
2,14,0,BC_ISTYPE,3,14,0,BC_ISNEP,4,0,0,BC_JMP,5,1,128,BC_MOV,4,0,0,BC_ISTYPE,
|
||||||
|
4,12,0,BC_ISGT,1,2,0,BC_JMP,5,24,128,BC_SUBVV,5,1,3,BC_ISLT,2,3,0,BC_JMP,6,4,
|
||||||
|
128,BC_ISLE,3,1,0,BC_JMP,6,2,128,BC_ISEQV,4,0,0,BC_JMP,6,9,128,BC_MOV,6,1,0,
|
||||||
|
BC_MOV,7,2,0,BC_KSHORT,8,1,0,BC_FORI,6,4,128,BC_ADDVV,10,5,9,BC_TGETR,11,9,0,
|
||||||
|
BC_TSETR,11,10,4,BC_FORL,6,252,127,BC_JMP,6,8,128,BC_MOV,6,2,0,BC_MOV,7,1,0,
|
||||||
|
BC_KSHORT,8,255,255,BC_FORI,6,4,128,BC_ADDVV,10,5,9,BC_TGETR,11,9,0,BC_TSETR,
|
||||||
|
11,10,4,BC_FORL,6,252,127,BC_RET1,4,2,0,
|
||||||
#else
|
#else
|
||||||
0,1,2,0,0,1,2,24,1,0,0,76,1,2,0,241,135,158,166,3,220,203,178,130,4,0,1,2,0,
|
/* math.deg */ 0,1,2,0,0,1,2,BC_MULVN,1,0,0,BC_RET1,1,2,0,241,135,158,166,3,
|
||||||
0,1,2,24,1,0,0,76,1,2,0,243,244,148,165,20,198,190,199,252,3,0,1,2,0,0,0,3,
|
220,203,178,130,4,
|
||||||
16,0,5,0,21,1,0,0,76,1,2,0,0,2,9,0,0,0,15,16,0,12,0,16,1,9,0,41,2,1,0,21,3,
|
/* math.rad */ 0,1,2,0,0,1,2,BC_MULVN,1,0,0,BC_RET1,1,2,0,243,244,148,165,20,
|
||||||
0,0,41,4,1,0,77,2,8,128,18,6,1,0,18,7,5,0,59,8,5,0,66,6,3,2,10,6,0,0,88,7,1,
|
198,190,199,252,3,
|
||||||
128,76,6,2,0,79,2,248,127,75,0,1,0,0,2,10,0,0,1,16,16,0,12,0,16,1,9,0,43,2,
|
/* string.len */ 0,1,2,0,0,0,3,BC_ISTYPE,0,5,0,BC_LEN,1,0,0,BC_RET1,1,2,0,
|
||||||
0,0,18,3,0,0,42,4,0,0,88,5,7,128,18,7,1,0,18,8,5,0,18,9,6,0,66,7,3,2,10,7,0,
|
/* table.foreachi */ 0,2,9,0,0,0,15,BC_ISTYPE,0,12,0,BC_ISTYPE,1,9,0,
|
||||||
0,88,8,1,128,76,7,2,0,70,5,3,3,82,5,247,127,75,0,1,0,1,255,255,249,255,15,0,
|
BC_KSHORT,2,1,0,BC_LEN,3,0,0,BC_KSHORT,4,1,0,BC_FORI,2,8,128,BC_MOV,6,1,0,
|
||||||
1,2,0,0,0,3,16,0,12,0,21,1,0,0,76,1,2,0,0,2,10,0,0,2,30,16,0,12,0,21,2,0,0,
|
BC_MOV,7,5,0,BC_TGETR,8,5,0,BC_CALL,6,3,2,BC_ISEQP,6,0,0,BC_JMP,7,1,128,
|
||||||
11,1,0,0,88,3,7,128,8,2,0,0,88,3,23,128,59,3,2,0,43,4,0,0,64,4,2,0,76,3,2,0,
|
BC_RET1,6,2,0,BC_FORL,2,248,127,BC_RET0,0,1,0,
|
||||||
88,3,18,128,16,1,14,0,41,3,1,0,3,3,1,0,88,3,14,128,3,1,2,0,88,3,12,128,59,3,
|
/* table.foreach */ 0,2,10,0,0,1,16,BC_ISTYPE,0,12,0,BC_ISTYPE,1,9,0,BC_KPRI,
|
||||||
1,0,22,4,1,1,18,5,2,0,41,6,1,0,77,4,4,128,23,8,1,7,59,9,7,0,64,9,8,0,79,4,252,
|
2,0,0,BC_MOV,3,0,0,BC_KNUM,4,0,0,BC_JMP,5,7,128,BC_MOV,7,1,0,BC_MOV,8,5,0,
|
||||||
127,43,4,0,0,64,4,2,0,76,3,2,0,75,0,1,0,0,2,0,5,12,0,0,0,35,16,0,12,0,16,1,
|
BC_MOV,9,6,0,BC_CALL,7,3,2,BC_ISEQP,7,0,0,BC_JMP,8,1,128,BC_RET1,7,2,0,
|
||||||
14,0,16,2,14,0,16,3,14,0,11,4,0,0,88,5,1,128,18,4,0,0,16,4,12,0,3,1,2,0,88,
|
BC_ITERN,5,3,3,BC_ITERL,5,247,127,BC_RET0,0,1,0,1,255,255,249,255,15,
|
||||||
5,24,128,33,5,1,3,0,2,3,0,88,6,4,128,2,3,1,0,88,6,2,128,4,4,0,0,88,6,9,128,
|
/* table.getn */ 0,1,2,0,0,0,3,BC_ISTYPE,0,12,0,BC_LEN,1,0,0,BC_RET1,1,2,0,
|
||||||
18,6,1,0,18,7,2,0,41,8,1,0,77,6,4,128,32,10,5,9,59,11,9,0,64,11,10,4,79,6,252,
|
/* table.remove */ 0,2,10,0,0,2,30,BC_ISTYPE,0,12,0,BC_LEN,2,0,0,BC_ISNEP,1,0,
|
||||||
127,88,6,8,128,18,6,2,0,18,7,1,0,41,8,255,255,77,6,4,128,32,10,5,9,59,11,9,
|
0,BC_JMP,3,7,128,BC_ISEQN,2,0,0,BC_JMP,3,23,128,BC_TGETR,3,2,0,BC_KPRI,4,0,0,
|
||||||
0,64,11,10,4,79,6,252,127,76,4,2,0,0
|
BC_TSETR,4,2,0,BC_RET1,3,2,0,BC_JMP,3,18,128,BC_ISTYPE,1,14,0,BC_KSHORT,3,1,0,
|
||||||
|
BC_ISGT,3,1,0,BC_JMP,3,14,128,BC_ISGT,1,2,0,BC_JMP,3,12,128,BC_TGETR,3,1,0,
|
||||||
|
BC_ADDVN,4,1,1,BC_MOV,5,2,0,BC_KSHORT,6,1,0,BC_FORI,4,4,128,BC_SUBVN,8,1,7,
|
||||||
|
BC_TGETR,9,7,0,BC_TSETR,9,8,0,BC_FORL,4,252,127,BC_KPRI,4,0,0,BC_TSETR,4,2,0,
|
||||||
|
BC_RET1,3,2,0,BC_RET0,0,1,0,0,2,
|
||||||
|
/* table.move */ 0,5,12,0,0,0,35,BC_ISTYPE,0,12,0,BC_ISTYPE,1,14,0,BC_ISTYPE,
|
||||||
|
2,14,0,BC_ISTYPE,3,14,0,BC_ISNEP,4,0,0,BC_JMP,5,1,128,BC_MOV,4,0,0,BC_ISTYPE,
|
||||||
|
4,12,0,BC_ISGT,1,2,0,BC_JMP,5,24,128,BC_SUBVV,5,1,3,BC_ISLT,2,3,0,BC_JMP,6,4,
|
||||||
|
128,BC_ISLE,3,1,0,BC_JMP,6,2,128,BC_ISEQV,4,0,0,BC_JMP,6,9,128,BC_MOV,6,1,0,
|
||||||
|
BC_MOV,7,2,0,BC_KSHORT,8,1,0,BC_FORI,6,4,128,BC_ADDVV,10,5,9,BC_TGETR,11,9,0,
|
||||||
|
BC_TSETR,11,10,4,BC_FORL,6,252,127,BC_JMP,6,8,128,BC_MOV,6,2,0,BC_MOV,7,1,0,
|
||||||
|
BC_KSHORT,8,255,255,BC_FORI,6,4,128,BC_ADDVV,10,5,9,BC_TGETR,11,9,0,BC_TSETR,
|
||||||
|
11,10,4,BC_FORL,6,252,127,BC_RET1,4,2,0,
|
||||||
#endif
|
#endif
|
||||||
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct { const char *name; int ofs; } libbc_map[] = {
|
static const struct { const char *name; int ofs; } libbc_map[] = {
|
||||||
|
@ -79,9 +79,11 @@ local name2itype = {
|
|||||||
str = 5, func = 9, tab = 12, int = 14, num = 15
|
str = 5, func = 9, tab = 12, int = 14, num = 15
|
||||||
}
|
}
|
||||||
|
|
||||||
local BC = {}
|
local BC, BCN = {}, {}
|
||||||
for i=0,#bcnames/6-1 do
|
for i=0,#bcnames/6-1 do
|
||||||
BC[string.gsub(string.sub(bcnames, i*6+1, i*6+6), " ", "")] = i
|
local name = bcnames:sub(i*6+1, i*6+6):gsub(" ", "")
|
||||||
|
BC[name] = i
|
||||||
|
BCN[i] = name
|
||||||
end
|
end
|
||||||
local xop, xra = isbe and 3 or 0, isbe and 2 or 1
|
local xop, xra = isbe and 3 or 0, isbe and 2 or 1
|
||||||
local xrc, xrb = isbe and 1 or 2, isbe and 0 or 3
|
local xrc, xrb = isbe and 1 or 2, isbe and 0 or 3
|
||||||
@ -96,6 +98,7 @@ local function fixup_dump(dump, fixup)
|
|||||||
p = read_uleb128(p)
|
p = read_uleb128(p)
|
||||||
p = read_uleb128(p)
|
p = read_uleb128(p)
|
||||||
p, sizebc = read_uleb128(p)
|
p, sizebc = read_uleb128(p)
|
||||||
|
local startbc = tonumber(p - start)
|
||||||
local rawtab = {}
|
local rawtab = {}
|
||||||
for i=0,sizebc-1 do
|
for i=0,sizebc-1 do
|
||||||
local op = p[xop]
|
local op = p[xop]
|
||||||
@ -132,7 +135,7 @@ local function fixup_dump(dump, fixup)
|
|||||||
local ndump = ffi.string(start, n)
|
local ndump = ffi.string(start, n)
|
||||||
-- Fixup hi-part of 0x4dp80 to LJ_KEYINDEX.
|
-- Fixup hi-part of 0x4dp80 to LJ_KEYINDEX.
|
||||||
ndump = ndump:gsub("\x80\x80\xcd\xaa\x04", "\xff\xff\xf9\xff\x0f")
|
ndump = ndump:gsub("\x80\x80\xcd\xaa\x04", "\xff\xff\xf9\xff\x0f")
|
||||||
return ndump
|
return { dump = ndump, startbc = startbc, sizebc = sizebc }
|
||||||
end
|
end
|
||||||
|
|
||||||
local function find_defs(src)
|
local function find_defs(src)
|
||||||
@ -152,24 +155,46 @@ local function gen_header(defs)
|
|||||||
local function w(x) t[#t+1] = x end
|
local function w(x) t[#t+1] = x end
|
||||||
w("/* This is a generated file. DO NOT EDIT! */\n\n")
|
w("/* This is a generated file. DO NOT EDIT! */\n\n")
|
||||||
w("static const int libbc_endian = ") w(isbe and 1 or 0) w(";\n\n")
|
w("static const int libbc_endian = ") w(isbe and 1 or 0) w(";\n\n")
|
||||||
local s = ""
|
local s, sb = "", ""
|
||||||
for _,name in ipairs(defs) do
|
for i,name in ipairs(defs) do
|
||||||
s = s .. defs[name]
|
local d = defs[name]
|
||||||
|
s = s .. d.dump
|
||||||
|
sb = sb .. string.char(i) .. ("\0"):rep(d.startbc - 1)
|
||||||
|
.. (isbe and "\0\0\0\255" or "\255\0\0\0"):rep(d.sizebc)
|
||||||
|
.. ("\0"):rep(#d.dump - d.startbc - d.sizebc*4)
|
||||||
end
|
end
|
||||||
w("static const uint8_t libbc_code[] = {\n")
|
w("static const uint8_t libbc_code[] = {\n")
|
||||||
local n = 0
|
local n = 0
|
||||||
for i=1,#s do
|
for i=1,#s do
|
||||||
local x = string.byte(s, i)
|
local x = string.byte(s, i)
|
||||||
w(x); w(",")
|
local xb = string.byte(sb, i)
|
||||||
n = n + (x < 10 and 2 or (x < 100 and 3 or 4))
|
if xb == 255 then
|
||||||
if n >= 75 then n = 0; w("\n") end
|
local name = BCN[x]
|
||||||
|
local m = #name + 4
|
||||||
|
if n + m > 78 then n = 0; w("\n") end
|
||||||
|
n = n + m
|
||||||
|
w("BC_"); w(name)
|
||||||
|
else
|
||||||
|
local m = x < 10 and 2 or (x < 100 and 3 or 4)
|
||||||
|
if xb == 0 then
|
||||||
|
if n + m > 78 then n = 0; w("\n") end
|
||||||
|
else
|
||||||
|
local name = defs[xb]:gsub("_", ".")
|
||||||
|
if n ~= 0 then w("\n") end
|
||||||
|
w("/* "); w(name); w(" */ ")
|
||||||
|
n = #name + 7
|
||||||
|
end
|
||||||
|
n = n + m
|
||||||
|
w(x)
|
||||||
|
end
|
||||||
|
w(",")
|
||||||
end
|
end
|
||||||
w("0\n};\n\n")
|
w("\n0\n};\n\n")
|
||||||
w("static const struct { const char *name; int ofs; } libbc_map[] = {\n")
|
w("static const struct { const char *name; int ofs; } libbc_map[] = {\n")
|
||||||
local m = 0
|
local m = 0
|
||||||
for _,name in ipairs(defs) do
|
for _,name in ipairs(defs) do
|
||||||
w('{"'); w(name); w('",'); w(m) w('},\n')
|
w('{"'); w(name); w('",'); w(m) w('},\n')
|
||||||
m = m + #defs[name]
|
m = m + #defs[name].dump
|
||||||
end
|
end
|
||||||
w("{NULL,"); w(m); w("}\n};\n\n")
|
w("{NULL,"); w(m); w("}\n};\n\n")
|
||||||
return table.concat(t)
|
return table.concat(t)
|
||||||
|
Loading…
Reference in New Issue
Block a user