Revision f1ccf904 gdbstub.c
b/gdbstub.c | ||
---|---|---|
728 | 728 |
for (i = 0; i < 8; i++) LOAD(env->gregs[i]); |
729 | 729 |
for (i = 0; i < 8; i++) LOAD(env->gregs[i + 16]); |
730 | 730 |
} |
731 |
#elif defined (TARGET_CRIS) |
|
732 |
|
|
733 |
static int cris_save_32 (unsigned char *d, uint32_t value) |
|
734 |
{ |
|
735 |
*d++ = (value); |
|
736 |
*d++ = (value >>= 8); |
|
737 |
*d++ = (value >>= 8); |
|
738 |
*d++ = (value >>= 8); |
|
739 |
return 4; |
|
740 |
} |
|
741 |
static int cris_save_16 (unsigned char *d, uint32_t value) |
|
742 |
{ |
|
743 |
*d++ = (value); |
|
744 |
*d++ = (value >>= 8); |
|
745 |
return 2; |
|
746 |
} |
|
747 |
static int cris_save_8 (unsigned char *d, uint32_t value) |
|
748 |
{ |
|
749 |
*d++ = (value); |
|
750 |
return 1; |
|
751 |
} |
|
752 |
|
|
753 |
/* FIXME: this will bug on archs not supporting unaligned word accesses. */ |
|
754 |
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) |
|
755 |
{ |
|
756 |
uint8_t *ptr = mem_buf; |
|
757 |
uint8_t srs; |
|
758 |
int i; |
|
759 |
|
|
760 |
for (i = 0; i < 16; i++) |
|
761 |
ptr += cris_save_32 (ptr, env->regs[i]); |
|
762 |
|
|
763 |
srs = env->pregs[SR_SRS]; |
|
764 |
|
|
765 |
ptr += cris_save_8 (ptr, env->pregs[0]); |
|
766 |
ptr += cris_save_8 (ptr, env->pregs[1]); |
|
767 |
ptr += cris_save_32 (ptr, env->pregs[2]); |
|
768 |
ptr += cris_save_8 (ptr, srs); |
|
769 |
ptr += cris_save_16 (ptr, env->pregs[4]); |
|
770 |
|
|
771 |
for (i = 5; i < 16; i++) |
|
772 |
ptr += cris_save_32 (ptr, env->pregs[i]); |
|
773 |
|
|
774 |
ptr += cris_save_32 (ptr, env->pc); |
|
775 |
|
|
776 |
for (i = 0; i < 16; i++) |
|
777 |
ptr += cris_save_32 (ptr, env->sregs[srs][i]); |
|
778 |
|
|
779 |
return ((uint8_t *)ptr - mem_buf); |
|
780 |
} |
|
781 |
|
|
782 |
static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size) |
|
783 |
{ |
|
784 |
uint32_t *ptr = (uint32_t *)mem_buf; |
|
785 |
int i; |
|
786 |
|
|
787 |
#define LOAD(x) (x)=*ptr++; |
|
788 |
for (i = 0; i < 16; i++) LOAD(env->regs[i]); |
|
789 |
LOAD (env->pc); |
|
790 |
} |
|
731 | 791 |
#else |
732 | 792 |
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) |
733 | 793 |
{ |
... | ... | |
745 | 805 |
const char *p; |
746 | 806 |
int ch, reg_size, type; |
747 | 807 |
char buf[4096]; |
748 |
uint8_t mem_buf[2000];
|
|
808 |
uint8_t mem_buf[4096];
|
|
749 | 809 |
uint32_t *registers; |
750 | 810 |
target_ulong addr, len; |
751 | 811 |
|
... | ... | |
776 | 836 |
env->pc = addr; |
777 | 837 |
#elif defined (TARGET_MIPS) |
778 | 838 |
env->PC[env->current_tc] = addr; |
839 |
#elif defined (TARGET_CRIS) |
|
840 |
env->pc = addr; |
|
779 | 841 |
#endif |
780 | 842 |
} |
781 | 843 |
#ifdef CONFIG_USER_ONLY |
... | ... | |
800 | 862 |
env->pc = addr; |
801 | 863 |
#elif defined (TARGET_MIPS) |
802 | 864 |
env->PC[env->current_tc] = addr; |
865 |
#elif defined (TARGET_CRIS) |
|
866 |
env->pc = addr; |
|
803 | 867 |
#endif |
804 | 868 |
} |
805 | 869 |
cpu_single_step(env, 1); |
Also available in: Unified diff