On Wed, Jan 13, 2016 at 9:30 PM, Waldemar Brodkorb wbx@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