diff options
author | Gary Jennejohn <gj@FreeBSD.org> | 1996-10-29 21:52:21 +0000 |
---|---|---|
committer | Gary Jennejohn <gj@FreeBSD.org> | 1996-10-29 21:52:21 +0000 |
commit | b7eed0a0c1984832f78d6c635d57a66ba0e5ca8c (patch) | |
tree | 891fbd433103bfa7e901b3c1944670e44258f3e6 /gnu/usr.bin/gdb/gdb/kcorelow.c | |
parent | f3f639a106a17c4271746a977001029abc45a90b (diff) | |
download | src-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.c | 23 |
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 = { |