Check for uninitialized data and print a message if that is the case.
* ddb/db_examine.c (db_xcdump) (data_uninitialized): New variable.
(db_xcdump): Check if data is uninitialized.
(db_xcdump): Print a message if that is the case.
---
ddb/db_examine.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/ddb/db_examine.c b/ddb/db_examine.c
index 7820396..1ceff41 100644
--- a/ddb/db_examine.c
+++ b/ddb/db_examine.c
@@ -458,6 +458,7 @@ db_xcdump(addr, size, count, task)
db_addr_t off;
char *name;
char data[DB_XCDUMP_NC];
+ boolean_t data_uninitialized = TRUE;
db_find_task_sym_and_offset(addr, &name, &off, task);
for (n = count*size; n > 0; n -= bcount) {
@@ -474,7 +475,8 @@ db_xcdump(addr, size, count, task)
if (!DB_CHECK_ACCESS(next_page_addr, sizeof(int), task))
bcount = next_page_addr - addr;
}
- db_read_bytes(addr, bcount, data, DB_XCDUMP_NC, task);
+ if (db_read_bytes(addr, bcount, data, DB_XCDUMP_NC, task) == 0)
+ data_uninitialized = FALSE;
for (i = 0; i < bcount && off != 0; i += size) {
if (i % 4 == 0)
db_printf(" ");
@@ -488,11 +490,15 @@ db_xcdump(addr, size, count, task)
"");
bcount = i;
db_printf("%s*", (size != 1)? " ": "");
- for (i = 0; i < bcount; i++) {
- value = data[i];
- db_printf("%c", (value >= ' ' && value <= '~')? value: '.');
+ if (!data_uninitialized) {
+ for (i = 0; i < bcount; i++) {
+ value = data[i];
+ db_printf("%c", (value >= ' ' && value <= '~')? value:
'.');
+ }
+ db_printf("*\n");
}
- db_printf("*\n");
+ else
+ db_printf("\nuninitialized data\n");
}
return(addr);
}
--
1.8.1.4