]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merge r6495 (handle hinted client mmaps more robustly)
authorJulian Seward <jseward@acm.org>
Tue, 9 Jan 2007 20:40:44 +0000 (20:40 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 9 Jan 2007 20:40:44 +0000 (20:40 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_2_BRANCH@6497

coregrind/m_syswrap/syswrap-generic.c

index 0ea52e640d0d6436aea02391edc6e6b6a0e0b9b6..a45f129a0feb38e9d102a68cf4150f6a207ca858 100644 (file)
@@ -1887,6 +1887,25 @@ ML_(generic_PRE_sys_mmap) ( ThreadId tid,
                                     arg4 | VKI_MAP_FIXED,
                                     arg5, arg6);
 
+   /* A refinement: it may be that the kernel refused aspacem's choice
+      of address.  If we were originally asked for a hinted mapping,
+      there is still a last chance: try again at any address.
+      Hence: */
+   if (mreq.rkind == MHint && sres.isError) {
+      mreq.start = 0;
+      mreq.len   = arg2;
+      mreq.rkind = MAny;
+      advised = VG_(am_get_advisory)( &mreq, True/*client*/, &mreq_ok );
+      if (!mreq_ok) {
+         /* Our request was bounced, so we'd better fail. */
+         return VG_(mk_SysRes_Error)( VKI_EINVAL );
+      }
+      /* and try again with the kernel */
+      sres = VG_(am_do_mmap_NO_NOTIFY)(advised, arg2, arg3,
+                                       arg4 | VKI_MAP_FIXED,
+                                       arg5, arg6);
+   }
+
    if (!sres.isError) {
       /* Notify aspacem and the tool. */
       ML_(notify_aspacem_and_tool_of_mmap)(