--- Gnu-Mach/ddb/db_break.c 2020/09/02 04:36:57 1.1 +++ Gnu-Mach/ddb/db_break.c 2020/09/02 04:48:19 1.1.1.4 @@ -1,25 +1,25 @@ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie Mellon * the rights to redistribute these changes. */ @@ -27,7 +27,7 @@ * Author: David B. Golub, Carnegie Mellon University * Date: 7/90 */ -#include "mach_kdb.h" + #if MACH_KDB @@ -36,6 +36,7 @@ */ #include #include +#include #include #include #include @@ -43,6 +44,9 @@ #include #include #include +#include +#include +#include #define NBREAKPOINTS 100 #define NTHREAD_LIST (NBREAKPOINTS*3) @@ -60,7 +64,7 @@ static int db_breakpoint_number = 0; db_breakpoint_t db_breakpoint_alloc() { - register db_breakpoint_t bkpt; + db_breakpoint_t bkpt; if ((bkpt = db_free_breakpoints) != 0) { db_free_breakpoints = bkpt->link; @@ -78,7 +82,7 @@ db_breakpoint_alloc() void db_breakpoint_free(bkpt) - register db_breakpoint_t bkpt; + db_breakpoint_t bkpt; { bkpt->link = db_free_breakpoints; db_free_breakpoints = bkpt; @@ -86,14 +90,15 @@ db_breakpoint_free(bkpt) static int db_add_thread_breakpoint(bkpt, task_thd, count, task_bpt) - register db_breakpoint_t bkpt; + const db_breakpoint_t bkpt; vm_offset_t task_thd; + int count; boolean_t task_bpt; { - register db_thread_breakpoint_t tp; + db_thread_breakpoint_t tp; if (db_thread_break_init == FALSE) { - for (tp = db_thread_break_list; + for (tp = db_thread_break_list; tp < &db_thread_break_list[NTHREAD_LIST-1]; tp++) tp->tb_next = tp+1; tp->tb_next = 0; @@ -116,13 +121,12 @@ db_add_thread_breakpoint(bkpt, task_thd, } static int -db_delete_thread_breakpoint(bkpt, task_thd) - register db_breakpoint_t bkpt; - vm_offset_t task_thd; +db_delete_thread_breakpoint( + db_breakpoint_t bkpt, + vm_offset_t task_thd) { - register db_thread_breakpoint_t tp; - register db_thread_breakpoint_t *tpp; - void db_cond_free(); + db_thread_breakpoint_t tp; + db_thread_breakpoint_t *tpp; if (task_thd == 0) { /* delete all the thread-breakpoints */ @@ -150,13 +154,13 @@ db_delete_thread_breakpoint(bkpt, task_t } } -static db_thread_breakpoint_t +static db_thread_breakpoint_t __attribute__ ((pure)) db_find_thread_breakpoint(bkpt, thread) - db_breakpoint_t bkpt; - thread_t thread; + const db_breakpoint_t bkpt; + const thread_t thread; { - register db_thread_breakpoint_t tp; - register task_t task = (thread == THREAD_NULL)? TASK_NULL: thread->task; + db_thread_breakpoint_t tp; + task_t task = (thread == THREAD_NULL)? TASK_NULL: thread->task; for (tp = bkpt->threads; tp; tp = tp->tb_next) { if (tp->tb_is_task) { @@ -172,24 +176,24 @@ db_find_thread_breakpoint(bkpt, thread) db_thread_breakpoint_t db_find_thread_breakpoint_here(task, addr) - task_t task; + const task_t task; db_addr_t addr; { db_breakpoint_t bkpt; - bkpt = db_find_breakpoint(task, (db_addr_t)addr); + bkpt = db_find_breakpoint(task, addr); if (bkpt == 0) return(0); return(db_find_thread_breakpoint(bkpt, current_thread())); } db_thread_breakpoint_t -db_find_breakpoint_number(num, bkptp) - int num; - db_breakpoint_t *bkptp; +db_find_breakpoint_number( + int num, + db_breakpoint_t *bkptp) { - register db_thread_breakpoint_t tp; - register db_breakpoint_t bkpt; + db_thread_breakpoint_t tp; + db_breakpoint_t bkpt; for (bkpt = db_breakpoint_list; bkpt != 0; bkpt = bkpt->link) { for (tp = bkpt->threads; tp; tp = tp->tb_next) { @@ -204,10 +208,10 @@ db_find_breakpoint_number(num, bkptp) } static void -db_force_delete_breakpoint(bkpt, task_thd, is_task) - db_breakpoint_t bkpt; - vm_offset_t task_thd; - boolean_t is_task; +db_force_delete_breakpoint( + db_breakpoint_t bkpt, + vm_offset_t task_thd, + boolean_t is_task) { db_printf("deleted a stale breakpoint at "); if (bkpt->task == TASK_NULL || db_lookup_task(bkpt->task) >= 0) @@ -223,10 +227,10 @@ db_force_delete_breakpoint(bkpt, task_th } void -db_check_breakpoint_valid() +db_check_breakpoint_valid(void) { - register db_thread_breakpoint_t tbp, tbp_next; - register db_breakpoint_t bkpt, *bkptp; + db_thread_breakpoint_t tbp, tbp_next; + db_breakpoint_t bkpt, *bkptp; bkptp = &db_breakpoint_list; for (bkpt = *bkptp; bkpt; bkpt = *bkptp) { @@ -242,11 +246,11 @@ db_check_breakpoint_valid() tbp_next = tbp->tb_next; if (tbp->tb_task_thd == 0) continue; - if ((tbp->tb_is_task && + if ((tbp->tb_is_task && db_lookup_task((task_t)(tbp->tb_task_thd)) < 0) || - (!tbp->tb_is_task && + (!tbp->tb_is_task && db_lookup_thread((thread_t)(tbp->tb_task_thd)) < 0)) { - db_force_delete_breakpoint(bkpt, + db_force_delete_breakpoint(bkpt, tbp->tb_task_thd, tbp->tb_is_task); } } @@ -262,15 +266,15 @@ db_check_breakpoint_valid() } } -void +db_breakpoint_t db_set_breakpoint(task, addr, count, thread, task_bpt) - task_t task; + const task_t task; db_addr_t addr; int count; - thread_t thread; + const thread_t thread; boolean_t task_bpt; { - register db_breakpoint_t bkpt; + db_breakpoint_t bkpt; db_breakpoint_t alloc_bkpt = 0; vm_offset_t task_thd; @@ -279,17 +283,17 @@ db_set_breakpoint(task, addr, count, thr if (thread == THREAD_NULL || db_find_thread_breakpoint(bkpt, thread)) { db_printf("Already set.\n"); - return; + return NULL; } } else { if (!DB_CHECK_ACCESS(addr, BKPT_SIZE, task)) { db_printf("Cannot set break point at %X\n", addr); - return; + return NULL; } alloc_bkpt = bkpt = db_breakpoint_alloc(); if (bkpt == 0) { db_printf("Too many breakpoints.\n"); - return; + return NULL; } bkpt->task = task; bkpt->flags = (task && thread == THREAD_NULL)? @@ -304,23 +308,25 @@ db_set_breakpoint(task, addr, count, thr if (alloc_bkpt) db_breakpoint_free(alloc_bkpt); db_printf("Too many thread_breakpoints.\n"); + return NULL; } else { db_printf("set breakpoint #%d\n", db_breakpoint_number); if (alloc_bkpt) { bkpt->link = db_breakpoint_list; db_breakpoint_list = bkpt; } + return bkpt; } } void db_delete_breakpoint(task, addr, task_thd) - task_t task; + const task_t task; db_addr_t addr; vm_offset_t task_thd; { - register db_breakpoint_t bkpt; - register db_breakpoint_t *prev; + db_breakpoint_t bkpt; + db_breakpoint_t *prev; for (prev = &db_breakpoint_list; (bkpt = *prev) != 0; prev = &bkpt->link) { @@ -344,12 +350,12 @@ db_delete_breakpoint(task, addr, task_th } } -db_breakpoint_t +db_breakpoint_t __attribute__ ((pure)) db_find_breakpoint(task, addr) - task_t task; + const task_t task; db_addr_t addr; { - register db_breakpoint_t bkpt; + db_breakpoint_t bkpt; for (bkpt = db_breakpoint_list; bkpt != 0; bkpt = bkpt->link) { if ((bkpt->task == task @@ -362,10 +368,10 @@ db_find_breakpoint(task, addr) boolean_t db_find_breakpoint_here(task, addr) - task_t task; + const task_t task; db_addr_t addr; { - register db_breakpoint_t bkpt; + db_breakpoint_t bkpt; for (bkpt = db_breakpoint_list; bkpt != 0; bkpt = bkpt->link) { if ((bkpt->task == task @@ -373,7 +379,7 @@ db_find_breakpoint_here(task, addr) && bkpt->address == addr) return(TRUE); if ((bkpt->flags & BKPT_USR_GLOBAL) == 0 && - DB_PHYS_EQ(task, (vm_offset_t)addr, bkpt->task, (vm_offset_t)bkpt->address)) + DB_PHYS_EQ(task, addr, bkpt->task, bkpt->address)) return (TRUE); } return(FALSE); @@ -382,10 +388,10 @@ db_find_breakpoint_here(task, addr) boolean_t db_breakpoints_inserted = TRUE; void -db_set_breakpoints() +db_set_breakpoints(void) { - register db_breakpoint_t bkpt; - register task_t task; + db_breakpoint_t bkpt; + task_t task; db_expr_t inst; task_t cur_task; @@ -414,7 +420,7 @@ db_set_breakpoints() BKPT_SET(bkpt->bkpt_inst), task); bkpt->flags |= BKPT_SET_IN_MEM; } else { - db_printf("Warning: cannot set breakpoint at %X ", + db_printf("Warning: cannot set breakpoint at %X ", bkpt->address); if (task) db_printf("in task %X\n", task); @@ -427,10 +433,10 @@ db_set_breakpoints() } void -db_clear_breakpoints() +db_clear_breakpoints(void) { - register db_breakpoint_t bkpt, *bkptp; - register task_t task; + db_breakpoint_t bkpt, *bkptp; + task_t task; task_t cur_task; db_expr_t inst; @@ -448,7 +454,7 @@ db_clear_breakpoints() } if ((bkpt->flags & BKPT_SET_IN_MEM) && DB_CHECK_ACCESS(bkpt->address, BKPT_SIZE, task)) { - inst = db_get_task_value(bkpt->address, BKPT_SIZE, FALSE, + inst = db_get_task_value(bkpt->address, BKPT_SIZE, FALSE, task); if (inst != BKPT_SET(inst)) { if (bkpt->flags & BKPT_USR_GLOBAL) { @@ -476,11 +482,11 @@ db_clear_breakpoints() * so the breakpoint does not have to be on the breakpoint list. */ db_breakpoint_t -db_set_temp_breakpoint(task, addr) - task_t task; - db_addr_t addr; +db_set_temp_breakpoint( + task_t task, + db_addr_t addr) { - register db_breakpoint_t bkpt; + db_breakpoint_t bkpt; bkpt = db_breakpoint_alloc(); if (bkpt == 0) { @@ -497,17 +503,17 @@ db_set_temp_breakpoint(task, addr) db_printf("Too many thread_breakpoints.\n"); return 0; } - bkpt->bkpt_inst = db_get_task_value(bkpt->address, BKPT_SIZE, + bkpt->bkpt_inst = db_get_task_value(bkpt->address, BKPT_SIZE, FALSE, task); - db_put_task_value(bkpt->address, BKPT_SIZE, + db_put_task_value(bkpt->address, BKPT_SIZE, BKPT_SET(bkpt->bkpt_inst), task); return bkpt; } void -db_delete_temp_breakpoint(task, bkpt) - task_t task; - db_breakpoint_t bkpt; +db_delete_temp_breakpoint( + task_t task, + db_breakpoint_t bkpt) { db_put_task_value(bkpt->address, BKPT_SIZE, bkpt->bkpt_inst, task); db_delete_thread_breakpoint(bkpt, 0); @@ -518,9 +524,9 @@ db_delete_temp_breakpoint(task, bkpt) * List breakpoints. */ void -db_list_breakpoints() +db_list_breakpoints(void) { - register db_breakpoint_t bkpt; + db_breakpoint_t bkpt; if (db_breakpoint_list == 0) { db_printf("No breakpoints set\n"); @@ -532,9 +538,9 @@ db_list_breakpoints() bkpt != 0; bkpt = bkpt->link) { - register db_thread_breakpoint_t tp; - int task_id; - int thread_id; + db_thread_breakpoint_t tp; + int task_id; + int thread_id; if (bkpt->threads) { for (tp = bkpt->threads; tp; tp = tp->tb_next) { @@ -564,7 +570,7 @@ db_list_breakpoints() if (task_id < 0 || thread_id < 0) db_printf("%0*X ", 2*sizeof(vm_offset_t), tp->tb_task_thd); - else + else db_printf("task%03d.%-3d ", task_id, thread_id); } } @@ -592,9 +598,9 @@ db_list_breakpoints() /* Delete breakpoint */ /*ARGSUSED*/ void -db_delete_cmd() +db_delete_cmd(void) { - register n; + int n; thread_t thread; vm_offset_t task_thd; boolean_t user_global = FALSE; @@ -603,7 +609,7 @@ db_delete_cmd() boolean_t thd_bpt = FALSE; db_expr_t addr; int t; - + t = db_read_token(); if (t == tSLASH) { t = db_read_token(); @@ -645,7 +651,7 @@ db_delete_cmd() user_space = TRUE; } if (!DB_VALID_ADDRESS((vm_offset_t) addr, user_space)) { - db_printf("Address %#X is not in %s space\n", addr, + db_printf("Address %#X is not in %s space\n", addr, (user_space)? "user": "kernel"); db_error(0); } @@ -675,9 +681,9 @@ db_breakpoint_cmd(addr, have_addr, count db_expr_t addr; int have_addr; db_expr_t count; - char * modif; + const char * modif; { - register n; + int n; thread_t thread; boolean_t user_global = db_option(modif, 'U'); boolean_t task_bpt = db_option(modif, 'T'); @@ -711,7 +717,7 @@ db_breakpoint_cmd(addr, have_addr, count if (db_access_level <= DB_ACCESS_CURRENT && user_space && thread->task != db_current_task()) db_error("Cannot set break point in inactive user space\n"); - db_set_breakpoint(db_target_space(thread, user_space), + db_set_breakpoint(db_target_space(thread, user_space), (db_addr_t)addr, count, (user_global)? THREAD_NULL: thread, task_bpt); @@ -725,9 +731,9 @@ db_breakpoint_cmd(addr, have_addr, count /* list breakpoints */ void -db_listbreak_cmd() +db_listbreak_cmd(void) { db_list_breakpoints(); } -#endif MACH_KDB +#endif /* MACH_KDB */