target: e2k: gdb register ids.
This commit is contained in:
parent
7db0d690b2
commit
8e1c3d2401
|
@ -47,9 +47,20 @@ static void e2k_cpu_reset(DeviceState *dev)
|
|||
|
||||
static bool e2k_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
|
||||
{
|
||||
qemu_log_mask(LOG_UNIMP, "e2k_cpu_exec_interrupt: not implemented\n");
|
||||
if (interrupt_request & CPU_INTERRUPT_HARD) {
|
||||
e2k_cpu_do_interrupt(cs);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void e2k_cpu_do_interrupt(CPUState *cs)
|
||||
{
|
||||
qemu_log_mask(LOG_UNIMP, "e2k_cpu_do_interrupt: not implemented\n");
|
||||
cs->exception_index = -1;
|
||||
}
|
||||
|
||||
static void cpu_e2k_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
{
|
||||
info->print_insn = print_insn_e2k;
|
||||
|
@ -150,6 +161,7 @@ static void e2k_cpu_synchronize_from_tb(CPUState *cs, TranslationBlock *tb)
|
|||
static bool e2k_cpu_has_work(CPUState *cs)
|
||||
{
|
||||
// TODO
|
||||
qemu_log_mask(LOG_UNIMP, "e2k_cpu_has_work: not implemented\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -219,6 +231,7 @@ static void e2k_cpu_class_init(ObjectClass *oc, void *data)
|
|||
cc->has_work = e2k_cpu_has_work;
|
||||
cc->dump_state = e2k_cpu_dump_state;
|
||||
cc->set_pc = e2k_cpu_set_pc;
|
||||
cc->do_interrupt = e2k_cpu_do_interrupt;
|
||||
cc->cpu_exec_interrupt = e2k_cpu_exec_interrupt;
|
||||
cc->synchronize_from_tb = e2k_cpu_synchronize_from_tb;
|
||||
cc->class_by_name = e2k_cpu_class_by_name;
|
||||
|
@ -227,7 +240,7 @@ static void e2k_cpu_class_init(ObjectClass *oc, void *data)
|
|||
|
||||
cc->gdb_read_register = e2k_cpu_gdb_read_register;
|
||||
cc->gdb_write_register = e2k_cpu_gdb_write_register;
|
||||
cc->gdb_num_core_regs = 300; /* TODO: bogus value, depends on e2k-linux-gdb */
|
||||
cc->gdb_num_core_regs = 574;
|
||||
}
|
||||
|
||||
static const TypeInfo e2k_cpu_type_info = {
|
||||
|
|
|
@ -265,6 +265,7 @@ static inline void cpu_get_tb_cpu_state(CPUE2KState *env, target_ulong *pc,
|
|||
*pflags = MMU_USER_IDX;
|
||||
}
|
||||
|
||||
void e2k_cpu_do_interrupt(CPUState *cs);
|
||||
int e2k_cpu_signal_handler(int host_signum, void *pinfo, void *puc);
|
||||
int e2k_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n);
|
||||
int e2k_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n);
|
||||
|
|
|
@ -30,7 +30,221 @@ int e2k_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
|
|||
CPUClass *cc = CPU_GET_CLASS(cs);
|
||||
CPUE2KState *env = &cpu->env;
|
||||
|
||||
if (3 <= n && n < 35) {
|
||||
return gdb_get_reg64(mem_buf, env->gregs[n - 3]);
|
||||
}
|
||||
|
||||
switch (n) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
return gdb_get_reg64(mem_buf, 0); // unk
|
||||
case 35: return gdb_get_reg64(mem_buf, 0); // psr
|
||||
case 36: return gdb_get_reg64(mem_buf, 0); // upsr
|
||||
case 37: return gdb_get_reg64(mem_buf, 0); // oscud_lo
|
||||
case 38: return gdb_get_reg64(mem_buf, 0); // oscud_hi
|
||||
case 39: return gdb_get_reg64(mem_buf, 0); // osgd_lo
|
||||
case 40: return gdb_get_reg64(mem_buf, 0); // osgd_hi
|
||||
case 41: return gdb_get_reg64(mem_buf, 0); // osem
|
||||
case 42: return gdb_get_reg64(mem_buf, 0); // osr0
|
||||
case 43: return gdb_get_reg64(mem_buf, 0); // pfpfr
|
||||
case 44: return gdb_get_reg64(mem_buf, 0); // fpcr
|
||||
case 45: return gdb_get_reg64(mem_buf, 0); // fpsr
|
||||
case 46: return gdb_get_reg64(mem_buf, 0); // usbr
|
||||
case 47: return gdb_get_reg64(mem_buf, env->usd_lo); // usd_lo
|
||||
case 48: return gdb_get_reg64(mem_buf, env->usd_hi); // usd_hi
|
||||
case 49: return gdb_get_reg64(mem_buf, env->psp_lo); // psp_lo
|
||||
case 50: return gdb_get_reg64(mem_buf, env->psp_hi); // psp_hi
|
||||
case 51: return gdb_get_reg64(mem_buf, env->pshtp); // pshtp
|
||||
case 52: return gdb_get_reg64(mem_buf, 0); // unk
|
||||
case 53: return gdb_get_reg64(mem_buf, env->ip); // ip
|
||||
case 54: return gdb_get_reg64(mem_buf, 0); // unk (mem)
|
||||
case 55: return gdb_get_reg64(mem_buf, 0); // unk
|
||||
case 56: return gdb_get_reg64(mem_buf, 0); // cwd
|
||||
case 57: return gdb_get_reg64(mem_buf, env->pcsp_lo); // pcsp_lo
|
||||
case 58: return gdb_get_reg64(mem_buf, env->pcsp_hi); // pcsp_hi
|
||||
case 59: return gdb_get_reg64(mem_buf, 0); // pcshtp
|
||||
case 60: return gdb_get_reg64(mem_buf, 0); // cud_lo
|
||||
case 61: return gdb_get_reg64(mem_buf, 0); // cud_hi
|
||||
case 62: return gdb_get_reg64(mem_buf, 0); // gd_lo
|
||||
case 63: return gdb_get_reg64(mem_buf, 0); // gd_hi
|
||||
case 64: return gdb_get_reg64(mem_buf, 0); // cs_lo
|
||||
case 65: return gdb_get_reg64(mem_buf, 0); // cs_hi
|
||||
case 66: return gdb_get_reg64(mem_buf, 0); // ds_lo
|
||||
case 67: return gdb_get_reg64(mem_buf, 0); // ds_hi
|
||||
case 68: return gdb_get_reg64(mem_buf, 0); // es_lo
|
||||
case 69: return gdb_get_reg64(mem_buf, 0); // es_hi
|
||||
case 70: return gdb_get_reg64(mem_buf, 0); // fs_lo
|
||||
case 71: return gdb_get_reg64(mem_buf, 0); // fs_hi
|
||||
case 72: return gdb_get_reg64(mem_buf, 0); // gs_lo
|
||||
case 73: return gdb_get_reg64(mem_buf, 0); // gs_hi
|
||||
case 74: return gdb_get_reg64(mem_buf, 0); // ss_lo
|
||||
case 75: return gdb_get_reg64(mem_buf, 0); // ss_hi
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (76 <= n && n < 140) {
|
||||
if (n & 1) {
|
||||
return gdb_get_reg64(mem_buf, 0); // addN_hi
|
||||
} else {
|
||||
return gdb_get_reg64(mem_buf, 0); // addN_lo
|
||||
}
|
||||
}
|
||||
|
||||
if (140 <= n && n < 156) {
|
||||
return gdb_get_reg64(mem_buf, 0); // aaindN
|
||||
}
|
||||
|
||||
if (156 <= n && n < 164) {
|
||||
return gdb_get_reg64(mem_buf, 0); // aaincrN
|
||||
}
|
||||
|
||||
if (164 <= n && n < 228) {
|
||||
return gdb_get_reg64(mem_buf, 0); // aaldiN
|
||||
}
|
||||
|
||||
if (n == 228) {
|
||||
return gdb_get_reg64(mem_buf, 0); // aaldv
|
||||
}
|
||||
|
||||
if (229 <= n && n < 293) {
|
||||
return gdb_get_reg64(mem_buf, 0); // aaldaN
|
||||
}
|
||||
|
||||
switch (n) {
|
||||
case 293: return gdb_get_reg64(mem_buf, 0); // aaldm
|
||||
case 294: return gdb_get_reg64(mem_buf, 0); // aasr
|
||||
case 295: return gdb_get_reg64(mem_buf, 0); // aafstr
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (296 <= n && n < 312) {
|
||||
return gdb_get_reg64(mem_buf, 0); // aastiN
|
||||
}
|
||||
|
||||
switch (n) {
|
||||
case 312: return gdb_get_reg64(mem_buf, 0); // clkr
|
||||
case 313: return gdb_get_reg64(mem_buf, 0); // dibcr
|
||||
case 314: return gdb_get_reg64(mem_buf, 0); // ddbcr
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (315 <= n && n < 319) {
|
||||
return gdb_get_reg64(mem_buf, 0); // dibarN
|
||||
}
|
||||
|
||||
if (319 <= n && n < 323) {
|
||||
return gdb_get_reg64(mem_buf, 0); // ddbarN
|
||||
}
|
||||
|
||||
switch (n) {
|
||||
case 323: return gdb_get_reg64(mem_buf, 0); // dimcr
|
||||
case 324: return gdb_get_reg64(mem_buf, 0); // ddmcr
|
||||
case 325: return gdb_get_reg64(mem_buf, 0); // dimar0
|
||||
case 326: return gdb_get_reg64(mem_buf, 0); // dimar1
|
||||
case 327: return gdb_get_reg64(mem_buf, 0); // ddmar0
|
||||
case 328: return gdb_get_reg64(mem_buf, 0); // ddmar1
|
||||
case 329: return gdb_get_reg64(mem_buf, 0); // dibsr
|
||||
case 330: return gdb_get_reg64(mem_buf, 0); // ddbsr
|
||||
case 331: return gdb_get_reg64(mem_buf, 0); // dtcr
|
||||
case 332: return gdb_get_reg64(mem_buf, 0); // dtarf
|
||||
case 333: return gdb_get_reg64(mem_buf, 0); // dtart
|
||||
case 334: return gdb_get_reg64(mem_buf, 0); // unk
|
||||
case 335: return gdb_get_reg64(mem_buf, 0); // unk
|
||||
case 336: return gdb_get_reg64(mem_buf, 0); // bgr
|
||||
case 337: return gdb_get_reg64(mem_buf, 0); // unk
|
||||
case 338: return gdb_get_reg64(mem_buf, 0); // nip
|
||||
case 339: return gdb_get_reg64(mem_buf, 0); // ctpr1
|
||||
case 340: return gdb_get_reg64(mem_buf, 0); // ctpr2
|
||||
case 341: return gdb_get_reg64(mem_buf, 0); // ctpr3
|
||||
case 342: return gdb_get_reg64(mem_buf, 0); // eir
|
||||
case 343: return gdb_get_reg64(mem_buf, 0); // tr
|
||||
case 344: return gdb_get_reg64(mem_buf, 0); // cutd
|
||||
case 345: return gdb_get_reg64(mem_buf, 0); // cuir
|
||||
case 346: return gdb_get_reg64(mem_buf, 0); // tsd
|
||||
case 347: return gdb_get_reg64(mem_buf, 0); // lsr
|
||||
case 348: return gdb_get_reg64(mem_buf, 0); // ilcr
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (349 <= n && n < 360) {
|
||||
return gdb_get_reg64(mem_buf, 0); // unk
|
||||
}
|
||||
|
||||
if (360 <= n && n < 364) {
|
||||
return gdb_get_reg64(mem_buf, 0); // xgN
|
||||
}
|
||||
|
||||
if (363 <= n && n < 369) {
|
||||
return gdb_get_reg64(mem_buf, 0); // unk
|
||||
}
|
||||
|
||||
if (n == 368) {
|
||||
return gdb_get_reg64(mem_buf, 0); // rpr_hi
|
||||
}
|
||||
|
||||
if (n == 369) {
|
||||
return gdb_get_reg64(mem_buf, 0); // rpr_lo
|
||||
}
|
||||
|
||||
if (370 <= n && n < 389) {
|
||||
return gdb_get_reg64(mem_buf, 0); // tir_N_lo
|
||||
}
|
||||
|
||||
if (389 <= n && n < 408) {
|
||||
return gdb_get_reg64(mem_buf, 0); // tir_N_hi
|
||||
}
|
||||
|
||||
if (408 <= n && n < 418) {
|
||||
return gdb_get_reg64(mem_buf, 0); // trap_cell_addr_N
|
||||
}
|
||||
|
||||
if (418 <= n && n < 428) {
|
||||
return gdb_get_reg64(mem_buf, 0); // trap_cell_val_N
|
||||
}
|
||||
|
||||
if (n == 428 || n == 429) {
|
||||
return gdb_get_reg64(mem_buf, 0); // unk
|
||||
}
|
||||
|
||||
if (430 <= n && n < 440) {
|
||||
return gdb_get_reg64(mem_buf, 0); // trap_cell_info_N
|
||||
}
|
||||
|
||||
if (440 <= n && n < 472) {
|
||||
return gdb_get_reg64(mem_buf, 0); // dam_N
|
||||
}
|
||||
|
||||
if (472 <= n && n < 504) {
|
||||
return gdb_get_reg64(mem_buf, 0); // sbbp_N
|
||||
}
|
||||
|
||||
if (504 <= n && n < 552) {
|
||||
return gdb_get_reg64(mem_buf, 0); // TLB?
|
||||
}
|
||||
|
||||
if (n == 552) {
|
||||
return gdb_get_reg64(mem_buf, 0); // pcsp_base
|
||||
}
|
||||
|
||||
if (n == 553) {
|
||||
return gdb_get_reg64(mem_buf, 0); // psp_base
|
||||
}
|
||||
|
||||
if (554 <= n && n < 573) {
|
||||
return gdb_get_reg64(mem_buf, 0); // unk
|
||||
}
|
||||
|
||||
if (n == 573) {
|
||||
return gdb_get_reg32(mem_buf, 0); // unk
|
||||
}
|
||||
|
||||
fprintf(stderr, "%s: unknown register %d\n", __FUNCTION__, n);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue