#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mach-o/dyld-interposing.h>
#include "test_support.h"
static bool inMalloc = false;
static bool forceSystemMalloc = false;
void* mymalloc(size_t size)
{
if (forceSystemMalloc) {
return malloc(size);
}
if (inMalloc) {
forceSystemMalloc = true;
FAIL("mymalloc() is recursive");
}
inMalloc = true;
void* sym = dlsym(RTLD_DEFAULT, "malloc");
if (sym == NULL) {
forceSystemMalloc = true;
FAIL("dlsym failed");
}
if (sym != mymalloc) {
forceSystemMalloc = true;
FAIL("dlsym result %p != mymalloc %p", sym, &mymalloc);
}
void* result = malloc(size);
inMalloc = false;
return result;
}
DYLD_INTERPOSE(mymalloc, malloc)