[PATCH 1/1] powerpc/xmon: Dump memory in native endian format.
Michael Ellerman
mpe at ellerman.id.au
Tue Feb 21 16:01:22 AEDT 2017
Douglas Miller <dougmill at linux.vnet.ibm.com> writes:
> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> index 9c0e17c..6249975 100644
> --- a/arch/powerpc/xmon/xmon.c
> +++ b/arch/powerpc/xmon/xmon.c
> @@ -2334,9 +2338,49 @@ static void dump_pacas(void)
> }
> #endif
>
> +static void dump_by_size(unsigned long addr, long count, int size)
> +{
> + unsigned char temp[16];
> + int i, j;
> + u64 val;
> +
> + /*
> + * 'count' was aligned 16. If that changes, the following
> + * must also change to accommodate other values for 'count'.
> + */
> + for (i = 0; i < count; i += 16, addr += 16) {
> + printf(REG, addr);
> +
> + if (mread(addr, temp, 16) != 16) {
> + printf("Faulted reading %d bytes from 0x"REG"\n", 16, addr);
> + return;
> + }
> +
> + for (j = 0; j < 16; j += size) {
> + putchar(' ');
> + switch (size) {
> + case 1: val = temp[j]; break;
> + case 2: val = *(u16 *)&temp[j]; break;
> + case 4: val = *(u32 *)&temp[j]; break;
> + case 8: val = *(u64 *)&temp[j]; break;
> + default: val = 0;
> + }
> +
> + printf("%0*lx", size * 2, val);
> + }
> + printf(" |");
> + for (j = 0; j < 16; ++j) {
> + val = temp[j];
> + putchar(' ' <= val && val <= '~' ? val : '.');
> + }
> + printf("|\n");
I know the ascii dump looks nice, but I think it's misleading. Which is
why I omitted it from my version.
eg.
0:mon> d $__kstrtab_init_task
c000000000c03ebe 696e69745f746173 6b006d6d755f6665 |init_task.mmu_fe|
c000000000c03ece 61747572655f6b65 7973006370755f66 |ature_keys.cpu_f|
c000000000c03ede 6561747572655f6b 657973006375725f |eature_keys.cur_|
c000000000c03eee 6370755f73706563 00766972715f746f |cpu_spec.virq_to|
0:mon> d8 $__kstrtab_init_task
c000000000c03ebe 7361745f74696e69 65665f756d6d006b |init_task.mmu_fe|
c000000000c03ece 656b5f6572757461 665f757063007379 |ature_keys.cpu_f|
c000000000c03ede 6b5f657275746165 5f72756300737965 |eature_keys.cur_|
c000000000c03eee 636570735f757063 6f745f7172697600 |cpu_spec.virq_to|
That second dump says at c000000000c03ebe there is a byte with the value
0x73, which prints as 'i' - but that's false.
So I've dropped the ascii printing for now because I want to sneak this
in to v4.11.
If you want to send a follow-up patch to do the ascii byte reversed that
would be nice.
cheers
More information about the Linuxppc-dev
mailing list