diff mbox series

[5/7] Hexagon (gdbstub): fix p3:0 read and write via stub

Message ID 7ea9a493960213e35b61906f86001bb9aade2b99.1680808943.git.quic_mathbern@quicinc.com (mailing list archive)
State New, archived
Headers show
Series Hexagon: add lldb support | expand

Commit Message

Matheus Tavares Bernardino April 6, 2023, 7:29 p.m. UTC
From: Brian Cain <bcain@quicinc.com>

Co-authored-by: Sid Manning <sidneym@quicinc.com>
Signed-off-by: Sid Manning <sidneym@quicinc.com>
Signed-off-by: Brian Cain <bcain@quicinc.com>
Co-authored-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
---
 target/hexagon/gdbstub.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Taylor Simpson April 6, 2023, 8:14 p.m. UTC | #1
> -----Original Message-----
> From: Matheus Bernardino (QUIC) <quic_mathbern@quicinc.com>
> Sent: Thursday, April 6, 2023 2:30 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Taylor Simpson
> <tsimpson@quicinc.com>; alex.bennee@linaro.org; f4bug@amsat.org;
> peter.maydell@linaro.org; Sid Manning <sidneym@quicinc.com>
> Subject: [PATCH 5/7] Hexagon (gdbstub): fix p3:0 read and write via stub
> 
> From: Brian Cain <bcain@quicinc.com>
> 
> Co-authored-by: Sid Manning <sidneym@quicinc.com>
> Signed-off-by: Sid Manning <sidneym@quicinc.com>
> Signed-off-by: Brian Cain <bcain@quicinc.com>
> Co-authored-by: Matheus Tavares Bernardino
> <quic_mathbern@quicinc.com>
> Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
> ---
>  target/hexagon/gdbstub.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/target/hexagon/gdbstub.c b/target/hexagon/gdbstub.c index
> 46083da620..a06fed9f18 100644
> --- a/target/hexagon/gdbstub.c
> +++ b/target/hexagon/gdbstub.c
> @@ -25,6 +25,14 @@ int hexagon_gdb_read_register(CPUState *cs,
> GByteArray *mem_buf, int n)
>      HexagonCPU *cpu = HEXAGON_CPU(cs);
>      CPUHexagonState *env = &cpu->env;
> 
> +    if (n == HEX_REG_P3_0_ALIASED) {
> +        uint32_t p3_0 = 0;
> +        for (int i = 0; i < NUM_PREGS; i++) {
> +            p3_0 = deposit32(p3_0, i * 8, 8, env->pred[i]);
> +        }
> +        return gdb_get_regl(mem_buf, p3_0);
> +    }
> +
>      if (n < TOTAL_PER_THREAD_REGS) {
>          return gdb_get_regl(mem_buf, env->gpr[n]);
>      }
> @@ -37,6 +45,14 @@ int hexagon_gdb_write_register(CPUState *cs, uint8_t
> *mem_buf, int n)
>      HexagonCPU *cpu = HEXAGON_CPU(cs);
>      CPUHexagonState *env = &cpu->env;
> 
> +    if (n == HEX_REG_P3_0_ALIASED) {
> +        uint32_t p3_0 = ldtul_p(mem_buf);
> +        for (int i = 0; i < NUM_PREGS; i++) {
> +            env->pred[i] = extract32(p3_0, i * 8, 8);
> +        }
> +        return sizeof(target_ulong);
> +    }
> +
>      if (n < TOTAL_PER_THREAD_REGS) {
>          env->gpr[n] = ldtul_p(mem_buf);
>          return sizeof(target_ulong);

Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
diff mbox series

Patch

diff --git a/target/hexagon/gdbstub.c b/target/hexagon/gdbstub.c
index 46083da620..a06fed9f18 100644
--- a/target/hexagon/gdbstub.c
+++ b/target/hexagon/gdbstub.c
@@ -25,6 +25,14 @@  int hexagon_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
     HexagonCPU *cpu = HEXAGON_CPU(cs);
     CPUHexagonState *env = &cpu->env;
 
+    if (n == HEX_REG_P3_0_ALIASED) {
+        uint32_t p3_0 = 0;
+        for (int i = 0; i < NUM_PREGS; i++) {
+            p3_0 = deposit32(p3_0, i * 8, 8, env->pred[i]);
+        }
+        return gdb_get_regl(mem_buf, p3_0);
+    }
+
     if (n < TOTAL_PER_THREAD_REGS) {
         return gdb_get_regl(mem_buf, env->gpr[n]);
     }
@@ -37,6 +45,14 @@  int hexagon_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
     HexagonCPU *cpu = HEXAGON_CPU(cs);
     CPUHexagonState *env = &cpu->env;
 
+    if (n == HEX_REG_P3_0_ALIASED) {
+        uint32_t p3_0 = ldtul_p(mem_buf);
+        for (int i = 0; i < NUM_PREGS; i++) {
+            env->pred[i] = extract32(p3_0, i * 8, 8);
+        }
+        return sizeof(target_ulong);
+    }
+
     if (n < TOTAL_PER_THREAD_REGS) {
         env->gpr[n] = ldtul_p(mem_buf);
         return sizeof(target_ulong);