1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
--- kvm-fbsd.c.orig Sun Feb 7 20:36:10 1999
+++ kvm-fbsd.c Sat Sep 18 11:23:31 2004
@@ -22,6 +22,7 @@
#include <errno.h>
#include <signal.h>
#include <fcntl.h>
+#include <sys/types.h>
#include <sys/sysctl.h>
#include <sys/param.h>
#include <sys/time.h>
@@ -361,10 +362,19 @@
struct user *uaddr;
/* find the pcb for the current process */
+#if defined(__FreeBSD__) && __FreeBSD__ >= 5
+ if (cur_proc == NULL || kvread (&cur_proc->p_uarea, &uaddr))
+#else
if (cur_proc == NULL || kvread (&cur_proc->p_addr, &uaddr))
+#endif
error ("cannot read u area ptr for proc at %#x", cur_proc);
+#if defined(__FreeBSD__) && __FreeBSD__ >= 5
+ if (read_pcb (core_kd, (CORE_ADDR)&uaddr->u_kproc.ki_pcb) < 0)
+ error ("cannot read pcb at %#x", &uaddr->u_kproc.ki_pcb);
+#else
if (read_pcb (core_kd, (CORE_ADDR)&uaddr->u_pcb) < 0)
error ("cannot read pcb at %#x", &uaddr->u_pcb);
+#endif
}
static void
@@ -450,7 +451,11 @@
kp = kvm_getprocs(core_kd, KERN_PROC_PID, paddr, &cnt);
if (!cnt)
error("invalid pid");
+#if defined(__FreeBSD__) && __FreeBSD__ >= 5
+ if (set_proc_context((CORE_ADDR)kp->ki_paddr))
+#else
if (set_proc_context((CORE_ADDR)kp->kp_eproc.e_paddr))
+#endif
error("invalid proc address");
}
}
@@ -643,7 +644,11 @@
return (0);
if (lp.p_pid != pid)
continue;
+#if defined(__FreeBSD__) && __FreeBSD__ >= 5
+ kp.ki_paddr = p;
+#else
kp.kp_eproc.e_paddr = p;
+#endif
*cnt = 1;
return (1);
}
@@ -835,9 +836,8 @@
supply_register (6, (char *)&pcb.pcb_esi);
supply_register (7, (char *)&pcb.pcb_edi);
supply_register (PC_REGNUM, (char *)&pcb.pcb_eip);
- for (i = 9; i < 13; ++i) /* eflags, cs, ss, ds, es */
+ for (i = 9; i < 14; ++i) /* eflags, cs, ss, ds, es, fs */
supply_register (i, (char *)&noreg);
- supply_register (14, (char *)&pcb.pcb_fs);
supply_register (15, (char *)&pcb.pcb_gs);
/* XXX 80387 registers? */
@@ -919,7 +919,7 @@
#if 0
kcore_stratum, /* to_stratum */
#else
- NULL, /* haven't yet found this one... */
+ 0, /* haven't yet found this one... */
#endif
NULL, /* to_next */
0, /* to_has_all_memory */
|