[Tarantool-patches] [PATCH luajit 1/2] Add support for full-range 64 bit lightuserdata.

Vitaliia Ioffe v.ioffe at tarantool.org
Wed Aug 11 08:54:10 MSK 2021


Hi team, 
 
QA LGTM
 
 
--
Vitaliia Ioffe
 
  
>Вторник, 10 августа 2021, 19:46 +03:00 от Sergey Ostanevich via Tarantool-patches <tarantool-patches at dev.tarantool.org>:
> 
>all internal usage of lightuserdata (for hooks,
>profilers, built-in package, IR and so on) is changed to special values
>on Lua Stack.

Can you add at least _some_ test to verify memprof is fine?

Memprof avoids such extroversions. Do you mean the test for `jit.p`?
 
  I can see memeprof is out of the business, sure I meant any our new
functionality - such as stats on gc - that can be hit by this in some
way.
 
>The new commit message is the following:
>
>===================================================================
>Add support for full-range 64 bit lightuserdata.
>
>(cherry picked from commit e9af1abec542e6f9851ff2368e7f196b6382a44c)
>
>LuaJIT uses special NaN-tagging technique to store internal type on
>the Lua stack. In case of LJ_GC64 the first 13 bits are set in special
>NaN type (0xfff8...). The next 4 bits are used for an internal LuaJIT
>type of object on stack. The next 47 bits are used for storing this
>object's content. For userdata, it is its address. For arm64 a pointer
>can have more than 47 significant bits [1]. In this case the error BADLU
>error is raised.
>
>For the support of full 64-bit range lightuserdata pointers two new
>fields in GCState are added:
>
>`lightudseg` - vector of segments of lightuserdata. Each element keeps
>32-bit value. 25 MSB equal to MSB of lightuserdata 64-bit address, the
>rest are filled with zeros. The lentgh of the vector is power of 2.
>
>`lightudnum` - the length - 1 of aforementioned vector (up to 255).
>
>When lightuserdata is pushed on the stack, if its segment is not stored
>in vector new value is appended to of this vector. The maximum amount of
>segments is 256. BADLU error is raised in case when user tried to add
>userdata with the new 257-th segment, so the whole VA-space isn't
>covered by this patch.
>
>Also, in this patch all internal usage of lightuserdata (for hooks,
>profilers, built-in package, IR and so on) is changed to special values
>on Lua Stack.
>
>Also, conversion of TValue to FFI C type with store is no longer
>compiled for lightuserdata.
>
>[1]:   https://www.kernel.org/doc/html/latest/arm64/memory.html
>
>Sergey Kaplun:
>* added the description and the test for the problem
>
>Resolves tarantool/tarantool#2712
>Needed for tarantool/tarantool#6154
>===================================================================
>
>Branch is force-pushed. 
 
LGTM.
 
Sergos
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20210811/47a4a564/attachment.htm>


More information about the Tarantool-patches mailing list