/** Disables a breakpoint without clearing its configuration. * @param bp_num Hardware breakpoint ID. Usually an integer from 0..N. */ static void disableBreakpoint(tcb_t *t, uint16_t bp_num) { word_t disable_mask; assert(t != NULL); assert(bp_num < X86_DEBUG_BP_N_REGS); switch (bp_num) { case 0: disable_mask = ~X86_DEBUG_BP0_ENABLE_BIT; break; case 1: disable_mask = ~X86_DEBUG_BP1_ENABLE_BIT; break; case 2: disable_mask = ~X86_DEBUG_BP2_ENABLE_BIT; break; default: disable_mask = ~X86_DEBUG_BP3_ENABLE_BIT; break; } bitwiseAndDr7Context(t, disable_mask); }
static void unsetDr7BitsFor(tcb_t *t, uint16_t bp_num) { word_t mask; switch (bp_num) { case 0: mask = (0x3u << X86_DEBUG_BP0_SIZE_SHIFT) | (0x3u << X86_DEBUG_BP0_TYPE_SHIFT); break; case 1: mask = (0x3u << X86_DEBUG_BP1_SIZE_SHIFT) | (0x3u << X86_DEBUG_BP1_TYPE_SHIFT); break; case 2: mask = (0x3u << X86_DEBUG_BP2_SIZE_SHIFT) | (0x3u << X86_DEBUG_BP2_TYPE_SHIFT); break; default: /* 3 */ assert(bp_num == 3); mask = (0x3u << X86_DEBUG_BP3_SIZE_SHIFT) | (0x3u << X86_DEBUG_BP3_TYPE_SHIFT); break; } mask = ~mask; bitwiseAndDr7Context(t, mask); }