From: Stuart B. <zu...@us...> - 2008-02-19 12:14:44
|
Update of /cvsroot/hppaqemu/hppaqemu In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv27814 Modified Files: gdbstub.c Log Message: Add support for GDB. (PSW, General registers and IAOQ/IASQ only.) Index: gdbstub.c =================================================================== RCS file: /cvsroot/hppaqemu/hppaqemu/gdbstub.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gdbstub.c 18 Feb 2008 05:24:38 -0000 1.4 +++ gdbstub.c 19 Feb 2008 12:14:30 -0000 1.5 @@ -856,6 +856,57 @@ for (i = 0; i < 16; i++) LOAD(env->regs[i]); LOAD (env->pc); } +#elif defined (TARGET_HPPA) +static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) +{ + target_ulong *registers = (target_ulong *)mem_buf; + int i; + + registers[0] = tswapl(env->psw); + /* gr0 is hardwired to zero */ + /* fill in gr1..gr32 */ + for(i = 0; i < 31; i++) { + registers[i + 1] = tswapl(env->gr[i]); + } + /* registers[32] = sar; */ + registers[32] = 0; + registers[33] = tswapl(env->iaoq[0]); + registers[34] = tswap32(env->iasq[0]); + registers[35] = tswapl(env->iaoq[1]); + registers[36] = tswap32(env->iasq[1]); + /* ... */ +#ifndef TARGET_HPPA64 + for(i = 37; i < 128; i++) { + registers[i] = 0; + } + return 128 * sizeof(target_ulong); +#else + for(i = 37; i < 96; i++) { + registers[i] = 0; + } + return 96 * sizeof(target_ulong); +#endif +} + +static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size) +{ + target_ulong *registers = (target_ulong *)mem_buf; + int i; + + env->psw = tswapl(registers[0]); + /* gr0 is hardwired to zero */ + /* fill in gr1..gr32 */ + for(i = 0; i < 31; i++) { + env->gr[i] = tswapl(registers[i + 1]); + } + /* sar = registers[32]; */ + env->iaoq[0] = tswapl(registers[33]); + env->iasq[0] = tswap32(registers[34]); + env->iaoq[1] = tswapl(registers[35]); + env->iasq[1] = tswap32(registers[36]); + /* ... */ +} + #else static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) { @@ -906,6 +957,9 @@ env->PC[env->current_tc] = addr; #elif defined (TARGET_CRIS) env->pc = addr; +#elif defined (TARGET_HPPA) + env->iaoq[0] = addr; + env->iaoq[1] = addr + 4; #endif } #ifdef CONFIG_USER_ONLY @@ -932,6 +986,9 @@ env->PC[env->current_tc] = addr; #elif defined (TARGET_CRIS) env->pc = addr; +#elif defined (TARGET_HPPA) + env->iaoq[0] = addr; + env->iaoq[1] = addr + 4; #endif } cpu_single_step(env, 1); |