#include #include #include #define TEST_SO "$ORIGIN/tst-dlmopen1mod.so" static int do_test (void) { void *h = dlopen (LIBC_SO, RTLD_LAZY|RTLD_NOLOAD); if (h == NULL) { printf ("cannot get handle for %s: %s\n", LIBC_SO, dlerror ()); return 1; } Lmid_t ns = -10; if (dlinfo (h, RTLD_DI_LMID, &ns) != 0) { printf ("dlinfo for %s in %s failed: %s\n", LIBC_SO, __func__, dlerror ()); return 1; } if (ns != LM_ID_BASE) { printf ("namespace for %s not LM_ID_BASE\n", LIBC_SO); return 1; } if (dlclose (h) != 0) { printf ("dlclose for %s in %s failed: %s\n", LIBC_SO, __func__, dlerror ()); return 1; } h = dlmopen (LM_ID_NEWLM, TEST_SO, RTLD_LAZY); if (h == NULL) { printf ("cannot get handle for %s: %s\n", "tst-dlmopen1mod.so", dlerror ()); return 1; } ns = -10; if (dlinfo (h, RTLD_DI_LMID, &ns) != 0) { printf ("dlinfo for %s in %s failed: %s\n", "tst-dlmopen1mod.so", __func__, dlerror ()); return 1; } if (ns == LM_ID_BASE) { printf ("namespace for %s is LM_ID_BASE\n", TEST_SO); return 1; } int (*fct) (Lmid_t) = dlsym (h, "foo"); if (fct == NULL) { printf ("could not find %s: %s\n", "foo", dlerror ()); return 1; } if (fct (ns) != 0) return 1; if (dlclose (h) != 0) { printf ("dlclose for %s in %s failed: %s\n", TEST_SO, __func__, dlerror ()); return 1; } return 0; } #define TEST_FUNCTION do_test () #include "../test-skeleton.c"