1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "valgrind.h" 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* The simplest possible wrapping test: just call a wrapped function 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown and check we run the wrapper instead. */ 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* The "original" function */ 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__attribute__((noinline)) 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid actual ( void ) 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("in actual\n"); 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* The wrapper. Since this executable won't have a soname, we have to 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown use "NONE", since V treats any executable/.so which lacks a soname 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown as if its soname was "NONE". */ 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid I_WRAP_SONAME_FNNAME_ZU(NONE,actual) ( void ) 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown OrigFn fn; 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown VALGRIND_GET_ORIG_FN(fn); 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("wrapper-pre\n"); 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CALL_FN_v_v(fn); 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("wrapper-post\n"); 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* --------------- */ 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void ) 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("starting\n"); 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown actual(); 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 35