Tarantool development patches archive
 help / color / mirror / Atom feed
From: Igor Munkin via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: Maxim Kokryashkin <max.kokryashkin@gmail.com>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH luajit] luajit-gdb: support full-range 64-bit lightud
Date: Tue, 29 Nov 2022 18:20:55 +0300	[thread overview]
Message-ID: <Y4YjVzdx9xpQGLcW@tarantool.org> (raw)
In-Reply-To: <20221005144331.39666-1-m.kokryashkin@tarantool.org>

Max,

Thanks for the patch! LGTM in general, but consider my nits below.

On 05.10.22, Maxim Kokryashkin via Tarantool-patches wrote:
> Following up the introduction of full-range 64-bit lightuserdata
> support in commit 2cacfa8 ("Add support for full-range 64 bit
> lightuserdata."), this patch modifies the corresponding dumper
> behavior for LJ_64 platforms in the luajit-gdb extension.
> 
> Resolves tarantool/tarantool#6481
> ---
> Branch: https://github.com/tarantool/luajit/tree/fckxorg/gh-6481-luajit-gdb-light-ud
> Issue: https://github.com/tarantool/tarantool/issues/6481
>  src/luajit-gdb.py | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/src/luajit-gdb.py b/src/luajit-gdb.py
> index 6480d014..2993f2c1 100644
> --- a/src/luajit-gdb.py
> +++ b/src/luajit-gdb.py
> @@ -166,6 +166,9 @@ LJ_GCVMASK = ((1 << 47) - 1)
>  LJ_TISNUM = None
>  PADDING = None
>  
> +LJ_LIGHTUD_BITS_SEG = 8
> +LJ_LIGHTUD_BITS_LO = 47 - LJ_LIGHTUD_BITS_SEG

I have no strong opinion regarding this constant: on the one hand we're
trying to be as much close to LuaJIT sources here as we can, but Sergos'
comment looks valid either. I leave the final decision regarding this on
your mighty shoulders, since I'm OK with both introducing the constant
or leaving everything as is.

> +
>  # }}}
>  
>  def itype(o):
> @@ -315,6 +318,12 @@ def frames(L):
>              break
>          framelink = frame_prev(framelink)
>  
> +def lightudseg(u):
> +  return (u >> LJ_LIGHTUD_BITS_LO) & ((1 << LJ_LIGHTUD_BITS_SEG) - 1)
> +
> +def lightudlo(u):
> +  return u & ((1 << LJ_LIGHTUD_BITS_LO) - 1)

Regarding this function and your change in the final version, I have a
strong opinion, that we have to respect LuaJIT sources as close as we
can, so even if you decided to expand the macros (and hence do not use
the corresponding function in the Python extension), please do similar
work GCC does when expanding macros with -E parameter: add the comment
with the macro name that is expanded. Consider the following:
| def lightudV(tv):
|     if LJ_64:
|         u = int(tv['u64'])
|         # lightudseg macro expanded.
|         seg = (u >> LJ_LIGHTUD_BITS_LO) & LIGHTUD_SEG_MASK
|         segmap = mref('uint32_t *', G(L(None))['gc']['lightudseg'])
|         # lightudlo macro expanded.
|         return (int(segmap[seg]) << 32) | (u & LIGHTUD_LO_MASK)
|     else:
|         return gcval(tv['gcr'])

Furthermore, why don't you consider hoisting the compile time condition
and create two functions to be specialized on the startup as lightudV
implementation? I doubt, this would change the performance (at least
this is not the key achievement), but the readability may be increased.
Anyway feel free to ignore the last comment.

> +
>  # Dumpers {{{
>  
>  def dump_lj_tnil(tv):
> @@ -327,7 +336,14 @@ def dump_lj_ttrue(tv):
>      return 'true'
>  
>  def dump_lj_tlightud(tv):
> -    return 'light userdata @ {}'.format(strx64(gcval(tv['gcr'])))
> +    if LJ_64:
> +        u = int(tv['u64'])
> +        seg = lightudseg(u)
> +        segmap = mref('uint32_t *', G(L(None))['gc']['lightudseg'])
> +        addr = (int(segmap[seg]) << 32) | lightudlo(u)
> +    else:
> +        addr = gcval(tv['gcr'])
> +    return 'light userdata @ {}'.format(strx64(addr))
>  
>  def dump_lj_tstr(tv):
>      return 'string {body} @ {address}'.format(
> -- 
> 2.36.1
> 

-- 
Best regards,
IM

  parent reply	other threads:[~2022-11-29 15:34 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-05 14:43 Maxim Kokryashkin via Tarantool-patches
2022-10-06  9:02 ` sergos via Tarantool-patches
2022-11-29 15:20 ` Igor Munkin via Tarantool-patches [this message]
2022-12-01  5:14   ` Maxim Kokryashkin via Tarantool-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y4YjVzdx9xpQGLcW@tarantool.org \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=imun@tarantool.org \
    --cc=max.kokryashkin@gmail.com \
    --subject='Re: [Tarantool-patches] [PATCH luajit] luajit-gdb: support full-range 64-bit lightud' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox