Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 May 2016 19:32:07 +0000 (UTC)
From:      "Pedro F. Giffuni" <pfg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r298938 - head/sys/ddb
Message-ID:  <201605021932.u42JW7KD012297@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pfg
Date: Mon May  2 19:32:06 2016
New Revision: 298938
URL: https://svnweb.freebsd.org/changeset/base/298938

Log:
  Enhance the ddb examine (x) command.
  
  * Change x/a to work similar to gdb.  The content of the memory is
    treated as an address, printed symbolically and the address is advanced.
    This way you can x/a <stack_address> and then just hit return a bunch
    of times to locate useful data on the stack.
  
  * Add x/p.  The content of the memory is treated as an address and
    printed as hex.
  
  This is based on the similar commit from DragonFlyBSD without the
  cosmetic changes.
  
  Relnotes:	yes
  Obtained from:	DragonflyBSD (Matthew Dillon)
  Reference:	0624d20e86affcd708609cbf9014207537537a72

Modified:
  head/sys/ddb/db_examine.c

Modified: head/sys/ddb/db_examine.c
==============================================================================
--- head/sys/ddb/db_examine.c	Mon May  2 19:15:16 2016	(r298937)
+++ head/sys/ddb/db_examine.c	Mon May  2 19:32:06 2016	(r298938)
@@ -89,15 +89,6 @@ db_examine(db_addr_t addr, char *fmt, in
 		    case 'g':
 			size = 8;
 			break;
-		    case 'a':	/* address */
-			size = sizeof(void *);
-			/* always forces a new line */
-			if (db_print_position() != 0)
-			    db_printf("\n");
-			db_prev = addr;
-			db_printsym(addr, DB_STGY_ANY);
-			db_printf(":\t");
-			break;
 		    default:
 			if (db_print_position() == 0) {
 			    /* Print the address. */
@@ -108,6 +99,18 @@ db_examine(db_addr_t addr, char *fmt, in
 
 			width = size * 4;
 			switch (c) {
+			    case 'a':	/* address */
+				size = sizeof(void *);
+				value = db_get_value(addr, size, TRUE);
+				addr += size;
+				db_printsym(value, DB_STGY_ANY);
+				break;
+			    case 'p':
+				size = sizeof(void *);
+				value = db_get_value(addr, size, TRUE);
+				addr += size;
+				db_printf("%p", (void *)value);
+				break;
 			    case 'r':	/* signed, current radix */
 				value = db_get_value(addr, size, true);
 				addr += size;
@@ -173,7 +176,7 @@ db_examine(db_addr_t addr, char *fmt, in
 			    default:
 				break;
 			}
-			if (db_print_position() != 0)
+			if (db_print_position() != 0 || c == 'a' || c == 'p')
 			    db_end_line(1);
 			break;
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605021932.u42JW7KD012297>