--- sysdeps/freebsd/proclist.c.orig Thu May 27 09:04:05 1999 +++ sysdeps/freebsd/proclist.c Fri Dec 22 18:02:59 2000 @@ -88,9 +88,20 @@ for (i=j=0; i < count; i++) { +#if __FreeBSD_version >= 500013 +#define XXX_P_STAT ki_stat +#define XXX_P_RUID ki_ruid +#define XXX_P_PID ki_pid + +#else +#define XXX_P_STAT kp_proc.p_stat +#define XXX_P_RUID kp_eproc.e_pcred.p_ruid +#define XXX_P_PID kp_proc.p_pid + +#endif if ((real_which & GLIBTOP_EXCLUDE_IDLE) && - (pinfo[i].kp_proc.p_stat != SRUN)) + (pinfo[i].XXX_P_STAT != SRUN)) continue; else if ((real_which & GLIBTOP_EXCLUDE_SYSTEM) && - (pinfo[i].kp_eproc.e_pcred.p_ruid == 0)) + (pinfo[i].XXX_P_RUID == 0)) continue; - pids [j++] = (unsigned) pinfo[i].kp_proc.p_pid; + pids [j++] = (unsigned) pinfo[i].XXX_P_PID; } /* end for */ --- sysdeps/freebsd/procstate.c.orig Sun Feb 10 09:30:11 2002 +++ sysdeps/freebsd/procstate.c Mon Apr 29 11:42:22 2002 @@ -28,7 +28,7 @@ #include #if !defined(__OpenBSD__) -//&& (!defined __bsdi__) +/*&& (!defined __bsdi__)*/ #include #endif @@ -37,11 +37,7 @@ (1L << GLIBTOP_PROC_STATE_GID); static const unsigned long _glibtop_sysdeps_proc_state_new = -#if LIBGTOP_VERSION_CODE >= 1001000 -(1L << GLIBTOP_PROC_STATE_RUID) + (1L << GLIBTOP_PROC_STATE_RGID); -#else 0; -#endif /* Init function. */ @@ -76,43 +72,35 @@ return; } - strncpy (buf->cmd, pinfo [0].kp_proc.p_comm, sizeof (buf->cmd)-1); - buf->cmd [sizeof (buf->cmd)-1] = 0; +#if __FreeBSD_version >= 500013 +#define XXX_P_COMM ki_comm +#define XXX_P_SVUID ki_svuid +#define XXX_P_SVGID ki_svgid +#define XXX_P_RUID ki_ruid +#define XXX_P_RGID ki_rgid +#define XXX_P_STAT ki_stat - buf->uid = pinfo [0].kp_eproc.e_pcred.p_svuid; - buf->gid = pinfo [0].kp_eproc.e_pcred.p_svgid; +#else +#define XXX_P_COMM kp_proc.p_comm +#define XXX_P_SVUID kp_eproc.e_pcred.p_svuid +#define XXX_P_SVGID kp_eproc.e_pcred.p_svgid +#define XXX_P_RUID kp_eproc.e_pcred.p_ruid +#define XXX_P_RGID kp_eproc.e_pcred.p_rgid +#define XXX_P_STAT kp_proc.p_stat -#if LIBGTOP_VERSION_CODE >= 1001000 - buf->ruid = pinfo [0].kp_eproc.e_pcred.p_ruid; - buf->rgid = pinfo [0].kp_eproc.e_pcred.p_rgid; #endif + strncpy (buf->cmd, pinfo [0].XXX_P_COMM, sizeof (buf->cmd)-1); + buf->cmd [sizeof (buf->cmd)-1] = 0; + + buf->uid = pinfo [0].XXX_P_SVUID; + buf->gid = pinfo [0].XXX_P_SVGID; + /* Set the flags for the data we're about to return*/ buf->flags = _glibtop_sysdeps_proc_state | _glibtop_sysdeps_proc_state_new; -#if LIBGTOP_VERSION_CODE >= 1001000 - switch (pinfo [0].kp_proc.p_stat) { - case SIDL: - buf->state = 0; - break; - case SRUN: - buf->state = GLIBTOP_PROCESS_RUNNING; - break; - case SSLEEP: - buf->state = GLIBTOP_PROCESS_INTERRUPTIBLE; - break; - case SSTOP: - buf->state = GLIBTOP_PROCESS_STOPPED; - break; - case SZOMB: - buf->state = GLIBTOP_PROCESS_ZOMBIE; - break; - default: - return; - } -#else - switch (pinfo [0].kp_proc.p_stat) { + switch (pinfo [0].XXX_P_STAT) { case SIDL: buf->state = 'S'; break; @@ -131,7 +119,6 @@ default: return; } -#endif buf->flags |= (1L << GLIBTOP_PROC_STATE_STATE); } --- sysdeps/freebsd/procuid.c.orig Fri Sep 17 06:08:07 1999 +++ sysdeps/freebsd/procuid.c Thu Feb 15 01:16:50 2001 @@ -86,13 +86,42 @@ - buf->uid = pinfo [0].kp_eproc.e_pcred.p_ruid; - buf->euid = pinfo [0].kp_eproc.e_pcred.p_svuid; - buf->gid = pinfo [0].kp_eproc.e_pcred.p_rgid; - buf->egid = pinfo [0].kp_eproc.e_pcred.p_svgid; - - buf->ppid = pinfo [0].kp_eproc.e_ppid; - buf->pgrp = pinfo [0].kp_eproc.e_pgid; - buf->tpgid = pinfo [0].kp_eproc.e_tpgid; +#if __FreeBSD_version >= 500013 - buf->nice = pinfo [0].kp_proc.p_nice; - buf->priority = pinfo [0].kp_proc.p_priority; +#define XXX_P_RUID ki_ruid +#define XXX_P_SVUID ki_svuid +#define XXX_P_RGID ki_rgid +#define XXX_P_SVGID ki_svgid +#define XXX_E_PPID ki_ppid +#define XXX_E_PGID ki_pgid +#define XXX_E_TPGID ki_tpgid +#define XXX_P_NICE ki_nice +#if __FreeBSD_version >= 500013 +#define XXX_P_PRIORITY ki_pri.pri_user +#else +#define XXX_P_PRIORITY ki_priority +#endif +#else + +#define XXX_P_RUID kp_eproc.e_pcred.p_ruid +#define XXX_P_SVUID kp_eproc.e_pcred.p_svuid +#define XXX_P_RGID kp_eproc.e_pcred.p_rgid +#define XXX_P_SVGID kp_eproc.e_pcred.p_svgid +#define XXX_E_PPID kp_eproc.e_ppid +#define XXX_E_PGID kp_eproc.e_pgid +#define XXX_E_TPGID kp_eproc.e_tpgid +#define XXX_P_NICE kp_proc.p_nice +#define XXX_P_PRIORITY kp_proc.p_priority + +#endif + + buf->uid = pinfo [0].XXX_P_RUID; + buf->euid = pinfo [0].XXX_P_SVUID; + buf->gid = pinfo [0].XXX_P_RGID; + buf->egid = pinfo [0].XXX_P_SVGID; + + buf->ppid = pinfo [0].XXX_E_PPID; + buf->pgrp = pinfo [0].XXX_E_PGID; + buf->tpgid = pinfo [0].XXX_E_TPGID; + + buf->nice = pinfo [0].XXX_P_NICE; + buf->priority = pinfo [0].XXX_P_PRIORITY; --- sysdeps/freebsd/procmem.c.orig Thu May 27 13:56:49 1999 +++ sysdeps/freebsd/procmem.c Wed Dec 27 10:16:26 2000 @@ -139,2 +139,18 @@ +#if __FreeBSD_version >= 500013 + +#define XXX_P_VMSPACE ki_vmspace + + buf->rss_rlim = pinfo [0].ki_rssize; + + buf->vsize = buf->size = (u_int64_t) pagetok + (pinfo [0].ki_tsize + pinfo [0].ki_dsize + pinfo[0].ki_ssize) + << LOG1024; + buf->resident = buf->rss = (u_int64_t) pagetok + (pinfo [0].ki_rssize) << LOG1024; + +#else + +#define XXX_P_VMSPACE kp_proc.p_vmspace + if (kvm_read (server->machine.kd, @@ -156,2 +172,3 @@ (vms->vm_rssize) << LOG1024; +#endif @@ -160,3 +177,3 @@ if (kvm_read (server->machine.kd, - (unsigned long) pinfo [0].kp_proc.p_vmspace, + (unsigned long) pinfo [0].XXX_P_VMSPACE, (char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace)) { --- sysdeps/freebsd/procsignal.c.orig Sun Feb 13 15:31:39 2000 +++ sysdeps/freebsd/procsignal.c Wed Dec 27 10:22:28 2000 @@ -69,2 +69,18 @@ +#if __FreeBSD_version >= 500013 + +#define XXX_P_SIGLIST ki_siglist +#define XXX_P_SIGMASK ki_sigmask +#define XXX_P_SIGIGNORE ki_sigignore +#define XXX_P_SIGCATCH ki_sigcatch + +#else + +#define XXX_P_SIGLIST kp_proc.p_siglist +#define XXX_P_SIGMASK kp_proc.p_sigmask +#define XXX_P_SIGIGNORE kp_proc.p_sigignore +#define XXX_P_SIGCATCH kp_proc.p_sigcatch + +#endif + /* signal: mask of pending signals. @@ -73,3 +89,3 @@ #if (defined(__NetBSD__) && (NSIG > 32)) || (__FreeBSD_version >= 400011) - buf->signal [0] = pinfo [0].kp_proc.p_siglist.__bits[0]; + buf->signal [0] = pinfo [0].XXX_P_SIGLIST.__bits[0]; #else @@ -82,3 +98,3 @@ #if (defined(__NetBSD__) && (NSIG > 32)) || (__FreeBSD_version >= 400011) - buf->blocked [0] = pinfo [0].kp_proc.p_sigmask.__bits[0]; + buf->blocked [0] = pinfo [0].XXX_P_SIGMASK.__bits[0]; #else @@ -91,3 +107,3 @@ #if (defined(__NetBSD__) && (NSIG > 32)) || (__FreeBSD_version >= 400011) - buf->sigignore [0] = pinfo [0].kp_proc.p_sigignore.__bits[0]; + buf->sigignore [0] = pinfo [0].XXX_P_SIGIGNORE.__bits[0]; #else @@ -100,3 +116,3 @@ #if (defined(__NetBSD__) && (NSIG > 32)) || (__FreeBSD_version >= 400011) - buf->sigcatch [0] = pinfo [0].kp_proc.p_sigcatch.__bits[0]; + buf->sigcatch [0] = pinfo [0].XXX_P_SIGCATCH.__bits[0]; #else --- sysdeps/freebsd/prockernel.c.orig Sat Oct 16 13:31:43 1999 +++ sysdeps/freebsd/prockernel.c Wed Dec 27 10:50:19 2000 @@ -36,8 +36,2 @@ #endif -#if !defined(__bsdi__) && !(defined(__FreeBSD__) && defined(__alpha__)) -#include -#endif -#if defined(__FreeBSD__) && !defined(__alpha__) -#include -#endif @@ -80,10 +74,4 @@ struct kinfo_proc *pinfo; - struct user *u_addr = (struct user *)USRSTACK; - struct pstats pstats; - struct pcb pcb; int count; - char filename [BUFSIZ]; - struct stat statb; - glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_PROC_KERNEL), 0); @@ -103,7 +91,21 @@ - buf->nwchan = (unsigned long) pinfo [0].kp_proc.p_wchan &~ KERNBASE; +#if __FreeBSD_version >= 500013 + +#define XXX_P_WCHAN ki_wchan +#define XXX_P_WMESG ki_wmesg +#define XXX_E_WMESG ki_wmesg + +#else + +#define XXX_P_WCHAN kp_proc.p_wchan +#define XXX_P_WMESG kp_proc.p_wmesg +#define XXX_E_WMESG kp_eproc.e_wmesg + +#endif + + buf->nwchan = (unsigned long) pinfo [0].XXX_P_WCHAN &~ KERNBASE; buf->flags |= (1L << GLIBTOP_PROC_KERNEL_NWCHAN); - if (pinfo [0].kp_proc.p_wchan && pinfo [0].kp_proc.p_wmesg) { - strncpy (buf->wchan, pinfo [0].kp_eproc.e_wmesg, + if (pinfo [0].XXX_P_WCHAN && pinfo [0].XXX_P_WMESG) { + strncpy (buf->wchan, pinfo [0].XXX_E_WMESG, sizeof (buf->wchan) - 1); @@ -115,70 +117,8 @@ - /* Taken from `saveuser ()' in `/usr/src/bin/ps/ps.c'. */ - - /* [FIXME]: /usr/include/sys/user.h tells me that the user area - * may or may not be at the same kernel address in all - * processes, but I don't see any way to get that address. - * Since `ps' simply uses its own address, I think it's - * safe to do this here, too. */ - - /* NOTE: You need to mount the /proc filesystem to make - * `kvm_uread' work. */ - - sprintf (filename, "/proc/%d/mem", (int) pid); - if (stat (filename, &statb)) return; - - glibtop_suid_enter (server); - - if ((pinfo [0].kp_proc.p_flag & P_INMEM) && - kvm_uread (server->machine.kd, &(pinfo [0]).kp_proc, - (unsigned long) &u_addr->u_stats, - (char *) &pstats, sizeof (pstats)) == sizeof (pstats)) - { - /* - * The u-area might be swapped out, and we can't get - * at it because we have a crashdump and no swap. - * If it's here fill in these fields, otherwise, just - * leave them 0. - */ - - buf->min_flt = (u_int64_t) pstats.p_ru.ru_minflt; - buf->maj_flt = (u_int64_t) pstats.p_ru.ru_majflt; - buf->cmin_flt = (u_int64_t) pstats.p_cru.ru_minflt; - buf->cmaj_flt = (u_int64_t) pstats.p_cru.ru_majflt; - - buf->flags |= _glibtop_sysdeps_proc_kernel_pstats; - } - - if ((pinfo [0].kp_proc.p_flag & P_INMEM) && - kvm_uread (server->machine.kd, &(pinfo [0]).kp_proc, - (unsigned long) &u_addr->u_pcb, - (char *) &pcb, sizeof (pcb)) == sizeof (pcb)) - { -#ifdef __FreeBSD__ -#ifndef __alpha__ -#if (__FreeBSD_version >= 300003) - buf->kstk_esp = (u_int64_t) pcb.pcb_esp; - buf->kstk_eip = (u_int64_t) pcb.pcb_eip; -#else - buf->kstk_esp = (u_int64_t) pcb.pcb_ksp; - buf->kstk_eip = (u_int64_t) pcb.pcb_pc; -#endif -#else - /*xxx FreeBSD/Alpha? */ -#endif -#else - buf->kstk_esp = (u_int64_t) pcb.pcb_tss.tss_esp0; -#ifdef __bsdi__ - buf->kstk_eip = (u_int64_t) pcb.pcb_tss.tss_eip; -#else - buf->kstk_eip = (u_int64_t) pcb.pcb_tss.__tss_eip; -#endif - - buf->flags |= _glibtop_sysdeps_proc_kernel_pcb; -#endif - } - - /* Taken from `wchan ()' in `/usr/src/bin/ps/print.c'. */ - - glibtop_suid_leave (server); + /* XXX: the code here was, quite frankly, junk, and almost + * certainly wrong - remove it all, leave these fields + * unpopulated, and give up until such time as the right + * code is produced for both FreeBSD 4.x and 5.x + */ + return; }