add print raw data capability for rd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I recent make a patch which give the rd command to dump the raw data. With this,
we could then do the dump the specified range of memory to the file
with console's
redirection feature like: rd -r 0x7000000 -e 0x8000000 > dump.img.

What about this idea? Could it be accepted?

Thanks,
Lei

>From f60eee5520993d823cf705ecea62b8d60166f3ae Mon Sep 17 00:00:00 2001
From: Lei Wen <leiwen@xxxxxxxxxxx>
Date: Thu, 29 Sep 2011 20:03:29 -0700
Subject: [PATCH] rd: add option to dump the raw format

Signed-off-by: Lei Wen <leiwen@xxxxxxxxxxx>
---
 help.c   |    3 ++-
 memory.c |   13 ++++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/help.c b/help.c
index b8db00a..987bd95 100755
--- a/help.c
+++ b/help.c
@@ -1396,7 +1396,7 @@ NULL
 char *help_rd[] = {
 "rd",
 "read memory",
-"[-adDsSupxmfN][-8|-16|-32|-64][-o offs][-e addr] [address|symbol] [count]",
+"[-adDsSupxrmfN][-8|-16|-32|-64][-o offs][-e addr] [address|symbol] [count]",
 "  This command displays the contents of memory, with the output formatted",
 "  in several different manners.  The starting address may be entered either",
 "  symbolically or by address.  The default output size is the size of a long",
@@ -1426,6 +1426,7 @@ char *help_rd[] = {
 "           non-printable character.",
 "       -N  display output in network byte order (only valid for 16-
and 32-bit",
 "           values)",
+"       -r  dump the address as raw format",
 "  -o offs  offset the starting address by offs.",
 "  -e addr  display memory until reaching specified ending
hexadecimal address.",
 "  address  starting hexadecimal address:",
diff --git a/memory.c b/memory.c
index 9575d8e..985e2ec 100755
--- a/memory.c
+++ b/memory.c
@@ -264,6 +264,7 @@ static void dump_page_flags(ulonglong);
 #define SLAB_CACHE    (0x1000)
 #define DISPLAY_ASCII (0x2000)
 #define NET_ENDIAN    (0x4000)
+#define DISPLAY_RAW   (0x8000)
 #define DISPLAY_TYPES
(DISPLAY_ASCII|DISPLAY_8|DISPLAY_16|DISPLAY_32|DISPLAY_64)

 #define ASCII_UNLIMITED ((ulong)(-1) >> 1)
@@ -973,9 +974,12 @@ cmd_rd(void)
 	memtype = KVADDR;
 	count = -1;

-        while ((c = getopt(argcnt, args, "axme:pfudDusSNo:81:3:6:")) != EOF) {
+        while ((c = getopt(argcnt, args, "raxme:pfudDusSNo:81:3:6:")) != EOF) {
                 switch(c)
 		{
+		case 'r':
+                        flag |= DISPLAY_RAW;
+			break;
 		case 'a':
 			flag &= ~DISPLAY_TYPES;
                         flag |= DISPLAY_ASCII;
@@ -1291,6 +1295,13 @@ display_memory(ulonglong addr, long count,
ulong flag, int memtype)
 	for (i = a = 0; i < count; i++) {
 		readmem(addr, memtype, location, typesz,
 			readtype, FAULT_ON_ERROR);
+		if (flag & DISPLAY_RAW) {
+			for (j = 0; j < typesz; j++)
+				fputc(*(char *)(location + j), fp);
+
+			addr += typesz;
+			continue;
+		}

                 if (!(flag & DISPLAY_ASCII) && ((i % per_line) == 0)) {
                         if (i) {
-- 
1.7.0.4

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility


[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux