Hi,
I noticed that single-stepping SVC runs two instructions instead of
one. The reason is that EXCP_SVC masks EXCP_DEBUG.
Patch 1 fixes this problem, patch 2 adds a test.
Btw, there is at least one more problem in that area, namely
single-stepping instructions that cause e.g. SIGILL. Using the
existing signals-s390x test as an example:
(gdb) x/i $pc
=> 0x1001740 <illegal_op>: .long 0x000007fe
(gdb) si
Program received signal SIGILL, Illegal instruction.
(gdb) x/i $pc
=> 0x1001742 <after_illegal_op>: br %r14
# So far so good.
(gdb) si
(gdb) x/i $pc
=> 0x10017b6 <handle_signal+6>: lay %r15,-344(%r15)
# Missed the first signal handler instruction!
I'm not sure what to do about it - the trivial fix to add
gdb_handlesig(cpu, 0) to the end of handle_pending_signal() caused GDB
to hang, and I haven't looked further yet.
Best regards,
Ilya
Ilya Leoshkevich (2):
linux-user/s390x: Fix single-stepping SVC
tests/tcg/s390x: Test single-stepping SVC