From: David Hildenbrand <david@redhat.com>
To: Ilya Leoshkevich <iii@linux.ibm.com>,
Richard Henderson <richard.henderson@linaro.org>,
Laurent Vivier <laurent@vivier.eu>,
Cornelia Huck <cohuck@redhat.com>
Cc: "jonathan . albrecht" <jonathan.albrecht@linux.vnet.ibm.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
qemu-devel@nongnu.org, Ulrich Weigand <ulrich.weigand@de.ibm.com>,
qemu-s390x@nongnu.org, Andreas Krebbel <krebbel@linux.ibm.com>
Subject: Re: [PATCH v5 1/2] target/s390x: Fix SIGILL/SIGFPE/SIGTRAP psw.addr reporting
Date: Mon, 5 Jul 2021 21:18:59 +0200 [thread overview]
Message-ID: <59f3bbfe-c92c-6940-c008-9fc697e5a464@redhat.com> (raw)
In-Reply-To: <3694d1e29d7b1d00b60235360a54abf4b9ca4dea.camel@linux.ibm.com>
On 05.07.21 19:24, Ilya Leoshkevich wrote:
> On Mon, 2021-07-05 at 11:36 +0200, David Hildenbrand wrote:
>> On 23.06.21 04:32, Ilya Leoshkevich wrote:
>>> For SIGILL, SIGFPE and SIGTRAP the PSW must point after the
>>> instruction, and at the instruction for other signals. Currently
>>> under
>>> qemu-user it always points at the instruction.
>>>
>>> Fix by advancing psw.addr for these signals.
>>>
>>> Buglink: https://gitlab.com/qemu-project/qemu/-/issues/319
>>> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
>>> Co-developed-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
>>> ---
>>> linux-user/s390x/cpu_loop.c | 5 +++++
>>> 1 file changed, 5 insertions(+)
>>>
>>> diff --git a/linux-user/s390x/cpu_loop.c b/linux-
>>> user/s390x/cpu_loop.c
>>> index 30568139df..230217feeb 100644
>>> --- a/linux-user/s390x/cpu_loop.c
>>> +++ b/linux-user/s390x/cpu_loop.c
>>> @@ -133,6 +133,11 @@ void cpu_loop(CPUS390XState *env)
>>>
>>> do_signal_pc:
>>> addr = env->psw.addr;
>>> + /*
>>> + * For SIGILL, SIGFPE and SIGTRAP the PSW must point
>>> after the
>>> + * instruction.
>>> + */
>>> + env->psw.addr += env->int_pgm_ilen;
>>
>> We also reach this path via EXCP_DEBUG. How can we expect
>> env->int_pgm_ilen to contain something sensible in that case?
>
> You are right, this breaks breakpoints after getting any PGM exception
> (they turn into "Program received signal SIGTRAP, Trace/breakpoint
> trap." instead of the usual "Breakpoint N").
>
> We don't need a PSW rewind here, since it's already incremented
> throught the following sequence:
>
> 1) GDB asks QEMU to set a breakpoint using a $Z0 packet.
> 2) translator_loop() notices the breakpoint and calls
> s390x_tr_breakpoint_check().
> 3) s390x_tr_breakpoint_check() sets DisasContextBase.is_jmp to
> DISAS_PC_STALE and increments DisasContextBase.pc_next by 2.
> 4) translator_loop() calls s390x_tr_tb_stop().
> 5) s390x_tr_tb_stop() calls update_psw_addr(), so the JITed code
> increments the PSWA by 2 as well.
> 6) s390x_tr_tb_stop() calls gen_exception(EXCP_DEBUG).
>
> What do you think about the following amend?
>
> --- a/linux-user/s390x/cpu_loop.c
> +++ b/linux-user/s390x/cpu_loop.c
> @@ -64,7 +64,13 @@ void cpu_loop(CPUS390XState *env)
> case EXCP_DEBUG:
> sig = TARGET_SIGTRAP;
> n = TARGET_TRAP_BRKPT;
> - goto do_signal_pc;
> + /*
> + * For SIGTRAP the PSW must point after the instruction,
> which it
> + * already does thanks to s390x_tr_tb_stop(). si_addr
> doesn't need
> + * to be filled.
> + */
> + addr = 0;
> + goto do_signal;
Looks better to me, but I'm not an expert on signals, so I cannot tell
what si_addr is supposed to contain in that case.
--
Thanks,
David / dhildenb
next prev parent reply other threads:[~2021-07-05 19:19 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-23 2:32 [PATCH v5 0/2] target/s390x: Fix SIGILL/SIGFPE/SIGTRAP psw.addr reporting Ilya Leoshkevich
2021-06-23 2:32 ` [PATCH v5 1/2] " Ilya Leoshkevich
2021-07-05 9:36 ` David Hildenbrand
2021-07-05 17:24 ` Ilya Leoshkevich
2021-07-05 19:18 ` David Hildenbrand [this message]
2021-07-05 20:19 ` Ilya Leoshkevich
2021-07-06 9:15 ` Ulrich Weigand
2021-06-23 2:32 ` [PATCH v5 2/2] tests/tcg/s390x: Test SIGILL and SIGSEGV handling Ilya Leoshkevich
2021-06-23 2:42 ` [PATCH v5 0/2] target/s390x: Fix SIGILL/SIGFPE/SIGTRAP psw.addr reporting no-reply
2021-07-02 10:34 ` Cornelia Huck
2021-07-02 12:01 ` Laurent Vivier
2021-07-02 21:00 ` Ulrich Weigand
2021-07-05 9:27 ` Cornelia Huck
2021-07-12 14:59 ` jonathan.albrecht
2021-07-12 21:22 ` Ilya Leoshkevich
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=59f3bbfe-c92c-6940-c008-9fc697e5a464@redhat.com \
--to=david@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=iii@linux.ibm.com \
--cc=jonathan.albrecht@linux.vnet.ibm.com \
--cc=krebbel@linux.ibm.com \
--cc=laurent@vivier.eu \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=ulrich.weigand@de.ibm.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).