static void mapscan(kvm_t *kd, vm_map_entry_t entryp, vm_offset_t *lastp) { struct vm_map_entry entry; if (entryp == NULL) return; kkread(kd, (u_long)entryp, &entry, sizeof(entry)); mapscan(kd, entry.rb_entry.rbe_left, lastp); if (*lastp != entry.start) { printf("%4ldM %p %08lx-%08lx (%6ldK) EMPTY\n", total_used / 1024 / 1024, entryp, *lastp, entry.start, (entry.start - *lastp) / 1024); total_empty += entry.start - *lastp; } printf("%4ldM %p %08lx-%08lx (%6ldK) type=%d object=%p\n", total_used / 1024 / 1024, entryp, entry.start, entry.end, (entry.end - entry.start) / 1024, entry.maptype, entry.object); total_used += entry.end - entry.start; *lastp = entry.end; mapscan(kd, entry.rb_entry.rbe_right, lastp); }
extern COLOR * nextscan(void) /* read and condition next scanline */ { if (nread >= numscans(&inpres)) { if (cwarpfile != NULL) free3dw(cwarp); free((void *)scanbuf); return(scanbuf = NULL); } if (what2do&DO_ACUITY) acuscan(scanbuf, nread); else if (freadscan(scanbuf, scanlen(&inpres), infp) < 0) { fprintf(stderr, "%s: %s: scanline read error\n", progname, infn); exit(1); } if (what2do&DO_VEIL) /* add veiling */ addveil(scanbuf, nread); if (what2do&DO_COLOR) /* scotopic color loss */ scotscan(scanbuf, scanlen(&inpres)); if (what2do&DO_LINEAR) /* map luminances */ sfscan(scanbuf, scanlen(&inpres), scalef); else mapscan(scanbuf, scanlen(&inpres)); if (mbcalfile != NULL) /* device color correction */ mbscan(scanbuf, scanlen(&inpres), &mbcond); else if (cwarpfile != NULL) /* device color space warp */ cwscan(scanbuf, scanlen(&inpres), cwarp); else if ((lumf == cielum) | (inprims != outprims)) matscan(scanbuf, scanlen(&inpres), mbcond.cmat); nread++; return(scanbuf); }
int main(int ac, char **av) { const char *corefile = NULL; const char *sysfile = NULL; vm_page_t mptr; struct vm_page m; struct vm_object obj; kvm_t *kd; int ch; int hv; int i; const char *qstr; const char *ostr; vm_offset_t last; while ((ch = getopt(ac, av, "M:N:dv")) != -1) { switch(ch) { case 'd': ++debugopt; break; case 'v': ++verboseopt; break; case 'M': corefile = optarg; break; case 'N': sysfile = optarg; break; default: fprintf(stderr, "%s [-M core] [-N system]\n", av[0]); exit(1); } } ac -= optind; av += optind; if ((kd = kvm_open(sysfile, corefile, NULL, O_RDONLY, "kvm:")) == NULL) { perror("kvm_open"); exit(1); } if (kvm_nlist(kd, Nl) != 0) { perror("kvm_nlist"); exit(1); } kkread(kd, Nl[0].n_value, &kmap, sizeof(kmap)); last = kmap.header.start; mapscan(kd, kmap.rb_root.rbh_root, &last); printf("%4ldM 0x%016jx %08lx-%08lx (%6ldK) EMPTY\n", total_used / 1024 / 1024, (intmax_t)NULL, last, kmap.header.end, (kmap.header.end - last) / 1024); total_empty += kmap.header.end - last; printf("-----------------------------------------------\n"); printf("Total empty space: %7ldK\n", total_empty / 1024); printf("Total used space: %7ldK\n", total_used / 1024); }