Message ID | 20240705084047.857176-38-alex.bennee@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | July maintainer updates (32bit, testing, plugins, gdbstub) | expand |
On Fri, 5 Jul 2024 at 11:47, Alex Bennée <alex.bennee@linaro.org> wrote: > > From: Gustavo Romero <gustavo.romero@linaro.org> > > Allow passing the current CPU context to command handlers via user_ctx > when the handler requires it. > > Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > Message-Id: <20240628050850.536447-9-gustavo.romero@linaro.org> > --- > include/gdbstub/commands.h | 3 +++ > gdbstub/gdbstub.c | 7 ++++++- > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/include/gdbstub/commands.h b/include/gdbstub/commands.h > index e51f276b40..f3058f9dda 100644 > --- a/include/gdbstub/commands.h > +++ b/include/gdbstub/commands.h > @@ -54,6 +54,8 @@ typedef union GdbCmdVariant { > * "stop reply" packet. The list of commands that accept such response is > * defined at the GDB Remote Serial Protocol documentation. See: > * https://sourceware.org/gdb/onlinedocs/gdb/Stop-Reply-Packets.html#Stop-Reply-Packets. > + * > + * @need_cpu_context: Pass current CPU context to command handler via user_ctx. > */ > typedef struct GdbCmdParseEntry { > GdbCmdHandler handler; > @@ -61,6 +63,7 @@ typedef struct GdbCmdParseEntry { > bool cmd_startswith; > const char *schema; > bool allow_stop_reply; > + bool need_cpu_context; > } GdbCmdParseEntry; > > /** > diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c > index b1ca253f97..5c1612ed2a 100644 > --- a/gdbstub/gdbstub.c > +++ b/gdbstub/gdbstub.c > @@ -938,6 +938,7 @@ static bool process_string_cmd(const char *data, > > for (i = 0; i < num_cmds; i++) { > const GdbCmdParseEntry *cmd = &cmds[i]; > + void *user_ctx = NULL; > g_assert(cmd->handler && cmd->cmd); > > if ((cmd->cmd_startswith && !startswith(data, cmd->cmd)) || > @@ -952,8 +953,12 @@ static bool process_string_cmd(const char *data, > } > } > > + if (cmd->need_cpu_context) { > + user_ctx = (void *)gdbserver_state.g_cpu; > + } > + > gdbserver_state.allow_stop_reply = cmd->allow_stop_reply; > - cmd->handler(params, NULL); > + cmd->handler(params, user_ctx); > return true; > } > > -- > 2.39.2 > Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
diff --git a/include/gdbstub/commands.h b/include/gdbstub/commands.h index e51f276b40..f3058f9dda 100644 --- a/include/gdbstub/commands.h +++ b/include/gdbstub/commands.h @@ -54,6 +54,8 @@ typedef union GdbCmdVariant { * "stop reply" packet. The list of commands that accept such response is * defined at the GDB Remote Serial Protocol documentation. See: * https://sourceware.org/gdb/onlinedocs/gdb/Stop-Reply-Packets.html#Stop-Reply-Packets. + * + * @need_cpu_context: Pass current CPU context to command handler via user_ctx. */ typedef struct GdbCmdParseEntry { GdbCmdHandler handler; @@ -61,6 +63,7 @@ typedef struct GdbCmdParseEntry { bool cmd_startswith; const char *schema; bool allow_stop_reply; + bool need_cpu_context; } GdbCmdParseEntry; /** diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index b1ca253f97..5c1612ed2a 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -938,6 +938,7 @@ static bool process_string_cmd(const char *data, for (i = 0; i < num_cmds; i++) { const GdbCmdParseEntry *cmd = &cmds[i]; + void *user_ctx = NULL; g_assert(cmd->handler && cmd->cmd); if ((cmd->cmd_startswith && !startswith(data, cmd->cmd)) || @@ -952,8 +953,12 @@ static bool process_string_cmd(const char *data, } } + if (cmd->need_cpu_context) { + user_ctx = (void *)gdbserver_state.g_cpu; + } + gdbserver_state.allow_stop_reply = cmd->allow_stop_reply; - cmd->handler(params, NULL); + cmd->handler(params, user_ctx); return true; }