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 to symbol
. 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 to malloc
will call the function __wrap_malloc
instead. The call to __real_malloc
in __wrap_malloc
will call the real malloc
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.