|
From: <sv...@va...> - 2006-05-09 01:24:19
|
Author: tom
Date: 2006-05-08 12:58:06 +0100 (Mon, 08 May 2006)
New Revision: 5886
Log:
Don't check the fifth argument of mremap() unless MREMAP_FIXED is set
in the fourth argument. Fix to bug #123535.
Modified:
trunk/coregrind/m_syswrap/syswrap-generic.c
Modified: trunk/coregrind/m_syswrap/syswrap-generic.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syswrap/syswrap-generic.c 2006-05-08 11:37:04 UTC (=
rev 5885)
+++ trunk/coregrind/m_syswrap/syswrap-generic.c 2006-05-08 11:58:06 UTC (=
rev 5886)
@@ -2109,12 +2109,20 @@
{
// Nb: this is different to the glibc version described in the man pa=
ges,
// which lacks the fifth 'new_address' argument.
- PRINT("sys_mremap ( %p, %llu, %d, 0x%x, %p )",=20
- ARG1, (ULong)ARG2, ARG3, ARG4, ARG5);
- PRE_REG_READ5(unsigned long, "mremap",
- unsigned long, old_addr, unsigned long, old_size,
- unsigned long, new_size, unsigned long, flags,
- unsigned long, new_addr);
+ if (ARG4 & VKI_MREMAP_FIXED) {
+ PRINT("sys_mremap ( %p, %llu, %d, 0x%x, %p )",=20
+ ARG1, (ULong)ARG2, ARG3, ARG4, ARG5);
+ PRE_REG_READ5(unsigned long, "mremap",
+ unsigned long, old_addr, unsigned long, old_size,
+ unsigned long, new_size, unsigned long, flags,
+ unsigned long, new_addr);
+ } else {
+ PRINT("sys_mremap ( %p, %llu, %d, 0x%x )",=20
+ ARG1, (ULong)ARG2, ARG3, ARG4);
+ PRE_REG_READ4(unsigned long, "mremap",
+ unsigned long, old_addr, unsigned long, old_size,
+ unsigned long, new_size, unsigned long, flags);
+ }
SET_STATUS_from_SysRes(=20
do_mremap((Addr)ARG1, ARG2, (Addr)ARG5, ARG3, ARG4, tid)=20
);
|