On Wed, Jan 13, 2016 at 9:30 PM, Waldemar Brodkorb <wbx(a)uclibc-ng.org> wrote:
Thanks. Just as always, how do you found the problem and did
some application failed for you?
I'm trying to investigate known libdl problems, found the following list:
1) ldso: fix dlsym hang when reloading DSOs
http://comments.gmane.org/gmane.comp.lib.uclibc.general/23353
http://lists.busybox.net/pipermail/uclibc/2013-June/047819.html
2) Crash during library unloading with RTLD_GLOBAL
http://bugs.busybox.net/show_bug.cgi?id=6158
3) libdl memory leaks in case of RTLD_GLOBAL or RTLD_NODELETE flag set,
piece of Valgrind report:
...
==6131== 12 bytes in 1 blocks are definitely lost
==6131== by 0x4032C45: do_dlopen (libdl.c:472)
==6131== by 0x8048E02: do_test (nodelete.c:44)
...
==6131== 48 (24 direct, 24 indirect) bytes in 1 blocks are definitely lost
==6131== by 0x4032793: do_dlopen (libdl.c:445)
==6131== by 0x8048E02: do_test (nodelete.c:44)
...
i.e. some users has problems with real applications.
First of all, I discover absence of test-cases for above problems.
After I found first candidate of test-case inside glibc, new bug was
appeared - RTLD_NODELETE ignored, when passed in dlopen() only.
Thus, it is the first fix against a chain of bugs. Next two bugs has
proposed, but unaccepted, patches. According to uClibc maintainers
responses in mailing list(from 2013), their are not a complete
solution - just workarounds.
Unfortunately, I haven't enough knowledge of uClibc-ng internals to
fix all of the bugs myself. So, help of someone experienced will be
very desirable.
regards,
Leonid