void dbg_hard_release() { if(dbg_hard_brk_enabled() || dbg_hard_stp_enabled()) return; if(!(info->vmm.ctrl.dbg.excp & (1<<DB_EXCP))) return; info->vmm.ctrl.dbg.excp &= ~(1<<DB_EXCP); ctrl_traps_set_update(1); debug(DBG_HARD, "removed #DB intercept (%d|%d)\n" ,dbg_hard_stp_enabled() ,dbg_hard_brk_enabled()); }
void dbg_hard_protect() { if(!dbg_hard_brk_enabled() && !dbg_hard_stp_enabled()) return; if(info->vmm.ctrl.dbg.excp & (1<<DB_EXCP)) return; info->vmm.ctrl.dbg.excp |= (1<<DB_EXCP); ctrl_traps_set_update(1); debug(DBG_HARD, "installed #DB intercept (%d|%d)\n" ,dbg_hard_stp_enabled() ,dbg_hard_brk_enabled()); }
int dbg_hard_brk_event(ctrl_evt_hdl_t *hdlr) { uint8_t n; if(!dbg_hard_brk_enabled()) return VM_IGNORE; debug(DBG_HARD_BRK, "hard brk event\n"); for(n=0 ; n<DBG_HARD_BRK_NR ; n++) if(__hbrk_raised(n) && __hbrk_enabled(n)) { dbg_evt_t *evt = &info->vmm.ctrl.dbg.evt; evt->type = __hbrk_get_type(n); evt->hard = n; evt->addr = get_dr(n); *hdlr = dbg_hard_brk_get_hdlr(n); dbg_hard_set_dr6_dirty(1); debug(DBG_HARD_BRK, "prepared hard brk ctrl event for 0x%X\n", evt->addr); return VM_DONE; } return VM_IGNORE; }