OSDN Git Service
Joakim Tjernlund [Wed, 6 Oct 2004 06:51:37 +0000 (06:51 -0000)]
PIE option correction for Config.in. From Peter Mazinger.
Joakim Tjernlund [Tue, 5 Oct 2004 12:06:40 +0000 (12:06 -0000)]
Peter S. Mazinger writes:
Hello!
The attached patches remove unneeded -D<somedefine>, and uses instead
#ifdef __somedefine__
Joakim Tjernlund [Tue, 5 Oct 2004 11:51:59 +0000 (11:51 -0000)]
Peter Kjellerstedt writes:
After the addition of a configuration option for
enabling the support of /etc/ld.so.cache, I thought
it might be a good idea to add one for the support
of the /etc/ld.so.preload file too. So here it is.
While doing this, I also noticed that the dynamic
linker would hang indefinitely if either LD_PRELOAD
or /etc/ld.so.preload contained a library which was
already loaded, so I made a patch for that too.
And of course, I could not resist from doing a little
clean up of comments and indentation, so here is a
patch for that too.
Eric Andersen [Sun, 3 Oct 2004 07:53:52 +0000 (07:53 -0000)]
This patch from Mike Frysinger, extended from an earlier patch from Peter S.
Mazinger implements the changes suggested by me on the uclibc list.
On Tuesday 28 September 2004 02:24 pm, Erik Andersen wrote:
> What I think should be done is
>
> *) Someone that cares about USE_CACHE should fix that option
> up to be sure it works, and give it a proper config entry
> in extra/Configs/Config.in, and rename it to something
> more appropriate such as LDSO_CACHE_SUPPORT.
>
> *) When LDSO_CACHE_SUPPORT=n, UCLIBC_RUNTIME_PREFIX /usr/X11R6/lib
> should be included in the default library search path in
> dl-elf.c, ldd, and ldconfig.
>
> *) When LDSO_CACHE_SUPPORT=y, UCLIBC_RUNTIME_PREFIX /usr/X11R6/lib
> should be excluded from the default library search path in
> dl-elf.c, ldd, and ldconfig, and those wishing to include
> X11 stuff should add that into /etc/ld.so.conf and re-run
> ldconfig.
>
> *) At present, LDSO_CONF and LDSO_CACHE use the same names
> and same structure as glibc. This precludes
> LDSO_CACHE_SUPPORT being uses in any sane fashion on a
> dial glibc and uClibc system. Just as it was necessary
> for use to use a different name for 'libuClibc' rather
> than 'libc', and 'ld-uClibc.so.0' rather than
> 'ld-linux.so.2' it seems that these configuration files
> really ought to be given different names.
>
Joakim Tjernlund [Tue, 28 Sep 2004 13:13:44 +0000 (13:13 -0000)]
Atsushi Nemoto writes:
Hi. I found a mismatch between uClibc and kernel in semctl definition.
In uClibc/libc/misc/sysvipc/sem.c:
static inline _syscall4(int, __semctl, int, semid, int, semnum, int, cmd, union semun *, arg);
...
int semctl(int semid, int semnum, int cmd, ...)
...
arg = va_arg (ap, union semun);
...
return __semctl(semid, semnum, cmd, &arg);
But kernel's semctl is:
asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg)
The last argument is an union semun itself, not a pointer to the
union.
Here is a patch.
Joakim Tjernlund [Tue, 28 Sep 2004 08:55:06 +0000 (08:55 -0000)]
Oops, typo.
Thanks to Peter Kjellerstedt.
Joakim Tjernlund [Tue, 28 Sep 2004 07:56:49 +0000 (07:56 -0000)]
Remove /usr/X11R6/lib from search path.
Search in UCLIBC_RUNTIME_PREFIX"lib" before
UCLIBC_RUNTIME_PREFIX"usr/lib".
X11 users should enable USE_CACHE in Rules.mak, add
/usr/X11R6/lib to /etc/ld.so.conf and run ldconfig.
Joakim Tjernlund [Tue, 28 Sep 2004 07:29:13 +0000 (07:29 -0000)]
Make ldd work for ET_DYN executables. From Peter Mazinger.
Joakim Tjernlund [Mon, 27 Sep 2004 09:40:55 +0000 (09:40 -0000)]
Remove /usr/X11R6/lib from default list.
Move /lib and /usr/lib first in ld.so.cache.
Ignore duplicate /lib and /usr/lib in ld.so.conf
Joakim Tjernlund [Thu, 23 Sep 2004 07:23:26 +0000 (07:23 -0000)]
Add bswap_64 macro and uClibc_page.h. From Peter Kjellerstedt.
Joakim Tjernlund [Thu, 23 Sep 2004 07:15:24 +0000 (07:15 -0000)]
Don't allow undefined global symbols to pass.
Move COPY relocs back to _dl_do_reloc().
White space cleanup.
Joakim Tjernlund [Thu, 23 Sep 2004 07:08:41 +0000 (07:08 -0000)]
White space and printouts cleanup. From Peter Kjellerstedt.
Joakim Tjernlund [Thu, 23 Sep 2004 07:05:40 +0000 (07:05 -0000)]
Make do_rem() safe. From Peter Kjellerstedt.
Joakim Tjernlund [Thu, 23 Sep 2004 07:00:45 +0000 (07:00 -0000)]
Don't allow undefined global symbols to pass.
Move COPY relocs back to _dl_do_reloc().
Joakim Tjernlund [Thu, 23 Sep 2004 06:56:59 +0000 (06:56 -0000)]
Make powerpc look more like the other archs.
Joakim Tjernlund [Fri, 17 Sep 2004 15:57:21 +0000 (15:57 -0000)]
Added back dl_iterate_phdr in ldso(with some small changes).
Someone needs to test if it works to build and run gcj.
Joakim Tjernlund [Fri, 17 Sep 2004 12:41:36 +0000 (12:41 -0000)]
Formatting cleanups from Peter Kellerstedt.
Joakim Tjernlund [Fri, 17 Sep 2004 12:19:35 +0000 (12:19 -0000)]
Bugfix: Add r_addend to final address. The r_addend is mostly zero
but can be nonzero for JMP relocs as well.
All Rela arches need to do this, test and send a patch :)
Remove unneeded test in R_PPC_COPY.
Joakim Tjernlund [Fri, 17 Sep 2004 09:11:53 +0000 (09:11 -0000)]
Don't allow undefined global symbols to pass(all archs needs fixing,
but powerpc).
If you are using buildroot and soft floating point, you may have to
rebuild the libm.so library, copy it to staging_dir/lib and rebuild
your application.
Move handling of R_386_COPY back into _dl_do_reloc(all archs should
do this). Adjust the first argument to _dl_memcpy as it looks wrong
to have symtab[symtab_index].st_value as destination for the mem copy.
Joakim Tjernlund [Thu, 16 Sep 2004 13:07:01 +0000 (13:07 -0000)]
Don't allow undefined global symbols to pass(all archs needs fixing).
If you are using buildroot and soft floating point, you may have to
rebuild the libm.so library, copy it to staging_dir/lib and rebuild
your application.
Cleanups as well.
Manuel Novoa III [Fri, 10 Sep 2004 21:30:26 +0000 (21:30 -0000)]
Hide some x86-specific devel asserts.
Eric Andersen [Wed, 8 Sep 2004 20:13:05 +0000 (20:13 -0000)]
Fixup URL
Joakim Tjernlund [Wed, 8 Sep 2004 09:43:25 +0000 (09:43 -0000)]
Second attempt to fix the INIT/FINI order. This time I think I got it right :)
This needs testing with apps that have complex dependencies.
Eric Andersen [Wed, 8 Sep 2004 03:07:17 +0000 (03:07 -0000)]
Doh! As noted by Mike Frysinger I was too agressive at culling stuff
Eric Andersen [Tue, 7 Sep 2004 11:24:45 +0000 (11:24 -0000)]
Disable prototypes for unimplemented functions
Eric Andersen [Tue, 7 Sep 2004 11:13:06 +0000 (11:13 -0000)]
Yet another bit of joy for mjn3
Eric Andersen [Tue, 7 Sep 2004 10:37:36 +0000 (10:37 -0000)]
Audit and disable unimplemented stuff
Eric Andersen [Tue, 7 Sep 2004 10:34:35 +0000 (10:34 -0000)]
Implement gethostent_r
Eric Andersen [Tue, 7 Sep 2004 10:34:09 +0000 (10:34 -0000)]
Remove stale leftovers
Eric Andersen [Tue, 7 Sep 2004 09:17:17 +0000 (09:17 -0000)]
Audit and scrub malloc.h, which was a mess
Eric Andersen [Tue, 7 Sep 2004 09:04:01 +0000 (09:04 -0000)]
We do not use dl_iterate_phdr, so no need to define it
Eric Andersen [Tue, 7 Sep 2004 08:53:33 +0000 (08:53 -0000)]
uClibc gettext support is under development and really shouldn't
be used by the unsuspecting masses quite yet.
Eric Andersen [Tue, 7 Sep 2004 08:44:19 +0000 (08:44 -0000)]
The 'Somebody Else's Problem Field' was just activated
Eric Andersen [Tue, 7 Sep 2004 08:40:43 +0000 (08:40 -0000)]
First pass prototype removals from auditing header files:
a.out.h to libgen.h (omitting complex.h for a later separate
effort for the math stuff)
Eric Andersen [Tue, 7 Sep 2004 08:36:25 +0000 (08:36 -0000)]
Use a more appealing name, matching the function prototype
Eric Andersen [Tue, 7 Sep 2004 08:30:56 +0000 (08:30 -0000)]
Add missing imaxdiv and lldiv needed for SuSv3. Adjust ldiv to
match glibc's quotient truncation behavior.
Joakim Tjernlund [Fri, 3 Sep 2004 21:17:10 +0000 (21:17 -0000)]
First attempt to fix the INIT/FINI ordering. Fingers crossed :)
Manuel Novoa III [Thu, 2 Sep 2004 14:39:38 +0000 (14:39 -0000)]
Add a couple of mips-specific string funcs.
Port the generic optimized string funcs from glibc, with some tweaks
to cut their size a little. The main change is making memmove
call memcpy for forward copying to trim redundant code.
Make use of both the generic and arch-specific speed-optimized string
funcs configurable. Arch-specific take precedence over generic,
and generic takes precedence over basic size-optimized uClibc funcs.
Manuel Novoa III [Thu, 2 Sep 2004 14:34:53 +0000 (14:34 -0000)]
Fix a couple of symbol name issues.
Joakim Tjernlund [Thu, 2 Sep 2004 07:12:10 +0000 (07:12 -0000)]
Remove unused variables. From Peter Mazinger.
Eric Andersen [Tue, 31 Aug 2004 08:49:06 +0000 (08:49 -0000)]
Restore item I erronenously removed, mention mips string funcs
Eric Andersen [Tue, 31 Aug 2004 08:45:03 +0000 (08:45 -0000)]
Dont mess with __curbrk in ldso
Joakim Tjernlund [Mon, 30 Aug 2004 11:37:47 +0000 (11:37 -0000)]
Typo fix from Peter Mazinger.
Eric Andersen [Mon, 30 Aug 2004 07:40:15 +0000 (07:40 -0000)]
Mention kernel abi selection
Manuel Novoa III [Sat, 28 Aug 2004 21:09:16 +0000 (21:09 -0000)]
solar asked that this bit be reverted.
Joakim Tjernlund [Fri, 27 Aug 2004 15:14:55 +0000 (15:14 -0000)]
Preliminary PIE support for powerpc, i386 was used as template.
Requested by Peter Mazinger. Testing wanted.
Joakim Tjernlund [Fri, 27 Aug 2004 11:08:35 +0000 (11:08 -0000)]
#include "dl-startup.c into ldso.c, making ldso one compilation unit.
Now all functions and vaiables can be made static to reduce relocs.
Basicly, all variables should be merged into one struct variable
and then export that struct. Exported functions should be exported
as functions pointers in the above struct. This will reduce the
number of relocs inside ldso to a handful.
Add -Bsymbolic to linker for ldso. This will resolve all functions
(all JMP_SLOT goes away) and the remaining relocs are transformed into
RELATIVE relocs.
Joakim Tjernlund [Fri, 27 Aug 2004 09:15:11 +0000 (09:15 -0000)]
Forgot to commit this file. Patch from Stefan Allius.
Joakim Tjernlund [Fri, 27 Aug 2004 08:46:19 +0000 (08:46 -0000)]
As Mike Frysinger notes, this code is still needed. I
misread this code and removed it, sorry.
I printed the values of _dl_brkp and _dl_envp in ldso and
got this when executing:
ls:
__curbrk: 0x300c16e0
__environ: 0x1008372c
ldd:
__curbrk: 0x300776e0
__environ: 0x3007759c
why is__environ in the app when executing ls but not ldd?
Eric Andersen [Thu, 26 Aug 2004 23:39:02 +0000 (23:39 -0000)]
Partial patch from Alexandre Oliva to update the frv port
Eric Andersen [Thu, 26 Aug 2004 23:37:48 +0000 (23:37 -0000)]
Patch from Alexandre Oliva to update the frv default config
Eric Andersen [Thu, 26 Aug 2004 23:36:04 +0000 (23:36 -0000)]
Partial patch from Alexandre Oliva:
- adjust licensing terms of sources for crt*.o
- change the stat ABI to speed it up, matching changes in the kernel
- assorted bug-fixes, improvements and updates in the FR-V port
etc.
Eric Andersen [Thu, 26 Aug 2004 22:08:19 +0000 (22:08 -0000)]
Mention FunctionCheck
Eric Andersen [Thu, 26 Aug 2004 22:07:56 +0000 (22:07 -0000)]
Update TODO list a bit
Eric Andersen [Thu, 26 Aug 2004 20:43:25 +0000 (20:43 -0000)]
Only print debug stuff when asked
Eric Andersen [Thu, 26 Aug 2004 18:38:19 +0000 (18:38 -0000)]
Fixup a couple of warnings
Eric Andersen [Thu, 26 Aug 2004 18:36:23 +0000 (18:36 -0000)]
Avoid multiple passes to perform mips GOT relocations, and do
the whole lot in a single pass.
-Erik
Manuel Novoa III [Thu, 26 Aug 2004 17:03:09 +0000 (17:03 -0000)]
Fixes from gentoo.
Joakim Tjernlund [Thu, 26 Aug 2004 14:17:10 +0000 (14:17 -0000)]
Let ldso find libc's malloc function and set _dl_malloc_function.
This removes some crap in libdl.c(and future libs which needs
to access ldso functions).
What do you think?
Joakim Tjernlund [Thu, 26 Aug 2004 14:00:04 +0000 (14:00 -0000)]
Added test for RTLD_GLOBAL flag in _dl_find_hash().
Fixed a bug in libdl.c where the RTLD_GLOBAL was assigned
wronly.
Eric Andersen [Thu, 26 Aug 2004 11:30:48 +0000 (11:30 -0000)]
Relocations of the application's global GOT entries were not being run, and
only the global GOT entry relocations for the loaded shared libs were being
handled. This made applications segfault when using un-fixedup symbols. After
many hours debugging to track down the problem, this patch makes the mips port
happy again.
-Erik
Joakim Tjernlund [Thu, 26 Aug 2004 09:40:09 +0000 (09:40 -0000)]
Stefan Allius writes:
"I fixed the _dl_parse_copy_information in the same way than for the
powerpc and it works fine for me.
You may luck at the patch for the powerpc/elfinterp.c, where I change
the paramter of a dl_dprintf statement. Now we use the same
parameters than for the relocation copy."
Arch mantainers, please do the same.
When all arches has been fixed, we can remove of _dl_parse_copy_information,
it is just a waste of CPU cycles.
Eric Andersen [Wed, 25 Aug 2004 23:46:46 +0000 (23:46 -0000)]
Mike Frysinger writes:
this was sent earlier in a different form:
http://www.uclibc.org/lists/uclibc/2004-January/008136.html
find attached a smaller version ... perhaps adding a fprintf to stderr before
calling abort would be nice like in the glibc patch, but whatever
glibc has since adopted a similar fix for their malloc (third hunk, line 1970)
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/malloc/malloc.c.diff?r1=1.121&r2=1.122&cvsroot=glibc&f=h
-mike
Eric Andersen [Wed, 25 Aug 2004 23:42:46 +0000 (23:42 -0000)]
Mike Frysinger writes:
i sent this earlier but perhaps people missed it the first time around :)
http://www.uclibc.org/lists/uclibc/2004-August/009544.html
basically if you try to #include <sys/ucontext.h> on arm it'll fail because
ucontext.h utilizes typedefs found in bits/sigcontext.h ... i386 already has
this fix in uClibc
find attached a trivial patch to fix this
-mike
Eric Andersen [Wed, 25 Aug 2004 23:10:43 +0000 (23:10 -0000)]
Joakim Tjernlund writes:
Hi Manuel & Erik
I think I know why MIPS is broken. _dl_perform_mips_global_got_relocations() is
broken. It will due to my latest changes reloctate ldso. This
function needs to die and its job should be done inside _dl_parse_relocation_information().
It is mostly a copy and paste job,
Also PERFORM_BOOTSTRAP_GOT and PERFORM_BOOTSTRAP_RELOCATION should be fixed, they
use symbols which aren't passed as arguments.
Jocke
Manuel Novoa III [Wed, 25 Aug 2004 17:24:19 +0000 (17:24 -0000)]
Patch by Carl SHAW <carl.shaw@st.com>...
Below is a patch to make the pread and pwrite calls work on the SH
architecture. I've only tested this on the SH4 with a 2.4.24 kernel - a
fairly recent kernel is required as the problem is partially fixed in
the kernel itself. For more information (in relation to glibc, but the
problem is the same) see the thread at
http://sourceforge.net/mailarchive/message.php?msg_id=
2375908
Someone should really test this on the SH2/3...
Joakim Tjernlund [Wed, 25 Aug 2004 15:19:00 +0000 (15:19 -0000)]
Patch from Stefan Allius:
Remove unused function parameter in ldso.
Remove echo option '-e' since it is not supported on Solaris.
Joakim Tjernlund [Wed, 25 Aug 2004 14:22:05 +0000 (14:22 -0000)]
Hopefully fix Laszlo and Jacobs dlopen problem.
Eric Andersen [Mon, 23 Aug 2004 20:09:15 +0000 (20:09 -0000)]
Note a security item for the next release
Eric Andersen [Sun, 22 Aug 2004 06:04:57 +0000 (06:04 -0000)]
Make the stub profiling stuff work
Eric Andersen [Sat, 21 Aug 2004 21:42:51 +0000 (21:42 -0000)]
The "Delete current profiling code because it is complete crap"
TODO item is now done.
Eric Andersen [Sat, 21 Aug 2004 21:39:51 +0000 (21:39 -0000)]
Attempt to support 'gcc -finstrument-functions', which seems much
more sane than 'gcc -pg' and seems much easier to support.
-Erik
Eric Andersen [Sat, 21 Aug 2004 21:19:29 +0000 (21:19 -0000)]
Kill off all support for 'gcc -pg' / 'gprof' style profiling. There is both a
size and performance penalty to profiling applications this way, as well as
Heisenberg effects, where the act of measuring changes what is measured.
There are better tools for doing profiling, such as OProfile, that do not
require gcc to instrument the application code.
-Erik
Eric Andersen [Fri, 20 Aug 2004 20:46:01 +0000 (20:46 -0000)]
Enable only for architectures where __NR_madvise is defined
-Erik
Eric Andersen [Thu, 19 Aug 2004 23:04:26 +0000 (23:04 -0000)]
Never directly include kernel sources
Eric Andersen [Thu, 19 Aug 2004 20:21:26 +0000 (20:21 -0000)]
'pagesize' was local to dl-startup.c. In ldso.c we need
to use '_dl_pagesize'
-Erik
Manuel Novoa III [Thu, 19 Aug 2004 16:44:19 +0000 (16:44 -0000)]
Fix dependencies.
Joakim Tjernlund [Thu, 19 Aug 2004 09:52:27 +0000 (09:52 -0000)]
Accunt for ELF_MACHINE_PLTREL_OVERLAP when relocating ldso.
Joakim Tjernlund [Thu, 19 Aug 2004 09:34:11 +0000 (09:34 -0000)]
Remove poor man's malloc. Not needed anymore.
Joakim Tjernlund [Thu, 19 Aug 2004 09:06:15 +0000 (09:06 -0000)]
Move "debug_addr" ptr from dl-startup.c to ldso.c
Joakim Tjernlund [Thu, 19 Aug 2004 08:53:29 +0000 (08:53 -0000)]
Move the app specific stuff from dl-startup.c to ldso.c.
Joakim Tjernlund [Thu, 19 Aug 2004 08:08:27 +0000 (08:08 -0000)]
Oops, forgot to remove unused variable.
Joakim Tjernlund [Thu, 19 Aug 2004 08:03:58 +0000 (08:03 -0000)]
This is now done in ldso.c
Joakim Tjernlund [Wed, 18 Aug 2004 09:26:17 +0000 (09:26 -0000)]
Clean up the _dl_boot code and make it similar to arm and sh.
Eric Andersen [Tue, 17 Aug 2004 20:00:42 +0000 (20:00 -0000)]
Carl SHAW writes:
I finally tracked down the problem with SH4 shared library loading -
in file ldso/ldso/sh/dl-startup.h, the line
#define DL_BOOT(X) static void __attribute_used__ _dl_boot2 (X)
should be
#define DL_BOOT(X) static void* __attribute_used__ _dl_boot2 (X)
otherwise the application code will never be called and _dl_boot will
just return causing a segmentation fault.
Carl
Joakim Tjernlund [Tue, 17 Aug 2004 13:55:49 +0000 (13:55 -0000)]
David McCulloug writes:
"There's a bug in the SH asm, it calls into 'C' code without preserving
all the important scratch registers. I have been meaning to double
check the changes as I think more registers need to be saved, then I
was going to send it back to uClibc. From the sound of it this isn't
your problem, but you never know.
Attached is the patch as it stands for the loader on SH."
Glibc appears to do the same.
Joakim Tjernlund [Tue, 17 Aug 2004 13:37:54 +0000 (13:37 -0000)]
Let ldso decide if it should relocate itselft a second time. This
is needed if ldso should use libcs malloc whenever possible.
Fix RTLD_LAZY propagation to RTLD_NOW relocation when requested by
libdl.
Joakim Tjernlund [Tue, 17 Aug 2004 13:09:01 +0000 (13:09 -0000)]
Fix make clean rule.
Eric Andersen [Mon, 16 Aug 2004 22:55:01 +0000 (22:55 -0000)]
Audit pthread.h and exclude prototypes for pthread functions
that are not presently implemented in uClibc's libpthread.
-Erik
Eric Andersen [Mon, 16 Aug 2004 22:16:45 +0000 (22:16 -0000)]
I will always test before I commit.
I will always test before I commit.
I will always test before I commit.
-Erik
Eric Andersen [Mon, 16 Aug 2004 20:35:15 +0000 (20:35 -0000)]
Setup __pagesize from inside __uClibc_init(), or else when registering
dtors via atexit(), atexit may need to call realloc with __pagesize
still set to 0. ugh.
-Erik
Eric Andersen [Mon, 16 Aug 2004 19:22:52 +0000 (19:22 -0000)]
Be a bit more prominant about the fact that setuid handling
is not quite there...
Eric Andersen [Mon, 16 Aug 2004 19:21:45 +0000 (19:21 -0000)]
The variable used to store pagesize is not the same as the
_dl_pagesize variable in ldso, so avoid aliasing.
-Erik
Eric Andersen [Mon, 16 Aug 2004 19:17:37 +0000 (19:17 -0000)]
The pagesize variable used when starting up is _not_ the same
as the _dl_pagesize global, so do not alias the global.
-Erik
Manuel Novoa III [Sun, 15 Aug 2004 08:01:45 +0000 (08:01 -0000)]
Update to add missing c++ namespace support.
Eric Andersen [Sun, 15 Aug 2004 03:59:36 +0000 (03:59 -0000)]
Do not fail all lookups when /etc/resolv.conf is missing, as i.e.
checking on 127.0.0.1 is still valid w/o resolv.conf
-Erik
Manuel Novoa III [Sun, 15 Aug 2004 01:55:02 +0000 (01:55 -0000)]
Logic was reversed.
Eric Andersen [Sat, 14 Aug 2004 07:23:48 +0000 (07:23 -0000)]
req_search returned garbage. This teaches it to behave itself and
return the length and the actual dns packet as received, rather than
making stuff up.
-Erik
Eric Andersen [Fri, 13 Aug 2004 23:39:45 +0000 (23:39 -0000)]
Fixup PAGE_SIZE problems
-Erik
Joakim Tjernlund [Fri, 13 Aug 2004 13:56:25 +0000 (13:56 -0000)]
Fix usage_count in ldso/libdl.
Don't' use atexit in libdl.
Make destrutor in libdl actually run and to dlclose all
dlopened libs.
Remove dlclosed libs from the _dl_symbol_tables list.