Commit Graph

47 Commits

Author SHA1 Message Date
David E. O'Brien
9232e635e0 Sperate out the MD parts of kvm-fbsd to get rid of the #ifdef maze.
Also quiet some warnings by tweaking the included headers.
2004-06-11 16:09:38 +00:00
David E. O'Brien
c337dbb2f2 Use pcbp->pcb_ufp for UltraSparc vs. ->pcb_fp. 2004-05-10 17:45:51 +00:00
David E. O'Brien
74483bd440 Follow existing GDB style for frame_info vars. 2004-01-26 06:07:33 +00:00
David E. O'Brien
1099ecff4c Remove trailing white space. 2004-01-26 06:05:04 +00:00
Ian Dowse
ea0d04f36e Attempt to automatically read in kernel module symbols when a live
or dead kernel core is loaded into gdb. This extends gdb's existing
shared library support, so the "info sharedlibrary", "sharedlibrary"
and "nosharedlibrary" commands can be used to view and change the
list of loaded symbol files.

The current implementation is more than a kludge however, and it
will not always manage to find the .ko.debug file corresponding to
the loaded module. In particular, for modules whose build directory
cannot be easily guessed from the module name such as all the
netgraph modules, the debug version of the .ko will not be found
automatically.

The logic for finding the module file first attempts to guess at
the module build directory by parsing the version[] string. Then
using that directory ($DIR), it tries the following paths in turn:

	./<module>.ko.debug		./<module>.ko
	$DIR/<module>.ko.debug		$DIR/<module>.ko
	/boot/kernel/<module>.ko.debug	/boot/kernel/<module>.ko

Approved by:	obrien, mp
2003-03-21 00:30:53 +00:00
Mark Peek
e059894828 Add support for sparc64 kernel debugging.
Submitted by:	tmm
2002-10-21 21:36:36 +00:00
Mark Peek
884a2981a4 Fix function parameter lists to be correct and eliminate compiler warnings. 2002-10-12 18:08:44 +00:00
David E. O'Brien
71791a1d60 Stop using 3 distinct and far varied coding styles in a single file.
Pretend to actually adhere to the GNU coding standards.
2002-09-18 16:14:36 +00:00
Peter Wemm
0f258b75d3 Recognize frames for lcall_syscall and int0x80_syscall.
Reminded by:	bde
2002-07-28 18:46:49 +00:00
David E. O'Brien
2b1f5a4271 Stop trying to reimplement libkvm on i386. Instead use it directly and
consistently on all platforms.

Submitted by:	gallatin
2002-07-10 06:58:25 +00:00
David E. O'Brien
68464ed689 Dike out bits specific to i386. This pretty much means no kgdb for
non-i386 platforms.

I would however like to see a shared file here.  If a function or two cannot
be shared we should create ${TARGET_ARCH}/kvm-fbsd-${TARGET_ARCH}.c.
2002-06-30 04:47:43 +00:00
David E. O'Brien
7b726fea14 Bmake bits for GDB 5.2. 2002-06-29 01:16:01 +00:00
Bruce Evans
6c37e4212e phsyical -> physical
Submitted by:	Andre Guibert de Bruet <andy@siliconlandmark.com>
2002-05-27 13:08:08 +00:00
Peter Wemm
489b85b027 Add missing & 2002-02-08 04:17:33 +00:00
Peter Wemm
656c73dbdf Make this part compile and try and use the p_threads tailq. It might work
but I am not sure, I haven't been able to compile the rest of gdb yet.
2002-02-08 03:19:56 +00:00
John Baldwin
b0492e310b Catch up to the globaldata -> pcpu changes. 2001-12-12 21:15:30 +00:00
Peter Wemm
8dc7644269 *** empty log message *** 2001-12-11 07:04:48 +00:00
Bruce Evans
6eabd84580 Compensate for "Compensate for header dethreading" by backing it out. 2001-10-10 17:48:44 +00:00
Ian Dowse
3c7bcedd06 Remove the Xresume* labels from the i386 interrupt handlers; the
code in ipl.s and icu_ipl.s that used them was removed when the
interrupt thread system was committed. Debuggers also knew about
Xresume* because these labels hide the real names of the interrupt
handlers (Xintr*), and debuggers need to special-case interrupt
handlers to get the interrupt frame.

Both gdb and ddb will now use the Xintr* and Xfastintr* symbols to
detect interrupt frames. Fast interrupt frames were never identified
correctly before, so this fixes the problem of the running stack
frame getting lost in a ddb or gdb trace generated from a fast
interrupt - e.g. when debugging a simple infinite loop in the kernel
using a serial console, the frame containing the loop would never
appear in a gdb or ddb trace.

Reviewed by:	jhb, bde
2001-10-09 19:54:52 +00:00
Ian Dowse
e5cef9b61f Catch up with the SMPng reduced interrupt frame size. The corresponding
change was made to DDB months ago (i386/i386/db_trace.c revision 1.37).

Reviewed by:	bde
2001-10-08 12:46:01 +00:00
Bill Fenner
9c52cf5785 Don't try to dereference a kernel pointer in userland; use offsetof()
to get the right address.

This fixes kernel GDB after KSE2.

Reviewed by:	jhb, jake
2001-09-19 18:42:19 +00:00
Julian Elischer
b40ce4165d KSE Milestone 2
Note ALL MODULES MUST BE RECOMPILED
make the kernel aware that there are smaller units of scheduling than the
process. (but only allow one thread per process at this time).
This is functionally equivalent to teh previousl -current except
that there is a thread associated with each process.

Sorry john! (your next MFC will be a doosie!)

Reviewed by: peter@freebsd.org, dillon@freebsd.org

X-MFC after:    ha ha ha ha
2001-09-12 08:38:13 +00:00
Peter Wemm
fd131b1483 Dynamically adapt to kernbase changes on crashdumps, falling back to
KERNBASE if the "kernbase" symbol is not present on older kernels.
2001-08-24 09:12:04 +00:00
David E. O'Brien
fcd08e35ec Define _KERNEL as this grubs around where no userland should go. 2001-08-16 20:47:01 +00:00
Mark Murray
573fbdc21f Compensate for dethreaded headers.
(I have no religion about how this was done. Follow-up commits welcome)
2001-05-01 09:08:09 +00:00
Jake Burkholder
aa17032fcb - Add #defines for the symbol names of the kernel interrupt, system
call and trap entry points so they're easy to find and change
- Use the cpuhead and allcpu list to locate globaldata for the current
  cpu, rather than SMP_prvspace or __globaldata
- Use offsets into struct globaldata directly to find per-cpu variables,
  rather than symbols in globals.o

Glanced at by:	peter
2001-01-10 18:15:25 +00:00
Peter Wemm
57a0ee63f0 Fix gdb -k after jake's most recent commit. The gd_XXX symbols are now
offsets in all cases, and we have to find the base address (&__globaldata)
ourselves for the UP case as well as SMP.
2001-01-07 05:08:39 +00:00
Poul-Henning Kamp
3281461493 Use macro API to <sys/queue.h>
Submitted by:	Dima Dorfman <dima@unixfreak.org>
Reviewed by:	phk
2000-12-31 11:22:42 +00:00
John Baldwin
65e26c5e18 Catch up to the new kinfo_proc. 2000-12-12 23:21:24 +00:00
David E. O'Brien
1a37aa566b Add `_PATH_DEVZERO'.
Use _PATH_* where where possible.
2000-12-09 09:35:55 +00:00
Doug Rabson
5c3925f8f9 * Add bmake framework for using gdb alongside binutils. The old bmake
framework was repository copied from gnu/usr.bin/gdb.
* Add alpha support.
1999-05-02 11:32:14 +00:00
Luoqi Chen
d53bd1ea8d Make gdb work with kernel after the SMP vmspace sharing changes. 1999-04-28 01:27:55 +00:00
Bruce Evans
09d693f205 Fixed printf format errors. 1998-06-30 20:48:45 +00:00
Bruce Evans
e7c80443b4 Don't attempt to read process context from the kernel when (the
kernel's) curproc is null.  This fixes endless recursion in
xfer_umem() for attempts to read from user addresses, in particular
for attempts to read %fs and %gs from the pcb for `info reg'.
1998-05-12 16:49:13 +00:00
Bruce Evans
5983a0d1cf Fixed printing of %fs and %gs for live kernels.
Only print the current pcb on startup.  Printing it every time a utility
routine was called messed up the register dump for live kernels.
1998-02-13 02:45:26 +00:00
Bruce Evans
9bb4a86cf0 Fixed accesses to addresses between VM_MAXUSER_ADDRESS (normally
0xefbfe000) and kernel_start (normally 0xf0100000).

Things are unnecessarily (?) difficult because procfs is used to
access user addresses in the live-kernel case although we must have
access to /dev/mem to work at all, and whatever works for the
dead-kernel case should work in all cases (modulo volatility of
live kernel variables).  We used the wrong range [0, kernel_start)
for user addresses.  Procfs should only work up to VM_MAXUSER_ADDRESS,
but it bogusly works for reads up to the address 2 pages higher
(the user area, including the kernel stack, is mapped to where the
user area used to be (WTUAUTB)).  Procfs can not work at all for
addresses between WTUAUTB and kernel_start.

Now we use procfs only to access addresses up to VM_MAXUSER_ADDRESS.
Higher addresses are translated normally using kvtophys(), so the
user ptd is used for addresses below the real kernel start (0xf0000000;
see INKERNEL()) and nothing is found WTUAUTB.

Strange accesses that cross the user-kernel boundary are now handled,
but such ranges are currently always errors because they necessarily
overlap the hole WTUAUTB.

Short reads are still not handled.
1998-01-19 15:27:56 +00:00
Bruce Evans
04822660a1 Removed `kstack' and associated mistranslations in kvtophys().
Correct translations would have been null.  However, kstack was
the top of the kernel stack instead of the base of the kernel stack
like it was when the kernel exported it, so the area above the
kernel stack was mistranslated and the kernel stack was not
translated.  This bug was depended on to compensate for the wrong
value of kstack - to read the pcb, instead of just using the address
of the pcb, we used the mistranslated address of kstack, which
happened to be the same (curpcb = kstack - 0x2000).

This area is simpler than it used to be now that the kernel stack
address is per-process.  The code still seems to be more complicated
than necessary - the `found_pcb == 0' case seems to be unused.
1998-01-19 14:27:41 +00:00
Bruce Evans
8c2c0a1d2f Fixed endless loop for `p/x *(int *)0xf0000000'. kvm_uread() in
gdb was cloned from the buggy version of kvm_uread() in libkvm and
had the same bugs.  It looped endlessly on EOF and checked errno
without setting it in the lseek() error check.  The first bug caused
gdb to loop endlessly for reads from addresses between the end of
the user area and the start of the kernel text.  kvm_uread() should
not be used for addresses beyond the end of the user area, but is
due to bugs elsewhere.
1998-01-18 13:18:55 +00:00
Bruce Evans
941b2747b6 Don't override FRAME_CHAIN(). If the current frame is valid, then
the previous frame is in the usual place even for traps, interrupts
and syscalls in the kernel, because the assembly language stubs
don't change the frame pointer.  The previous frame is just not for
the calling function.  We may as well depend on this as on magic to
determine the trap frame address.  The magic is in FRAME_SAVED_PC()
which elides the correct number of stubs (1) to go back to a pc that
matches the previous frame.

Removing fbsd_kern_frame_chain() fixes bugs in it.  Xsyscall was
misspelled as _Xsyscall (gdb removes one leading underscore), so
the tf_syscall frame type was never found.  This was harmless
because tf_normal works in all cases in fbsd_kern_frame_chain()
and Xsyscall is spelled correctly in fbsd_kern_frame_saved_pc()
where it matters.  There were style bugs on almost every line,
starting with a primary indent of 7.
1998-01-18 12:35:48 +00:00
Bruce Evans
d76f78c43c Pass the system name to dmesg. Rev.1.7 only works when the symbols in
/kernel aren't too different form those in the kernel being debugged.
1998-01-17 17:07:53 +00:00
Bruce Evans
a821e7134b Exec dmesg and awk to print everything in the message buffer
following "panic:" or "Fatal trap".  `panicstr' is still printed,
although it is redundant if there is a valid message buffer and
incomplete if it contains `%'s.  I think the awk command belongs
here and not in a script since a standard format with complete
messages is good for bug reports.
1997-12-19 21:37:18 +00:00
Peter Wemm
5c97f357a9 #include <machine/tss.h> explicitly 1997-10-10 12:53:27 +00:00
Bruce Evans
d1ef093383 Support 4MB pages. 1997-07-27 18:29:04 +00:00
Bruce Evans
b7542f0123 Support reading and writing of %fs and %gs (except from core files). 1997-06-07 04:50:43 +00:00
Bruce Evans
a511e4a787 Fetch the registers from struct members in the pcb instead of
punning the pcb to an array of ints and using magic indices to
access values in it.  This should prevent silent breakage from
changes in the pcb.

Supply 0 for unavailable registers instead of punning the tss to
an array of ints and using magic indices to access garbage values
in it.  (The registers are in the pcb; there is nothing interesting
in the tss.  This should change someday.  At least for dumps, all
the registers should be saved, and common_tss is a good place to
put them.)

Removed ancient wrong (disabled) method for reading eip.
1997-04-30 15:33:56 +00:00
Gary Jennejohn
3e3d6b2e21 change kvm-fbsd.c so that kernel debugging works again.
document the -k and -wcore options in the manpage.

change Makefile to use a local copy of the manpage.
1997-04-27 21:36:49 +00:00
Gary Jennejohn
86dd30cb93 changes required in the gdb directory for making gdb
using the sources in /usr/src/contrib/gdb.

This is based on /usr/ports/devel/gdb.

2.2 candidate ?
1997-01-15 22:37:09 +00:00