On Wed, Apr 9, 2008 at 1:05 AM, Robert P. J. Day <[EMAIL PROTECTED]> wrote:
>
> when i run "pmap" to examine the VMAs corresponding to, say, init,
> how am i supposed to interpret the "Offset" column. here:
>
> # pmap -d 1
> 1: init [5]
> Address Kbytes Mode Offset Device Mapping
> 00110000 4 r-x-- 0000000000110000 000:00000 [ anon ]
> 00967000 220 r-x-- 0000000000000000 0fd:00000 libsepol.so.1
> 0099e000 4 rwx-- 0000000000036000 0fd:00000 libsepol.so.1
> 00a3d000 100 r-x-- 0000000000000000 0fd:00000 libselinux.so.1
> 00a56000 8 rwx-- 0000000000018000 0fd:00000 libselinux.so.1
> 00ab0000 108 r-x-- 0000000000000000 0fd:00000 ld-2.7.so
> 00acb000 4 r-x-- 000000000001a000 0fd:00000 ld-2.7.so
> 00acc000 4 rwx-- 000000000001b000 0fd:00000 ld-2.7.so
> ... etc etc ...
>
> so there's my listing of VMAs corresponding to the "init" process,
> and i can see the addresses of each VMA, but what is the informational
> value in the Offset field?
>
> if you look at the two entries for, say, libsepol.so.1, those have
> distinct addresses, but the first entry has an offset of zero, while
> the second has an offset of 0x36000. is that offset meant to
> represent the offset with respect to the beginning of a multi-VMA
> file? or what? thanks.
>
> rday
> --
First noticed that there is a identical information provided by "pmap
-d 1" and "cat /proc/1/maps":
/root/download/linux-2.6_latest/fs/proc>cat /proc/1/maps
003ed000-00408000 r-xp 00000000 08:05 262713 /lib/ld-2.6.so
00408000-00409000 r--p 0001a000 08:05 262713 /lib/ld-2.6.so
00409000-0040a000 rw-p 0001b000 08:05 262713 /lib/ld-2.6.so
0040c000-0055a000 r-xp 00000000 08:05 262714 /lib/libc-2.6.so
0055a000-0055c000 r--p 0014e000 08:05 262714 /lib/libc-2.6.so
08051000-08072000 rw-p 08051000 00:00 0 [heap]
441bd000-441c0000 r-xp 00000000 08:05 260873 /lib/libdl-2.6.so
4cfaa000-4cfc0000 r-xp 00000000 08:05 261141 /lib/libselinux.so.1
4cfc0000-4cfc2000 rw-p 00015000 08:05 261141 /lib/libselinux.so.1
b7f59000-b7f5b000 rw-p b7f59000 00:00 0
b7f6e000-b7f6f000 r-xp b7f6e000 00:00 0 [vdso]
bfe59000-bfe6e000 rw-p bffeb000 00:00 0 [stack]
/root/download/linux-2.6_latest/fs/proc>pmap -d 1
1: init [5]
Address Kbytes Mode Offset Device Mapping
003ed000 108 r-x-- 0000000000000000 008:00005 ld-2.6.so
00408000 4 r---- 000000000001a000 008:00005 ld-2.6.so
00409000 4 rw--- 000000000001b000 008:00005 ld-2.6.so
0040c000 1336 r-x-- 0000000000000000 008:00005 libc-2.6.so
0055a000 8 r---- 000000000014e000 008:00005 libc-2.6.so
08051000 132 rw--- 0000000008051000 000:00000 [ anon ]
441bd000 12 r-x-- 0000000000000000 008:00005 libdl-2.6.so
b7f6e000 4 r-x-- 00000000b7f6e000 000:00000 [ anon ]
bfe59000 84 rw--- 00000000bffeb000 000:00000 [ stack ]
mapped: 2136K writeable/private: 304K shared: 0K
(some parts truncated above).
Since the mapping to /proc is possible, we shall use the kernel source code:
fs/proc/task_mmu.c: show_map():
seq_printf(m, "%08lx-%08lx %c%c%c%c %08lx %02x:%02x %lu %n",
vma->vm_start,
vma->vm_end,
flags & VM_READ ? 'r' : '-',
flags & VM_WRITE ? 'w' : '-',
flags & VM_EXEC ? 'x' : '-',
flags & VM_MAYSHARE ? 's' : 'p',
vma->vm_pgoff << PAGE_SHIFT,
MAJOR(dev), MINOR(dev), ino, &len);
So unambiguously, the offset correspond to vma->vm_pgoff <<
PAGE_SHIFT, which is I am not really sure of its semantic meaning.
But looking at the definition of vma (vm_area_struct in
inlcude/linux/mm_types.h):
/* Information about our backing store: */
unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE
units, *not* PAGE_CACHE_SIZE */
struct file * vm_file; /* File we map to (can be NULL). */
There goes the answer :-).
--
Regards,
Peter Teoh
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ