--- 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 */
