Module Name:    src
Committed By:   matt
Date:           Sat Jun  6 22:06:05 UTC 2015

Modified Files:
        src/sys/ddb: db_access.c db_examine.c db_write_cmd.c

Log Message:
Add support for 'q' qualifier for 64-bit values on examine and write.
Align data to long so that the MD parts can use aligned load/stores.
Don't use db_extend but use db_expr_t based expressions.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/ddb/db_access.c
cvs rdiff -u -r1.35 -r1.36 src/sys/ddb/db_examine.c
cvs rdiff -u -r1.26 -r1.27 src/sys/ddb/db_write_cmd.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/ddb/db_access.c
diff -u src/sys/ddb/db_access.c:1.21 src/sys/ddb/db_access.c:1.22
--- src/sys/ddb/db_access.c:1.21	Mon Sep 28 05:53:37 2009
+++ src/sys/ddb/db_access.c	Sat Jun  6 22:06:05 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_access.c,v 1.21 2009/09/28 05:53:37 bsh Exp $	*/
+/*	$NetBSD: db_access.c,v 1.22 2015/06/06 22:06:05 matt Exp $	*/
 
 /*
  * Mach Operating System
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_access.c,v 1.21 2009/09/28 05:53:37 bsh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_access.c,v 1.22 2015/06/06 22:06:05 matt Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_kgdb.h"
@@ -55,17 +55,10 @@ __KERNEL_RCSID(0, "$NetBSD: db_access.c,
 
 #if defined(_COMPILE_THIS) || defined(KGDB) && defined(SOFTWARE_SSTEP)
 
-const int db_extend[] = {	/* table for sign-extending */
-	0,
-	0xFFFFFF80,
-	0xFFFF8000,
-	0xFF800000
-};
-
 db_expr_t
 db_get_value(db_addr_t addr, size_t size, bool is_signed)
 {
-	char data[sizeof(db_expr_t)];
+	char data[sizeof(db_expr_t)] __aligned(sizeof(db_expr_t));
 	db_expr_t value;
 	size_t i;
 
@@ -79,15 +72,17 @@ db_get_value(db_addr_t addr, size_t size
 #endif /* BYTE_ORDER */
 		value = (value << 8) + (data[i] & 0xFF);
 
-	if (size < 4 && is_signed && (value & db_extend[size]) != 0)
-		value |= db_extend[size];
+	if (size < sizeof(db_expr_t) && is_signed
+	    && (value & ((db_expr_t)1 << (8*size - 1)))) {
+		value |= ~(db_expr_t)0 << (8*size - 1);
+	}
 	return (value);
 }
 
 void
 db_put_value(db_addr_t addr, size_t size, db_expr_t value)
 {
-	char data[sizeof(db_expr_t)];
+	char data[sizeof(db_expr_t)] __aligned(sizeof(db_expr_t));
 	size_t i;
 
 #if BYTE_ORDER == LITTLE_ENDIAN

Index: src/sys/ddb/db_examine.c
diff -u src/sys/ddb/db_examine.c:1.35 src/sys/ddb/db_examine.c:1.36
--- src/sys/ddb/db_examine.c:1.35	Thu May 26 15:34:14 2011
+++ src/sys/ddb/db_examine.c	Sat Jun  6 22:06:05 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_examine.c,v 1.35 2011/05/26 15:34:14 joerg Exp $	*/
+/*	$NetBSD: db_examine.c,v 1.36 2015/06/06 22:06:05 matt Exp $	*/
 
 /*
  * Mach Operating System
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_examine.c,v 1.35 2011/05/26 15:34:14 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_examine.c,v 1.36 2015/06/06 22:06:05 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -101,6 +101,12 @@ db_examine(db_addr_t addr, char *fmt, in
 				size = 4;
 				width = 12;
 				break;
+			case 'q':
+				if (sizeof(db_expr_t) != sizeof(uint64_t)) {
+					size = -1;
+					db_error("q not supported\n");
+					/*NOTREACHED*/
+				}
 			case 'L':	/* implementation maximum */
 				size = sizeof value;
 				width = 12 * (sizeof value / 4);

Index: src/sys/ddb/db_write_cmd.c
diff -u src/sys/ddb/db_write_cmd.c:1.26 src/sys/ddb/db_write_cmd.c:1.27
--- src/sys/ddb/db_write_cmd.c:1.26	Tue Feb  2 09:04:14 2010
+++ src/sys/ddb/db_write_cmd.c	Sat Jun  6 22:06:05 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_write_cmd.c,v 1.26 2010/02/02 09:04:14 tron Exp $	*/
+/*	$NetBSD: db_write_cmd.c,v 1.27 2015/06/06 22:06:05 matt Exp $	*/
 
 /*
  * Mach Operating System
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_write_cmd.c,v 1.26 2010/02/02 09:04:14 tron Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_write_cmd.c,v 1.27 2015/06/06 22:06:05 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -67,6 +67,15 @@ db_write_cmd(db_expr_t address, bool hav
 	case '\0':
 		size = 4;
 		break;
+	case 'q':
+		if (sizeof(db_expr_t) != sizeof(uint64_t)) {
+			size = -1;
+			db_error("q not supported\n");
+			/*NOTREACHED*/
+		}
+	case 'L':
+		size = sizeof(db_expr_t);
+		break;
 	default:
 		size = -1;
 		db_error("Unknown size\n");

Reply via email to