mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-04 05:58:57 +00:00
MFC 327561:
Report offset relative to the backing object for kinfo_vmentry structures. For the pathname reported in kinfo_vmentry structures (kve_path), the sysctl handlers walk the object chain to find the bottom-most VM object. This permits a COW mapping of a file with dirty pages to report the pathname of the originally mapped file. Do the same for the object offset (kve_offset) computing a cumulative offset during the same object walk so that the reported offset is relative to the reported pathname. Note that ptrace(PT_VM_ENTRY) already returns a cumulative offset rather than the raw offset of the VM map entry. Note also that this does not affect procstat -v output (even structured output) since that output does not include the kve_offset field. Sponsored by: DARPA / AFRL
This commit is contained in:
parent
d0b45f30c0
commit
090b412f77
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/10/; revision=328571
@ -2061,8 +2061,10 @@ sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_ARGS)
|
||||
}
|
||||
|
||||
for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) {
|
||||
if (tobj != obj)
|
||||
if (tobj != obj) {
|
||||
VM_OBJECT_RLOCK(tobj);
|
||||
kve->kve_offset += tobj->backing_object_offset;
|
||||
}
|
||||
if (lobj != obj)
|
||||
VM_OBJECT_RUNLOCK(lobj);
|
||||
lobj = tobj;
|
||||
@ -2070,7 +2072,7 @@ sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_ARGS)
|
||||
|
||||
kve->kve_start = (void*)entry->start;
|
||||
kve->kve_end = (void*)entry->end;
|
||||
kve->kve_offset = (off_t)entry->offset;
|
||||
kve->kve_offset += (off_t)entry->offset;
|
||||
|
||||
if (entry->protection & VM_PROT_READ)
|
||||
kve->kve_protection |= KVME_PROT_READ;
|
||||
@ -2284,6 +2286,7 @@ kern_proc_vmmap_out(struct proc *p, struct sbuf *sb, ssize_t maxlen, int flags)
|
||||
for (tobj = obj; tobj != NULL;
|
||||
tobj = tobj->backing_object) {
|
||||
VM_OBJECT_RLOCK(tobj);
|
||||
kve->kve_offset += tobj->backing_object_offset;
|
||||
lobj = tobj;
|
||||
}
|
||||
if (obj->backing_object == NULL)
|
||||
@ -2302,7 +2305,7 @@ kern_proc_vmmap_out(struct proc *p, struct sbuf *sb, ssize_t maxlen, int flags)
|
||||
|
||||
kve->kve_start = entry->start;
|
||||
kve->kve_end = entry->end;
|
||||
kve->kve_offset = entry->offset;
|
||||
kve->kve_offset += entry->offset;
|
||||
|
||||
if (entry->protection & VM_PROT_READ)
|
||||
kve->kve_protection |= KVME_PROT_READ;
|
||||
|
Loading…
Reference in New Issue
Block a user