#!/usr/sbin/dtrace -s /* Let's not track pages mapped for standard libraries or before main starts executing. The first write in the program will cue in logging. */ syscall::write:entry / execname == "mapper" / { self->log = 1; } fbt::page_create_va:entry / execname == "mapper" && self->log / { printf( "vaddr: %p", args[5]); } fbt::page_create_va:return / execname == "mapper" && self->log / { printf( "page_t: %p at %p pfn %x", args[1], args[0], args[1]->p_pagenum); } fbt::page_get_mnode_freelist:entry / execname == "mapper" && self->log / { /* printf( "mnode: %d bin/color: %d mtype: %d szc: %d page: %x", args[0], args[1], args[2], args[3], (*(`page_freelists[1][0] + args[1]))->p_pagenum); */ printf( "bin/color: %d page: %x", args[1], (*(`page_freelists[1][0] + args[1]))->p_pagenum); } fbt::page_get_mnode_freelist:return / execname == "mapper" && self-> log / { printf( "pp: %p at offset %d", args[1], args[0]); }