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)) 9int mul ( int x, int y ) { return x * y; } 10 11int fact ( int n ) 12{ 13 if (n == 0) return 1; else return mul(n, fact(n-1)); 14} 15 16int 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 29int 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