Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Nov 2009 15:06:17 -0800 (PST)
From:      "Dorr H. Clark" <dclark@engr.scu.edu>
To:        freebsd-stable@freebsd.org
Cc:        freebsd-hackers@freebsd.org, freebsd-bugs@freebsd.org
Subject:   gdb/libkvm problem - can someone explain this?
Message-ID:  <Pine.GSO.4.21.0911041504420.29358-100000@nova32.dc.engr.scu.edu>
In-Reply-To: <Pine.GSO.4.21.0910271711580.17024-100000@nova46.dc.engr.scu.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

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





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.21.0911041504420.29358-100000>