All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/1] 64 Bit support for hppa gdbstub
@ 2025-11-13  4:48 Sven Schnelle
  2025-11-13  4:48 ` [PATCH v2 1/1] target/hppa: add 64 bit support to gdbstub Sven Schnelle
  0 siblings, 1 reply; 4+ messages in thread
From: Sven Schnelle @ 2025-11-13  4:48 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

Changes in v2:
- use ldn_p() to avoid if/else

Sven Schnelle (1):
  target/hppa: add 64 bit support to gdbstub

 target/hppa/gdbstub.c | 62 ++++++++++++++++++++++++++++---------------
 1 file changed, 41 insertions(+), 21 deletions(-)

-- 
2.51.0



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2 1/1] target/hppa: add 64 bit support to gdbstub
  2025-11-13  4:48 [PATCH v2 0/1] 64 Bit support for hppa gdbstub Sven Schnelle
@ 2025-11-13  4:48 ` Sven Schnelle
  2025-12-22 22:20   ` Helge Deller
  2025-12-29 22:44   ` Philippe Mathieu-Daudé
  0 siblings, 2 replies; 4+ messages in thread
From: Sven Schnelle @ 2025-11-13  4:48 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 | 62 ++++++++++++++++++++++++++++---------------
 1 file changed, 41 insertions(+), 21 deletions(-)

diff --git a/target/hppa/gdbstub.c b/target/hppa/gdbstub.c
index 0daa52f7af..777f4a48b9 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,35 @@ 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;
+    }
+
+    val = ldn_p(mem_buf, hppa_reg_size(env));
 
     switch (n) {
     case 0:
@@ -267,16 +287,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] 4+ messages in thread

* Re: [PATCH v2 1/1] target/hppa: add 64 bit support to gdbstub
  2025-11-13  4:48 ` [PATCH v2 1/1] target/hppa: add 64 bit support to gdbstub Sven Schnelle
@ 2025-12-22 22:20   ` Helge Deller
  2025-12-29 22:44   ` Philippe Mathieu-Daudé
  1 sibling, 0 replies; 4+ messages in thread
From: Helge Deller @ 2025-12-22 22:20 UTC (permalink / raw)
  To: Sven Schnelle, Richard Henderson; +Cc: qemu-devel

On 11/13/25 05:48, Sven Schnelle wrote:
> Signed-off-by: Sven Schnelle <svens@stackframe.org>
> ---
>   target/hppa/gdbstub.c | 62 ++++++++++++++++++++++++++++---------------
>   1 file changed, 41 insertions(+), 21 deletions(-)

Reviewed-by: Helge Deller <deller@gmx.de>



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 1/1] target/hppa: add 64 bit support to gdbstub
  2025-11-13  4:48 ` [PATCH v2 1/1] target/hppa: add 64 bit support to gdbstub Sven Schnelle
  2025-12-22 22:20   ` Helge Deller
@ 2025-12-29 22:44   ` Philippe Mathieu-Daudé
  1 sibling, 0 replies; 4+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-29 22:44 UTC (permalink / raw)
  To: Sven Schnelle, Richard Henderson, Helge Deller; +Cc: qemu-devel

On 13/11/25 05:48, Sven Schnelle wrote:
> Signed-off-by: Sven Schnelle <svens@stackframe.org>
> ---
>   target/hppa/gdbstub.c | 62 ++++++++++++++++++++++++++++---------------
>   1 file changed, 41 insertions(+), 21 deletions(-)
> 
> diff --git a/target/hppa/gdbstub.c b/target/hppa/gdbstub.c
> index 0daa52f7af..777f4a48b9 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);

'cpu' variable is not used, why introduce it?

> +    CPUHPPAState *env = &cpu->env;
> +    target_ulong val;
> +
> +    if (n >= hppa_num_regs(env)) {
> +        return 0;
> +    }
>   
>       switch (n) {
>       case 0:
> @@ -133,24 +142,35 @@ 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);

Ditto.

> +    CPUHPPAState *env = &cpu->env;
> +    target_ulong val;
> +
> +    if (n >= hppa_num_regs(env)) {
> +        return 0;
> +    }
> +
> +    val = ldn_p(mem_buf, hppa_reg_size(env));
>   
>       switch (n) {
>       case 0:
> @@ -267,16 +287,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);
>   }



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-12-29 22:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-13  4:48 [PATCH v2 0/1] 64 Bit support for hppa gdbstub Sven Schnelle
2025-11-13  4:48 ` [PATCH v2 1/1] target/hppa: add 64 bit support to gdbstub Sven Schnelle
2025-12-22 22:20   ` Helge Deller
2025-12-29 22:44   ` Philippe Mathieu-Daudé

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.