gdbstub: Change gdb_get_reg_cb and gdb_set_reg_cb
Align the parameters of gdb_get_reg_cb and gdb_set_reg_cb with the gdb_read_register and gdb_write_register members of CPUClass to allow to unify the logic to access registers of the core and coprocessors in the future. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20231213-gdb-v17-6-777047380591@daynix.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20240227144335.1196131-11-alex.bennee@linaro.org>
This commit is contained in:
parent
c494f8f529
commit
66260159a7
@ -502,7 +502,6 @@ const GDBFeature *gdb_find_static_feature(const char *xmlname)
|
|||||||
static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
|
static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
CPUClass *cc = CPU_GET_CLASS(cpu);
|
CPUClass *cc = CPU_GET_CLASS(cpu);
|
||||||
CPUArchState *env = cpu_env(cpu);
|
|
||||||
GDBRegisterState *r;
|
GDBRegisterState *r;
|
||||||
|
|
||||||
if (reg < cc->gdb_num_core_regs) {
|
if (reg < cc->gdb_num_core_regs) {
|
||||||
@ -513,7 +512,7 @@ static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
|
|||||||
for (guint i = 0; i < cpu->gdb_regs->len; i++) {
|
for (guint i = 0; i < cpu->gdb_regs->len; i++) {
|
||||||
r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
|
r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
|
||||||
if (r->base_reg <= reg && reg < r->base_reg + r->feature->num_regs) {
|
if (r->base_reg <= reg && reg < r->base_reg + r->feature->num_regs) {
|
||||||
return r->get_reg(env, buf, reg - r->base_reg);
|
return r->get_reg(cpu, buf, reg - r->base_reg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -523,7 +522,6 @@ static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
|
|||||||
static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
|
static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
|
||||||
{
|
{
|
||||||
CPUClass *cc = CPU_GET_CLASS(cpu);
|
CPUClass *cc = CPU_GET_CLASS(cpu);
|
||||||
CPUArchState *env = cpu_env(cpu);
|
|
||||||
GDBRegisterState *r;
|
GDBRegisterState *r;
|
||||||
|
|
||||||
if (reg < cc->gdb_num_core_regs) {
|
if (reg < cc->gdb_num_core_regs) {
|
||||||
@ -534,7 +532,7 @@ static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
|
|||||||
for (guint i = 0; i < cpu->gdb_regs->len; i++) {
|
for (guint i = 0; i < cpu->gdb_regs->len; i++) {
|
||||||
r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
|
r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
|
||||||
if (r->base_reg <= reg && reg < r->base_reg + r->feature->num_regs) {
|
if (r->base_reg <= reg && reg < r->base_reg + r->feature->num_regs) {
|
||||||
return r->set_reg(env, mem_buf, reg - r->base_reg);
|
return r->set_reg(cpu, mem_buf, reg - r->base_reg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,8 @@ typedef struct GDBFeatureBuilder {
|
|||||||
|
|
||||||
|
|
||||||
/* Get or set a register. Returns the size of the register. */
|
/* Get or set a register. Returns the size of the register. */
|
||||||
typedef int (*gdb_get_reg_cb)(CPUArchState *env, GByteArray *buf, int reg);
|
typedef int (*gdb_get_reg_cb)(CPUState *cpu, GByteArray *buf, int reg);
|
||||||
typedef int (*gdb_set_reg_cb)(CPUArchState *env, uint8_t *buf, int reg);
|
typedef int (*gdb_set_reg_cb)(CPUState *cpu, uint8_t *buf, int reg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gdb_register_coprocessor() - register a supplemental set of registers
|
* gdb_register_coprocessor() - register a supplemental set of registers
|
||||||
|
@ -106,9 +106,10 @@ int arm_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vfp_gdb_get_reg(CPUARMState *env, GByteArray *buf, int reg)
|
static int vfp_gdb_get_reg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
ARMCPU *cpu = env_archcpu(env);
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
int nregs = cpu_isar_feature(aa32_simd_r32, cpu) ? 32 : 16;
|
int nregs = cpu_isar_feature(aa32_simd_r32, cpu) ? 32 : 16;
|
||||||
|
|
||||||
/* VFP data registers are always little-endian. */
|
/* VFP data registers are always little-endian. */
|
||||||
@ -130,9 +131,10 @@ static int vfp_gdb_get_reg(CPUARMState *env, GByteArray *buf, int reg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vfp_gdb_set_reg(CPUARMState *env, uint8_t *buf, int reg)
|
static int vfp_gdb_set_reg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
ARMCPU *cpu = env_archcpu(env);
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
int nregs = cpu_isar_feature(aa32_simd_r32, cpu) ? 32 : 16;
|
int nregs = cpu_isar_feature(aa32_simd_r32, cpu) ? 32 : 16;
|
||||||
|
|
||||||
if (reg < nregs) {
|
if (reg < nregs) {
|
||||||
@ -156,8 +158,11 @@ static int vfp_gdb_set_reg(CPUARMState *env, uint8_t *buf, int reg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vfp_gdb_get_sysreg(CPUARMState *env, GByteArray *buf, int reg)
|
static int vfp_gdb_get_sysreg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0:
|
case 0:
|
||||||
return gdb_get_reg32(buf, env->vfp.xregs[ARM_VFP_FPSID]);
|
return gdb_get_reg32(buf, env->vfp.xregs[ARM_VFP_FPSID]);
|
||||||
@ -167,8 +172,11 @@ static int vfp_gdb_get_sysreg(CPUARMState *env, GByteArray *buf, int reg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vfp_gdb_set_sysreg(CPUARMState *env, uint8_t *buf, int reg)
|
static int vfp_gdb_set_sysreg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0:
|
case 0:
|
||||||
env->vfp.xregs[ARM_VFP_FPSID] = ldl_p(buf);
|
env->vfp.xregs[ARM_VFP_FPSID] = ldl_p(buf);
|
||||||
@ -180,8 +188,11 @@ static int vfp_gdb_set_sysreg(CPUARMState *env, uint8_t *buf, int reg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mve_gdb_get_reg(CPUARMState *env, GByteArray *buf, int reg)
|
static int mve_gdb_get_reg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0:
|
case 0:
|
||||||
return gdb_get_reg32(buf, env->v7m.vpr);
|
return gdb_get_reg32(buf, env->v7m.vpr);
|
||||||
@ -190,8 +201,11 @@ static int mve_gdb_get_reg(CPUARMState *env, GByteArray *buf, int reg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mve_gdb_set_reg(CPUARMState *env, uint8_t *buf, int reg)
|
static int mve_gdb_set_reg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0:
|
case 0:
|
||||||
env->v7m.vpr = ldl_p(buf);
|
env->v7m.vpr = ldl_p(buf);
|
||||||
@ -210,9 +224,10 @@ static int mve_gdb_set_reg(CPUARMState *env, uint8_t *buf, int reg)
|
|||||||
* We return the number of bytes copied
|
* We return the number of bytes copied
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int arm_gdb_get_sysreg(CPUARMState *env, GByteArray *buf, int reg)
|
static int arm_gdb_get_sysreg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
ARMCPU *cpu = env_archcpu(env);
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
const ARMCPRegInfo *ri;
|
const ARMCPRegInfo *ri;
|
||||||
uint32_t key;
|
uint32_t key;
|
||||||
|
|
||||||
@ -228,7 +243,7 @@ static int arm_gdb_get_sysreg(CPUARMState *env, GByteArray *buf, int reg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arm_gdb_set_sysreg(CPUARMState *env, uint8_t *buf, int reg)
|
static int arm_gdb_set_sysreg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -367,8 +382,11 @@ static int m_sysreg_get(CPUARMState *env, GByteArray *buf,
|
|||||||
return gdb_get_reg32(buf, *ptr);
|
return gdb_get_reg32(buf, *ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arm_gdb_get_m_systemreg(CPUARMState *env, GByteArray *buf, int reg)
|
static int arm_gdb_get_m_systemreg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Here, we emulate MRS instruction, where CONTROL has a mix of
|
* Here, we emulate MRS instruction, where CONTROL has a mix of
|
||||||
* banked and non-banked bits.
|
* banked and non-banked bits.
|
||||||
@ -379,7 +397,7 @@ static int arm_gdb_get_m_systemreg(CPUARMState *env, GByteArray *buf, int reg)
|
|||||||
return m_sysreg_get(env, buf, reg, env->v7m.secure);
|
return m_sysreg_get(env, buf, reg, env->v7m.secure);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arm_gdb_set_m_systemreg(CPUARMState *env, uint8_t *buf, int reg)
|
static int arm_gdb_set_m_systemreg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
return 0; /* TODO */
|
return 0; /* TODO */
|
||||||
}
|
}
|
||||||
@ -414,12 +432,15 @@ static GDBFeature *arm_gen_dynamic_m_systemreg_feature(CPUState *cs,
|
|||||||
* For user-only, we see the non-secure registers via m_systemreg above.
|
* For user-only, we see the non-secure registers via m_systemreg above.
|
||||||
* For secext, encode the non-secure view as even and secure view as odd.
|
* For secext, encode the non-secure view as even and secure view as odd.
|
||||||
*/
|
*/
|
||||||
static int arm_gdb_get_m_secextreg(CPUARMState *env, GByteArray *buf, int reg)
|
static int arm_gdb_get_m_secextreg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
return m_sysreg_get(env, buf, reg >> 1, reg & 1);
|
return m_sysreg_get(env, buf, reg >> 1, reg & 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arm_gdb_set_m_secextreg(CPUARMState *env, uint8_t *buf, int reg)
|
static int arm_gdb_set_m_secextreg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
return 0; /* TODO */
|
return 0; /* TODO */
|
||||||
}
|
}
|
||||||
|
@ -72,8 +72,11 @@ int aarch64_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int aarch64_gdb_get_fpu_reg(CPUARMState *env, GByteArray *buf, int reg)
|
int aarch64_gdb_get_fpu_reg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0 ... 31:
|
case 0 ... 31:
|
||||||
{
|
{
|
||||||
@ -92,8 +95,11 @@ int aarch64_gdb_get_fpu_reg(CPUARMState *env, GByteArray *buf, int reg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int aarch64_gdb_set_fpu_reg(CPUARMState *env, uint8_t *buf, int reg)
|
int aarch64_gdb_set_fpu_reg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0 ... 31:
|
case 0 ... 31:
|
||||||
/* 128 bit FP register */
|
/* 128 bit FP register */
|
||||||
@ -116,9 +122,10 @@ int aarch64_gdb_set_fpu_reg(CPUARMState *env, uint8_t *buf, int reg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int aarch64_gdb_get_sve_reg(CPUARMState *env, GByteArray *buf, int reg)
|
int aarch64_gdb_get_sve_reg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
ARMCPU *cpu = env_archcpu(env);
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
/* The first 32 registers are the zregs */
|
/* The first 32 registers are the zregs */
|
||||||
@ -164,9 +171,10 @@ int aarch64_gdb_get_sve_reg(CPUARMState *env, GByteArray *buf, int reg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int aarch64_gdb_set_sve_reg(CPUARMState *env, uint8_t *buf, int reg)
|
int aarch64_gdb_set_sve_reg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
ARMCPU *cpu = env_archcpu(env);
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
/* The first 32 registers are the zregs */
|
/* The first 32 registers are the zregs */
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
@ -210,8 +218,11 @@ int aarch64_gdb_set_sve_reg(CPUARMState *env, uint8_t *buf, int reg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int aarch64_gdb_get_pauth_reg(CPUARMState *env, GByteArray *buf, int reg)
|
int aarch64_gdb_get_pauth_reg(CPUState *cs, GByteArray *buf, int reg)
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
|
CPUARMState *env = &cpu->env;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0: /* pauth_dmask */
|
case 0: /* pauth_dmask */
|
||||||
case 1: /* pauth_cmask */
|
case 1: /* pauth_cmask */
|
||||||
@ -241,7 +252,7 @@ int aarch64_gdb_get_pauth_reg(CPUARMState *env, GByteArray *buf, int reg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int aarch64_gdb_set_pauth_reg(CPUARMState *env, uint8_t *buf, int reg)
|
int aarch64_gdb_set_pauth_reg(CPUState *cs, uint8_t *buf, int reg)
|
||||||
{
|
{
|
||||||
/* All pseudo registers are read-only. */
|
/* All pseudo registers are read-only. */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1452,12 +1452,12 @@ static inline uint64_t pmu_counter_mask(CPUARMState *env)
|
|||||||
|
|
||||||
#ifdef TARGET_AARCH64
|
#ifdef TARGET_AARCH64
|
||||||
GDBFeature *arm_gen_dynamic_svereg_feature(CPUState *cpu, int base_reg);
|
GDBFeature *arm_gen_dynamic_svereg_feature(CPUState *cpu, int base_reg);
|
||||||
int aarch64_gdb_get_sve_reg(CPUARMState *env, GByteArray *buf, int reg);
|
int aarch64_gdb_get_sve_reg(CPUState *cs, GByteArray *buf, int reg);
|
||||||
int aarch64_gdb_set_sve_reg(CPUARMState *env, uint8_t *buf, int reg);
|
int aarch64_gdb_set_sve_reg(CPUState *cs, uint8_t *buf, int reg);
|
||||||
int aarch64_gdb_get_fpu_reg(CPUARMState *env, GByteArray *buf, int reg);
|
int aarch64_gdb_get_fpu_reg(CPUState *cs, GByteArray *buf, int reg);
|
||||||
int aarch64_gdb_set_fpu_reg(CPUARMState *env, uint8_t *buf, int reg);
|
int aarch64_gdb_set_fpu_reg(CPUState *cs, uint8_t *buf, int reg);
|
||||||
int aarch64_gdb_get_pauth_reg(CPUARMState *env, GByteArray *buf, int reg);
|
int aarch64_gdb_get_pauth_reg(CPUState *cs, GByteArray *buf, int reg);
|
||||||
int aarch64_gdb_set_pauth_reg(CPUARMState *env, uint8_t *buf, int reg);
|
int aarch64_gdb_set_pauth_reg(CPUState *cs, uint8_t *buf, int reg);
|
||||||
void arm_cpu_sve_finalize(ARMCPU *cpu, Error **errp);
|
void arm_cpu_sve_finalize(ARMCPU *cpu, Error **errp);
|
||||||
void arm_cpu_sme_finalize(ARMCPU *cpu, Error **errp);
|
void arm_cpu_sme_finalize(ARMCPU *cpu, Error **errp);
|
||||||
void arm_cpu_pauth_finalize(ARMCPU *cpu, Error **errp);
|
void arm_cpu_pauth_finalize(ARMCPU *cpu, Error **errp);
|
||||||
|
@ -81,8 +81,11 @@ static int gdb_get_qreg(CPUHexagonState *env, GByteArray *mem_buf, int n)
|
|||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hexagon_hvx_gdb_read_register(CPUHexagonState *env, GByteArray *mem_buf, int n)
|
int hexagon_hvx_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
HexagonCPU *cpu = HEXAGON_CPU(cs);
|
||||||
|
CPUHexagonState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < NUM_VREGS) {
|
if (n < NUM_VREGS) {
|
||||||
return gdb_get_vreg(env, mem_buf, n);
|
return gdb_get_vreg(env, mem_buf, n);
|
||||||
}
|
}
|
||||||
@ -115,8 +118,11 @@ static int gdb_put_qreg(CPUHexagonState *env, uint8_t *mem_buf, int n)
|
|||||||
return MAX_VEC_SIZE_BYTES / 8;
|
return MAX_VEC_SIZE_BYTES / 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hexagon_hvx_gdb_write_register(CPUHexagonState *env, uint8_t *mem_buf, int n)
|
int hexagon_hvx_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
HexagonCPU *cpu = HEXAGON_CPU(cs);
|
||||||
|
CPUHexagonState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < NUM_VREGS) {
|
if (n < NUM_VREGS) {
|
||||||
return gdb_put_vreg(env, mem_buf, n);
|
return gdb_put_vreg(env, mem_buf, n);
|
||||||
}
|
}
|
||||||
|
@ -33,8 +33,8 @@
|
|||||||
|
|
||||||
int hexagon_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
|
int hexagon_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
|
||||||
int hexagon_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
int hexagon_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
||||||
int hexagon_hvx_gdb_read_register(CPUHexagonState *env, GByteArray *mem_buf, int n);
|
int hexagon_hvx_gdb_read_register(CPUState *env, GByteArray *mem_buf, int n);
|
||||||
int hexagon_hvx_gdb_write_register(CPUHexagonState *env, uint8_t *mem_buf, int n);
|
int hexagon_hvx_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n);
|
||||||
|
|
||||||
void hexagon_debug_vreg(CPUHexagonState *env, int regnum);
|
void hexagon_debug_vreg(CPUHexagonState *env, int regnum);
|
||||||
void hexagon_debug_qreg(CPUHexagonState *env, int regnum);
|
void hexagon_debug_qreg(CPUHexagonState *env, int regnum);
|
||||||
|
@ -84,9 +84,11 @@ int loongarch_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int loongarch_gdb_get_fpu(CPULoongArchState *env,
|
static int loongarch_gdb_get_fpu(CPUState *cs, GByteArray *mem_buf, int n)
|
||||||
GByteArray *mem_buf, int n)
|
|
||||||
{
|
{
|
||||||
|
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
|
||||||
|
CPULoongArchState *env = &cpu->env;
|
||||||
|
|
||||||
if (0 <= n && n < 32) {
|
if (0 <= n && n < 32) {
|
||||||
return gdb_get_reg64(mem_buf, env->fpr[n].vreg.D(0));
|
return gdb_get_reg64(mem_buf, env->fpr[n].vreg.D(0));
|
||||||
} else if (32 <= n && n < 40) {
|
} else if (32 <= n && n < 40) {
|
||||||
@ -97,9 +99,10 @@ static int loongarch_gdb_get_fpu(CPULoongArchState *env,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int loongarch_gdb_set_fpu(CPULoongArchState *env,
|
static int loongarch_gdb_set_fpu(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
uint8_t *mem_buf, int n)
|
|
||||||
{
|
{
|
||||||
|
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
|
||||||
|
CPULoongArchState *env = &cpu->env;
|
||||||
int length = 0;
|
int length = 0;
|
||||||
|
|
||||||
if (0 <= n && n < 32) {
|
if (0 <= n && n < 32) {
|
||||||
|
@ -29,8 +29,11 @@
|
|||||||
|
|
||||||
#define SIGNBIT (1u << 31)
|
#define SIGNBIT (1u << 31)
|
||||||
|
|
||||||
static int cf_fpu_gdb_get_reg(CPUM68KState *env, GByteArray *mem_buf, int n)
|
static int cf_fpu_gdb_get_reg(CPUState *cs, GByteArray *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
M68kCPU *cpu = M68K_CPU(cs);
|
||||||
|
CPUM68KState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 8) {
|
if (n < 8) {
|
||||||
float_status s;
|
float_status s;
|
||||||
return gdb_get_reg64(mem_buf, floatx80_to_float64(env->fregs[n].d, &s));
|
return gdb_get_reg64(mem_buf, floatx80_to_float64(env->fregs[n].d, &s));
|
||||||
@ -46,8 +49,11 @@ static int cf_fpu_gdb_get_reg(CPUM68KState *env, GByteArray *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cf_fpu_gdb_set_reg(CPUM68KState *env, uint8_t *mem_buf, int n)
|
static int cf_fpu_gdb_set_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
M68kCPU *cpu = M68K_CPU(cs);
|
||||||
|
CPUM68KState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 8) {
|
if (n < 8) {
|
||||||
float_status s;
|
float_status s;
|
||||||
env->fregs[n].d = float64_to_floatx80(ldq_p(mem_buf), &s);
|
env->fregs[n].d = float64_to_floatx80(ldq_p(mem_buf), &s);
|
||||||
@ -66,8 +72,11 @@ static int cf_fpu_gdb_set_reg(CPUM68KState *env, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int m68k_fpu_gdb_get_reg(CPUM68KState *env, GByteArray *mem_buf, int n)
|
static int m68k_fpu_gdb_get_reg(CPUState *cs, GByteArray *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
M68kCPU *cpu = M68K_CPU(cs);
|
||||||
|
CPUM68KState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 8) {
|
if (n < 8) {
|
||||||
int len = gdb_get_reg16(mem_buf, env->fregs[n].l.upper);
|
int len = gdb_get_reg16(mem_buf, env->fregs[n].l.upper);
|
||||||
len += gdb_get_reg16(mem_buf, 0);
|
len += gdb_get_reg16(mem_buf, 0);
|
||||||
@ -85,8 +94,11 @@ static int m68k_fpu_gdb_get_reg(CPUM68KState *env, GByteArray *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int m68k_fpu_gdb_set_reg(CPUM68KState *env, uint8_t *mem_buf, int n)
|
static int m68k_fpu_gdb_set_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
M68kCPU *cpu = M68K_CPU(cs);
|
||||||
|
CPUM68KState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 8) {
|
if (n < 8) {
|
||||||
env->fregs[n].l.upper = lduw_be_p(mem_buf);
|
env->fregs[n].l.upper = lduw_be_p(mem_buf);
|
||||||
env->fregs[n].l.lower = ldq_be_p(mem_buf + 4);
|
env->fregs[n].l.lower = ldq_be_p(mem_buf + 4);
|
||||||
|
@ -381,8 +381,8 @@ G_NORETURN void mb_cpu_do_unaligned_access(CPUState *cs, vaddr vaddr,
|
|||||||
void mb_cpu_dump_state(CPUState *cpu, FILE *f, int flags);
|
void mb_cpu_dump_state(CPUState *cpu, FILE *f, int flags);
|
||||||
int mb_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
|
int mb_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
|
||||||
int mb_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
int mb_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
||||||
int mb_cpu_gdb_read_stack_protect(CPUArchState *cpu, GByteArray *buf, int reg);
|
int mb_cpu_gdb_read_stack_protect(CPUState *cs, GByteArray *buf, int reg);
|
||||||
int mb_cpu_gdb_write_stack_protect(CPUArchState *cpu, uint8_t *buf, int reg);
|
int mb_cpu_gdb_write_stack_protect(CPUState *cs, uint8_t *buf, int reg);
|
||||||
|
|
||||||
static inline uint32_t mb_cpu_read_msr(const CPUMBState *env)
|
static inline uint32_t mb_cpu_read_msr(const CPUMBState *env)
|
||||||
{
|
{
|
||||||
|
@ -94,8 +94,10 @@ int mb_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
|
|||||||
return gdb_get_reg32(mem_buf, val);
|
return gdb_get_reg32(mem_buf, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
int mb_cpu_gdb_read_stack_protect(CPUMBState *env, GByteArray *mem_buf, int n)
|
int mb_cpu_gdb_read_stack_protect(CPUState *cs, GByteArray *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs);
|
||||||
|
CPUMBState *env = &cpu->env;
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
@ -153,8 +155,11 @@ int mb_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
|||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mb_cpu_gdb_write_stack_protect(CPUMBState *env, uint8_t *mem_buf, int n)
|
int mb_cpu_gdb_write_stack_protect(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs);
|
||||||
|
CPUMBState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case GDB_SP_SHL:
|
case GDB_SP_SHL:
|
||||||
env->slr = ldl_p(mem_buf);
|
env->slr = ldl_p(mem_buf);
|
||||||
|
@ -369,8 +369,10 @@ static int gdb_find_spr_idx(CPUPPCState *env, int n)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_get_spr_reg(CPUPPCState *env, GByteArray *buf, int n)
|
static int gdb_get_spr_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
int reg;
|
int reg;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
@ -410,8 +412,10 @@ static int gdb_get_spr_reg(CPUPPCState *env, GByteArray *buf, int n)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_set_spr_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
static int gdb_set_spr_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
int reg;
|
int reg;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
@ -439,8 +443,10 @@ static int gdb_set_spr_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int gdb_get_float_reg(CPUPPCState *env, GByteArray *buf, int n)
|
static int gdb_get_float_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
uint8_t *mem_buf;
|
uint8_t *mem_buf;
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
gdb_get_reg64(buf, *cpu_fpr_ptr(env, n));
|
gdb_get_reg64(buf, *cpu_fpr_ptr(env, n));
|
||||||
@ -457,8 +463,11 @@ static int gdb_get_float_reg(CPUPPCState *env, GByteArray *buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_set_float_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
static int gdb_set_float_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
ppc_maybe_bswap_register(env, mem_buf, 8);
|
ppc_maybe_bswap_register(env, mem_buf, 8);
|
||||||
*cpu_fpr_ptr(env, n) = ldq_p(mem_buf);
|
*cpu_fpr_ptr(env, n) = ldq_p(mem_buf);
|
||||||
@ -472,8 +481,10 @@ static int gdb_set_float_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_get_avr_reg(CPUPPCState *env, GByteArray *buf, int n)
|
static int gdb_get_avr_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
uint8_t *mem_buf;
|
uint8_t *mem_buf;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
@ -498,8 +509,11 @@ static int gdb_get_avr_reg(CPUPPCState *env, GByteArray *buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_set_avr_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
static int gdb_set_avr_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
ppc_avr_t *avr = cpu_avr_ptr(env, n);
|
ppc_avr_t *avr = cpu_avr_ptr(env, n);
|
||||||
ppc_maybe_bswap_register(env, mem_buf, 16);
|
ppc_maybe_bswap_register(env, mem_buf, 16);
|
||||||
@ -520,8 +534,11 @@ static int gdb_set_avr_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_get_spe_reg(CPUPPCState *env, GByteArray *buf, int n)
|
static int gdb_get_spe_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
#if defined(TARGET_PPC64)
|
#if defined(TARGET_PPC64)
|
||||||
gdb_get_reg32(buf, env->gpr[n] >> 32);
|
gdb_get_reg32(buf, env->gpr[n] >> 32);
|
||||||
@ -544,8 +561,11 @@ static int gdb_get_spe_reg(CPUPPCState *env, GByteArray *buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_set_spe_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
static int gdb_set_spe_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
#if defined(TARGET_PPC64)
|
#if defined(TARGET_PPC64)
|
||||||
target_ulong lo = (uint32_t)env->gpr[n];
|
target_ulong lo = (uint32_t)env->gpr[n];
|
||||||
@ -573,8 +593,11 @@ static int gdb_set_spe_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_get_vsx_reg(CPUPPCState *env, GByteArray *buf, int n)
|
static int gdb_get_vsx_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
gdb_get_reg64(buf, *cpu_vsrl_ptr(env, n));
|
gdb_get_reg64(buf, *cpu_vsrl_ptr(env, n));
|
||||||
ppc_maybe_bswap_register(env, gdb_get_reg_ptr(buf, 8), 8);
|
ppc_maybe_bswap_register(env, gdb_get_reg_ptr(buf, 8), 8);
|
||||||
@ -583,8 +606,11 @@ static int gdb_get_vsx_reg(CPUPPCState *env, GByteArray *buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gdb_set_vsx_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
|
static int gdb_set_vsx_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||||
|
CPUPPCState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
ppc_maybe_bswap_register(env, mem_buf, 8);
|
ppc_maybe_bswap_register(env, mem_buf, 8);
|
||||||
*cpu_vsrl_ptr(env, n) = ldq_p(mem_buf);
|
*cpu_vsrl_ptr(env, n) = ldq_p(mem_buf);
|
||||||
|
@ -108,8 +108,11 @@ int riscv_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int riscv_gdb_get_fpu(CPURISCVState *env, GByteArray *buf, int n)
|
static int riscv_gdb_get_fpu(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||||
|
CPURISCVState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
if (env->misa_ext & RVD) {
|
if (env->misa_ext & RVD) {
|
||||||
return gdb_get_reg64(buf, env->fpr[n]);
|
return gdb_get_reg64(buf, env->fpr[n]);
|
||||||
@ -121,8 +124,11 @@ static int riscv_gdb_get_fpu(CPURISCVState *env, GByteArray *buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int riscv_gdb_set_fpu(CPURISCVState *env, uint8_t *mem_buf, int n)
|
static int riscv_gdb_set_fpu(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||||
|
CPURISCVState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
env->fpr[n] = ldq_p(mem_buf); /* always 64-bit */
|
env->fpr[n] = ldq_p(mem_buf); /* always 64-bit */
|
||||||
return sizeof(uint64_t);
|
return sizeof(uint64_t);
|
||||||
@ -130,9 +136,11 @@ static int riscv_gdb_set_fpu(CPURISCVState *env, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int riscv_gdb_get_vector(CPURISCVState *env, GByteArray *buf, int n)
|
static int riscv_gdb_get_vector(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
uint16_t vlenb = riscv_cpu_cfg(env)->vlenb;
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||||
|
CPURISCVState *env = &cpu->env;
|
||||||
|
uint16_t vlenb = cpu->cfg.vlenb;
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
int i;
|
int i;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
@ -146,9 +154,11 @@ static int riscv_gdb_get_vector(CPURISCVState *env, GByteArray *buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int riscv_gdb_set_vector(CPURISCVState *env, uint8_t *mem_buf, int n)
|
static int riscv_gdb_set_vector(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
uint16_t vlenb = riscv_cpu_cfg(env)->vlenb;
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||||
|
CPURISCVState *env = &cpu->env;
|
||||||
|
uint16_t vlenb = cpu->cfg.vlenb;
|
||||||
if (n < 32) {
|
if (n < 32) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < vlenb; i += 8) {
|
for (i = 0; i < vlenb; i += 8) {
|
||||||
@ -160,8 +170,11 @@ static int riscv_gdb_set_vector(CPURISCVState *env, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int riscv_gdb_get_csr(CPURISCVState *env, GByteArray *buf, int n)
|
static int riscv_gdb_get_csr(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||||
|
CPURISCVState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < CSR_TABLE_SIZE) {
|
if (n < CSR_TABLE_SIZE) {
|
||||||
target_ulong val = 0;
|
target_ulong val = 0;
|
||||||
int result;
|
int result;
|
||||||
@ -174,8 +187,11 @@ static int riscv_gdb_get_csr(CPURISCVState *env, GByteArray *buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int riscv_gdb_set_csr(CPURISCVState *env, uint8_t *mem_buf, int n)
|
static int riscv_gdb_set_csr(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||||
|
CPURISCVState *env = &cpu->env;
|
||||||
|
|
||||||
if (n < CSR_TABLE_SIZE) {
|
if (n < CSR_TABLE_SIZE) {
|
||||||
target_ulong val = ldtul_p(mem_buf);
|
target_ulong val = ldtul_p(mem_buf);
|
||||||
int result;
|
int result;
|
||||||
@ -188,25 +204,31 @@ static int riscv_gdb_set_csr(CPURISCVState *env, uint8_t *mem_buf, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int riscv_gdb_get_virtual(CPURISCVState *cs, GByteArray *buf, int n)
|
static int riscv_gdb_get_virtual(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
#ifdef CONFIG_USER_ONLY
|
#ifdef CONFIG_USER_ONLY
|
||||||
return gdb_get_regl(buf, 0);
|
return gdb_get_regl(buf, 0);
|
||||||
#else
|
#else
|
||||||
return gdb_get_regl(buf, cs->priv);
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||||
|
CPURISCVState *env = &cpu->env;
|
||||||
|
|
||||||
|
return gdb_get_regl(buf, env->priv);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int riscv_gdb_set_virtual(CPURISCVState *cs, uint8_t *mem_buf, int n)
|
static int riscv_gdb_set_virtual(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
cs->priv = ldtul_p(mem_buf) & 0x3;
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||||
if (cs->priv == PRV_RESERVED) {
|
CPURISCVState *env = &cpu->env;
|
||||||
cs->priv = PRV_S;
|
|
||||||
|
env->priv = ldtul_p(mem_buf) & 0x3;
|
||||||
|
if (env->priv == PRV_RESERVED) {
|
||||||
|
env->priv = PRV_S;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return sizeof(target_ulong);
|
return sizeof(target_ulong);
|
||||||
|
@ -68,8 +68,11 @@ int s390_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
|||||||
#define S390_A0_REGNUM 0
|
#define S390_A0_REGNUM 0
|
||||||
#define S390_A15_REGNUM 15
|
#define S390_A15_REGNUM 15
|
||||||
|
|
||||||
static int cpu_read_ac_reg(CPUS390XState *env, GByteArray *buf, int n)
|
static int cpu_read_ac_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_A0_REGNUM ... S390_A15_REGNUM:
|
case S390_A0_REGNUM ... S390_A15_REGNUM:
|
||||||
return gdb_get_reg32(buf, env->aregs[n]);
|
return gdb_get_reg32(buf, env->aregs[n]);
|
||||||
@ -78,8 +81,11 @@ static int cpu_read_ac_reg(CPUS390XState *env, GByteArray *buf, int n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpu_write_ac_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
static int cpu_write_ac_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_A0_REGNUM ... S390_A15_REGNUM:
|
case S390_A0_REGNUM ... S390_A15_REGNUM:
|
||||||
env->aregs[n] = ldl_p(mem_buf);
|
env->aregs[n] = ldl_p(mem_buf);
|
||||||
@ -95,8 +101,11 @@ static int cpu_write_ac_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
|||||||
#define S390_F0_REGNUM 1
|
#define S390_F0_REGNUM 1
|
||||||
#define S390_F15_REGNUM 16
|
#define S390_F15_REGNUM 16
|
||||||
|
|
||||||
static int cpu_read_fp_reg(CPUS390XState *env, GByteArray *buf, int n)
|
static int cpu_read_fp_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_FPC_REGNUM:
|
case S390_FPC_REGNUM:
|
||||||
return gdb_get_reg32(buf, env->fpc);
|
return gdb_get_reg32(buf, env->fpc);
|
||||||
@ -107,8 +116,11 @@ static int cpu_read_fp_reg(CPUS390XState *env, GByteArray *buf, int n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpu_write_fp_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
static int cpu_write_fp_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_FPC_REGNUM:
|
case S390_FPC_REGNUM:
|
||||||
env->fpc = ldl_p(mem_buf);
|
env->fpc = ldl_p(mem_buf);
|
||||||
@ -127,8 +139,10 @@ static int cpu_write_fp_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
|||||||
#define S390_V16_REGNUM 16
|
#define S390_V16_REGNUM 16
|
||||||
#define S390_V31_REGNUM 31
|
#define S390_V31_REGNUM 31
|
||||||
|
|
||||||
static int cpu_read_vreg(CPUS390XState *env, GByteArray *buf, int n)
|
static int cpu_read_vreg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
@ -146,8 +160,11 @@ static int cpu_read_vreg(CPUS390XState *env, GByteArray *buf, int n)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpu_write_vreg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
static int cpu_write_vreg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_V0L_REGNUM ... S390_V15L_REGNUM:
|
case S390_V0L_REGNUM ... S390_V15L_REGNUM:
|
||||||
env->vregs[n][1] = ldtul_p(mem_buf + 8);
|
env->vregs[n][1] = ldtul_p(mem_buf + 8);
|
||||||
@ -166,8 +183,11 @@ static int cpu_write_vreg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
|||||||
#define S390_C15_REGNUM 15
|
#define S390_C15_REGNUM 15
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
static int cpu_read_c_reg(CPUS390XState *env, GByteArray *buf, int n)
|
static int cpu_read_c_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_C0_REGNUM ... S390_C15_REGNUM:
|
case S390_C0_REGNUM ... S390_C15_REGNUM:
|
||||||
return gdb_get_regl(buf, env->cregs[n]);
|
return gdb_get_regl(buf, env->cregs[n]);
|
||||||
@ -176,8 +196,11 @@ static int cpu_read_c_reg(CPUS390XState *env, GByteArray *buf, int n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpu_write_c_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
static int cpu_write_c_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_C0_REGNUM ... S390_C15_REGNUM:
|
case S390_C0_REGNUM ... S390_C15_REGNUM:
|
||||||
env->cregs[n] = ldtul_p(mem_buf);
|
env->cregs[n] = ldtul_p(mem_buf);
|
||||||
@ -197,8 +220,11 @@ static int cpu_write_c_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
|||||||
#define S390_VIRT_BEA_REGNUM 2
|
#define S390_VIRT_BEA_REGNUM 2
|
||||||
#define S390_VIRT_PREFIX_REGNUM 3
|
#define S390_VIRT_PREFIX_REGNUM 3
|
||||||
|
|
||||||
static int cpu_read_virt_reg(CPUS390XState *env, GByteArray *mem_buf, int n)
|
static int cpu_read_virt_reg(CPUState *cs, GByteArray *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_VIRT_CKC_REGNUM:
|
case S390_VIRT_CKC_REGNUM:
|
||||||
return gdb_get_regl(mem_buf, env->ckc);
|
return gdb_get_regl(mem_buf, env->ckc);
|
||||||
@ -213,24 +239,27 @@ static int cpu_read_virt_reg(CPUS390XState *env, GByteArray *mem_buf, int n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpu_write_virt_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
static int cpu_write_virt_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_VIRT_CKC_REGNUM:
|
case S390_VIRT_CKC_REGNUM:
|
||||||
env->ckc = ldtul_p(mem_buf);
|
env->ckc = ldtul_p(mem_buf);
|
||||||
cpu_synchronize_post_init(env_cpu(env));
|
cpu_synchronize_post_init(cs);
|
||||||
return 8;
|
return 8;
|
||||||
case S390_VIRT_CPUTM_REGNUM:
|
case S390_VIRT_CPUTM_REGNUM:
|
||||||
env->cputm = ldtul_p(mem_buf);
|
env->cputm = ldtul_p(mem_buf);
|
||||||
cpu_synchronize_post_init(env_cpu(env));
|
cpu_synchronize_post_init(cs);
|
||||||
return 8;
|
return 8;
|
||||||
case S390_VIRT_BEA_REGNUM:
|
case S390_VIRT_BEA_REGNUM:
|
||||||
env->gbea = ldtul_p(mem_buf);
|
env->gbea = ldtul_p(mem_buf);
|
||||||
cpu_synchronize_post_init(env_cpu(env));
|
cpu_synchronize_post_init(cs);
|
||||||
return 8;
|
return 8;
|
||||||
case S390_VIRT_PREFIX_REGNUM:
|
case S390_VIRT_PREFIX_REGNUM:
|
||||||
env->psa = ldtul_p(mem_buf);
|
env->psa = ldtul_p(mem_buf);
|
||||||
cpu_synchronize_post_init(env_cpu(env));
|
cpu_synchronize_post_init(cs);
|
||||||
return 8;
|
return 8;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
@ -243,8 +272,11 @@ static int cpu_write_virt_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
|||||||
#define S390_VIRT_KVM_PFS_REGNUM 2
|
#define S390_VIRT_KVM_PFS_REGNUM 2
|
||||||
#define S390_VIRT_KVM_PFC_REGNUM 3
|
#define S390_VIRT_KVM_PFC_REGNUM 3
|
||||||
|
|
||||||
static int cpu_read_virt_kvm_reg(CPUS390XState *env, GByteArray *mem_buf, int n)
|
static int cpu_read_virt_kvm_reg(CPUState *cs, GByteArray *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_VIRT_KVM_PP_REGNUM:
|
case S390_VIRT_KVM_PP_REGNUM:
|
||||||
return gdb_get_regl(mem_buf, env->pp);
|
return gdb_get_regl(mem_buf, env->pp);
|
||||||
@ -259,8 +291,11 @@ static int cpu_read_virt_kvm_reg(CPUS390XState *env, GByteArray *mem_buf, int n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpu_write_virt_kvm_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
static int cpu_write_virt_kvm_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case S390_VIRT_KVM_PP_REGNUM:
|
case S390_VIRT_KVM_PP_REGNUM:
|
||||||
env->pp = ldtul_p(mem_buf);
|
env->pp = ldtul_p(mem_buf);
|
||||||
@ -290,13 +325,19 @@ static int cpu_write_virt_kvm_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
|||||||
#define S390_GS_GSSM_REGNUM 2
|
#define S390_GS_GSSM_REGNUM 2
|
||||||
#define S390_GS_GSEPLA_REGNUM 3
|
#define S390_GS_GSEPLA_REGNUM 3
|
||||||
|
|
||||||
static int cpu_read_gs_reg(CPUS390XState *env, GByteArray *buf, int n)
|
static int cpu_read_gs_reg(CPUState *cs, GByteArray *buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
return gdb_get_regl(buf, env->gscb[n]);
|
return gdb_get_regl(buf, env->gscb[n]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpu_write_gs_reg(CPUS390XState *env, uint8_t *mem_buf, int n)
|
static int cpu_write_gs_reg(CPUState *cs, uint8_t *mem_buf, int n)
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = S390_CPU(cs);
|
||||||
|
CPUS390XState *env = &cpu->env;
|
||||||
|
|
||||||
env->gscb[n] = ldtul_p(mem_buf);
|
env->gscb[n] = ldtul_p(mem_buf);
|
||||||
cpu_synchronize_post_init(env_cpu(env));
|
cpu_synchronize_post_init(env_cpu(env));
|
||||||
return 8;
|
return 8;
|
||||||
|
Loading…
Reference in New Issue
Block a user