summaryrefslogblamecommitdiff
path: root/libgcompat/dlfcn.c
blob: 603336cceeee4f570d2d3978fc41589d146f5e4c (plain) (tree)
























                                                                                















                                                                          
#include <dlfcn.h>  /* dlopen, dlsym */
#include <stddef.h> /* NULL */
#include <stdio.h>  /* fprintf */
#include <stdlib.h> /* getenv */

void *dlmopen(long lmid, const char *pathname, int mode)
{
	if (getenv("GLIBC_FAKE_DEBUG") != NULL) {
		fprintf(stderr,
		        "loading library %s was requested in namespace %ld",
		        pathname, lmid);
	}

	return dlopen(pathname, mode);
}

void *dlvsym(void *handle, char *symbol, char *version)
{
	if (getenv("GLIBC_FAKE_DEBUG") != NULL) {
		fprintf(stderr, "symbol %s with version %s is being redirected",
		        symbol, version);
	}

	return dlsym(handle, symbol);
}

int dladdr1(const void *addr, Dl_info *info, void **extra_info, int flags)
{
	if (getenv("GLIBC_FAKE_DEBUG") != NULL) {
		fprintf(stderr, "request info of %p with flags %d", addr,
		        flags);
	}

	switch (flags) {
	case 1 /* RTLD_DL_SYMEMT */:
	case 2 /* RTLD_DL_LINKMAP */:
		return 0;
	default:
		return dladdr(addr, info);
	}
}