gdb/libkvm problem - can someone explain this?

Dorr H. Clark dclark at engr.scu.edu
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;
                }
+#endif
                *pa = ofs;
                return (NBPDR - (va & PAGE4M_MASK));
        }

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

Paul Lai
Engineer

Dorr H. Clark
Advisor

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

http://www.cse.scu.edu/~dclark/coen_284_FreeBSD/libkvm_problem.txt




More information about the freebsd-stable mailing list