summaryrefslogtreecommitdiffstats
path: root/sys/ddb/db_thread.c
diff options
context:
space:
mode:
authorbz <bz@FreeBSD.org>2010-05-24 16:41:05 +0000
committerbz <bz@FreeBSD.org>2010-05-24 16:41:05 +0000
commit6776200983bceda223944d82e99b820658ecd62b (patch)
treebdd087309119f3eab516764a7a8a1643c4691a2b /sys/ddb/db_thread.c
parent36eb388782ebccd910604f919e2bd8f13cc05362 (diff)
downloadFreeBSD-src-6776200983bceda223944d82e99b820658ecd62b.zip
FreeBSD-src-6776200983bceda223944d82e99b820658ecd62b.tar.gz
MFp4 @178364:
Implement an optional delay to the ddb reset/reboot command. This allows textdumps to be run automatically with unattended reboots after a resonable timeout, while still permitting an administrator to break into debugger if attached to the console at the time of the event for further debugging. Cap the maximum delay at 1 week to avoid highly accidental results, and default to 15s in case of problems parsing the timeout value. Move hex2dec helper function from db_thread.c to db_command.c to make it generally available and prefix it with a "db_" to avoid namespace collisions. Reviewed by: rwatson MFC after: 4 weeks
Diffstat (limited to 'sys/ddb/db_thread.c')
-rw-r--r--sys/ddb/db_thread.c31
1 files changed, 2 insertions, 29 deletions
diff --git a/sys/ddb/db_thread.c b/sys/ddb/db_thread.c
index bf59f68..8ddb240 100644
--- a/sys/ddb/db_thread.c
+++ b/sys/ddb/db_thread.c
@@ -38,8 +38,6 @@ __FBSDID("$FreeBSD$");
#include <ddb/db_command.h>
#include <ddb/db_sym.h>
-static db_expr_t hex2dec(db_expr_t expr);
-
void
db_print_thread(void)
{
@@ -108,31 +106,6 @@ db_show_threads(db_expr_t addr, boolean_t hasaddr, db_expr_t cnt, char *mod)
}
/*
- * Take the parsed expression value from the command line that was parsed
- * as a hexadecimal value and convert it as if the expression was parsed
- * as a decimal value. Returns -1 if the expression was not a valid
- * decimal value.
- */
-static db_expr_t
-hex2dec(db_expr_t expr)
-{
- uintptr_t x, y;
- db_expr_t val;
-
- y = 1;
- val = 0;
- x = expr;
- while (x != 0) {
- if (x % 16 > 9)
- return (-1);
- val += (x % 16) * (y);
- x >>= 4;
- y *= 10;
- }
- return (val);
-}
-
-/*
* Lookup a thread based on a db expression address. We assume that the
* address was parsed in hexadecimal. We reparse the address in decimal
* first and try to treat it as a thread ID to find an associated thread.
@@ -151,7 +124,7 @@ db_lookup_thread(db_expr_t addr, boolean_t check_pid)
* If the parsed address was not a valid decimal expression,
* assume it is a thread pointer.
*/
- decaddr = hex2dec(addr);
+ decaddr = db_hex2dec(addr);
if (decaddr == -1)
return ((struct thread *)addr);
@@ -183,7 +156,7 @@ db_lookup_proc(db_expr_t addr)
db_expr_t decaddr;
struct proc *p;
- decaddr = hex2dec(addr);
+ decaddr = db_hex2dec(addr);
if (decaddr != -1) {
FOREACH_PROC_IN_SYSTEM(p) {
if (p->p_pid == decaddr)
OpenPOWER on IntegriCloud