$NetBSD: patch-ak,v 1.2 2007/06/25 21:18:52 joerg Exp $

--- sysdeps/freebsd/procmap.c.orig	2005-12-12 10:09:39.000000000 +0000
+++ sysdeps/freebsd/procmap.c
@@ -21,6 +21,10 @@
    Boston, MA 02111-1307, USA.
 */
 
+#ifdef __DragonFly__
+#define _KERNEL_STRUCTURES
+#endif
+
 #include <config.h>
 #include <glibtop.h>
 #include <glibtop/error.h>
@@ -41,7 +45,7 @@
 #else
 #include <vm/vm_object.h>
 #include <vm/vm_map.h>
-#if (__FreeBSD_version >= 400011)
+#if defined(__DragonFly__) || (defined(__FreeBSD__) && __FreeBSD_version >= 400011)
 #include <vm/vm.h>
 #else
 #include <vm/vm_prot.h>
@@ -109,9 +113,9 @@ glibtop_get_proc_map_p (glibtop *server,
 	struct vm_object object;
 #endif
 	glibtop_map_entry *maps;
-#if defined __FreeBSD__
+#if defined(__FreeBSD__) || defined(__DragonFly__)
 	struct vnode vnode;
-#if __FreeBSD_version < 500039
+#if (defined(__FreeBSD__) && __FreeBSD_version < 500039) || defined(__DragonFly__)
 	struct inode inode;
 #endif
 #endif
@@ -130,7 +134,7 @@ glibtop_get_proc_map_p (glibtop *server,
 	/* Get the process data */
 	pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
 	if ((pinfo == NULL) || (count < 1)) {
-		glibtop_error_io_r (server, "kvm_getprocs (%d)", pid);
+		glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
 		return NULL;
 	}
 
@@ -178,9 +182,12 @@ glibtop_get_proc_map_p (glibtop *server,
 		} else {
 			update = 1;
 		}
-
-#ifdef __FreeBSD__
-#if __FreeBSD__ >= 4
+#if defined(__FreeBSD__) || defined(__DragonFly__)
+#if defined(__DragonFly__) && __DragonFly_version >= 180000
+		if (entry.eflags != VM_MAPTYPE_NORMAL &&
+		    entry.eflags != VM_MAPTYPE_VPAGETABLE)
+			continue;
+#elif (defined(__FreeBSD__) && __FreeBSD__ >= 4) || defined(__DragonFly__)
 		if (entry.eflags & (MAP_ENTRY_IS_SUB_MAP))
 			continue;
 #else
@@ -256,7 +263,7 @@ glibtop_get_proc_map_p (glibtop *server,
 #endif
 
 
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__DragonFly__)
 		/* If the object is of type vnode, add its size */
 
 		if (object.type != OBJT_VNODE)
