dlopen / dlsym issue ? / Reproducing the issue
jean-marie.verdun at splitted-desktop.org
jean-marie.verdun at splitted-desktop.org
Tue Apr 11 10:36:38 UTC 2006
Hi,
I have written a simple reproducer which make easily raise the bug.
just follow this into a chroot environment with 0.9.27 or 0.9.28
mkdir test
cd test
mkdir test1
mkdir test2
-> Edit module1.c
#include <stdio.h>
void module_open()
{
printf("Module Open call ok module 1\n");
}
-> Edit module2.c
#include <stdio.h>
void module_open()
{
printf("Module Open call ok module 2\n");
}
-> Edit main.c
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main()
{
void *handle;
void (*ptr)();
handle=dlopen("test2/module.so", RTLD_LAZY);
printf("Handle %lx\n",handle);
if (handle)
{
ptr=dlsym(handle,"module_open");
}
printf("Return function addr %lx\n",ptr);
(*ptr)();
handle=dlopen("test1/module.so", RTLD_LAZY);
printf("Handle %lx\n",handle);
if (handle)
{
ptr=dlsym(handle,"module_open");
}
printf("Return function addr %lx\n",ptr);
(*ptr)();
return(0);
}
Compile module1.c
gcc -c module1.c
gcc -o test1/module.so -shared module1.o
Compile module2.c
gcc -c module2.c
gcc -o test2.module.so -shared module2.o
Compile main.c
gcc main.c -ldl
With a glibc environment
./a.out
Handle 804a020
Return function addr 400166cc
Module Open call ok module 2
Handle 804a390
Return function addr 400196cc
Module Open call ok module 1
With a uClibc enivironment
./a.out
Handle 804a120
Return function addr 400bb440
Module Open call ok module 2
Handle 804a150
Return function addr 400bb440
Module Open call ok module 2
There is 2 different handles but dlsym is not returning the right stuff.
I will try to investigate more today.
Jm
On Tue, 11 Apr 2006, Joakim Tjernlund wrote:
>
>>
>> Hi,
>>
>> I am using uClibc 0.97 as a test plateform to build a
>> lightweight graphical environment. I am trying to port on top
>> of a buildroot environment Enlightenment DR17
>> (http://www.enlightenment.org) which is under heavy
>
> .97(I assume this is really 0.9.27) is very old and lots has happened since then(in ldso as well).
> I think you should try both 0.9.28 and current SVN.
> If that doesn't work, show me the the RTLD_XX flags you are using and make sure
> that the .so libs has all dependencies in their DT_NEEDED list.
>
>>
>> I have included into my 0.97 source tree the lates ldso tree
>> from the CVS but without major success.
>
> Don't see how you can just rip out the ldso sub tree and make that work with current
> SVN. What did you do?
>
>
More information about the uClibc
mailing list