Revision 96d19126 gdbstub.c
b/gdbstub.c | ||
---|---|---|
469 | 469 |
ppc_store_xer(env, tswapl(registers[101])); |
470 | 470 |
} |
471 | 471 |
#elif defined (TARGET_SPARC) |
472 |
#ifdef TARGET_ABI32 |
|
473 |
#define tswap_abi(val) tswap32(val &0xffffffff) |
|
474 |
#else |
|
475 |
#define tswap_abi(val) tswapl(val) |
|
476 |
#endif |
|
472 | 477 |
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) |
473 | 478 |
{ |
479 |
#ifdef TARGET_ABI32 |
|
480 |
abi_ulong *registers = (abi_ulong *)mem_buf; |
|
481 |
#else |
|
474 | 482 |
target_ulong *registers = (target_ulong *)mem_buf; |
483 |
#endif |
|
475 | 484 |
int i; |
476 | 485 |
|
477 | 486 |
/* fill in g0..g7 */ |
478 | 487 |
for(i = 0; i < 8; i++) { |
479 |
registers[i] = tswapl(env->gregs[i]);
|
|
488 |
registers[i] = tswap_abi(env->gregs[i]);
|
|
480 | 489 |
} |
481 | 490 |
/* fill in register window */ |
482 | 491 |
for(i = 0; i < 24; i++) { |
483 |
registers[i + 8] = tswapl(env->regwptr[i]);
|
|
492 |
registers[i + 8] = tswap_abi(env->regwptr[i]);
|
|
484 | 493 |
} |
485 |
#ifndef TARGET_SPARC64
|
|
494 |
#if !defined(TARGET_SPARC64) || defined(TARGET_ABI32)
|
|
486 | 495 |
/* fill in fprs */ |
487 | 496 |
for (i = 0; i < 32; i++) { |
488 |
registers[i + 32] = tswapl(*((uint32_t *)&env->fpr[i]));
|
|
497 |
registers[i + 32] = tswap_abi(*((uint32_t *)&env->fpr[i]));
|
|
489 | 498 |
} |
490 | 499 |
/* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ |
491 |
registers[64] = tswapl(env->y);
|
|
500 |
registers[64] = tswap_abi(env->y);
|
|
492 | 501 |
{ |
493 |
target_ulong tmp;
|
|
502 |
uint32_t tmp;
|
|
494 | 503 |
|
495 |
tmp = GET_PSR(env);
|
|
496 |
registers[65] = tswapl(tmp);
|
|
504 |
tmp = GET_PSR(env);
|
|
505 |
registers[65] = tswap32(tmp);
|
|
497 | 506 |
} |
498 |
registers[66] = tswapl(env->wim);
|
|
499 |
registers[67] = tswapl(env->tbr);
|
|
500 |
registers[68] = tswapl(env->pc);
|
|
501 |
registers[69] = tswapl(env->npc);
|
|
502 |
registers[70] = tswapl(env->fsr);
|
|
507 |
registers[66] = tswap_abi(env->wim);
|
|
508 |
registers[67] = tswap_abi(env->tbr);
|
|
509 |
registers[68] = tswap_abi(env->pc);
|
|
510 |
registers[69] = tswap_abi(env->npc);
|
|
511 |
registers[70] = tswap_abi(env->fsr);
|
|
503 | 512 |
registers[71] = 0; /* csr */ |
504 | 513 |
registers[72] = 0; |
505 |
return 73 * sizeof(target_ulong);
|
|
514 |
return 73 * sizeof(uint32_t);
|
|
506 | 515 |
#else |
507 | 516 |
/* fill in fprs */ |
508 | 517 |
for (i = 0; i < 64; i += 2) { |
... | ... | |
527 | 536 |
|
528 | 537 |
static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size) |
529 | 538 |
{ |
539 |
#ifdef TARGET_ABI32 |
|
540 |
abi_ulong *registers = (abi_ulong *)mem_buf; |
|
541 |
#else |
|
530 | 542 |
target_ulong *registers = (target_ulong *)mem_buf; |
543 |
#endif |
|
531 | 544 |
int i; |
532 | 545 |
|
533 | 546 |
/* fill in g0..g7 */ |
534 | 547 |
for(i = 0; i < 7; i++) { |
535 |
env->gregs[i] = tswapl(registers[i]);
|
|
548 |
env->gregs[i] = tswap_abi(registers[i]);
|
|
536 | 549 |
} |
537 | 550 |
/* fill in register window */ |
538 | 551 |
for(i = 0; i < 24; i++) { |
539 |
env->regwptr[i] = tswapl(registers[i + 8]);
|
|
552 |
env->regwptr[i] = tswap_abi(registers[i + 8]);
|
|
540 | 553 |
} |
541 |
#ifndef TARGET_SPARC64
|
|
554 |
#if !defined(TARGET_SPARC64) || defined(TARGET_ABI32)
|
|
542 | 555 |
/* fill in fprs */ |
543 | 556 |
for (i = 0; i < 32; i++) { |
544 |
*((uint32_t *)&env->fpr[i]) = tswapl(registers[i + 32]);
|
|
557 |
*((uint32_t *)&env->fpr[i]) = tswap_abi(registers[i + 32]);
|
|
545 | 558 |
} |
546 | 559 |
/* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ |
547 |
env->y = tswapl(registers[64]);
|
|
548 |
PUT_PSR(env, tswapl(registers[65]));
|
|
549 |
env->wim = tswapl(registers[66]);
|
|
550 |
env->tbr = tswapl(registers[67]);
|
|
551 |
env->pc = tswapl(registers[68]);
|
|
552 |
env->npc = tswapl(registers[69]);
|
|
553 |
env->fsr = tswapl(registers[70]);
|
|
560 |
env->y = tswap_abi(registers[64]);
|
|
561 |
PUT_PSR(env, tswap_abi(registers[65]));
|
|
562 |
env->wim = tswap_abi(registers[66]);
|
|
563 |
env->tbr = tswap_abi(registers[67]);
|
|
564 |
env->pc = tswap_abi(registers[68]);
|
|
565 |
env->npc = tswap_abi(registers[69]);
|
|
566 |
env->fsr = tswap_abi(registers[70]);
|
|
554 | 567 |
#else |
555 | 568 |
for (i = 0; i < 64; i += 2) { |
556 | 569 |
uint64_t tmp; |
... | ... | |
574 | 587 |
env->y = tswapl(registers[69]); |
575 | 588 |
#endif |
576 | 589 |
} |
590 |
#undef tswap_abi |
|
577 | 591 |
#elif defined (TARGET_ARM) |
578 | 592 |
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) |
579 | 593 |
{ |
Also available in: Unified diff