Thread (7 messages) 7 messages, 4 authors, 2017-02-27

Re: [PATCH 1/1] powerpc/xmon: Dump memory in native endian format.

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2017-02-21 05:01:25

Douglas Miller [off-list ref] writes:
quoted hunk ↗ jump to hunk
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help