1 2 #include <stdio.h> 3 #include "valgrind.h" 4 5 /* Check that function wrapping works for a recursive function. */ 6 7 /* This is needed to stop gcc4 turning 'fact' into a loop */ 8 __attribute__((noinline)) 9 int mul ( int x, int y ) { return x * y; } 10 11 int fact ( int n ) 12 { 13 if (n == 0) return 1; else return mul(n, fact(n-1)); 14 } 15 16 int I_WRAP_SONAME_FNNAME_ZU(NONE,fact) ( int n ) 17 { 18 int r; 19 OrigFn fn; 20 VALGRIND_GET_ORIG_FN(fn); 21 printf("in wrapper1-pre: fact(%d)\n", n); 22 CALL_FN_W_W(r, fn, n); 23 printf("in wrapper1-post: fact(%d) = %d\n", n, r); 24 return r; 25 } 26 27 /* --------------- */ 28 29 int main ( void ) 30 { 31 int r; 32 printf("computing fact(5)\n"); 33 r = fact(5); 34 printf("fact(5) = %d\n", r); 35 return 0; 36 } 37