While the meaning of most of the output is self-evident, some pieces of it may appear to be a little inscrutable.
Here is a portion of the default output from
pmap being run at an
sh(1) prompt showing the starting address of the map entry, the size of the map entry, the current protection level of the map entry, and either the name of the file backing the entry or some other descriptive text.
$ pmap
08048000 420K read/exec /bin/sh
080B1000 8K read/write /bin/sh
080B3000 28K read/write [ anon ]
080BA000 16K read/write/exec [ heap ]
...
When the
ddb(4) output style is selected, the first thing printed is the contents of the vm_map structure, followed by the individual map entries.
$ pmap -d
MAP 0xcf7cac84: [0x0->0xbfbfe000]
#ent=8, sz=34041856, ref=1, version=20, flags=0x41
pmap=0xcf44cee0(resident=<unknown>)
- 0xcfa3a358: 0x8048000->0x80b1000: obj=0xcf45a8e8/0x0, amap=0x0/0
submap=F, cow=T, nc=T, prot(max)=5/7, inh=1, wc=0, adv=0
...
The value of the flags field (in hexadecimal) is taken from the include file
<uvm/uvm_map.h>:
VM_MAP_PAGEABLE
0x01 entries are pageable
VM_MAP_INTRSAFE
0x02 interrupt safe map
VM_MAP_WIREFUTURE
0x04 future mappings are wired
VM_MAP_BUSY
0x08 map is busy
VM_MAP_WANTLOCK
0x10 want to write-lock
VM_MAP_DYING
0x20 map is being destroyed
VM_MAP_TOPDOWN
0x40 arrange map top-down
The “submap”, “cow”, and “nc” fields are true or false, and indicate whether the map is a submap, whether it is marked for copy on write, and whether it needs a copy. The “prot” (or protection) field, along with “max” (maximum protection allowed) are made up of the following flags from
<uvm/uvm_extern.h>:
UVM_PROT_READ
0x01 read allowed
UVM_PROT_WRITE
0x02 write allowed
UVM_PROT_EXEC
0x04 execute allowed
The “obj” and “amap” fields are pointers to, and offsets into, the underlying uvm_object or amap. The value for resident is always unknown because digging such information out of the kernel is beyond the scope of this application.
The two output styles that mirror the contents of the
/proc file system appear as follows:
$ pmap -m
0x8048000 0x80b1000 r-x rwx COW NC 1 0 0
0x80b1000 0x80b3000 rw- rwx COW NC 1 0 0
0x80b3000 0x80ba000 rw- rwx COW NNC 1 0 0
0x80ba000 0x80be000 rwx rwx COW NNC 1 0 0
...
$ pmap -l
08048000-080b1000 r-xp 00000000 00:00 70173 /bin/sh
080b1000-080b3000 rw-p 00068000 00:00 70173 /bin/sh
080b3000-080ba000 rw-p 00000000 00:00 0
080ba000-080be000 rwxp 00000000 00:00 0
...
Here the protection and maximum protection values are indicated with ‘r', ‘w', and ‘x' characters, indicating read permission, write permission, and execute permission, respectively. The “COW”, “NC”, and “NNC” values that follow indicate, again, that the map is marked for copy on write and either needs or does not need a copy. It is also possible to see the value “NCOW” here, which indicates that an entry will not be copied. The three following numbers indicate the inheritance type of the map, the wired count of the map, and any advice value assigned via
madvise(2).
In the second form, the permissions indicated are followed by a ‘p' or ‘s' character indicating whether the map entry is private or shared (copy on write or not), and the numbers are the offset into the underlying object, the device and numbers of the object if it is a file, and the path to the file (if available).
As noted above (see section
DESCRIPTION), the “all” output format is an amalgam of the previous output formats.
$ pmap -a
Start End Size Offset rwxpc RWX I/W/A ...
08048000-080b0fff 420k 00000000 r-xp+ (rwx) 1/0/0 ...
...
In this format, the column labeled “rwxpc” contains the permissions for the mapping along with the shared/private flag, and a character indicating whether the mapping needs to be copied on write (‘+') or has already been copied (‘-') and is followed by a column that indicates the maximum permissions for the map entry. The column labeled “I/W/A” indicates the inheritance, wired, and advice values for the map entry, as previously described. The pointer value at the end of the output line for entries backed by vnodes is the address of the vnode in question.