Page MenuHomeFreeBSD

D12279.id33638.diff
No OneTemporary

D12279.id33638.diff

Index: lib/libkvm/kvm.c
===================================================================
--- lib/libkvm/kvm.c
+++ lib/libkvm/kvm.c
@@ -500,5 +500,5 @@
if (kd->arch->ka_walk_pages == NULL)
return (0);
- return kd->arch->ka_walk_pages(kd, cb, closure);
+ return (kd->arch->ka_walk_pages(kd, cb, closure));
}
Index: lib/libkvm/kvm_aarch64.h
===================================================================
--- lib/libkvm/kvm_aarch64.h
+++ lib/libkvm/kvm_aarch64.h
@@ -44,8 +44,8 @@
#define AARCH64_ATTR_MASK 0xfff0000000000fff
#define AARCH64_ATTR_UXN (1UL << 54)
#define AARCH64_ATTR_PXN (1UL << 53)
-#define AARCH64_ATTR_XN (AARCH64_ATTR_PXN | AARCH64_ATTR_UXN)
-#define AARCH64_ATTR_AP(x) ((x) << 6)
+#define AARCH64_ATTR_XN (AARCH64_ATTR_PXN | AARCH64_ATTR_UXN)
+#define AARCH64_ATTR_AP(x) ((x) << 6)
#define AARCH64_ATTR_AP_RO (1 << 1)
#define AARCH64_ATTR_DESCR_MASK 3
Index: lib/libkvm/kvm_arm.h
===================================================================
--- lib/libkvm/kvm_arm.h
+++ lib/libkvm/kvm_arm.h
@@ -53,7 +53,7 @@
#define ARM_L2_S_OFFSET (ARM_L2_S_SIZE - 1)
#define ARM_L2_S_FRAME (~ARM_L2_S_OFFSET)
#define ARM_L2_S_SHIFT 12
-#define ARM_L2_TEX1 0x00000080
+#define ARM_L2_TEX1 0x00000080
#define ARM_PTE2_RO ARM_L2_TEX1
#define ARM_L2_NX 0x00000001
#define ARM_PTE2_NX ARM_L2_NX
Index: lib/libkvm/kvm_minidump_aarch64.c
===================================================================
--- lib/libkvm/kvm_minidump_aarch64.c
+++ lib/libkvm/kvm_minidump_aarch64.c
@@ -122,13 +122,11 @@
aarch64_round_page(vmst->hdr.pmapsize);
if (_kvm_pt_init(kd, vmst->hdr.bitmapsize, off, sparse_off,
AARCH64_PAGE_SIZE, sizeof(uint64_t)) == -1) {
- _kvm_err(kd, kd->program, "cannot load core bitmap");
return (-1);
}
off += aarch64_round_page(vmst->hdr.bitmapsize);
if (_kvm_pmap_init(kd, vmst->hdr.pmapsize, off) == -1) {
- _kvm_err(kd, kd->program, "cannot load page map");
return (-1);
}
off += aarch64_round_page(vmst->hdr.pmapsize);
Index: lib/libkvm/kvm_minidump_amd64.c
===================================================================
--- lib/libkvm/kvm_minidump_amd64.c
+++ lib/libkvm/kvm_minidump_amd64.c
@@ -66,6 +66,11 @@
return prot;
}
+/*
+ * Version 2 minidumps use page directory entries, while version 1 use page
+ * table entries.
+ */
+
static amd64_pde_t
_amd64_pde_get(kvm_t *kd, u_long pdeindex)
{
@@ -157,13 +162,11 @@
amd64_round_page(vmst->hdr.pmapsize);
if (_kvm_pt_init(kd, vmst->hdr.bitmapsize, off, sparse_off,
AMD64_PAGE_SIZE, sizeof(uint64_t)) == -1) {
- _kvm_err(kd, kd->program, "cannot load core bitmap");
return (-1);
}
off += amd64_round_page(vmst->hdr.bitmapsize);
if (_kvm_pmap_init(kd, vmst->hdr.pmapsize, off) == -1) {
- _kvm_err(kd, kd->program, "cannot load page map");
return (-1);
}
off += amd64_round_page(vmst->hdr.pmapsize);
Index: lib/libkvm/kvm_minidump_arm.c
===================================================================
--- lib/libkvm/kvm_minidump_arm.c
+++ lib/libkvm/kvm_minidump_arm.c
@@ -128,13 +128,11 @@
arm_round_page(vmst->hdr.ptesize);
if (_kvm_pt_init(kd, vmst->hdr.bitmapsize, off, sparse_off,
ARM_PAGE_SIZE, sizeof(uint32_t)) == -1) {
- _kvm_err(kd, kd->program, "cannot load core bitmap");
return (-1);
}
off += arm_round_page(vmst->hdr.bitmapsize);
if (_kvm_pmap_init(kd, vmst->hdr.ptesize, off) == -1) {
- _kvm_err(kd, kd->program, "cannot load page map");
return (-1);
}
off += arm_round_page(vmst->hdr.ptesize);
Index: lib/libkvm/kvm_minidump_i386.c
===================================================================
--- lib/libkvm/kvm_minidump_i386.c
+++ lib/libkvm/kvm_minidump_i386.c
@@ -124,13 +124,11 @@
i386_round_page(vmst->hdr.ptesize);
if (_kvm_pt_init(kd, vmst->hdr.bitmapsize, off, sparse_off,
I386_PAGE_SIZE, sizeof(uint32_t)) == -1) {
- _kvm_err(kd, kd->program, "cannot load core bitmap");
return (-1);
}
off += i386_round_page(vmst->hdr.bitmapsize);
if (_kvm_pmap_init(kd, vmst->hdr.ptesize, off) == -1) {
- _kvm_err(kd, kd->program, "cannot load page map");
return (-1);
}
off += i386_round_page(vmst->hdr.ptesize);
Index: lib/libkvm/kvm_minidump_mips.c
===================================================================
--- lib/libkvm/kvm_minidump_mips.c
+++ lib/libkvm/kvm_minidump_mips.c
@@ -127,13 +127,11 @@
mips_round_page(vmst->hdr.ptesize);
if (_kvm_pt_init(kd, vmst->hdr.bitmapsize, off, sparse_off,
MIPS_PAGE_SIZE, sizeof(uint32_t)) == -1) {
- _kvm_err(kd, kd->program, "cannot load core bitmap");
return (-1);
}
off += mips_round_page(vmst->hdr.bitmapsize);
if (_kvm_pmap_init(kd, vmst->hdr.ptesize, off) == -1) {
- _kvm_err(kd, kd->program, "cannot load page map");
return (-1);
}
off += mips_round_page(vmst->hdr.ptesize);
Index: lib/libkvm/kvm_private.c
===================================================================
--- lib/libkvm/kvm_private.c
+++ lib/libkvm/kvm_private.c
@@ -328,8 +328,10 @@
res = map_len;
pc_bins = 1 + (res * NBBY + POPCOUNT_BITS / 2) / POPCOUNT_BITS;
kd->pt_popcounts = calloc(pc_bins, sizeof(uint32_t));
- if (kd->pt_popcounts == NULL)
+ if (kd->pt_popcounts == NULL) {
+ _kvm_err(kd, kd->program, "cannot allocate popcount bins");
return (-1);
+ }
for (popcount_bin = &kd->pt_popcounts[1]; res > 0;
addr++, res -= sizeof(*addr)) {
@@ -356,12 +358,13 @@
* this is much larger than is reasonable to read in up front, so
* mmap it in instead.
*/
- kd->sparse_map = mmap(NULL, kd->pt_sparse_size, PROT_READ, 0,
- kd->pmfd, kd->pt_sparse_off);
+ kd->sparse_map = mmap(NULL, kd->pt_sparse_size, PROT_READ,
+ MAP_PRIVATE, kd->pmfd, kd->pt_sparse_off);
if (kd->sparse_map == MAP_FAILED) {
_kvm_err(kd, kd->program, "cannot map %" PRIu64
- " bytes from offset %ld for sparse map",
- kd->pt_sparse_size, kd->pt_sparse_off);
+ " bytes from fd %d offset %ld for sparse map: %s",
+ kd->pt_sparse_size, kd->pmfd,
+ kd->pt_sparse_off, strerror(errno));
return (-1);
}
return (0);

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 29, 10:54 AM (3 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32344431
Default Alt Text
D12279.id33638.diff (5 KB)

Event Timeline