dlopen / dlsym issue ? / Reproducing the issue
Peter S. Mazinger
ps.m at gmx.net
Tue Apr 11 09:35:04 UTC 2006
On Tue, 11 Apr 2006 jean-marie.verdun at splitted-desktop.org wrote:
> 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
uClibc-svn (native build on x86) is ok
Peter
>
> 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?
> >
> >
>
>
--
Peter S. Mazinger <ps dot m at gmx dot net> ID: 0xA5F059F2
Key fingerprint = 92A4 31E1 56BC 3D5A 2D08 BB6E C389 975E A5F0 59F2
More information about the uClibc
mailing list