LuaJIT and symbol versioning

  • From: Enrico Tassi <gares@xxxxxxxxxxxx>
  • To: luajit@xxxxxxxxxxxxx
  • Date: Sun, 16 Aug 2015 11:04:53 +0200

Hello LuaJIT experts, I package Lua and LuaJIT for Debian and I need
some guidance with respect to the symbols LuaJIT provides.

First, why symbol versioning. The Debian archive contains various Lua
versions (5.0 --> 5.3) compiled as shared libraries and they have symbol
names in common (e.g. luaopen_io). If a process happens to be linked
with both libraries, symbols are not correctly resolved at load time.
Note that this can happen indirectly: you link libA and libB, that in
turn happen to be extensible with, respectively, Lua 5.1 and 5.2.
The "solution" is to version symbols (ld flag --version-script) so
that symbols from 5.1 are morally named something like
luaopen_io@LUA_5.1 and the ones from 5.2 like luaopen_io@LUA_5.2, so
symbol resolution can work properly.

I'd like to version the symbols in the LuaJIT shared library too, with
label LUAJIT_5.1, so that if one happens to link both Lua and LuaJIT
symbols are not wrongly chosen by the loader. I've two questions:

1. Would that work? Maybe there are other reasons that make LuaJIT and
Lua 5.X impossible to load in the same address space.

2. I've noticed that LuaJIT exports a few more symbols, and I don't know
what to do with them. In particular, here an excerpt from the
version-script I'm preparing, with questions in comment:

LUAJIT_5.1 {
/* Lua 5.1 symbols */
...

/* LuaJIT specific libraries */
luaopen_bit;
luaopen_ffi;
luaopen_jit;

/* LuaJIT specific C API */
luaJIT_setmode;

/* I guess I should leave that one there */
luaJIT_version_2_0_4;

/* Lua 5.2 symbols */
lua_upvalueid;
lua_upvaluejoin;

/* Can/Shoud I hide these symbols? They seem undocumented */
luaL_execresult;
luaL_fileresult;
luaL_traceback;
luaL_loadbufferx;
luaL_loadfilex;
lua_loadx;

Thanks for your help,
--
Enrico Tassi

Other related posts: