Tarantool development patches archive
 help / color / mirror / Atom feed
From: Sergey Kaplun via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: Sergey Ostanevich <sergos@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH luajit 4/4] ARM64: Fix xpcall() error case (really).
Date: Fri, 4 Jun 2021 16:56:06 +0300	[thread overview]
Message-ID: <YLow9rydAEvxwRq+@root> (raw)
In-Reply-To: <9F30A4EA-54A0-4D2A-A018-20CAB72A4E3B@tarantool.org>

Hi!

Thanks for the review!

On 02.06.21, Sergey Ostanevich wrote:
> Hi!
> 
> Thanks for the patch!
> 
> Just some updates to the message, LGTM.
> 
> Sergos
> 
> > On 24 May 2021, at 16:27, Sergey Kaplun <skaplun@tarantool.org> wrote:
> > 
> > From: Mike Pall <mike>
> > 
> > Thanks to François Perrad and Stefan Pejic.
> > 
> > (cherry picked from commit d417ded17945b4211608d497d50b509e0274f5e0)
> > 
> > Premature decrementing VM's RC register before switch to fff_fallback
> 	    decrement of
> 
> > handler during processing `xpcall()` fast function leads to incorrect
> > stack layout (not enough arguments on stack), when `xpcall()` calls
> > without a second argument or if it is not a function (see <301-basic.t>
> > test in lua-Harness test suite). While further error processing it leads
> > to incorrect error message, due to stack inconsistency.
> 
> Mention this test verifies the patch behavior.
> 
> > 
> > This patch stores intermediate result into TMP1 register (it does not
> > determine fallback's behaviour and there is no way to return from
> > fallback back to xpcall processing with spoiled TMP1) and moves RC
> > setting after possible switching to fallback handler.
> 		the switch            the
> 
> > 
> > Sergey Kaplun:
> > * added the description for the problem
> > 
> > Resolves tarantool/tarantool#6093
> > Part of tarantool/tarantool#5629
> > ---

The new commit message is:
Branch is force-pushed.

===================================================================
ARM64: Fix xpcall() error case (really).

Thanks to François Perrad and Stefan Pejic.

(cherry picked from commit d417ded17945b4211608d497d50b509e0274f5e0)

Premature decrement of VM's RC register before switch to fff_fallback
handler during processing `xpcall()` fast function leads to incorrect
stack layout (not enough arguments on stack), when `xpcall()` calls
without a second argument or if it is not a function (see
<test/lua-Harness-tests/301-basic.t:832>
test in lua-Harness test suite). While further error processing it leads
to incorrect error message, due to stack inconsistency.

This patch stores intermediate result into TMP1 register (it does not
determine fallback's behaviour and there is no way to return from
fallback back to xpcall processing with spoiled TMP1) and moves RC
setting after the switch to the fallback handler.

Sergey Kaplun:
* added the description for the problem

Resolves tarantool/tarantool#6093
Part of tarantool/tarantool#5629
===================================================================

> > src/vm_arm64.dasc | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/vm_arm64.dasc b/src/vm_arm64.dasc
> > index e16a77ab..6e298255 100644
> > --- a/src/vm_arm64.dasc
> > +++ b/src/vm_arm64.dasc
> > @@ -1183,7 +1183,7 @@ static void build_subroutines(BuildCtx *ctx)
> >   |.ffunc xpcall
> >   |     ldp CARG1, CARG2, [BASE]
> >   |  ldrb TMP0w, GL->hookmask
> > -  |   subs NARGS8:RC, NARGS8:RC, #16
> > +  |   subs NARGS8:TMP1, NARGS8:RC, #16
> >   |   blo ->fff_fallback
> >   |    mov RB, BASE
> >   |     asr ITYPE, CARG2, #47
> > @@ -1191,6 +1191,7 @@ static void build_subroutines(BuildCtx *ctx)
> >   |     cmn ITYPE, #-LJ_TFUNC
> >   |  add PC, TMP0, #24+FRAME_PCALL
> >   |     bne ->fff_fallback		// Traceback must be a function.
> > +  |   mov NARGS8:RC, NARGS8:TMP1
> >   |    add BASE, BASE, #24
> >   |     stp CARG2, CARG1, [RB]		// Swap function and traceback.
> >   |   cbz NARGS8:RC, ->vm_call_dispatch
> > -- 
> > 2.31.0
> > 
> 

-- 
Best regards,
Sergey Kaplun

  reply	other threads:[~2021-06-04 13:57 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-24 13:27 [Tarantool-patches] [PATCH luajit 0/4] Fix LuaJIT tests on aarch64, odroid Sergey Kaplun via Tarantool-patches
2021-05-24 13:27 ` [Tarantool-patches] [PATCH luajit 1/4] ARM, ARM64, PPC: Fix TSETR fallback Sergey Kaplun via Tarantool-patches
2021-06-02 12:04   ` Sergey Ostanevich via Tarantool-patches
2021-06-04 13:12     ` Sergey Kaplun via Tarantool-patches
2021-06-04 15:33       ` Sergey Ostanevich via Tarantool-patches
2021-06-04 15:39         ` Sergey Kaplun via Tarantool-patches
2021-06-10 13:51   ` Igor Munkin via Tarantool-patches
2021-06-11  8:47     ` Sergey Kaplun via Tarantool-patches
2021-06-12 13:09       ` Sergey Kaplun via Tarantool-patches
2021-05-24 13:27 ` [Tarantool-patches] [PATCH luajit 2/4] test: add skipcond on architectures for memprof Sergey Kaplun via Tarantool-patches
2021-06-02 12:28   ` Sergey Ostanevich via Tarantool-patches
2021-06-04 13:37     ` Sergey Kaplun via Tarantool-patches
2021-06-04 15:36       ` Sergey Ostanevich via Tarantool-patches
2021-06-04 16:18         ` Sergey Kaplun via Tarantool-patches
2021-06-10 13:51   ` Igor Munkin via Tarantool-patches
2021-06-11  8:18     ` Sergey Kaplun via Tarantool-patches
2021-05-24 13:27 ` [Tarantool-patches] [PATCH luajit 3/4] ARM64: Fix xpcall() error case Sergey Kaplun via Tarantool-patches
2021-06-02 12:47   ` Sergey Ostanevich via Tarantool-patches
2021-06-04 13:45     ` Sergey Kaplun via Tarantool-patches
2021-06-10 13:51   ` Igor Munkin via Tarantool-patches
2021-05-24 13:27 ` [Tarantool-patches] [PATCH luajit 4/4] ARM64: Fix xpcall() error case (really) Sergey Kaplun via Tarantool-patches
2021-06-02 14:43   ` Sergey Ostanevich via Tarantool-patches
2021-06-04 13:56     ` Sergey Kaplun via Tarantool-patches [this message]
2021-06-10 13:52   ` Igor Munkin via Tarantool-patches
2021-06-11  8:08     ` Sergey Kaplun via Tarantool-patches
2021-06-01 11:11 ` [Tarantool-patches] [PATCH luajit 0/4] Fix LuaJIT tests on aarch64, odroid Igor Munkin via Tarantool-patches
2021-06-12 16:02 ` Igor Munkin 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=YLow9rydAEvxwRq+@root \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=sergos@tarantool.org \
    --cc=skaplun@tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH luajit 4/4] ARM64: Fix xpcall() error case (really).' \
    /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