----- Original Message ----- > Below you find my version of the ptov function. I have just added a > few lines and placed them under "#if defined(ARM)". The test is > reasonable for ARM so I would appreciate if you include it. For > other platforms please do whatever you like. > > Jan > > > void > cmd_ptov(void) > { > int c; > ulong vaddr; > physaddr_t paddr; > #if defined(ARM) > physaddr_t paddr_tst; > #endif > char buf1[BUFSIZE]; > char buf2[BUFSIZE]; > int others; > > while ((c = getopt(argcnt, args, "")) != EOF) { > switch(c) > { > default: > argerrs++; > break; > } > } > > if (argerrs || !args[optind]) > cmd_usage(pc->curcmd, SYNOPSIS); > > others = 0; > while (args[optind]) { > paddr = htoll(args[optind], FAULT_ON_ERROR, NULL); > vaddr = PTOV(paddr); > > #if defined(ARM) > if (kvtop(0, vaddr, &paddr_tst, 0) && paddr_tst==paddr) { > #endif > fprintf(fp, "%s%s %s\n", others++ ? "\n" : "", > mkstring(buf1, VADDR_PRLEN, LJUST, "VIRTUAL"), > mkstring(buf2, VADDR_PRLEN, LJUST, "PHYSICAL")); > fprintf(fp, "%s %s\n", > mkstring(buf1, VADDR_PRLEN, LJUST|LONG_HEX, MKSTR(vaddr)), > mkstring(buf2, VADDR_PRLEN, LJUST|LONGLONG_HEX, > MKSTR(&paddr))); > #if defined(ARM) > } else { > fprintf(fp, "Unknown virtual address for physical address > 0x%08llx\n", paddr); > } > #endif > > optind++; > } > } I hate the "#ifdef ARM" sections and the error message doesn't fit into multiple-argument usage. How's this work for you? --- crash-6.0.8/memory.c.orig 2012-07-06 11:28:13.000000000 -0400 +++ crash-6.0.8/memory.c 2012-07-06 11:32:02.000000000 -0400 @@ -2975,9 +2975,9 @@ void cmd_ptov(void) { - int c; + int c, unknown; ulong vaddr; - physaddr_t paddr; + physaddr_t paddr, paddr_test; char buf1[BUFSIZE]; char buf2[BUFSIZE]; int others; @@ -2999,10 +2999,14 @@ paddr = htoll(args[optind], FAULT_ON_ERROR, NULL); vaddr = PTOV(paddr); + unknown = BITS32() && (!kvtop(0, vaddr, &paddr_test, 0) || + (paddr_test != paddr)); + fprintf(fp, "%s%s %s\n", others++ ? "\n" : "", mkstring(buf1, VADDR_PRLEN, LJUST, "VIRTUAL"), mkstring(buf2, VADDR_PRLEN, LJUST, "PHYSICAL")); - fprintf(fp, "%s %s\n", + fprintf(fp, "%s %s\n", unknown ? + mkstring(buf1, VADDR_PRLEN, LJUST, "unknown") : mkstring(buf1, VADDR_PRLEN, LJUST|LONG_HEX, MKSTR(vaddr)), mkstring(buf2, VADDR_PRLEN, LJUST|LONGLONG_HEX, With one my sample ARM dumps, it looks like this: crash> kmem -p PAGE PHYSICAL MAPPING INDEX CNT FLAGS c0b47000 80000000 0 0 0 0 c0b47020 80001000 0 0 0 0 c0b47040 80002000 0 0 0 0 ... [ cut ] ... c0d46fa0 8fffd000 0 0 1 400 c0d46fc0 8fffe000 0 0 1 400 c0d46fe0 8ffff000 0 0 1 400 crash> crash> ptov 7ffff000 80000000 8ffff000 9000000 VIRTUAL PHYSICAL unknown 7ffff000 VIRTUAL PHYSICAL c0000000 80000000 VIRTUAL PHYSICAL cffff000 8ffff000 VIRTUAL PHYSICAL unknown 9000000 crash> Dave
--- crash-6.0.8/memory.c.orig 2012-07-06 11:28:13.000000000 -0400 +++ crash-6.0.8/memory.c 2012-07-06 11:32:02.000000000 -0400 @@ -2975,9 +2975,9 @@ void cmd_ptov(void) { - int c; + int c, unknown; ulong vaddr; - physaddr_t paddr; + physaddr_t paddr, paddr_test; char buf1[BUFSIZE]; char buf2[BUFSIZE]; int others; @@ -2999,10 +2999,14 @@ paddr = htoll(args[optind], FAULT_ON_ERROR, NULL); vaddr = PTOV(paddr); + unknown = BITS32() && (!kvtop(0, vaddr, &paddr_test, 0) || + (paddr_test != paddr)); + fprintf(fp, "%s%s %s\n", others++ ? "\n" : "", mkstring(buf1, VADDR_PRLEN, LJUST, "VIRTUAL"), mkstring(buf2, VADDR_PRLEN, LJUST, "PHYSICAL")); - fprintf(fp, "%s %s\n", + fprintf(fp, "%s %s\n", unknown ? + mkstring(buf1, VADDR_PRLEN, LJUST, "unknown") : mkstring(buf1, VADDR_PRLEN, LJUST|LONG_HEX, MKSTR(vaddr)), mkstring(buf2, VADDR_PRLEN, LJUST|LONGLONG_HEX, MKSTR(&paddr)));
-- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility