#include <dlfcn.h>
#include <stdio.h>
int mainSymbol;
int
main()
{
int ret = 1;
void *prog;
void *libbb;
void *libcc;
void *p_sym;
void *bbsym;
void *ccsym;
void *a_sym;
prog = dlopen(NULL, RTLD_LAZY);
if (prog == NULL) {
printf("dlopen(NULL, RTLD_LAZY) FAILED\n");
return (1);
}
libbb = dlopen("libbb.so", RTLD_LAZY|RTLD_GLOBAL);
if (libbb == NULL) {
printf("dlopen(\"libbb.so\", RTLD_LAZY) FAILED\n");
return (1);
}
libcc = dlopen("libcc.so", RTLD_LAZY|RTLD_GLOBAL);
if (libcc == NULL) {
printf("dlopen(\"libcc.so\", RTLD_LAZY) FAILED\n");
return (1);
}
p_sym = dlsym(prog, "commonSymbol");
bbsym = dlsym(libbb, "commonSymbol");
ccsym = dlsym(libcc, "commonSymbol");
a_sym = dlsym(RTLD_DEFAULT, "commonSymbol");
if(a_sym == p_sym) {
ret = 0;
}
if(a_sym == bbsym) {
printf("found common symbol in libbb incorrect location\n");
ret = 1;
}
if(a_sym == ccsym) {
printf("found common symbol in libcc incorrect location\n");
ret = 1;
}
dlclose(libbb);
dlclose(libcc);
return (ret);
}