gdb/libkvm problem - can someone explain this?

Dorr H. Clark dclark at
Wed Nov 4 23:07:30 UTC 2009

With FreeBSD 4.x, gdb -k is able to read and interpret
the last 4 bytes of a page (4k) boundary.

In BSD 6.x/7.x/8.x using the kgdb program,
if one issues the kgdb command:
  (gdb) x /x 0xcbed8ffd
An "invalid address" error is returned.  

However, if one issues the command:
  (gdb) x /10x 0xcbed8ff0
it is able to read the memory (and past) just fine.

The following patch returns the usr/src/lib/libkvm/kvm_i386.c 
behavior closer to the BSD4.x version and seems to remedy this situation.

@@ -289,11 +289,13 @@
 #define        PG_FRAME4M      (~PAGE4M_MASK)
                pde_pa = ((u_long)pde & PG_FRAME4M) + (va & PAGE4M_MASK);
                s = _kvm_pa2off(kd, pde_pa, &ofs);
+#if 0
                if (s < sizeof pde) {
                        _kvm_syserr(kd, kd->program,
                            "_kvm_vatop: pde_pa not found");
                        goto invalid;
                *pa = ofs;
                return (NBPDR - (va & PAGE4M_MASK));

Does anyone see any problem or have any comments about this?

Paul Lai

Dorr H. Clark

Graduate School of Engineering
Santa Clara University
Santa Clara, CA.

More information about the freebsd-bugs mailing list