target/ppc: Update gdbstub to read SPR's CFAR, DEC, HDEC, TB-L/U
SPR's CFAR, DEC, HDEC, TB-L/U are not implemented as part of CPUPPCState. Hence, gdbstub is not able to access them using (CPUPPCState *)env->spr[] array. Update gdb_get_spr_reg() method to handle these SPR's specifically. Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Saif Abrar <saif.abrar@linux.vnet.ibm.com> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
c295d3b090
commit
0c0fc268df
@ -394,7 +394,32 @@ static int gdb_get_spr_reg(CPUPPCState *env, GByteArray *buf, int n)
|
||||
}
|
||||
|
||||
len = TARGET_LONG_SIZE;
|
||||
gdb_get_regl(buf, env->spr[reg]);
|
||||
|
||||
/* Handle those SPRs that are not part of the env->spr[] array */
|
||||
target_ulong val;
|
||||
switch (reg) {
|
||||
#if defined(TARGET_PPC64)
|
||||
case SPR_CFAR:
|
||||
val = env->cfar;
|
||||
break;
|
||||
#endif
|
||||
case SPR_HDEC:
|
||||
val = cpu_ppc_load_hdecr(env);
|
||||
break;
|
||||
case SPR_TBL:
|
||||
val = cpu_ppc_load_tbl(env);
|
||||
break;
|
||||
case SPR_TBU:
|
||||
val = cpu_ppc_load_tbu(env);
|
||||
break;
|
||||
case SPR_DECR:
|
||||
val = cpu_ppc_load_decr(env);
|
||||
break;
|
||||
default:
|
||||
val = env->spr[reg];
|
||||
}
|
||||
gdb_get_regl(buf, val);
|
||||
|
||||
ppc_maybe_bswap_register(env, gdb_get_reg_ptr(buf, len), len);
|
||||
return len;
|
||||
}
|
||||
@ -411,7 +436,18 @@ static int gdb_set_spr_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
||||
|
||||
len = TARGET_LONG_SIZE;
|
||||
ppc_maybe_bswap_register(env, mem_buf, len);
|
||||
env->spr[reg] = ldn_p(mem_buf, len);
|
||||
|
||||
/* Handle those SPRs that are not part of the env->spr[] array */
|
||||
target_ulong val = ldn_p(mem_buf, len);
|
||||
switch (reg) {
|
||||
#if defined(TARGET_PPC64)
|
||||
case SPR_CFAR:
|
||||
env->cfar = val;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
env->spr[reg] = val;
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user