Skip to content

Commit

Permalink
gdbstub: Allow specifying a reason in stop packets
Browse files Browse the repository at this point in the history
The upcoming syscall catchpoint support needs to send stop packets with
an associated reason to GDB. Add an extra parameter to gdb_handlesig()
for that, and rename it to gdb_handlesig_reason(). Provide a
compatibility wrapper with an old name.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-Id: <20240202152506.279476-3-iii@linux.ibm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240207163812.3231697-12-alex.bennee@linaro.org>
  • Loading branch information
iii-i authored and stsquad committed Feb 9, 2024
1 parent 4aad096 commit 8b7fcb8
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
5 changes: 4 additions & 1 deletion gdbstub/user.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ void gdb_qemu_exit(int code)
exit(code);
}

int gdb_handlesig(CPUState *cpu, int sig)
int gdb_handlesig_reason(CPUState *cpu, int sig, const char *reason)
{
char buf[256];
int n;
Expand All @@ -141,6 +141,9 @@ int gdb_handlesig(CPUState *cpu, int sig)
"T%02xthread:", gdb_target_signal_to_gdb(sig));
gdb_append_thread_id(cpu, gdbserver_state.str_buf);
g_string_append_c(gdbserver_state.str_buf, ';');
if (reason) {
g_string_append(gdbserver_state.str_buf, reason);
}
gdb_put_strbuf();
gdbserver_state.allow_stop_reply = false;
}
Expand Down
16 changes: 14 additions & 2 deletions include/gdbstub/user.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@
#define GDBSTUB_USER_H

/**
* gdb_handlesig() - yield control to gdb
* gdb_handlesig_reason() - yield control to gdb
* @cpu: CPU
* @sig: if non-zero, the signal number which caused us to stop
* @reason: stop reason for stop reply packet or NULL
*
* This function yields control to gdb, when a user-mode-only target
* needs to stop execution. If @sig is non-zero, then we will send a
Expand All @@ -24,7 +25,18 @@
* or 0 if no signal should be delivered, ie the signal that caused
* us to stop should be ignored.
*/
int gdb_handlesig(CPUState *, int);
int gdb_handlesig_reason(CPUState *, int, const char *);

/**
* gdb_handlesig() - yield control to gdb
* @cpu CPU
* @sig: if non-zero, the signal number which caused us to stop
* @see gdb_handlesig_reason()
*/
static inline int gdb_handlesig(CPUState *cpu, int sig)
{
return gdb_handlesig_reason(cpu, sig, NULL);
}

/**
* gdb_signalled() - inform remote gdb of sig exit
Expand Down

0 comments on commit 8b7fcb8

Please sign in to comment.