|
From: <sv...@va...> - 2013-09-02 13:02:10
|
sewardj 2013-09-02 13:02:02 +0000 (Mon, 02 Sep 2013)
New Revision: 13522
Log:
add_mapping_callback on Darwin: also produce a ChangedSeg record in
the case where V's record of the permissions for a range differs from
that of the kernel's. The lack of this caused synthetic segfaults
("can't translate here") from m_translate on OSX 10.8 for pretty much
any graphical .
Modified files:
trunk/coregrind/m_aspacemgr/aspacemgr-linux.c
Modified: trunk/coregrind/m_aspacemgr/aspacemgr-linux.c (+18 -3)
===================================================================
--- trunk/coregrind/m_aspacemgr/aspacemgr-linux.c 2013-09-02 12:44:52 +00:00 (rev 13521)
+++ trunk/coregrind/m_aspacemgr/aspacemgr-linux.c 2013-09-02 13:02:02 +00:00 (rev 13522)
@@ -3548,9 +3548,10 @@
}
return;
- } else if (nsegments[i].kind == SkAnonC ||
- nsegments[i].kind == SkFileC ||
- nsegments[i].kind == SkShmC)
+ }
+ else if (nsegments[i].kind == SkAnonC ||
+ nsegments[i].kind == SkFileC ||
+ nsegments[i].kind == SkShmC)
{
/* Check permissions on client regions */
// GrP fixme
@@ -3570,6 +3571,20 @@
"mismatch (kernel %x, V %x)\n",
(void*)nsegments[i].start,
(void*)(nsegments[i].end+1), prot, seg_prot);
+ /* Add mapping for regions with protection changes */
+ ChangedSeg* cs = &css_local[css_used_local];
+ if (css_used_local < css_size_local) {
+ cs->is_added = True;
+ cs->start = addr;
+ cs->end = addr + len - 1;
+ cs->prot = prot;
+ cs->offset = offset;
+ css_used_local++;
+ } else {
+ css_overflowed = True;
+ }
+ return;
+
}
} else {
|