421 |
ptr += 8 * 12 + 4; |
ptr += 8 * 12 + 4; |
422 |
cpsr_write (env, tswapl(*(uint32_t *)ptr), 0xffffffff); |
cpsr_write (env, tswapl(*(uint32_t *)ptr), 0xffffffff); |
423 |
} |
} |
424 |
|
#elif defined (TARGET_MIPS) |
425 |
|
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) |
426 |
|
{ |
427 |
|
int i; |
428 |
|
uint8_t *ptr; |
429 |
|
|
430 |
|
ptr = mem_buf; |
431 |
|
for (i = 0; i < 32; i++) |
432 |
|
{ |
433 |
|
*(uint32_t *)ptr = tswapl(env->gpr[i]); |
434 |
|
ptr += 4; |
435 |
|
} |
436 |
|
|
437 |
|
*(uint32_t *)ptr = tswapl(env->CP0_Status); |
438 |
|
ptr += 4; |
439 |
|
|
440 |
|
*(uint32_t *)ptr = tswapl(env->LO); |
441 |
|
ptr += 4; |
442 |
|
|
443 |
|
*(uint32_t *)ptr = tswapl(env->HI); |
444 |
|
ptr += 4; |
445 |
|
|
446 |
|
*(uint32_t *)ptr = tswapl(env->CP0_BadVAddr); |
447 |
|
ptr += 4; |
448 |
|
|
449 |
|
*(uint32_t *)ptr = tswapl(env->CP0_Cause); |
450 |
|
ptr += 4; |
451 |
|
|
452 |
|
*(uint32_t *)ptr = tswapl(env->PC); |
453 |
|
ptr += 4; |
454 |
|
|
455 |
|
/* 32 FP registers, fsr, fir, fp. Not yet implemented. */ |
456 |
|
|
457 |
|
return ptr - mem_buf; |
458 |
|
} |
459 |
|
|
460 |
|
static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size) |
461 |
|
{ |
462 |
|
int i; |
463 |
|
uint8_t *ptr; |
464 |
|
|
465 |
|
ptr = mem_buf; |
466 |
|
for (i = 0; i < 32; i++) |
467 |
|
{ |
468 |
|
env->gpr[i] = tswapl(*(uint32_t *)ptr); |
469 |
|
ptr += 4; |
470 |
|
} |
471 |
|
|
472 |
|
env->CP0_Status = tswapl(*(uint32_t *)ptr); |
473 |
|
ptr += 4; |
474 |
|
|
475 |
|
env->LO = tswapl(*(uint32_t *)ptr); |
476 |
|
ptr += 4; |
477 |
|
|
478 |
|
env->HI = tswapl(*(uint32_t *)ptr); |
479 |
|
ptr += 4; |
480 |
|
|
481 |
|
env->CP0_BadVAddr = tswapl(*(uint32_t *)ptr); |
482 |
|
ptr += 4; |
483 |
|
|
484 |
|
env->CP0_Cause = tswapl(*(uint32_t *)ptr); |
485 |
|
ptr += 4; |
486 |
|
|
487 |
|
env->PC = tswapl(*(uint32_t *)ptr); |
488 |
|
ptr += 4; |
489 |
|
} |
490 |
#else |
#else |
491 |
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) |
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) |
492 |
{ |
{ |
577 |
if (*p == ',') |
if (*p == ',') |
578 |
p++; |
p++; |
579 |
len = strtoul(p, NULL, 16); |
len = strtoul(p, NULL, 16); |
580 |
if (cpu_memory_rw_debug(env, addr, mem_buf, len, 0) != 0) |
if (cpu_memory_rw_debug(env, addr, mem_buf, len, 0) != 0) { |
581 |
memset(mem_buf, 0, len); |
put_packet (s, "E14"); |
582 |
memtohex(buf, mem_buf, len); |
} else { |
583 |
put_packet(s, buf); |
memtohex(buf, mem_buf, len); |
584 |
|
put_packet(s, buf); |
585 |
|
} |
586 |
break; |
break; |
587 |
case 'M': |
case 'M': |
588 |
addr = strtoul(p, (char **)&p, 16); |
addr = strtoul(p, (char **)&p, 16); |