[Crash-utility] add print raw data capability for rd
Dave Anderson
anderson at redhat.com
Fri Sep 30 18:01:22 UTC 2011
----- Original Message -----
> 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
I think it's a pretty good idea.
However, one problem with the patch is that if you forget to append
the "> dump.img" part, it would end up spewing non-ASCII data to
the terminal. I would suggest using a construct like "-r dump.img",
which would force the user to supply a filename argument with
the -r.
Also, maybe you could write a more efficient output function that
ignores the "typesz", and fwrite()'s larger fixed-size blocks of
data until it reaches the end of the desired memory chunk.
Thanks,
Dave
> >From f60eee5520993d823cf705ecea62b8d60166f3ae Mon Sep 17 00:00:00
> >2001
> From: Lei Wen <leiwen at marvell.com>
> 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 at marvell.com>
> ---
> 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 at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
More information about the Crash-utility
mailing list