* [PATCH 0/1] 64 Bit support for hppa gdbstub
@ 2025-11-10 22:26 Sven Schnelle
2025-11-10 22:26 ` [PATCH 1/1] target/hppa: add 64 bit support to gdbstub Sven Schnelle
0 siblings, 1 reply; 3+ messages in thread
From: Sven Schnelle @ 2025-11-10 22:26 UTC (permalink / raw)
To: Richard Henderson, Helge Deller; +Cc: qemu-devel, Sven Schnelle
This is a rebased version of the patch(es) sent last year. In the meantime
the gdb detection patch mentioned in [1] was merged, so it should be safe to
merge this Patch now.
[1] https://mail.gnu.org/archive/html/qemu-devel/2024-02/msg06652.html
Sven Schnelle (1):
target/hppa: add 64 bit support to gdbstub
target/hppa/gdbstub.c | 66 +++++++++++++++++++++++++++++--------------
1 file changed, 45 insertions(+), 21 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/1] target/hppa: add 64 bit support to gdbstub
2025-11-10 22:26 [PATCH 0/1] 64 Bit support for hppa gdbstub Sven Schnelle
@ 2025-11-10 22:26 ` Sven Schnelle
2025-11-12 7:07 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 3+ messages in thread
From: Sven Schnelle @ 2025-11-10 22:26 UTC (permalink / raw)
To: Richard Henderson, Helge Deller; +Cc: qemu-devel, Sven Schnelle
Signed-off-by: Sven Schnelle <svens@stackframe.org>
---
target/hppa/gdbstub.c | 66 +++++++++++++++++++++++++++++--------------
1 file changed, 45 insertions(+), 21 deletions(-)
diff --git a/target/hppa/gdbstub.c b/target/hppa/gdbstub.c
index 0daa52f7af..d4fcbc535b 100644
--- a/target/hppa/gdbstub.c
+++ b/target/hppa/gdbstub.c
@@ -21,16 +21,25 @@
#include "cpu.h"
#include "gdbstub/helpers.h"
-/*
- * GDB 15 only supports PA1.0 via the remote protocol, and ignores
- * any provided xml. Which means that any attempt to provide more
- * data results in "Remote 'g' packet reply is too long".
- */
+static int hppa_num_regs(CPUHPPAState *env)
+{
+ return hppa_is_pa20(env) ? 96 : 128;
+}
+
+static int hppa_reg_size(CPUHPPAState *env)
+{
+ return hppa_is_pa20(env) ? 8 : 4;
+}
int hppa_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
{
- CPUHPPAState *env = cpu_env(cs);
- uint32_t val;
+ HPPACPU *cpu = HPPA_CPU(cs);
+ CPUHPPAState *env = &cpu->env;
+ target_ulong val;
+
+ if (n >= hppa_num_regs(env)) {
+ return 0;
+ }
switch (n) {
case 0:
@@ -133,24 +142,39 @@ int hppa_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
val = env->cr[30];
break;
case 64 ... 127:
- val = extract64(env->fr[(n - 64) / 2], (n & 1 ? 0 : 32), 32);
- break;
- default:
- if (n < 128) {
- val = 0;
+ if (hppa_is_pa20(env)) {
+ val = env->fr[n - 64];
} else {
- return 0;
+ val = extract64(env->fr[(n - 64) / 2], (n & 1 ? 0 : 32), 32);
}
break;
+ default:
+ val = 0;
+ break;
}
- return gdb_get_reg32(mem_buf, val);
+ if (hppa_is_pa20(env)) {
+ return gdb_get_reg64(mem_buf, val);
+ } else {
+ return gdb_get_reg32(mem_buf, val);
+ }
}
int hppa_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
{
- CPUHPPAState *env = cpu_env(cs);
- uint32_t val = ldl_p(mem_buf);
+ HPPACPU *cpu = HPPA_CPU(cs);
+ CPUHPPAState *env = &cpu->env;
+ target_ulong val;
+
+ if (n >= hppa_num_regs(env)) {
+ return 0;
+ }
+
+ if (hppa_is_pa20(env)) {
+ val = ldq_p(mem_buf);
+ } else {
+ val = ldl_p(mem_buf);
+ }
switch (n) {
case 0:
@@ -267,16 +291,16 @@ int hppa_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
cpu_hppa_loaded_fr0(env);
break;
case 65 ... 127:
- {
+ if (hppa_is_pa20(env)) {
+ env->fr[n - 64] = val;
+ } else {
uint64_t *fr = &env->fr[(n - 64) / 2];
*fr = deposit64(*fr, (n & 1 ? 0 : 32), 32, val);
}
break;
default:
- if (n >= 128) {
- return 0;
- }
break;
}
- return 4;
+
+ return hppa_reg_size(env);
}
--
2.51.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/1] target/hppa: add 64 bit support to gdbstub
2025-11-10 22:26 ` [PATCH 1/1] target/hppa: add 64 bit support to gdbstub Sven Schnelle
@ 2025-11-12 7:07 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 3+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-11-12 7:07 UTC (permalink / raw)
To: Sven Schnelle, Richard Henderson, Helge Deller; +Cc: qemu-devel
Hi Sven!
On 10/11/25 23:26, Sven Schnelle wrote:
> Signed-off-by: Sven Schnelle <svens@stackframe.org>
> ---
> target/hppa/gdbstub.c | 66 +++++++++++++++++++++++++++++--------------
> 1 file changed, 45 insertions(+), 21 deletions(-)
> +static int hppa_reg_size(CPUHPPAState *env)
> +{
> + return hppa_is_pa20(env) ? 8 : 4;
> +}
> int hppa_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
> {
> - CPUHPPAState *env = cpu_env(cs);
> - uint32_t val = ldl_p(mem_buf);
> + HPPACPU *cpu = HPPA_CPU(cs);
> + CPUHPPAState *env = &cpu->env;
> + target_ulong val;
> +
> + if (n >= hppa_num_regs(env)) {
> + return 0;
> + }
> +
> + if (hppa_is_pa20(env)) {
> + val = ldq_p(mem_buf);
> + } else {
> + val = ldl_p(mem_buf);
> + }
Alternatively:
val = ldn_p(mem_buf, hppa_reg_size(env));
>
> switch (n) {
> case 0:
> @@ -267,16 +291,16 @@ int hppa_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
> cpu_hppa_loaded_fr0(env);
> break;
> case 65 ... 127:
> - {
> + if (hppa_is_pa20(env)) {
> + env->fr[n - 64] = val;
> + } else {
> uint64_t *fr = &env->fr[(n - 64) / 2];
> *fr = deposit64(*fr, (n & 1 ? 0 : 32), 32, val);
> }
> break;
> default:
> - if (n >= 128) {
> - return 0;
> - }
> break;
> }
> - return 4;
> +
> + return hppa_reg_size(env);
> }
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-11-12 7:07 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-10 22:26 [PATCH 0/1] 64 Bit support for hppa gdbstub Sven Schnelle
2025-11-10 22:26 ` [PATCH 1/1] target/hppa: add 64 bit support to gdbstub Sven Schnelle
2025-11-12 7:07 ` Philippe Mathieu-Daudé
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).