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-bugs
mailing list