1
0
Fork 0
forked from len0rd/rockbox

hwstub/tools: fix compilation of shell against lua5.3

The unsigned function were deprecated and hidden begind a compat flag. Since
they will get removed in the next version, I simply reimplemented them, those
are mostly casts anyway.

Change-Id: Ie5db81d7c8589b1e5e9b45a2a4ed41919aa07387
This commit is contained in:
Amaury Pouly 2016-11-20 21:33:25 +01:00
parent 06502772a8
commit ce966d3d28

View file

@ -125,6 +125,24 @@ void print_log(std::shared_ptr<handle> hwdev)
/** /**
* Lua specific * Lua specific
*/ */
/* the lua_*unsigned functions were never really documented and got deprecated in
* lua 5.3. There are simply casts anyway so reimplement them with proper typing */
static void mylua_pushunsigned(lua_State *L, lua_Unsigned n)
{
lua_pushnumber(L, (lua_Number)n);
}
static lua_Unsigned mylua_checkunsigned(lua_State *L, int arg)
{
return (lua_Unsigned)luaL_checknumber(L, arg);
}
static lua_Unsigned mylua_tounsigned(lua_State *L, int arg)
{
return (lua_Unsigned)lua_tointeger(L, arg);
}
int my_lua_help(lua_State *state) int my_lua_help(lua_State *state)
{ {
bool has_sub = false; bool has_sub = false;
@ -274,7 +292,7 @@ int my_lua_readn(lua_State *state)
int n = lua_gettop(state); int n = lua_gettop(state);
if(n != 1) if(n != 1)
luaL_error(state, "readn takes a single argument"); luaL_error(state, "readn takes a single argument");
lua_pushunsigned(state, fn(state, luaL_checkunsigned(state, 1))); mylua_pushunsigned(state, fn(state, mylua_checkunsigned(state, 1)));
return 1; return 1;
} }
@ -284,7 +302,7 @@ int my_lua_writen(lua_State *state)
int n = lua_gettop(state); int n = lua_gettop(state);
if(n != 2) if(n != 2)
luaL_error(state, "writen takes two arguments"); luaL_error(state, "writen takes two arguments");
fn(state, luaL_checkunsigned(state, 1), luaL_checkunsigned(state, 2)); fn(state, mylua_checkunsigned(state, 1), mylua_checkunsigned(state, 2));
return 0; return 0;
} }
@ -294,7 +312,7 @@ int my_lua_call(lua_State *state)
if(n != 1) if(n != 1)
luaL_error(state, "call takes target address argument"); luaL_error(state, "call takes target address argument");
g_hwdev->exec(luaL_checkunsigned(state, 1), HWSTUB_EXEC_CALL); g_hwdev->exec(mylua_checkunsigned(state, 1), HWSTUB_EXEC_CALL);
return 0; return 0;
} }
@ -304,7 +322,7 @@ int my_lua_jump(lua_State *state)
if(n != 1) if(n != 1)
luaL_error(state, "jump takes target address argument"); luaL_error(state, "jump takes target address argument");
g_hwdev->exec(luaL_checkunsigned(state, 1), HWSTUB_EXEC_JUMP); g_hwdev->exec(mylua_checkunsigned(state, 1), HWSTUB_EXEC_JUMP);
return 0; return 0;
} }
@ -828,9 +846,9 @@ int my_lua_read_reg(lua_State *state)
int n = lua_gettop(state); int n = lua_gettop(state);
if(n != 0) if(n != 0)
luaL_error(state, "read() takes no argument"); luaL_error(state, "read() takes no argument");
unsigned width = lua_tounsigned(state, lua_upvalueindex(1)); unsigned width = mylua_tounsigned(state, lua_upvalueindex(1));
soc_addr_t addr = lua_tounsigned(state, lua_upvalueindex(2)); soc_addr_t addr = mylua_tounsigned(state, lua_upvalueindex(2));
lua_pushunsigned(state, hw_readn(state, width, addr)); mylua_pushunsigned(state, hw_readn(state, width, addr));
return 1; return 1;
} }
@ -839,9 +857,9 @@ int my_lua_write_reg(lua_State *state)
int n = lua_gettop(state); int n = lua_gettop(state);
if(n != 1) if(n != 1)
luaL_error(state, "write() takes one argument"); luaL_error(state, "write() takes one argument");
soc_word_t val = luaL_checkunsigned(state, 1); soc_word_t val = mylua_checkunsigned(state, 1);
unsigned width = lua_tounsigned(state, lua_upvalueindex(1)); unsigned width = mylua_tounsigned(state, lua_upvalueindex(1));
soc_addr_t addr = lua_tounsigned(state, lua_upvalueindex(2)); soc_addr_t addr = mylua_tounsigned(state, lua_upvalueindex(2));
hw_writen(state, width, addr, val); hw_writen(state, width, addr, val);
return 0; return 0;
} }
@ -851,11 +869,11 @@ int my_lua_read_field(lua_State *state)
int n = lua_gettop(state); int n = lua_gettop(state);
if(n != 0) if(n != 0)
luaL_error(state, "read() takes no argument"); luaL_error(state, "read() takes no argument");
unsigned width = lua_tounsigned(state, lua_upvalueindex(1)); unsigned width = mylua_tounsigned(state, lua_upvalueindex(1));
soc_addr_t addr = lua_tounsigned(state, lua_upvalueindex(2)); soc_addr_t addr = mylua_tounsigned(state, lua_upvalueindex(2));
soc_word_t shift = lua_tounsigned(state, lua_upvalueindex(3)); soc_word_t shift = mylua_tounsigned(state, lua_upvalueindex(3));
soc_word_t mask = lua_tounsigned(state, lua_upvalueindex(4)); soc_word_t mask = mylua_tounsigned(state, lua_upvalueindex(4));
lua_pushunsigned(state, (hw_readn(state, width, addr) >> shift) & mask); mylua_pushunsigned(state, (hw_readn(state, width, addr) >> shift) & mask);
return 1; return 1;
} }
@ -864,11 +882,11 @@ int my_lua_write_field(lua_State *state)
int n = lua_gettop(state); int n = lua_gettop(state);
if(n != 0 && n!= 1) if(n != 0 && n!= 1)
luaL_error(state, "write() takes one or no argument"); luaL_error(state, "write() takes one or no argument");
unsigned width = lua_tounsigned(state, lua_upvalueindex(1)); unsigned width = mylua_tounsigned(state, lua_upvalueindex(1));
soc_addr_t addr = lua_tounsigned(state, lua_upvalueindex(2)); soc_addr_t addr = mylua_tounsigned(state, lua_upvalueindex(2));
soc_word_t shift = lua_tounsigned(state, lua_upvalueindex(3)); soc_word_t shift = mylua_tounsigned(state, lua_upvalueindex(3));
soc_word_t mask = lua_tounsigned(state, lua_upvalueindex(4)); soc_word_t mask = mylua_tounsigned(state, lua_upvalueindex(4));
char op = lua_tounsigned(state, lua_upvalueindex(6)); char op = mylua_tounsigned(state, lua_upvalueindex(6));
soc_word_t value = mask; soc_word_t value = mask;
if(n == 1) if(n == 1)
@ -880,11 +898,11 @@ int my_lua_write_field(lua_State *state)
lua_gettable(state, -2); lua_gettable(state, -2);
if(lua_isnil(state, -1)) if(lua_isnil(state, -1))
luaL_error(state, "field has no value %s", lua_tostring(state, 1)); luaL_error(state, "field has no value %s", lua_tostring(state, 1));
value = luaL_checkunsigned(state, -1); value = mylua_checkunsigned(state, -1);
lua_pop(state, 2); lua_pop(state, 2);
} }
else else
value = luaL_checkunsigned(state, 1); value = mylua_checkunsigned(state, 1);
value &= mask; value &= mask;
} }
@ -909,11 +927,11 @@ int my_lua_sct_reg(lua_State *state)
int n = lua_gettop(state); int n = lua_gettop(state);
if(n != 1) if(n != 1)
luaL_error(state, "sct() takes one argument"); luaL_error(state, "sct() takes one argument");
unsigned width = lua_tounsigned(state, lua_upvalueindex(1)); unsigned width = mylua_tounsigned(state, lua_upvalueindex(1));
soc_addr_t addr = lua_tounsigned(state, lua_upvalueindex(2)); soc_addr_t addr = mylua_tounsigned(state, lua_upvalueindex(2));
char op = lua_tounsigned(state, lua_upvalueindex(3)); char op = mylua_tounsigned(state, lua_upvalueindex(3));
soc_word_t mask = luaL_checkunsigned(state, 1); soc_word_t mask = mylua_checkunsigned(state, 1);
soc_word_t value = hw_read32(state, addr); soc_word_t value = hw_read32(state, addr);
if(op == 's') if(op == 's')
value |= mask; value |= mask;
@ -942,37 +960,37 @@ void my_lua_create_field(soc_addr_t addr, soc_desc::field_ref_t field)
lua_setfield(g_lua, -2, "name"); lua_setfield(g_lua, -2, "name");
/* lua stack: <field table> ... */ /* lua stack: <field table> ... */
lua_pushunsigned(g_lua, addr); mylua_pushunsigned(g_lua, addr);
/* lua stack: <addr> <field table> ... */ /* lua stack: <addr> <field table> ... */
lua_setfield(g_lua, -2, "addr"); lua_setfield(g_lua, -2, "addr");
/* lua stack: <field table> ... */ /* lua stack: <field table> ... */
lua_pushunsigned(g_lua, f->pos); mylua_pushunsigned(g_lua, f->pos);
/* lua stack: <pos> <field table> ... */ /* lua stack: <pos> <field table> ... */
lua_setfield(g_lua, -2, "pos"); lua_setfield(g_lua, -2, "pos");
/* lua stack: <field table> ... */ /* lua stack: <field table> ... */
lua_pushunsigned(g_lua, f->width); mylua_pushunsigned(g_lua, f->width);
/* lua stack: <width> <field table> ... */ /* lua stack: <width> <field table> ... */
lua_setfield(g_lua, -2, "width"); lua_setfield(g_lua, -2, "width");
/* lua stack: <field table> ... */ /* lua stack: <field table> ... */
lua_pushunsigned(g_lua, f->bitmask()); mylua_pushunsigned(g_lua, f->bitmask());
/* lua stack: <bm> <field table> ... */ /* lua stack: <bm> <field table> ... */
lua_setfield(g_lua, -2, "bitmask"); lua_setfield(g_lua, -2, "bitmask");
/* lua stack: <field table> ... */ /* lua stack: <field table> ... */
soc_word_t local_bitmask = f->bitmask() >> f->pos; soc_word_t local_bitmask = f->bitmask() >> f->pos;
lua_pushunsigned(g_lua, local_bitmask); mylua_pushunsigned(g_lua, local_bitmask);
/* lua stack: <local_bm> <field table> ... */ /* lua stack: <local_bm> <field table> ... */
lua_setfield(g_lua, -2, "local_bitmask"); lua_setfield(g_lua, -2, "local_bitmask");
/* lua stack: <field table> ... */ /* lua stack: <field table> ... */
/** create read routine */ /** create read routine */
lua_pushunsigned(g_lua, field.reg().get()->width); mylua_pushunsigned(g_lua, field.reg().get()->width);
lua_pushunsigned(g_lua, addr); mylua_pushunsigned(g_lua, addr);
lua_pushunsigned(g_lua, f->pos); mylua_pushunsigned(g_lua, f->pos);
lua_pushunsigned(g_lua, local_bitmask); mylua_pushunsigned(g_lua, local_bitmask);
/* lua stack: <local_bm> <pos> <addr> <width> <field table> ... */ /* lua stack: <local_bm> <pos> <addr> <width> <field table> ... */
lua_pushcclosure(g_lua, my_lua_read_field, 4); lua_pushcclosure(g_lua, my_lua_read_field, 4);
/* lua stack: <my_lua_read_field> <field table> ... */ /* lua stack: <my_lua_read_field> <field table> ... */
@ -984,14 +1002,14 @@ void my_lua_create_field(soc_addr_t addr, soc_desc::field_ref_t field)
static const char arg[] = {'w', 's', 'c', 't'}; static const char arg[] = {'w', 's', 'c', 't'};
for(int i = 0; i < 4; i++) for(int i = 0; i < 4; i++)
{ {
lua_pushunsigned(g_lua, field.reg().get()->width); mylua_pushunsigned(g_lua, field.reg().get()->width);
lua_pushunsigned(g_lua, addr); mylua_pushunsigned(g_lua, addr);
lua_pushunsigned(g_lua, f->pos); mylua_pushunsigned(g_lua, f->pos);
lua_pushunsigned(g_lua, local_bitmask); mylua_pushunsigned(g_lua, local_bitmask);
/* lua stack: <local_bm> <pos> <addr> <width> <field table> ... */ /* lua stack: <local_bm> <pos> <addr> <width> <field table> ... */
lua_pushvalue(g_lua, -5); lua_pushvalue(g_lua, -5);
/* lua stack: <field table> <local_bm> <pos> <addr> <width> <field table> ... */ /* lua stack: <field table> <local_bm> <pos> <addr> <width> <field table> ... */
lua_pushunsigned(g_lua, arg[i]); mylua_pushunsigned(g_lua, arg[i]);
/* lua stack: <'wsct'> <field table> <local_bm> <pos> <addr> <width> <field table> ... */ /* lua stack: <'wsct'> <field table> <local_bm> <pos> <addr> <width> <field table> ... */
lua_pushcclosure(g_lua, my_lua_write_field, 6); lua_pushcclosure(g_lua, my_lua_write_field, 6);
/* lua stack: <my_lua_write_field> <field table> ... */ /* lua stack: <my_lua_write_field> <field table> ... */
@ -1002,7 +1020,7 @@ void my_lua_create_field(soc_addr_t addr, soc_desc::field_ref_t field)
/** create values */ /** create values */
for(size_t i = 0; i < f->enum_.size(); i++) for(size_t i = 0; i < f->enum_.size(); i++)
{ {
lua_pushunsigned(g_lua, f->enum_[i].value); mylua_pushunsigned(g_lua, f->enum_[i].value);
/* lua stack: <value> <field table> ... */ /* lua stack: <value> <field table> ... */
lua_setfield(g_lua, -2, f->enum_[i].name.c_str()); lua_setfield(g_lua, -2, f->enum_[i].name.c_str());
/* lua stack: <field table> ... */ /* lua stack: <field table> ... */
@ -1020,16 +1038,16 @@ void my_lua_create_reg(soc_addr_t addr, soc_desc::register_ref_t reg,
if(!reg.valid()) if(!reg.valid())
return; return;
/** create read/write routine */ /** create read/write routine */
lua_pushunsigned(g_lua, reg.get()->width); mylua_pushunsigned(g_lua, reg.get()->width);
lua_pushunsigned(g_lua, addr); mylua_pushunsigned(g_lua, addr);
/* lua stack: <addr> <width> <inst table> */ /* lua stack: <addr> <width> <inst table> */
lua_pushcclosure(g_lua, my_lua_read_reg, 2); lua_pushcclosure(g_lua, my_lua_read_reg, 2);
/* lua stack: <my_lua_read_reg> <inst table> */ /* lua stack: <my_lua_read_reg> <inst table> */
lua_setfield(g_lua, -2, "read"); lua_setfield(g_lua, -2, "read");
/* lua stack: <inst table> */ /* lua stack: <inst table> */
lua_pushunsigned(g_lua, reg.get()->width); mylua_pushunsigned(g_lua, reg.get()->width);
lua_pushunsigned(g_lua, addr); mylua_pushunsigned(g_lua, addr);
/* lua stack: <addr> <width> <inst table> */ /* lua stack: <addr> <width> <inst table> */
lua_pushcclosure(g_lua, my_lua_write_reg, 2); lua_pushcclosure(g_lua, my_lua_write_reg, 2);
/* lua stack: <my_lua_write_reg> <inst table> */ /* lua stack: <my_lua_write_reg> <inst table> */
@ -1041,10 +1059,10 @@ void my_lua_create_reg(soc_addr_t addr, soc_desc::register_ref_t reg,
static const char arg[] = {'s', 'c', 't'}; static const char arg[] = {'s', 'c', 't'};
for(int i = 0; i < 3; i++) for(int i = 0; i < 3; i++)
{ {
lua_pushunsigned(g_lua, reg.get()->width); mylua_pushunsigned(g_lua, reg.get()->width);
lua_pushunsigned(g_lua, addr); mylua_pushunsigned(g_lua, addr);
/* lua stack: <addr> <width> <inst table> */ /* lua stack: <addr> <width> <inst table> */
lua_pushunsigned(g_lua, arg[i]); mylua_pushunsigned(g_lua, arg[i]);
/* lua stack: <'s'/'c'/'t'> <addr> <width> <inst table> */ /* lua stack: <'s'/'c'/'t'> <addr> <width> <inst table> */
lua_pushcclosure(g_lua, my_lua_sct_reg, 3); lua_pushcclosure(g_lua, my_lua_sct_reg, 3);
/* lua stack: <my_lua_sct_reg> <inst table> */ /* lua stack: <my_lua_sct_reg> <inst table> */
@ -1122,7 +1140,7 @@ void my_lua_create_instances(const std::vector< soc_desc::node_inst_t >& inst)
lua_setfield(g_lua, -2, "title"); lua_setfield(g_lua, -2, "title");
/* lua stack: <instance table> ... */ /* lua stack: <instance table> ... */
lua_pushunsigned(g_lua, inst[i].addr()); mylua_pushunsigned(g_lua, inst[i].addr());
/* lua stack: <node addr> <instance table> ... */ /* lua stack: <node addr> <instance table> ... */
lua_setfield(g_lua, -2, "addr"); lua_setfield(g_lua, -2, "addr");
/* lua stack: <instance table> ... */ /* lua stack: <instance table> ... */