aboutsummaryrefslogtreecommitdiff
path: root/sys/i386
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2015-11-12 22:00:59 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2015-11-12 22:00:59 +0000
commit645743ea99829e6d578cca5a580cf0a4102fb7dd (patch)
treeae4572767afc71624454282e5da6abcbe605b730 /sys/i386
parentacaf20cbdeb1b26cae446b7e870aa470a82b0628 (diff)
downloadsrc-645743ea99829e6d578cca5a580cf0a4102fb7dd.tar.gz
src-645743ea99829e6d578cca5a580cf0a4102fb7dd.zip
Export various helper variables describing the layout and size of
certain kernel structures for use by debuggers. This mostly aids in examining cores from a kernel without debug symbols as a debugger can infer these values if debug symbols are available. One set of variables describes the layout of 'struct linker_file' to walk the list of loaded kernel modules. A second set of variables describes the layout of 'struct proc' and 'struct thread' to walk the list of processes in the kernel and the threads in each process. The 'pcb_size' variable is used to index into the stoppcbs[] array. The 'vm_maxuser_address' is used to distinguish kernel virtual addresses from user addresses. This doesn't have to be perfect, and 'vm_maxuser_address' is a cheap and simple way to differentiate kernel pointers from simple values like TIDs and PIDs. While here, annotate the fields in struct pcb used by kgdb on amd64 and i386 to note that their ABI should be preserved. Annotations for other platforms will be added in the future. Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D3773
Notes
Notes: svn path=/head/; revision=290728
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/include/pcb.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/i386/include/pcb.h b/sys/i386/include/pcb.h
index 4bfd60326b2b..558565b872cb 100644
--- a/sys/i386/include/pcb.h
+++ b/sys/i386/include/pcb.h
@@ -44,13 +44,17 @@
#endif
#include <machine/npx.h>
+/*
+ * NB: The fields marked with (*) are used by kernel debuggers. Their
+ * ABI should be preserved.
+ */
struct pcb {
- int pcb_edi;
- int pcb_esi;
- int pcb_ebp;
- int pcb_esp;
- int pcb_ebx;
- int pcb_eip;
+ int pcb_edi; /* (*) */
+ int pcb_esi; /* (*) */
+ int pcb_ebp; /* (*) */
+ int pcb_esp; /* (*) */
+ int pcb_ebx; /* (*) */
+ int pcb_eip; /* (*) */
struct segment_descriptor pcb_fsd;
struct segment_descriptor pcb_gsd;
int pcb_ds;