gdb: Support stepping out from signal handler on riscv*-linux
authorLancelot SIX <lsix@lancelotsix.com>
Fri, 16 Jul 2021 22:10:08 +0000 (22:10 +0000)
committerLancelot SIX <lsix@lancelotsix.com>
Fri, 16 Jul 2021 22:10:08 +0000 (22:10 +0000)
commite843807b2df9f99b8172bfaf4daa3a42461cdbfa
treefdce54aa31c1f7bb740dc766c5d7bc13d0428299
parent47357fdc1db04240be98c683de776b3a351e945b
gdb: Support stepping out from signal handler on riscv*-linux

Currently, gdb cannot step outside of a signal handler on RISC-V
platforms.  This causes multiple failures in gdb.base/sigstep.exp:

FAIL: gdb.base/sigstep.exp: continue to handler, nothing in handler, step from handler: leave handler (timeout)
FAIL: gdb.base/sigstep.exp: continue to handler, si+advance in handler, step from handler: leave handler (timeout)
FAIL: gdb.base/sigstep.exp: continue to handler, nothing in handler, next from handler: leave handler (timeout)
FAIL: gdb.base/sigstep.exp: continue to handler, si+advance in handler, next from handler: leave handler (timeout)
FAIL: gdb.base/sigstep.exp: stepi from handleri: leave signal trampoline
FAIL: gdb.base/sigstep.exp: nexti from handleri: leave signal trampoline

                === gdb Summary ===

# of expected passes            587
# of unexpected failures        6

This patch adds support for stepping outside of a signal handler on
riscv*-*-linux*.

Implementation is heavily inspired from mips_linux_syscall_next_pc and
surroundings as advised by Pedro Alves.

After this patch, all tests in gdb.base/sigstep.exp pass.

Build and tested on riscv64-linux-gnu.
gdb/riscv-linux-tdep.c
gdb/riscv-tdep.c
gdb/riscv-tdep.h