Hi Mike Larkin,

since pmap_kernel is randomized, savecore(libkvm) cannot save core
dump from dump device. (savecore: magic number mismatch)

updating PTDpaddr fixes this issue.

by the way, is there any problem to use proc0.p_addr->u_pcb.pcb_cr3
instead of PTDpaddr in cpu_dump()?

--
FUKAUMI Naoki

Index: sys/arch/amd64/amd64/pmap.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/pmap.c,v
retrieving revision 1.128
diff -u -p -u -p -r1.128 pmap.c
--- sys/arch/amd64/amd64/pmap.c 1 Feb 2019 21:48:48 -0000       1.128
+++ sys/arch/amd64/amd64/pmap.c 13 Feb 2019 07:43:27 -0000
@@ -835,6 +835,9 @@ pmap_randomize(void)
        pmap_kernel()->pm_pdir = pml4va;
        proc0.p_addr->u_pcb.pcb_cr3 = pml4pa;
 
+       /* Fixup PTDpaddr for libkvm */
+       PTDpaddr = pml4pa;
+
        /* Fixup recursive PTE PML4E slot. We are only changing the PA */       
        pml4va[PDIR_SLOT_PTE] = pml4pa | (pml4va[PDIR_SLOT_PTE] & ~PG_FRAME);
 

Reply via email to