mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
gdbstub: Add support for info proc mappings
Currently the GDB's generate-core-file command doesn't work well with qemu-user: the resulting dumps are huge [1] and at the same time incomplete (argv and envp are missing). The reason is that GDB has no access to proc mappings and therefore has to fall back to using heuristics for discovering them. This is, in turn, because qemu-user does not implement the Host I/O feature of the GDB Remote Serial Protocol. Implement vFile:{open,close,pread,readlink} and also qXfer:exec-file:read+. With that, generate-core-file begins to work on aarch64 and s390x. [1] https://sourceware.org/pipermail/gdb-patches/2023-May/199432.html Co-developed-by: Dominik 'Disconnect3d' Czarnota <dominik.b.czarnota@gmail.com> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Message-Id: <20230621203627.1808446-7-iii@linux.ibm.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20230630180423.558337-37-alex.bennee@linaro.org>
This commit is contained in:
parent
dc14a7a6e9
commit
e282010b2e
3 changed files with 185 additions and 2 deletions
|
@ -1327,6 +1327,36 @@ static const GdbCmdParseEntry gdb_v_commands_table[] = {
|
|||
.cmd = "Kill;",
|
||||
.cmd_startswith = 1
|
||||
},
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
/*
|
||||
* Host I/O Packets. See [1] for details.
|
||||
* [1] https://sourceware.org/gdb/onlinedocs/gdb/Host-I_002fO-Packets.html
|
||||
*/
|
||||
{
|
||||
.handler = gdb_handle_v_file_open,
|
||||
.cmd = "File:open:",
|
||||
.cmd_startswith = 1,
|
||||
.schema = "s,L,L0"
|
||||
},
|
||||
{
|
||||
.handler = gdb_handle_v_file_close,
|
||||
.cmd = "File:close:",
|
||||
.cmd_startswith = 1,
|
||||
.schema = "l0"
|
||||
},
|
||||
{
|
||||
.handler = gdb_handle_v_file_pread,
|
||||
.cmd = "File:pread:",
|
||||
.cmd_startswith = 1,
|
||||
.schema = "l,L,L0"
|
||||
},
|
||||
{
|
||||
.handler = gdb_handle_v_file_readlink,
|
||||
.cmd = "File:readlink:",
|
||||
.cmd_startswith = 1,
|
||||
.schema = "s0"
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
static void handle_v_commands(GArray *params, void *user_ctx)
|
||||
|
@ -1472,11 +1502,14 @@ static void handle_query_supported(GArray *params, void *user_ctx)
|
|||
";ReverseStep+;ReverseContinue+");
|
||||
}
|
||||
|
||||
#if defined(CONFIG_USER_ONLY) && defined(CONFIG_LINUX)
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
#if defined(CONFIG_LINUX)
|
||||
if (gdbserver_state.c_cpu->opaque) {
|
||||
g_string_append(gdbserver_state.str_buf, ";qXfer:auxv:read+");
|
||||
}
|
||||
#endif
|
||||
g_string_append(gdbserver_state.str_buf, ";qXfer:exec-file:read+");
|
||||
#endif
|
||||
|
||||
if (params->len &&
|
||||
strstr(get_param(params, 0)->data, "multiprocess+")) {
|
||||
|
@ -1615,13 +1648,21 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
|
|||
.cmd_startswith = 1,
|
||||
.schema = "s:l,l0"
|
||||
},
|
||||
#if defined(CONFIG_USER_ONLY) && defined(CONFIG_LINUX)
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
#if defined(CONFIG_LINUX)
|
||||
{
|
||||
.handler = gdb_handle_query_xfer_auxv,
|
||||
.cmd = "Xfer:auxv:read::",
|
||||
.cmd_startswith = 1,
|
||||
.schema = "l,l0"
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.handler = gdb_handle_query_xfer_exec_file,
|
||||
.cmd = "Xfer:exec-file:read:",
|
||||
.cmd_startswith = 1,
|
||||
.schema = "l:l,l0"
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.handler = gdb_handle_query_attached,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue