[Tarantool-patches] [PATCH luajit 1/2] Fix pointer check for non-GC64 mode.
Sergey Bronnikov
sergeyb at tarantool.org
Wed Mar 4 18:21:43 MSK 2026
Hi, Sergey,
thanks for the patch! LGTM
Sergey
On 3/2/26 11:05, Sergey Kaplun wrote:
> From: Mike Pall <mike>
>
> Thanks to Stefan Hett.
>
> (cherry picked from commit 471f8936cbd6aa80a937e375fe53ecadab93696a)
>
> This commit fixes the check for the pointer returned by the internal
> LuaJIT allocator. For non-GC64 mode, the accessible address range should
> fit in 31 bits due to VM (and JIT) restrictions. This commit fixes the
> check.
>
> Since it is just an assertion check, there are no tests added for the
> change. But this commit simplifies the reproducer for the next patch
> (although not required).
>
> Sergey Kaplun:
> * added the description for the problem
>
> Part of tarantool/tarantool#12134
> ---
> src/lj_def.h | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/src/lj_def.h b/src/lj_def.h
> index a5bca6b0..b06462fe 100644
> --- a/src/lj_def.h
> +++ b/src/lj_def.h
> @@ -105,9 +105,10 @@ typedef unsigned int uintptr_t;
> #define checku16(x) ((x) == (int32_t)(uint16_t)(x))
> #define checki32(x) ((x) == (int32_t)(x))
> #define checku32(x) ((x) == (uint32_t)(x))
> +#define checkptr31(x) (((uint64_t)(uintptr_t)(x) >> 31) == 0)
> #define checkptr32(x) ((uintptr_t)(x) == (uint32_t)(uintptr_t)(x))
> #define checkptr47(x) (((uint64_t)(uintptr_t)(x) >> 47) == 0)
> -#define checkptrGC(x) (LJ_GC64 ? checkptr47((x)) : LJ_64 ? checkptr32((x)) :1)
> +#define checkptrGC(x) (LJ_GC64 ? checkptr47((x)) : LJ_64 ? checkptr31((x)) :1)
>
> /* Every half-decent C compiler transforms this into a rotate instruction. */
> #define lj_rol(x, n) (((x)<<(n)) | ((x)>>(-(int)(n)&(8*sizeof(x)-1))))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20260304/ca0e0824/attachment.htm>
More information about the Tarantool-patches
mailing list