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