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 |