#ifndef PMAP_HEADERS
#include <err.h>
#include <kvm.h>
#include <stddef.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/time.h>
#include <sys/vnode.h>
#include <sys/vnode_impl.h>
#define __EXPOSE_MOUNT
#include <sys/mount.h>
#include <sys/uio.h>
#define __NAMECACHE_PRIVATE
#include <sys/namei.h>
#include <sys/sysctl.h>
#include <uvm/uvm.h>
#include <uvm/uvm_device.h>
#include <ufs/ufs/inode.h>
#undef doff_t
#undef IN_ACCESS
#include <isofs/cd9660/iso.h>
#include <isofs/cd9660/cd9660_node.h>
#define PMAP_HEADERS
#endif
#ifndef struct_kbit
#define UVM_OBJ_IS_VNODE(uobj) ((uobj)->pgops == uvm_vnodeops)
#define UVM_OBJ_IS_AOBJ(uobj) ((uobj)->pgops == aobj_pager)
#define UVM_OBJ_IS_DEVICE(uobj) ((uobj)->pgops == uvm_deviceops)
#define UVM_OBJ_IS_UBCPAGER(uobj) ((uobj)->pgops == ubc_pager)
#define PPREF_NONE ((int *) -1)
#define S(x) ((x)->k_size)
#define A(x) ((x)->k_addr.k_addr_ul)
#define P(x) ((x)->k_addr.k_addr_p)
#define D(x,d) (&((x)->k_data.d))
#define _KDEREFOK(kd, addr, dst, sz) \
((size_t)kvm_read((kd), (addr), (dst), (sz)) == (size_t)(sz))
#define _KDEREF(kd, addr, dst, sz) do { \
if (!_KDEREFOK((kd), (addr), (dst), (sz))) \
errx(1, "reading from kmem failed: %s", kvm_geterr(kd)); \
} while (0)
#define KDEREFOK(kd, item) _KDEREFOK((kd), A(item), D(item, data), S(item))
#define KDEREF(kd, item) _KDEREF((kd), A(item), D(item, data), S(item))
struct kbit {
size_t k_size;
union {
void *k_addr_p;
u_long k_addr_ul;
} k_addr;
union {
char data[1];
struct vmspace vmspace;
struct vm_map vm_map;
struct vm_map_entry vm_map_entry;
struct vnode vnode;
struct uvm_object uvm_object;
struct mount mount;
struct namecache namecache;
struct inode inode;
struct iso_node iso_node;
struct uvm_device uvm_device;
struct vm_amap amap;
struct vm_anon anon;
} k_data;
};
#define struct_kbit
#endif
void process_map(kvm_t *, struct kinfo_proc2 *,
struct kbit *, const char *);
void dump_vm_map(kvm_t *, struct kinfo_proc2 *,
struct kbit *, struct kbit *, const char *);
size_t dump_vm_map_list(kvm_t *, struct kinfo_proc2 *,
struct kbit *, struct kbit *, struct kbit *);
size_t dump_vm_map_tree(kvm_t *, struct kinfo_proc2 *,
struct kbit *, struct kbit *, struct kbit *);
size_t dump_vm_map_node(kvm_t *, int lvl, struct kinfo_proc2 *,
struct kbit *, struct kbit *, struct vm_map_entry *);
size_t dump_vm_map_entry(kvm_t *, struct kinfo_proc2 *,
struct kbit *, struct kbit *, int);
void dump_amap(kvm_t *, struct kbit *);