|
From: <sv...@va...> - 2005-11-11 17:21:23
|
Author: tom
Date: 2005-11-11 17:21:20 +0000 (Fri, 11 Nov 2005)
New Revision: 5090
Log:
Add a stack switching test.
Added:
trunk/memcheck/tests/stack_switch.c
trunk/memcheck/tests/stack_switch.stderr.exp
trunk/memcheck/tests/stack_switch.vgtest
Modified:
trunk/memcheck/tests/Makefile.am
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-11-11 14:57:12 UTC (rev 5089)
+++ trunk/memcheck/tests/Makefile.am 2005-11-11 17:21:20 UTC (rev 5090)
@@ -87,6 +87,7 @@
signal2.stderr.exp signal2.stdout.exp signal2.vgtest \
sigprocmask.stderr.exp sigprocmask.stderr.exp2 sigprocmask.vgtest \
stack_changes.stderr.exp stack_changes.stdout.exp stack_changes.vgtest =
\
+ stack_switch.stderr.exp stack_switch.vgtest \
strchr.stderr.exp strchr.stderr.exp2 strchr.vgtest \
str_tester.stderr.exp str_tester.vgtest \
supp_unknown.stderr.exp supp_unknown.vgtest supp_unknown.supp \
@@ -126,7 +127,8 @@
post-syscall \
realloc1 realloc2 realloc3 \
sigaltstack signal2 sigprocmask sigkill \
- stack_changes strchr str_tester supp_unknown supp1 supp2 suppfree \
+ stack_changes stack_switch strchr str_tester \
+ supp_unknown supp1 supp2 suppfree \
trivialleak \
mismatches new_override metadata \
xml1 \
@@ -142,6 +144,7 @@
oset_test_CFLAGS =3D -DVGA_$(VG_ARCH) -DVGO_$(VG_OS) -DVGP_$(VG_PLATFORM=
)
# Don't allow GCC to inline memcpy(), because then we can't intercept it
overlap_CFLAGS =3D $(AM_CFLAGS) -fno-builtin-memcpy
+stack_switch_LDADD =3D -lpthread
str_tester_CFLAGS =3D $(AM_CFLAGS) -Wno-shadow
supp_unknown_SOURCES =3D badjump.c
supp1_SOURCES =3D supp.c
Added: trunk/memcheck/tests/stack_switch.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/stack_switch.c (rev 0)
+++ trunk/memcheck/tests/stack_switch.c 2005-11-11 17:21:20 UTC (rev 5090=
)
@@ -0,0 +1,49 @@
+#define _XOPEN_SOURCE 600
+#define _BSD_SOURCE
+
+#include <sched.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include "valgrind.h"
+
+#define STACK_SIZE 8192
+
+static int thread_main(void *arg)
+{
+ char buffer[1024];
+
+ memset( buffer, 1, sizeof( buffer ) );
+
+ return memchr( buffer, 1, sizeof( buffer ) ) =3D=3D NULL;
+}
+
+int main(int argc, char **argv)
+{
+ void *stack;
+ int stackid;
+ pid_t pid;
+
+ if ( ( stack =3D mmap( NULL, STACK_SIZE, PROT_READ|PROT_WRITE, MAP_PR=
IVATE|MAP_ANONYMOUS, -1, 0 ) ) =3D=3D MAP_FAILED )
+ {
+ perror( "mmap" );
+ exit( 1 );
+ }
+
+ stackid =3D VALGRIND_STACK_REGISTER( stack, stack + STACK_SIZE );
+
+ if ( ( pid =3D clone( thread_main, stack + STACK_SIZE, CLONE_VM|CLONE=
_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|SIGCHLD, NULL ) ) =3D=3D -1 )
+ {
+ perror( "clone" );
+ exit( 1 );
+ }
+
+ sleep( 1 );
+
+ exit( 0 );
+}
Added: trunk/memcheck/tests/stack_switch.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/stack_switch.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/stack_switch.vgtest (rev=
0)
+++ trunk/memcheck/tests/stack_switch.vgtest 2005-11-11 17:21:20 UTC (rev=
5090)
@@ -0,0 +1,2 @@
+prog: stack_switch
+vgopts: -q
|