5#include <libprocstat.h>
6# ifndef KVME_TYPE_MGTDEVICE
7# define KVME_TYPE_MGTDEVICE 8
10procstat_vm(
struct procstat *procstat,
struct kinfo_proc *kipp,
FILE *errout)
12 struct kinfo_vmentry *freep, *kve;
19 ptrwidth = 2*
sizeof(
void *) + 2;
21 fprintf(errout,
"%*s %*s %3s %4s %4s %3s %3s %4s %-2s %-s\n",
22 ptrwidth,
"START", ptrwidth,
"END",
"PRT",
"RES",
23 "P""RES",
"REF",
"SHD",
"FL",
"TP",
"PATH");
25#ifdef HAVE_PROCSTAT_GETVMMAP
26 freep = procstat_getvmmap(procstat, kipp, &cnt);
28 freep = kinfo_getvmmap(kipp->ki_pid, &cnt);
32 for (i = 0; i < cnt; i++) {
34 fprintf(errout,
"%#*jx ", ptrwidth, (uintmax_t)kve->kve_start);
35 fprintf(errout,
"%#*jx ", ptrwidth, (uintmax_t)kve->kve_end);
36 fprintf(errout,
"%s", kve->kve_protection & KVME_PROT_READ ?
"r" :
"-");
37 fprintf(errout,
"%s", kve->kve_protection & KVME_PROT_WRITE ?
"w" :
"-");
38 fprintf(errout,
"%s ", kve->kve_protection & KVME_PROT_EXEC ?
"x" :
"-");
39 fprintf(errout,
"%4d ", kve->kve_resident);
40 fprintf(errout,
"%4d ", kve->kve_private_resident);
41 fprintf(errout,
"%3d ", kve->kve_ref_count);
42 fprintf(errout,
"%3d ", kve->kve_shadow_count);
43 fprintf(errout,
"%-1s", kve->kve_flags & KVME_FLAG_COW ?
"C" :
"-");
44 fprintf(errout,
"%-1s", kve->kve_flags & KVME_FLAG_NEEDS_COPY ?
"N" :
46 fprintf(errout,
"%-1s", kve->kve_flags & KVME_FLAG_SUPER ?
"S" :
"-");
47 fprintf(errout,
"%-1s ", kve->kve_flags & KVME_FLAG_GROWS_UP ?
"U" :
48 kve->kve_flags & KVME_FLAG_GROWS_DOWN ?
"D" :
"-");
49 switch (kve->kve_type) {
53 case KVME_TYPE_DEFAULT:
62 case KVME_TYPE_DEVICE:
74 case KVME_TYPE_MGTDEVICE:
77 case KVME_TYPE_UNKNOWN:
82 fprintf(errout,
"%-2s ", str);
83 fprintf(errout,
"%-s\n", kve->kve_path);