svn commit: r259910 - head/lib/libkvm
Marcel Moolenaar
marcel at FreeBSD.org
Thu Dec 26 07:10:55 UTC 2013
Author: marcel
Date: Thu Dec 26 07:10:54 2013
New Revision: 259910
URL: http://svnweb.freebsd.org/changeset/base/259910
Log:
Fix "kptdir is itself virtual" error, caused by having the kptdir in PBVM.
While here improve errors by having them include addresses (either virtual
or physical).
Modified:
head/lib/libkvm/kvm_ia64.c
Modified: head/lib/libkvm/kvm_ia64.c
==============================================================================
--- head/lib/libkvm/kvm_ia64.c Thu Dec 26 05:54:58 2013 (r259909)
+++ head/lib/libkvm/kvm_ia64.c Thu Dec 26 07:10:54 2013 (r259910)
@@ -100,20 +100,23 @@ _kvm_pa2off(kvm_t *kd, uint64_t pa, off_
Elf64_Phdr *p = (Elf64_Phdr*)((char*)e + e->e_phoff);
int n = e->e_phnum;
- if (pa != REGION_ADDR(pa)) {
- _kvm_err(kd, kd->program, "internal error");
- return (0);
- }
+ if (pa != REGION_ADDR(pa))
+ goto fail;
while (n && (pa < p->p_paddr || pa >= p->p_paddr + p->p_memsz))
p++, n--;
if (n == 0)
- return (0);
+ goto fail;
*ofs = (pa - p->p_paddr) + p->p_offset;
if (pgsz == 0)
return (p->p_memsz - (pa - p->p_paddr));
return (pgsz - ((size_t)pa & (pgsz - 1)));
+
+ fail:
+ _kvm_err(kd, kd->program, "invalid physical address %#llx",
+ (unsigned long long)pa);
+ return (0);
}
static ssize_t
@@ -225,7 +228,7 @@ _kvm_initvtop(kvm_t *kd)
return (-1);
}
- if (va < REGION_BASE(6)) {
+ if (va == REGION_BASE(5)) {
_kvm_err(kd, kd->program, "kptdir is itself virtual");
return (-1);
}
@@ -286,7 +289,8 @@ _kvm_kvatop(kvm_t *kd, u_long va, off_t
}
fail:
- _kvm_err(kd, kd->program, "invalid kernel virtual address");
+ _kvm_err(kd, kd->program, "invalid kernel virtual address %#llx",
+ (unsigned long long)va);
*ofs = ~0UL;
return (0);
}
More information about the svn-src-all
mailing list