The GNU linker provides the --wrap symbol
flag to wrap a custom function around an existing function.
As you can read here, last flag: http://ieee.uwaterloo.ca/coldfire/gcc-doc/docs/ld_3.html#SEC3
--wrap symbol
Use a wrapper function for symbol. Any undefined reference to
symbol
will be resolved to__wrap_symbol
. Any undefined reference to__real_symbol
will be resolved tosymbol
. This can used to provide a wrapper for a system function. The wrapper function should be called__wrap_symbol
. If it wishes to call the system function, it should call__real_symbol
. Here is a trivial example:void * __wrap_malloc (int c) { printf ("malloc called with %ld\n", c); return __real_malloc (c); }
If you link other code with this file using
--wrap malloc
, then all calls tomalloc
will call the function__wrap_malloc
instead. The call to__real_malloc
in__wrap_malloc
will call the realmalloc
function. You may wish to provide a __real_malloc function as well, so that links without the--wrap
option will succeed. If you do this, you should not put the definition of__real_malloc
in the same file as __wrap_malloc; if you do, the assembler may resolve the call before the linker has a chance to wrap it to malloc.