--- Gnu-Mach/ddb/db_watch.c 2020/09/02 04:43:17 1.1.1.2 +++ Gnu-Mach/ddb/db_watch.c 2020/09/02 04:48:19 1.1.1.4 @@ -28,7 +28,6 @@ * Date: 10/90 */ -#include "mach_kdb.h" #if MACH_KDB #include @@ -38,9 +37,14 @@ #include #include +#include +#include #include #include #include +#include +#include +#include #include #include @@ -61,9 +65,9 @@ db_watchpoint_t db_watchpoint_list = 0; extern vm_map_t kernel_map; db_watchpoint_t -db_watchpoint_alloc() +db_watchpoint_alloc(void) { - register db_watchpoint_t watch; + db_watchpoint_t watch; if ((watch = db_free_watchpoints) != 0) { db_free_watchpoints = watch->link; @@ -81,7 +85,7 @@ db_watchpoint_alloc() void db_watchpoint_free(watch) - register db_watchpoint_t watch; + db_watchpoint_t watch; { watch->link = db_free_watchpoints; db_free_watchpoints = watch; @@ -89,11 +93,11 @@ db_watchpoint_free(watch) void db_set_watchpoint(task, addr, size) - task_t task; + const task_t task; db_addr_t addr; vm_size_t size; { - register db_watchpoint_t watch; + db_watchpoint_t watch; /* * Should we do anything fancy with overlapping regions? @@ -126,11 +130,11 @@ db_set_watchpoint(task, addr, size) void db_delete_watchpoint(task, addr) - task_t task; + const task_t task; db_addr_t addr; { - register db_watchpoint_t watch; - register db_watchpoint_t *prev; + db_watchpoint_t watch; + db_watchpoint_t *prev; for (prev = &db_watchpoint_list; (watch = *prev) != 0; prev = &watch->link) { @@ -147,10 +151,10 @@ db_delete_watchpoint(task, addr) } void -db_list_watchpoints() +db_list_watchpoints(void) { - register db_watchpoint_t watch; - int task_id; + db_watchpoint_t watch; + int task_id; if (db_watchpoint_list == 0) { db_printf("No watchpoints set\n"); @@ -175,7 +179,7 @@ db_list_watchpoints() static int db_get_task(modif, taskp, addr) - char *modif; + const char *modif; task_t *taskp; db_addr_t addr; { @@ -217,7 +221,7 @@ db_deletewatch_cmd(addr, have_addr, coun db_expr_t addr; int have_addr; db_expr_t count; - char * modif; + const char * modif; { task_t task; @@ -233,12 +237,11 @@ db_watchpoint_cmd(addr, have_addr, count db_expr_t addr; int have_addr; db_expr_t count; - char * modif; + const char * modif; { vm_size_t size; db_expr_t value; task_t task; - boolean_t db_option(); if (db_get_task(modif, &task, addr) < 0) return; @@ -251,19 +254,24 @@ db_watchpoint_cmd(addr, have_addr, count /* list watchpoints */ void -db_listwatch_cmd() +db_listwatch_cmd(void) { db_list_watchpoints(); } void -db_set_watchpoints() +db_set_watchpoints(void) { - register db_watchpoint_t watch; - vm_map_t map; + db_watchpoint_t watch; + vm_map_t map; + unsigned hw_idx = 0; if (!db_watchpoints_inserted) { for (watch = db_watchpoint_list; watch != 0; watch = watch->link) { + if (db_set_hw_watchpoint(watch, hw_idx)) { + hw_idx++; + continue; + } map = (watch->task)? watch->task->map: kernel_map; pmap_protect(map->pmap, trunc_page(watch->loaddr), @@ -275,20 +283,25 @@ db_set_watchpoints() } void -db_clear_watchpoints() +db_clear_watchpoints(void) { + unsigned hw_idx = 0; + + while (db_clear_hw_watchpoint(hw_idx)) + hw_idx++; + db_watchpoints_inserted = FALSE; } boolean_t -db_find_watchpoint(map, addr, regs) - vm_map_t map; - db_addr_t addr; - db_regs_t *regs; +db_find_watchpoint( + vm_map_t map, + db_addr_t addr, + db_regs_t *regs) { - register db_watchpoint_t watch; + db_watchpoint_t watch; db_watchpoint_t found = 0; - register task_t task_space; + task_t task_space; task_space = (map == kernel_map)? TASK_NULL: db_current_task(); for (watch = db_watchpoint_list; watch != 0; watch = watch->link) {