|
From: <sv...@va...> - 2005-09-24 19:42:45
|
Author: njn
Date: 2005-09-24 20:42:41 +0100 (Sat, 24 Sep 2005)
New Revision: 4751
Log:
fix for #113230
Added:
trunk/memcheck/tests/pipe.c
trunk/memcheck/tests/pipe.stderr.exp
trunk/memcheck/tests/pipe.vgtest
Modified:
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/docs/internals/3_0_BUGSTATUS.txt
trunk/memcheck/tests/Makefile.am
Modified: trunk/coregrind/m_syswrap/syswrap-linux.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-linux.c 2005-09-24 19:14:12 UTC (re=
v 4750)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2005-09-24 19:42:41 UTC (re=
v 4751)
@@ -1601,12 +1601,23 @@
PRE_REG_READ0(long, "munlockall");
}
=20
-// XXX: sort of x86/Linux-specific
+// This has different signatures for different platforms.
+//
+// x86: int sys_pipe(unsigned long __user *fildes);
+// AMD64: long sys_pipe(int *fildes);
+// ppc32: int sys_pipe(int __user *fildes);
+// ppc64: int sys_pipe(int __user *fildes);
+//
+// The type of the argument is most important, and it is an array of 32 =
bit
+// values in all cases. (The return type differs across platforms, but =
it
+// is not used.) So we use 'int' as its type. This fixed bug #113230 w=
hich
+// was caused by using an array of 'unsigned long's, which didn't work o=
n
+// AMD64.
PRE(sys_pipe)
{
PRINT("sys_pipe ( %p )", ARG1);
- PRE_REG_READ1(int, "pipe", unsigned long *, filedes);
- PRE_MEM_WRITE( "pipe(filedes)", ARG1, 2*sizeof(long) );
+ PRE_REG_READ1(int, "pipe", int *, filedes);
+ PRE_MEM_WRITE( "pipe(filedes)", ARG1, 2*sizeof(int) );
}
POST(sys_pipe)
{
Modified: trunk/docs/internals/3_0_BUGSTATUS.txt
=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/docs/internals/3_0_BUGSTATUS.txt 2005-09-24 19:14:12 UTC (rev 4=
750)
+++ trunk/docs/internals/3_0_BUGSTATUS.txt 2005-09-24 19:42:41 UTC (rev 4=
751)
@@ -155,7 +155,14 @@
FIXED-TRUNK: TODO
FIXED-30BRANCH: TODO
=20
+----------------------------------------------------------------
+113230 Valgrind sys_pipe on x86-64 wrongly thinks file descriptors
+ should be 64bit
=20
+FIXED-TRUNK: vg:4669
+FIXED-30BRANCH: TODO
+
+
=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=3D=3D=3D=3D=3D
=3D=3D=3D Bugs targeted for 3.1.0 and 3.0.1 (all done, 3.0.1 released) =
=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=3D=3D=3D=3D=3D=3D=3D=3D
Modified: trunk/memcheck/tests/Makefile.am
=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/memcheck/tests/Makefile.am 2005-09-24 19:14:12 UTC (rev 4750)
+++ trunk/memcheck/tests/Makefile.am 2005-09-24 19:42:41 UTC (rev 4751)
@@ -63,6 +63,7 @@
oset_test.stderr.exp oset_test.stdout.exp oset_test.vgtest \
partiallydefinedeq.vgtest partiallydefinedeq.stderr.exp \
partiallydefinedeq.stdout.exp \
+ pipe.stderr.exp pipe.vgtest \
pointer-trace.vgtest \
pointer-trace.stderr.exp pointer-trace.stderr.exp64 \
post-syscall.stderr.exp post-syscall.stdout.exp post-syscall.vgtest \
@@ -107,7 +108,7 @@
nanoleak new_nothrow \
null_socket oset_test overlap \
partiallydefinedeq \
- pointer-trace \
+ pipe pointer-trace \
post-syscall \
realloc1 realloc2 realloc3 \
sigaltstack signal2 sigprocmask sigkill \
Added: trunk/memcheck/tests/pipe.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/memcheck/tests/pipe.c 2005-09-24 19:14:12 UTC (rev 4750)
+++ trunk/memcheck/tests/pipe.c 2005-09-24 19:42:41 UTC (rev 4751)
@@ -0,0 +1,16 @@
+// This is a regtest for bug #113230, in which 64-bit platforms mistaken=
ly
+// behaved as if pipe() took an array of 64-bit ints, when it really tak=
es
+// an array of 32-bit ints.
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+int main(int argc, char *argv[])
+{
+ int *filedes =3D malloc(2 * sizeof(int));
+
+ pipe(filedes);
+
+ return 0;
+}
Added: trunk/memcheck/tests/pipe.stderr.exp
=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
Added: trunk/memcheck/tests/pipe.vgtest
=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/memcheck/tests/pipe.vgtest 2005-09-24 19:14:12 UTC (rev 4750)
+++ trunk/memcheck/tests/pipe.vgtest 2005-09-24 19:42:41 UTC (rev 4751)
@@ -0,0 +1,2 @@
+prog: pipe
+vgopts: -q
|