--- upstream/dynamips-0.2.5/mips64.c 2007/10/06 16:01:44 1 +++ upstream/dynamips-0.2.6-RC1/mips64.c 2007/10/06 16:03:58 2 @@ -491,11 +491,51 @@ cpu_log(cpu,"BREAKPOINT", "Virtual breakpoint reached at PC=0x%llx\n",cpu->pc); - printf("[[[ Virtual Breakpoint reached at PC=0x%llx ]]]\n",cpu->pc); + printf("[[[ Virtual Breakpoint reached at PC=0x%llx RA=0x%llx]]]\n", + cpu->pc,cpu->gpr[MIPS_GPR_RA]); + mips64_dump_regs(cpu); memlog_dump(cpu); } +/* Add a virtual breakpoint */ +int mips64_add_breakpoint(cpu_mips_t *cpu,m_uint64_t pc) +{ + int i; + + for(i=0;ibreakpoints[i]) + break; + + if (i == MIPS64_MAX_BREAKPOINTS) + return(-1); + + cpu->breakpoints[i] = pc; + cpu->breakpoints_enabled = TRUE; + return(0); +} + +/* Remove a virtual breakpoint */ +void mips64_remove_breakpoint(cpu_mips_t *cpu,m_uint64_t pc) +{ + int i,j; + + for(i=0;ibreakpoints[i] == pc) + { + for(j=i;jbreakpoints[j] = cpu->breakpoints[j+1]; + + cpu->breakpoints[MIPS64_MAX_BREAKPOINTS-1] = 0; + } + + for(i=0;ibreakpoints[i] != 0) + return; + + cpu->breakpoints_enabled = TRUE; +} + /* Debugging for register-jump to address 0 */ fastcall void mips64_debug_jr0(cpu_mips_t *cpu) {