]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mips32: Fix the align problem with mmap.
authorDejan Jevtic <dejan.jevtic@valgrind.org>
Tue, 1 Oct 2013 10:34:54 +0000 (10:34 +0000)
committerDejan Jevtic <dejan.jevtic@valgrind.org>
Tue, 1 Oct 2013 10:34:54 +0000 (10:34 +0000)
Valgrind is doing mmap always with MAP_FIXED. On mips32 we need to check arg4.
If the arg4 is MAP_SHARED we need to align the address to SHMLBA.
If the program tries to do mmap with VKI_FIXED Valgrind doesn't need to align
the address to SHMLBA.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13593

coregrind/m_syswrap/syswrap-mips32-linux.c

index 055306d4bd7c07a8f8a2cb2c2317d31be96320b8..d99d06b8d07919fbd8373fddf49ec7bd6bc15ae9 100644 (file)
@@ -448,14 +448,15 @@ static SysRes mips_PRE_sys_mmap(ThreadId tid,
       mreq.rkind = MAny;
    }
 
-   if ((VKI_SHMLBA > VKI_PAGE_SIZE) && (VKI_MAP_SHARED & arg4)) {
+   if ((VKI_SHMLBA > VKI_PAGE_SIZE) && (VKI_MAP_SHARED & arg4)
+       && !(VKI_MAP_FIXED & arg4))
       mreq.len = arg2 + VKI_SHMLBA - VKI_PAGE_SIZE;
-   }
 
    /* Enquire ... */
    advised = VG_(am_get_advisory)( &mreq, True/*client*/, &mreq_ok );
 
-   if ((VKI_SHMLBA > VKI_PAGE_SIZE) && (VKI_MAP_SHARED & arg4))
+   if ((VKI_SHMLBA > VKI_PAGE_SIZE) && (VKI_MAP_SHARED & arg4)
+       && !(VKI_MAP_FIXED & arg4))
       advised = VG_ROUNDUP(advised, VKI_SHMLBA);
 
    if (!mreq_ok) {