From: Julian Seward Date: Mon, 2 Sep 2013 13:02:02 +0000 (+0000) Subject: add_mapping_callback on Darwin: also produce a ChangedSeg record in X-Git-Tag: svn/VALGRIND_3_9_0~169 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a89859bded83f1f57bb2acb5db251396dc9f2587;p=thirdparty%2Fvalgrind.git 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 . git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13522 --- diff --git a/coregrind/m_aspacemgr/aspacemgr-linux.c b/coregrind/m_aspacemgr/aspacemgr-linux.c index 970979300f..f1eaed9a25 100644 --- a/coregrind/m_aspacemgr/aspacemgr-linux.c +++ b/coregrind/m_aspacemgr/aspacemgr-linux.c @@ -3548,9 +3548,10 @@ static void add_mapping_callback(Addr addr, SizeT len, UInt prot, } 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 @@ static void add_mapping_callback(Addr addr, SizeT len, UInt prot, "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 {