How libgmalloc work with two level namespaces?

dyld, mach-o, macos, malloc

Solution

You need to use dyld interposing. This consists of generating a special `__interpose` section in the `__DATA` segment of your dynamic library containing pairs of replacement / replaced function addresses. The private dyld-interposing.h header from the dyld source contains a handy macro to help with this, along with an example usage.

Problem

I want to write my own malloc/free functions with debug purposes, documentation says I have to use DYLD_FORCE_FLAT_NAMESPACE together with DYLD_INSERT_LIBRARIES. But at the same time libgmalloc article clearly states: ``` libgmalloc is available in /usr/lib/libgmalloc.dylib. To use it, set this environment variable: set DYLD_INSERT_LIBRARIES to /usr/lib/libgmalloc.dylib Note: it is no longer necessary to set DYLD_FORCE_FLAT_NAMESPACE. ``` The question is: how to remove the necessity in DYLD_FORCE_FLAT_NAMESPACE ? malloc from my own library is not used if I don't force the namespace flatness.

Original source