static void launch_instruction_breakpoints(char *buf, int local, int global) { int i; for (i = 0; i < 4; i++) { set_breakpoint_addr(dummy_funcs[i], i); toggle_breakpoint(i, BP_X, 1, local, global, 1); ptrace(PTRACE_CONT, child_pid, NULL, 0); sprintf(buf, "Test breakpoint %d with local: %d global: %d", i, local, global); check_success(buf); toggle_breakpoint(i, BP_X, 1, local, global, 0); } }
int set_hw_bp(struct task *task, unsigned int n, arch_addr_t addr) { #if 0 if (reset_hw_bp(task, n) == -1) return -1; #endif if (unlikely(set_breakpoint_addr(task, addr, n) == -1)) return -1; return set_breakpoint_mode(task, n, /* n */ BP_X, /* type */ 1, /* len */ 1, /* local */ 0 /* global */ ); }
static void launch_watchpoints(char *buf, int mode, int len, int local, int global) { const char *mode_str; int i; if (mode == BP_W) mode_str = "write"; else mode_str = "read"; for (i = 0; i < 4; i++) { set_breakpoint_addr(&dummy_var[i], i); toggle_breakpoint(i, mode, len, local, global, 1); ptrace(PTRACE_CONT, child_pid, NULL, 0); sprintf(buf, "Test %s watchpoint %d with len: %d local: " "%d global: %d", mode_str, i, len, local, global); check_success(buf); toggle_breakpoint(i, mode, len, local, global, 0); } }