From e2fc8c58f1148d0a0a41e5be9e95b83e46408471 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Mon, 1 Jan 2007 22:17:37 +0000 Subject: [PATCH] Merge r6471 (Avoid printf in the recursive routines ...) git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_2_BRANCH@6472 --- memcheck/tests/wrap8.c | 55 +++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/memcheck/tests/wrap8.c b/memcheck/tests/wrap8.c index 39a9c3ca8a..abda5bb0e0 100644 --- a/memcheck/tests/wrap8.c +++ b/memcheck/tests/wrap8.c @@ -1,4 +1,4 @@ - +#include #include #include #include "valgrind.h" @@ -12,15 +12,15 @@ Hence this test has two expected outcomes: - on ppc64-linux, a stack overflow is caught, and V aborts. - on everything else, it runs successfully to completion. + Note, pre() and post() used so as to avoid printf, which messes + up the call stacks on ppc64-linux due to intercept of mempcpy. */ - typedef struct _Lard { struct _Lard* next; char stuff[999]; } Lard; - Lard* lard = NULL; static int ctr = 0; @@ -34,8 +34,8 @@ void addMoreLard ( void ) lard = p; } } - - +static void post ( char* s, int n, int r ); +static void pre ( char* s, int n ); static int fact1 ( int n ); static int fact2 ( int n ); @@ -60,11 +60,11 @@ int I_WRAP_SONAME_FNNAME_ZU(NONE,fact1) ( int n ) int r; OrigFn fn; VALGRIND_GET_ORIG_FN(fn); - printf("in wrapper1-pre: fact(%d)\n", n); fflush(stdout); + pre("wrapper1", n); addMoreLard(); CALL_FN_W_W(r, fn, n); addMoreLard(); - printf("in wrapper1-post: fact(%d) = %d\n", n, r); fflush(stdout); + post("wrapper1", n, r); if (n >= 3) r += fact2(2); return r; } @@ -74,11 +74,11 @@ int I_WRAP_SONAME_FNNAME_ZU(NONE,fact2) ( int n ) int r; OrigFn fn; VALGRIND_GET_ORIG_FN(fn); - printf("in wrapper2-pre: fact(%d)\n", n); fflush(stdout); + pre("wrapper2", n); addMoreLard(); CALL_FN_W_W(r, fn, n); addMoreLard(); - printf("in wrapper2-post: fact(%d) = %d\n", n, r); fflush(stdout); + post("wrapper2", n, r); return r; } @@ -100,3 +100,40 @@ int main ( void ) return 0; } + +static void send ( char* s ) +{ + while (*s) { + write(1, s, 1); + s++; + } +} + +static void pre ( char* s, int n ) +{ + char buf[50]; + fflush(stdout); + sprintf(buf,"%d", n); + send("in "); + send(s); + send("-pre: fact("); + send(buf); + send(")\n"); + fflush(stdout); +} + +static void post ( char* s, int n, int r ) +{ + char buf[50]; + fflush(stdout); + sprintf(buf,"%d", n); + send("in "); + send(s); + send("-post: fact("); + send(buf); + send(") = "); + sprintf(buf,"%d", r); + send(buf); + send("\n"); + fflush(stdout); +} -- 2.47.2