Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the equivalent of GNU's --wrap linker flag in OS X linker?

Tags:

c

gnu

linker

clang

ld

I'm trying to port a C program compiled with GNU toolchain to OS X but its default ld program does not support the --wrap flag, which is present in GNU's ld. This is from the man page of GNU's ld:

--wrap symbol
    Use a wrapper function for symbol.  Any undefined reference to sym-
    bol will be resolved to "__wrap_symbol".  Any  undefined  reference
    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 (size_t c)
            {
              printf ("malloc called with %zu\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".

Is there a portable way of achieving this?

like image 253
Ian Liu Rodrigues Avatar asked Jul 17 '15 13:07

Ian Liu Rodrigues


1 Answers

I faced a similar issue but never found an equivalent. Following workarounds can help, depending on what you exactly intend to achieve.

1) Wrapping symbols during linking on OS X

2) https://discussions.apple.com/thread/617779?start=0&tstart=0

like image 114
visweshn92 Avatar answered Nov 15 '22 20:11

visweshn92