summaryrefslogtreecommitdiff
path: root/sys/ddb/db_break.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/ddb/db_break.c')
-rw-r--r--sys/ddb/db_break.c204
1 files changed, 93 insertions, 111 deletions
diff --git a/sys/ddb/db_break.c b/sys/ddb/db_break.c
index 5802c070f36..ae69038bd08 100644
--- a/sys/ddb/db_break.c
+++ b/sys/ddb/db_break.c
@@ -1,27 +1,27 @@
-/* $NetBSD: db_break.c,v 1.16 2001/11/12 22:54:04 lukem Exp $ */
+/* $NetBSD: db_break.c,v 1.17 2002/02/15 07:33:49 simonb Exp $ */
-/*
+/*
* 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 the
* rights to redistribute these changes.
*
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_break.c,v 1.16 2001/11/12 22:54:04 lukem Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_break.c,v 1.17 2002/02/15 07:33:49 simonb Exp $");
#include <sys/param.h>
#include <sys/proc.h>
@@ -48,23 +48,30 @@ __KERNEL_RCSID(0, "$NetBSD: db_break.c,v 1.16 2001/11/12 22:54:04 lukem Exp $");
#include <ddb/db_output.h>
#define NBREAKPOINTS 100
-struct db_breakpoint db_break_table[NBREAKPOINTS];
-db_breakpoint_t db_next_free_breakpoint = &db_break_table[0];
-db_breakpoint_t db_free_breakpoints = 0;
-db_breakpoint_t db_breakpoint_list = 0;
-
-db_breakpoint_t
-db_breakpoint_alloc()
+static struct db_breakpoint db_break_table[NBREAKPOINTS];
+static db_breakpoint_t db_next_free_breakpoint = &db_break_table[0];
+static db_breakpoint_t db_free_breakpoints = 0;
+static db_breakpoint_t db_breakpoint_list = 0;
+
+static db_breakpoint_t db_breakpoint_alloc(void);
+static void db_breakpoint_free(db_breakpoint_t);
+static void db_delete_breakpoint(struct vm_map *, db_addr_t);
+static db_breakpoint_t db_find_breakpoint(struct vm_map *, db_addr_t);
+static void db_list_breakpoints(void);
+static void db_set_breakpoint(struct vm_map *, db_addr_t, int);
+
+static db_breakpoint_t
+db_breakpoint_alloc(void)
{
db_breakpoint_t bkpt;
if ((bkpt = db_free_breakpoints) != 0) {
- db_free_breakpoints = bkpt->link;
- return (bkpt);
+ db_free_breakpoints = bkpt->link;
+ return (bkpt);
}
if (db_next_free_breakpoint == &db_break_table[NBREAKPOINTS]) {
- db_printf("All breakpoints used.\n");
- return (0);
+ db_printf("All breakpoints used.\n");
+ return (0);
}
bkpt = db_next_free_breakpoint;
db_next_free_breakpoint++;
@@ -72,31 +79,27 @@ db_breakpoint_alloc()
return (bkpt);
}
-void
-db_breakpoint_free(bkpt)
- db_breakpoint_t bkpt;
+static void
+db_breakpoint_free(db_breakpoint_t bkpt)
{
bkpt->link = db_free_breakpoints;
db_free_breakpoints = bkpt;
}
void
-db_set_breakpoint(map, addr, count)
- struct vm_map *map;
- db_addr_t addr;
- int count;
+db_set_breakpoint(struct vm_map *map, db_addr_t addr, int count)
{
db_breakpoint_t bkpt;
if (db_find_breakpoint(map, addr)) {
- db_printf("Already set.\n");
- return;
+ db_printf("Already set.\n");
+ return;
}
bkpt = db_breakpoint_alloc();
if (bkpt == 0) {
- db_printf("Too many breakpoints.\n");
- return;
+ db_printf("Too many breakpoints.\n");
+ return;
}
bkpt->map = map;
@@ -109,10 +112,8 @@ db_set_breakpoint(map, addr, count)
db_breakpoint_list = bkpt;
}
-void
-db_delete_breakpoint(map, addr)
- struct vm_map *map;
- db_addr_t addr;
+static void
+db_delete_breakpoint(struct vm_map *map, db_addr_t addr)
{
db_breakpoint_t bkpt;
db_breakpoint_t *prev;
@@ -120,83 +121,77 @@ db_delete_breakpoint(map, addr)
for (prev = &db_breakpoint_list;
(bkpt = *prev) != 0;
prev = &bkpt->link) {
- if (db_map_equal(bkpt->map, map) &&
- (bkpt->address == addr)) {
- *prev = bkpt->link;
- break;
- }
+ if (db_map_equal(bkpt->map, map) &&
+ (bkpt->address == addr)) {
+ *prev = bkpt->link;
+ break;
+ }
}
if (bkpt == 0) {
- db_printf("Not set.\n");
- return;
+ db_printf("Not set.\n");
+ return;
}
db_breakpoint_free(bkpt);
}
db_breakpoint_t
-db_find_breakpoint(map, addr)
- struct vm_map *map;
- db_addr_t addr;
+db_find_breakpoint(struct vm_map *map, db_addr_t addr)
{
db_breakpoint_t bkpt;
for (bkpt = db_breakpoint_list;
bkpt != 0;
bkpt = bkpt->link)
- {
- if (db_map_equal(bkpt->map, map) &&
- (bkpt->address == addr))
- return (bkpt);
- }
+ if (db_map_equal(bkpt->map, map) &&
+ (bkpt->address == addr))
+ return (bkpt);
+
return (0);
}
db_breakpoint_t
-db_find_breakpoint_here(addr)
- db_addr_t addr;
+db_find_breakpoint_here(db_addr_t addr)
{
- return db_find_breakpoint(db_map_addr(addr), addr);
+ return db_find_breakpoint(db_map_addr(addr), addr);
}
-boolean_t db_breakpoints_inserted = TRUE;
+static boolean_t db_breakpoints_inserted = TRUE;
void
-db_set_breakpoints()
+db_set_breakpoints(void)
{
db_breakpoint_t bkpt;
if (!db_breakpoints_inserted) {
- for (bkpt = db_breakpoint_list;
- bkpt != 0;
- bkpt = bkpt->link)
- if (db_map_current(bkpt->map)) {
- bkpt->bkpt_inst = db_get_value(bkpt->address,
- BKPT_SIZE,
- FALSE);
- db_put_value(bkpt->address,
- BKPT_SIZE,
- BKPT_SET(bkpt->bkpt_inst));
- }
- db_breakpoints_inserted = TRUE;
+ for (bkpt = db_breakpoint_list;
+ bkpt != 0;
+ bkpt = bkpt->link)
+ if (db_map_current(bkpt->map)) {
+ bkpt->bkpt_inst = db_get_value(bkpt->address,
+ BKPT_SIZE, FALSE);
+ db_put_value(bkpt->address,
+ BKPT_SIZE, BKPT_SET(bkpt->bkpt_inst));
+ }
+ db_breakpoints_inserted = TRUE;
}
}
void
-db_clear_breakpoints()
+db_clear_breakpoints(void)
{
db_breakpoint_t bkpt;
if (db_breakpoints_inserted) {
- for (bkpt = db_breakpoint_list;
- bkpt != 0;
- bkpt = bkpt->link)
- if (db_map_current(bkpt->map)) {
- db_put_value(bkpt->address, BKPT_SIZE, bkpt->bkpt_inst);
- }
- db_breakpoints_inserted = FALSE;
+ for (bkpt = db_breakpoint_list;
+ bkpt != 0;
+ bkpt = bkpt->link)
+ if (db_map_current(bkpt->map))
+ db_put_value(bkpt->address, BKPT_SIZE,
+ bkpt->bkpt_inst);
+ db_breakpoints_inserted = FALSE;
}
}
@@ -204,51 +199,44 @@ db_clear_breakpoints()
* List breakpoints.
*/
void
-db_list_breakpoints()
+db_list_breakpoints(void)
{
db_breakpoint_t bkpt;
if (db_breakpoint_list == 0) {
- db_printf("No breakpoints set\n");
- return;
+ db_printf("No breakpoints set\n");
+ return;
}
db_printf(" Map Count Address\n");
for (bkpt = db_breakpoint_list;
bkpt != 0;
- bkpt = bkpt->link)
- {
- db_printf("%s%p %5d ",
- db_map_current(bkpt->map) ? "*" : " ",
- bkpt->map, bkpt->init_count);
- db_printsym(bkpt->address, DB_STGY_PROC, db_printf);
- db_printf("\n");
+ bkpt = bkpt->link) {
+ db_printf("%s%p %5d ",
+ db_map_current(bkpt->map) ? "*" : " ",
+ bkpt->map, bkpt->init_count);
+ db_printsym(bkpt->address, DB_STGY_PROC, db_printf);
+ db_printf("\n");
}
}
/* Delete breakpoint */
/*ARGSUSED*/
void
-db_delete_cmd(addr, have_addr, count, modif)
- db_expr_t addr;
- int have_addr;
- db_expr_t count;
- char * modif;
+db_delete_cmd(db_expr_t addr, int have_addr, db_expr_t count, char * modif)
{
+
db_delete_breakpoint(db_map_addr(addr), (db_addr_t)addr);
}
/* Set breakpoint with skip count */
/*ARGSUSED*/
void
-db_breakpoint_cmd(addr, have_addr, count, modif)
- db_expr_t addr;
- int have_addr;
- db_expr_t count;
- char * modif;
+db_breakpoint_cmd(db_expr_t addr, int have_addr, db_expr_t count, char * modif)
{
+
if (count == -1)
- count = 1;
+ count = 1;
db_set_breakpoint(db_map_addr(addr), (db_addr_t)addr, count);
}
@@ -256,12 +244,9 @@ db_breakpoint_cmd(addr, have_addr, count, modif)
/* list breakpoints */
/*ARGSUSED*/
void
-db_listbreak_cmd(addr, have_addr, count, modif)
- db_expr_t addr;
- int have_addr;
- db_expr_t count;
- char * modif;
+db_listbreak_cmd(db_expr_t addr, int have_addr, db_expr_t count, char * modif)
{
+
db_list_breakpoints();
}
@@ -274,18 +259,16 @@ db_listbreak_cmd(addr, have_addr, count, modif)
*/
boolean_t
-db_map_equal(map1, map2)
- struct vm_map *map1;
- struct vm_map *map2;
+db_map_equal(struct vm_map *map1, struct vm_map *map2)
{
+
return ((map1 == map2) ||
((map1 == NULL) && (map2 == kernel_map)) ||
((map1 == kernel_map) && (map2 == NULL)));
}
boolean_t
-db_map_current(map)
- struct vm_map *map;
+db_map_current(struct vm_map *map)
{
#if 0
thread_t thread;
@@ -295,13 +278,13 @@ db_map_current(map)
(((thread = current_thread()) != NULL) &&
(map == thread->task->map)));
#else
+
return (1);
#endif
}
struct vm_map *
-db_map_addr(addr)
- vaddr_t addr;
+db_map_addr(vaddr_t addr)
{
#if 0
thread_t thread;
@@ -312,11 +295,10 @@ db_map_addr(addr)
* kernel tasks with their own maps.
*/
- if ((VM_MIN_ADDRESS <= addr) &&
- (addr < VM_MAX_ADDRESS) &&
+ if ((VM_MIN_ADDRESS <= addr) && (addr < VM_MAX_ADDRESS) &&
((thread = current_thread()) != NULL))
- return thread->task->map;
+ return thread->task->map;
else
#endif
- return kernel_map;
+ return kernel_map;
}