aboutsummaryrefslogtreecommitdiff
path: root/gnu/usr.bin/gdb/gdb/kcorelow.c
diff options
context:
space:
mode:
authorGary Jennejohn <gj@FreeBSD.org>1996-10-29 21:52:21 +0000
committerGary Jennejohn <gj@FreeBSD.org>1996-10-29 21:52:21 +0000
commitb7eed0a0c1984832f78d6c635d57a66ba0e5ca8c (patch)
tree891fbd433103bfa7e901b3c1944670e44258f3e6 /gnu/usr.bin/gdb/gdb/kcorelow.c
parentf3f639a106a17c4271746a977001029abc45a90b (diff)
downloadsrc-b7eed0a0c1984832f78d6c635d57a66ba0e5ca8c.tar.gz
src-b7eed0a0c1984832f78d6c635d57a66ba0e5ca8c.zip
changes to gdb to:
1) add Garrett Wollman's trap frame resolving mods 2) make the `proc' command (kernel debugging) really work 3) allow use of a pid with the `proc' command (previously you had to provide the address of the proc structure) Unfortunately, the `proc' command won't work while doing remote debugging.
Notes
Notes: svn path=/head/; revision=19258
Diffstat (limited to 'gnu/usr.bin/gdb/gdb/kcorelow.c')
-rw-r--r--gnu/usr.bin/gdb/gdb/kcorelow.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/gnu/usr.bin/gdb/gdb/kcorelow.c b/gnu/usr.bin/gdb/gdb/kcorelow.c
index e08c486b3fef..0439dcdc2fa0 100644
--- a/gnu/usr.bin/gdb/gdb/kcorelow.c
+++ b/gnu/usr.bin/gdb/gdb/kcorelow.c
@@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: kcorelow.c,v 1.3 1995/04/26 01:01:09 jkh Exp $
+ $Id: kcorelow.c,v 1.4 1995/05/30 04:57:22 rgrimes Exp $
*/
#include "defs.h"
@@ -31,6 +31,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include <sys/time.h>
#include <sys/proc.h>
#include <sys/user.h>
+#include <sys/sysctl.h>
#include "frame.h" /* required by inferior.h */
#include "inferior.h"
#include "symtab.h"
@@ -67,7 +68,8 @@ static CORE_ADDR kernel_start;
#define kvread(addr, p) \
(target_read_memory((CORE_ADDR)(addr), (char *)(p), sizeof(*(p))))
-extern read_pcb (int, CORE_ADDR);
+int read_pcb (int, CORE_ADDR);
+extern struct kinfo_proc* kvm_getprocs (int, int, CORE_ADDR, int*);
CORE_ADDR
ksym_lookup(name)
@@ -322,6 +324,8 @@ set_proc_cmd(arg)
char *arg;
{
CORE_ADDR paddr;
+ struct kinfo_proc *kp;
+ int cnt = 0;
if (!arg)
error_no_arg("proc address for new current process");
@@ -329,8 +333,19 @@ set_proc_cmd(arg)
error("not debugging kernel");
paddr = (CORE_ADDR)parse_and_eval_address(arg);
- if (set_proc_context(paddr))
- error("invalid proc address");
+fprintf(stderr, "paddr %#x kernel_start %#x ", paddr, kernel_start);
+ /* assume it's a proc pointer if it's in the kernel */
+ if (paddr >= kernel_start) {
+ if (set_proc_context(paddr))
+ error("invalid proc address");
+ } else {
+ kp = kvm_getprocs(core_kd, KERN_PROC_PID, paddr, &cnt);
+fprintf(stderr, "cnt %d\n", cnt);
+ if (!cnt)
+ error("invalid pid");
+ if (set_proc_context((CORE_ADDR)kp->kp_eproc.e_paddr))
+ error("invalid proc address");
+ }
}
struct target_ops kcore_ops = {