8.3.26 Wrap Option

The --wrap symbol option uses wrapper functions for symbol.

Any undefined references to symbol will be resolved to __wrap_symbol. (Note the two leading underscores used with these symbols.) Any undefined references to __real_symbol will be resolved to symbol. This can be 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.