Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/ddb changes of r1.39 was incomplete. only "examin/m" cou...
details: https://anonhg.NetBSD.org/src/rev/d8581b965b37
branches: trunk
changeset: 965303:d8581b965b37
user: ryo <ryo%NetBSD.org@localhost>
date: Thu Sep 12 09:20:23 2019 +0000
description:
changes of r1.39 was incomplete. only "examin/m" could handle 'q'.
added support 'r','x','z','d','u', and 'o' with 'q' modifier on 32bit arch.
diffstat:
sys/ddb/db_access.c | 24 ++++++++++++++++++++++--
sys/ddb/db_access.h | 3 ++-
sys/ddb/db_examine.c | 34 +++++++++++++++++-----------------
3 files changed, 41 insertions(+), 20 deletions(-)
diffs (173 lines):
diff -r da42a4074c83 -r d8581b965b37 sys/ddb/db_access.c
--- a/sys/ddb/db_access.c Thu Sep 12 09:05:28 2019 +0000
+++ b/sys/ddb/db_access.c Thu Sep 12 09:20:23 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: db_access.c,v 1.24 2019/08/23 14:48:50 kamil Exp $ */
+/* $NetBSD: db_access.c,v 1.25 2019/09/12 09:20:23 ryo Exp $ */
/*
* Mach Operating System
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_access.c,v 1.24 2019/08/23 14:48:50 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_access.c,v 1.25 2019/09/12 09:20:23 ryo Exp $");
#if defined(_KERNEL_OPT)
#include "opt_kgdb.h"
@@ -82,6 +82,26 @@
return (value);
}
+quad_t
+db_get_qvalue(db_addr_t addr, size_t size, bool is_signed)
+{
+ uint64_t data;
+
+ if (sizeof(db_expr_t) >= sizeof(quad_t) || size <= sizeof(db_expr_t)) {
+ if (is_signed)
+ return db_get_value(addr, size, true);
+ return (uint32_t)db_get_value(addr, size, false);
+ }
+
+ if (size != sizeof(data)) {
+ db_error("unnsupported size\n");
+ /*NOTREACHED*/
+ }
+
+ db_read_bytes(addr, sizeof(data), (char *)&data);
+ return data;
+}
+
void
db_put_value(db_addr_t addr, size_t size, db_expr_t value)
{
diff -r da42a4074c83 -r d8581b965b37 sys/ddb/db_access.h
--- a/sys/ddb/db_access.h Thu Sep 12 09:05:28 2019 +0000
+++ b/sys/ddb/db_access.h Thu Sep 12 09:20:23 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: db_access.h,v 1.13 2009/03/07 22:02:17 ad Exp $ */
+/* $NetBSD: db_access.h,v 1.14 2019/09/12 09:20:23 ryo Exp $ */
/*
* Mach Operating System
@@ -33,6 +33,7 @@
* Data access functions for debugger.
*/
db_expr_t db_get_value(db_addr_t, size_t, bool);
+quad_t db_get_qvalue(db_addr_t, size_t, bool);
void db_put_value(db_addr_t, size_t, db_expr_t);
void db_read_bytes(db_addr_t, size_t, char *);
diff -r da42a4074c83 -r d8581b965b37 sys/ddb/db_examine.c
--- a/sys/ddb/db_examine.c Thu Sep 12 09:05:28 2019 +0000
+++ b/sys/ddb/db_examine.c Thu Sep 12 09:20:23 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: db_examine.c,v 1.39 2019/09/10 09:32:05 ryo Exp $ */
+/* $NetBSD: db_examine.c,v 1.40 2019/09/12 09:20:23 ryo Exp $ */
/*
* Mach Operating System
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_examine.c,v 1.39 2019/09/10 09:32:05 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_examine.c,v 1.40 2019/09/12 09:20:23 ryo Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -70,7 +70,7 @@
db_examine(db_addr_t addr, char *fmt, int count)
{
int i, c;
- db_expr_t value;
+ quad_t value;
int size;
int width;
int bytes;
@@ -103,7 +103,7 @@
break;
case 'q': /* quad-word */
size = 8;
- width = 16;
+ width = 24;
break;
case 'L': /* implementation maximum */
size = sizeof value;
@@ -114,27 +114,27 @@
break;
case 'p':
size = sizeof(void *);
- value = db_get_value(addr, size, true);
+ value = db_get_value(addr, size, false);
addr += size;
db_printf("= 0x%lx ", (long)value);
db_printsym((db_addr_t)value, DB_STGY_ANY, db_printf);
db_printf("\n");
break;
case 'r': /* signed, current radix */
- value = db_get_value(addr, size, true);
+ value = db_get_qvalue(addr, size, true);
addr += size;
db_format_radix(tbuf, 24, value, false);
db_printf("%-*s", width, tbuf);
break;
case 'x': /* unsigned hex */
- value = db_get_value(addr, size, false);
+ value = db_get_qvalue(addr, size, false);
addr += size;
- db_printf("%-*" DDB_EXPR_FMT "x", width, value);
+ db_printf("%-*" PRIx64, width, value);
break;
case 'm': /* hex dump */
/*
* Print off in chunks of size. Try to print 16
- * bytes at a time into 4 columns. This
+ * bytes at a time into 16/size columns. This
* loops modify's count extra times in order
* to get the nicely formatted lines.
*/
@@ -152,7 +152,7 @@
1, false);
#endif
db_printf(
- "%02" DDB_EXPR_FMT "x",
+ "%02" PRIx64,
value);
bytes++;
if (!(bytes % size))
@@ -174,25 +174,25 @@
db_printf("\n");
break;
case 'z': /* signed hex */
- value = db_get_value(addr, size, true);
+ value = db_get_qvalue(addr, size, true);
addr += size;
db_format_hex(tbuf, 24, value, false);
db_printf("%-*s", width, tbuf);
break;
case 'd': /* signed decimal */
- value = db_get_value(addr, size, true);
+ value = db_get_qvalue(addr, size, true);
addr += size;
- db_printf("%-*" DDB_EXPR_FMT "d", width, value);
+ db_printf("%-*" PRId64, width, value);
break;
case 'u': /* unsigned decimal */
- value = db_get_value(addr, size, false);
+ value = db_get_qvalue(addr, size, false);
addr += size;
- db_printf("%-*" DDB_EXPR_FMT "u", width, value);
+ db_printf("%-*" PRIu64, width, value);
break;
case 'o': /* unsigned octal */
- value = db_get_value(addr, size, false);
+ value = db_get_qvalue(addr, size, false);
addr += size;
- db_printf("%-*" DDB_EXPR_FMT "o", width, value);
+ db_printf("%-*" PRIo64, width, value);
break;
case 'c': /* character */
value = db_get_value(addr, 1, false);
Home |
Main Index |
Thread Index |
Old Index