From: Jon Doron <arilou@gmail.com> To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, liran.alon@oracle.com, Jon Doron <arilou@gmail.com> Subject: [Qemu-devel] [PATCH v8 23/27] gdbstub: Implement qemu physical memory mode Date: Thu, 2 May 2019 10:26:37 +0300 [thread overview] Message-ID: <20190502072641.4667-24-arilou@gmail.com> (raw) In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> Add a new query/set which changes the memory GDB sees to physical memory only. gdb> maint packet qqemu.PhyMemMode will reply the current phy_mem_mode state (1 for enabled, 0 for disabled) gdb> maint packet Qqemu.PhyMemMode:1 Will make GDB read/write only to physical memory, set to 0 to disable Signed-off-by: Jon Doron <arilou@gmail.com> --- gdbstub.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 00c07d6ec0..6daf779af4 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -46,11 +46,23 @@ #define GDB_ATTACHED "1" #endif +static int phy_memory_mode = 0; + static inline int target_memory_rw_debug(CPUState *cpu, target_ulong addr, uint8_t *buf, int len, bool is_write) { - CPUClass *cc = CPU_GET_CLASS(cpu); + CPUClass *cc; + if (phy_memory_mode) { + if (is_write) { + cpu_physical_memory_write(addr, buf, len); + } else { + cpu_physical_memory_read(addr, buf, len); + } + return 0; + } + + cc = CPU_GET_CLASS(cpu); if (cc->memory_rw_debug) { return cc->memory_rw_debug(cpu, addr, buf, len, is_write); } @@ -2129,7 +2141,29 @@ static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx) static void handle_query_qemu_supported(GdbCmdContext *gdb_ctx, void *user_ctx) { - put_packet(gdb_ctx->s, "sstepbits;sstep"); + put_packet(gdb_ctx->s, "sstepbits;sstep;PhyMemMode"); +} + +static void handle_query_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, + void *user_ctx) +{ + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "%d", phy_memory_mode); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_set_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (!gdb_ctx->params[0].val_ul) { + phy_memory_mode = 0; + } else { + phy_memory_mode = 1; + } + put_packet(gdb_ctx->s, "OK"); } static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { @@ -2212,6 +2246,20 @@ static GdbCmdParseEntry gdb_gen_query_table[] = { .handler = handle_query_qemu_supported, .cmd = "qemu.Supported", }, + { + .handler = handle_query_qemu_phy_mem_mode, + .cmd = "qemu.PhyMemMode", + }, +}; + +static GdbCmdParseEntry gdb_gen_set_table[] = { + /* Order is important if has same prefix */ + { + .handler = handle_set_qemu_phy_mem_mode, + .cmd = "qemu.PhyMemMode:", + .cmd_startswith = 1, + .schema = "l0" + }, }; static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) @@ -2245,7 +2293,11 @@ static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) return; } - put_packet(gdb_ctx->s, ""); + if (process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_set_table, + ARRAY_SIZE(gdb_gen_set_table))) { + put_packet(gdb_ctx->s, ""); + } } static void handle_target_halt(GdbCmdContext *gdb_ctx, void *user_ctx) -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Jon Doron <arilou@gmail.com> To: qemu-devel@nongnu.org Cc: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron <arilou@gmail.com> Subject: [Qemu-devel] [PATCH v8 23/27] gdbstub: Implement qemu physical memory mode Date: Thu, 2 May 2019 10:26:37 +0300 [thread overview] Message-ID: <20190502072641.4667-24-arilou@gmail.com> (raw) Message-ID: <20190502072637.-NCAGU8gklE_JNs4ct-90eNPwoV7ajo4IcOX-uGTcoI@z> (raw) In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> Add a new query/set which changes the memory GDB sees to physical memory only. gdb> maint packet qqemu.PhyMemMode will reply the current phy_mem_mode state (1 for enabled, 0 for disabled) gdb> maint packet Qqemu.PhyMemMode:1 Will make GDB read/write only to physical memory, set to 0 to disable Signed-off-by: Jon Doron <arilou@gmail.com> --- gdbstub.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 00c07d6ec0..6daf779af4 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -46,11 +46,23 @@ #define GDB_ATTACHED "1" #endif +static int phy_memory_mode = 0; + static inline int target_memory_rw_debug(CPUState *cpu, target_ulong addr, uint8_t *buf, int len, bool is_write) { - CPUClass *cc = CPU_GET_CLASS(cpu); + CPUClass *cc; + if (phy_memory_mode) { + if (is_write) { + cpu_physical_memory_write(addr, buf, len); + } else { + cpu_physical_memory_read(addr, buf, len); + } + return 0; + } + + cc = CPU_GET_CLASS(cpu); if (cc->memory_rw_debug) { return cc->memory_rw_debug(cpu, addr, buf, len, is_write); } @@ -2129,7 +2141,29 @@ static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx) static void handle_query_qemu_supported(GdbCmdContext *gdb_ctx, void *user_ctx) { - put_packet(gdb_ctx->s, "sstepbits;sstep"); + put_packet(gdb_ctx->s, "sstepbits;sstep;PhyMemMode"); +} + +static void handle_query_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, + void *user_ctx) +{ + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "%d", phy_memory_mode); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_set_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (!gdb_ctx->params[0].val_ul) { + phy_memory_mode = 0; + } else { + phy_memory_mode = 1; + } + put_packet(gdb_ctx->s, "OK"); } static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { @@ -2212,6 +2246,20 @@ static GdbCmdParseEntry gdb_gen_query_table[] = { .handler = handle_query_qemu_supported, .cmd = "qemu.Supported", }, + { + .handler = handle_query_qemu_phy_mem_mode, + .cmd = "qemu.PhyMemMode", + }, +}; + +static GdbCmdParseEntry gdb_gen_set_table[] = { + /* Order is important if has same prefix */ + { + .handler = handle_set_qemu_phy_mem_mode, + .cmd = "qemu.PhyMemMode:", + .cmd_startswith = 1, + .schema = "l0" + }, }; static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) @@ -2245,7 +2293,11 @@ static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) return; } - put_packet(gdb_ctx->s, ""); + if (process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_set_table, + ARRAY_SIZE(gdb_gen_set_table))) { + put_packet(gdb_ctx->s, ""); + } } static void handle_target_halt(GdbCmdContext *gdb_ctx, void *user_ctx) -- 2.20.1
next prev parent reply other threads:[~2019-05-02 7:29 UTC|newest] Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-02 7:26 [Qemu-devel] [PATCH v8 00/27] gdbstub: Refactor command packets handler Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 01/27] gdbstub: Add infrastructure to parse cmd packets Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 02/27] gdbstub: Implement deatch (D pkt) with new infra Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 03/27] gdbstub: Implement thread_alive (T " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 04/27] gdbstub: Implement continue (c " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 05/27] gdbstub: Implement continue with signal (C " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 06/27] gdbstub: Implement set_thread (H " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 07/27] gdbstub: Implement insert breakpoint (Z " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 08/27] gdbstub: Implement remove breakpoint (z " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 09/27] gdbstub: Implement set register (P " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 10/27] gdbstub: Implement get register (p " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 11/27] gdbstub: Implement write memory (M " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 12/27] gdbstub: Implement read memory (m " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 13/27] gdbstub: Implement write all registers (G " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 14/27] gdbstub: Implement read all registers (g " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 15/27] gdbstub: Implement file io (F " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 16/27] gdbstub: Implement step (s " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 17/27] gdbstub: Implement v commands " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 18/27] gdbstub: Implement generic query (q pkt) " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 19/27] gdbstub: Implement generic set (Q " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 20/27] gdbstub: Implement target halted (? " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 21/27] gdbstub: Clear unused variables in gdb_handle_packet Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 22/27] gdbstub: Implement generic query qemu.Supported Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` Jon Doron [this message] 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 23/27] gdbstub: Implement qemu physical memory mode Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 24/27] gdbstub: Add another handler for setting qemu.sstep Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 25/27] kvm: Add API to read/write a CPU MSR value Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 26/27] gdbstub: Add support to read a MSR for KVM target Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:26 ` [Qemu-devel] [PATCH v8 27/27] gdbstub: Add support to write " Jon Doron 2019-05-02 7:26 ` Jon Doron 2019-05-02 7:53 ` [Qemu-devel] [PATCH v8 00/27] gdbstub: Refactor command packets handler no-reply 2019-05-02 7:53 ` no-reply
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190502072641.4667-24-arilou@gmail.com \ --to=arilou@gmail.com \ --cc=alex.bennee@linaro.org \ --cc=liran.alon@oracle.com \ --cc=qemu-devel@nongnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).