Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
842 lines (562 sloc) 25.6 KB
Apr 20, 2001 -- Manuel Novoa III
Inital port for uClibc from debian ld.so_1.9.11-9.tar.gz.
Removed a.out support.
****************** original file **************************
Title: Linux shared, dynamic linker and utilities.
Version: 1.9.11
Entered-date: 01MAY99
Description: This package contains,, ldconfig,
ldd and libdl.
Keywords: dynamic linker, shared library,,,
ldconfig, ldd, libdl
Author: (David Engel)
Maintained-by: (David Engel)
Primary-site: /pub/linux/packages/GCC
Alternate-site: /pub/Linux/GCC
Platform: Linux 2.0.0 or later.
Copying-policy: Copyrighted but freely distributable.
Original README starts here
This package contains my ELF dynamic linkers (, dynamic
linker library ( and utilities (ldconfig and ldd) for Linux.
You need Linux kernel 2.0.0 or later with ELF support compiled in
(i.e. not loaded as a module) to use this package.
The dynamic linker is used to bootstrap programs and load shared
libraries at startup. The dynamic linker library is used to
dynamically load shared libraries after a program is running.
Ldconfig is used to automatically update the symbolic links to shared
libraries and build the cache file used by the dynamic linker. Ldd is
used to list the shared libraries used by a program.
Please see the included manual pages for further details.
To install, simply run "sh" as root. Ready-to-go versions
of all end-products are provided so nothing should need to be compiled
or linked. If you are still using libc5 as your primary development
library, you should use the "--devfiles" option when running to install the file needed to compile with libdl.
ELF versions of gcc, binutils and libc are now required to compile
everything, including the old, unsupported, a.out dynamic linker.
Finally, an optimization level of O2 or higher must be used to compile and due the use of inline functions.
Notable contributors to this package include Eric Youngdale, Peter
MacDonald, Hongjiu Lu, Linus Torvalds, Lars Wirzenius, Mitch D'Souza,
Rik Faith, Andreas Schwab and Adam Richter (not necessarily in that
###################### IMPORTANT NOTICES #############################
As of, the old, a.out dynamic loader is no longer
officially supported. The code is still included and built, but I
make no promises that it will work. I will accept patches for it,
but they will not be tested by me.
As of, the main focus of this package is to ease the
transition to libc6. No significant, new features are expected to be
added. If you need new features, switch to libc6.
Except for, the sonames of the core libraries provided
with libc6 have been chosen so they do not conflict with those
provided by libc5 and However, the current plan is not use
new, nonconflicting sonames for other libraries such as ncurses and
X11. This presents two problems. First, libraries using the same
soname for both libc5 and libc6 can not be placed in the same
directory. Second, the dynamic linkers need to make sure not to load
a library for the wrong version of libc.
The first problem is easy. Just move the old, libc5-based libraries
to new directories (e.g. /lib/libc5-compat, /usr/lib/libc5-compat,
etc.) and add those directories to /etc/ Then install the
new, libc6-based versions in the standard places.
The second problem is more difficult. Ideally, the dynamic linkers
would be changed to perform a complete dependency analysis on every
library to be loaded to make sure the wrong versions aren't used.
This approach doesn't seem worth the added complexity, especially
since we now have symbol versioning for ELF libraries. Instead a
simpler approach will be used, at least initially.
Ldconfig has been modified to perform a (currently simple) dependency
analysis on libraries and to store an indication in /etc/
of whether a library is for libc5, libc6 or an unknown libc. The
dynamic linkers then only need to make a simple check at run-time to
make sure they don't load the wrong version of a library.
The dynamic linker for libc5 provided in this package, has already
been modified to use the new information in /etc/ For
glibc versions 2.0.1 and earlier, the dynamic linker for libc6 needs
the patch contained in glibc.patch. You should apply the patch and
rebuild glibc before using the new ldconfig.
As stated above, the dependency analysis currently done by ldconfig is
rather simple. Basically, it looks for the sonames used by the
various versions of libc, libm and libdl. For any approach using a
dependency analysis such as this to work, it is very important that
shared libraries be built with complete dependency information. This
can be done by using the appropriate -l options when running 'gcc
-shared'. For example, when building which depends on libc
and libbar, you should add -lbar and -lc gcc command line.
Changes in version 1.9.11:
Fixed a bug in where a reference to an
undefined symbol could cause a segfault.
Added a clarification for LD_PRELOAD to the manual
page and added a symlink for (Bug#33123).
Don't install ldd for Debian except for the m68k arch
because glibc 2.1 now includes it (Bug#35458).
Changes in version 1.9.10:
Changed ldconfig to issue a warning and not overwrite a
regular file with a symlink (Bug#30859).
Changed Debian packaging to conflict with and replace the
ldconfig package (Bug#29398).
Changes in version 1.9.9:
Changed and to match glibc by not
allowing user preloads of system libraries into setu/gid
binaries unless the library itself is setuid.
Fixed problems in on the sparc architecture
(Juan Cespedes).
Changes in version 1.9.8:
Changed ldconfig to allow the expected type for all
libraries in a directory to be optionally specified
(Mark Phillips). See the ldconfig man page.
Changed ldconfig to use the same type names used in the
change above when the -p option is used.
Changes in version 1.9.7:
Changed ldd for m68k to use /lib/ instead of
Added support for dladdr to (Eduard Gode).
Fixed a small memory leak in (Richard Garnish).
Fixed a bug in ldconfig when the -l option was used on a
filename without a '/' in it.
Updated the man pages (Bug#6404, Bug#9721, Bug#10652,
Bug#13494 and Bug#14127). They could still use some work.
No longer install the info page since it's way out of date.
Fixed minor Debian packaging problems (Bug#13160,
Bug#15577 and Bug#19345).
Changes in version 1.9.6:
Changed ldd to not use the glibc dynamic linker when run
on a libc5-based shared library.
Added a -q option to ldconfig which causes warnings not
to be printed (Bob Tinsley).
Dropped support for the Debian libdl1-dev package.
Changed to be compilable with gcc 2.8.0 (Sven
Changes in version 1.9.5:
Fixed a bug in ldd where was not called
correctly when run on shared libraries.
Fixed a problem in the previous version where some
Makefiles were not architecture independent.
Changes in version 1.9.4:
Fixed a bug in introduced in the previous version
which broke preloads.
Turned a.out support back on by default, at least for the
time being. There are no promises to keep it.
Changes in version 1.9.3:
Fixed buffer overflow bugs in and
Changed the README file a little to clarify a couple of
Changed ldconfig to chroot to the specified directory when
the new -r option is used (Bob Tinsley).
Changes in version 1.9.2:
Removed /usr/local/lib from the default /etc/
for Debian (Bug#8181).
Changed ldconfig to be 64-bit clean (H.J. Lu).
Changes in version 1.9.1:
Changed ldconfig to try to determine which libc a
library is for even if it doesn't have an soname.
Fixed a bug in ldconfig where an older library using
the glibc naming convention would be used instead of
a newer library.
Changed to and to not require the
libc5 headers in order to compile.
Changed ldconfig and ldd to be compilable with either
libc5 or libc6.
Changes in version 1.9.0:
Changed to not build the old, a.out dynamic loader by
Changed to require the --force option to
make sure users read the README file.
Changed to not install the
development files unless the --devfiles option is used.
Changed to not strip binaries and libraries
if the --no-strip option is used.
Changed the Debian packaging to put the development files
which conflict with glibc in a new libdl1-dev package.
Changed ldd to use the glibc dynamic linker, if it is
available, when run on a shared library.
Changed to print the load addresses of
libraries, ala glibc, when run by ldd.
Changed to allow the libraries listed in
LD_PRELOAD to be separated by white space in addition to
Changed to load the libraries listed in
LD_PRELOAD for setu/gid programs as long as they can be
loaded securely.
Changed ldconfig to update the symlinks for the dynamic
Changed ldconfig to try to determine if an ELF library is
intended for libc5 or libc6 and save the infomation in the
cache. The mechanism used is rather simplistic and may
need to be enhanced.
Changed ldconfig to print the type of ELF library when
printing the cache.
Changed to only load ELF shared libraries for
use with libc5 or an unknown libc.
Changes in version 1.8.10:
Fixed a bug in ldconfig where a symlink could be used
instead of a regular file.
Fixed a Debian packaging problem for the sparc
Changes in version 1.8.9:
Changed ldconfig to only cache the symlinks it creates.
This make the behavior of the dynamic linkers consistent
with how they would behave if a cache was not used.
Changed ldconfig to cache the symlinks that it finds but
use the name of the symlink as the soname instead of the
actual soname.
Changes in version 1.8.8:
Minor documentation updates to reflect recent changes.
Changed and to perform more complete
validation on before using it.
Changed ldconfig to accept libraries with inconsistent
sonames since glibc is going to use them. A warning is
still printed in debug mode.
Changed the install script to not strip _dl_debug_state
from since gdb needs it.
More sparc fixes (Derrick Brashear).
Changed ldconfig to not issue a warning when a linker
script disguised as a shared library is found.
Fixed a bug in where some registers were
not preserved on the first call to a function causing
problems for non-C-like languages (Tim Renouf).
Fixed a bug in where global variables were
not always mapped correctly across dynamically loaded
libraries (Mikihiko Nakao).
Converted to new Debian source packaging format (Shaya
Changes in version 1.8.6/7:
Never released as some unofficial patches used these
version numbers.
Changes in version 1.8.5:
Fixed a bug in introduced in the previous changes.
Changes in version 1.8.4:
Changed ldconfig to completely ignore symbolic links.
Changed ldconfig to issue the warning concerning an
inconsistent soname in non-verbose mode.
Changed back to not keep mapped
at all times.
Changed Debian packaging to compress man pages, strip all
binaries (Bug#5125) and include a shlibs file.
Changes in version 1.8.3:
Changed to process LD_PRELOAD before
Fixed a Debian packaging problem where libdl might not
be available if other packages were upgraded at the same
time (Debian Bug#4728).
Changed ldd to always exit with status 1 if any errors
occur (Debian Bug#4188).
Fixed some minor problems in (Mike Castle and
Wolfgang Franke).
Changed ldconfig to issue a warning in verbose mode when
skipping a library because the soname doesn't match.
More sparc fixes (Miguel de Icaza).
Don't link with -N when building (Alan Modra).
Changed to better support position-dependant
libraries (NIIBE Yutaka).
Changes in version 1.8.2:
Added a texinfo file for and libdl (Michael
Minor sparc and installation changes (Elliot Lee).
Added multiple architecture support for Debian (Leland
Changed libdl to better support RTLD_NEXT (Eric
Youngdale). Note: the exact meaning of ETLD_NEXT is
still not clear in all cases.
Removed some libc dependencies from libdl. Still need
to remove malloc and free.
Changes in version 1.8.1:
Changed to be compiled as ELF. This also means
that ELF support is now required. A.out support is
still optional.
Changed and to use the rpath in the
executable instead of in the invoking shared library.
More m68k fixes (Andreas Schwab).
Various sparc fixes (Miguel de Icaza).
Changed ldcnnfig to ignore libraries ending in '~'.
Changed ldconfig to allow alternative conf and cache
files to be specified on the command-line.
Changed to work when dlsym is passed a NULL
handle pointer.
Changes in version 1.8.0:
Changed to be more liberal when checking to
see if a library is already loaded. This should avoid
the duplicate loading problem for programs linkeed with
the -rpath option.
Various m68k fixes (Andreas Schwab).
Changed to only use LD_AOUT_LIBRARY_PATH and
LD_AOUT_PRELOAD and to only use
and LD_ELF_PRELOAD are no longer supported.
Changed to allow debugging of shared and
dynamically loaded libraries (H.J. Lu, Andreas Schwab).
Changed to preload ELF shared libraries
listed in /etc/ This allows secure
preloads, even for setuid/setgid programs.
Changed to keep mapped at all
Changed ldconfig to allow #-style comments in
Removed various compiler warnings (Richard Sladkey and
David Engel).
Changed ldd to work on ELF shared libraries. This may
need a little more work.
Changes in version 1.7.14:
Changed ldconfig to recognize ELF shared libraries
generated by post-2.6 versions of ld (Andreas Schwab).
Changed ldconfig to not remove stale links that do not
have a version number since they may be needed by ld.
Changes in version 1.7.13:
Fixed a problem in where a program linked
with a shared library that was not used could result in
a segmentation fault (H.J. Lu).
Changes in version 1.7.12:
Fixed a problem in where the wrong library
could be marked as global when RTLD_GLOBAL was used
(Lars Heete).
Installed dlfcn.h with instead of requiring
it to be supplied with libc.
Removed support for libldso.a since it was nearly
impossible to use anyway.
Changed ldd to detect when the program being checked
exited abnormally.
Changes in version 1.7.11:
Changed and to delete all variations
of LD_PRELOAD and LD_LIBRARY_PATH for set[ug]id programs,
This makes it harder for broken set[ug]id programs to be
Fixed a problem in where dlsym would not accept
the handle returned from dlopen(0, *).
Changes in version 1.7.10:
Changed and to support RTLD_GLOBAL
(Eric Youngdale).
Changes in version 1.7.9:
Fixed a problem in in detecting when the
new user/group information is provided by the kernel.
Fixed a problem in where a buffer could be
overflowed if a large number of libraries were loaded
(Thomas Moore).
Changes in version 1.7.8:
Changed the Makefiles and install scripts to support
a.out- and ELF-only configurations.
Changed to use the user/group information
provided by linux 1.3.23+ instead of making syscalls
to get it.
Changed to support RTLD_NEXT (Glenn Fowler).
Changed to only execute the fini sections
instead of completely closing libraries at exit (Glenn
Changed and to print the required
cache version when a mismatch is detected.
Changed to not require on /dev/zero (Ralph
Minor m68k cleanups (Andreas Schwab).
Changes in version 1.7.7:
Fixed problems compiling with recent 1.3.x kernels.
Changed to not use MAP_DENYWRITE until the
permission issue regarding it is resolved.
Changes in version 1.7.6:
Fixed a bug in dealing with a zero-length
Changed and to truncate all variations
of LD_PRELOAD and LD_LIBRARY_PATH for set[ug]id programs.
Changes in version 1.7.5:
Changed ldconfig to recognize libraries without any
version number (eg.
Changed ldconfig to not generate a corrupt cache when
the disk is full or other write errors occur.
Changed to map files with MAP_DENYWRITE to
keep them from being changed while the file is in use
(Rick Sladkey).
Changed libdl to not overwrite the scope pointer of a
library if it was already loaded (H.J. Lu).
Changed so gdb can be used on constructors
(Eric Youngdale).
Changed ldconfig to ignore ELF libraries where the soname
does not match the file name on the assumption that it is
a used at compile-time (eg. ->
Changes in version 1.7.4:
Changed and libdl to use the appropriate
rpaths when searching for shared libraries (Eric
Changed to search rpath before using the
cache. This more closely conforms to the IBCS standard.
Changes in version 1.7.3:
Changed to only print a library name the
first time it is loaded when run from ldd.
Fixed a bug in ldconfig where an invalid cache could be
generated if a directory was specified multiple times in
Changed so it will return the address of a
weak symbol when called from dlsym in libdl (Eric
Changes in version 1.7.2:
Changed again to fix the undefined foobar
Changes in version 1.7.1:
Changed libdl so it will compile at optimization level
O3 or higher.
Changed ldconfig to always create the cache file with
mode 644.
Changed ldconfig to not ingore valid symlinks.
Changed ldconfig to use the library name as the soname
for ELF libraries that do not have an soname entry.
Changed to print the actual, requested library
name at the time it is loaded instead of trying to figure
it out after the fact.
Changes in version 1.7.0:
Changed ldconfig to read the actual soname from the image
for ELF libraries and make it available to
The soname for DLL libraries is still determined by
truncating the minor numbers from the image file name.
Changed ldconfig to no longer support the undocumented
sort options.
Changed to require a valid cache to find libraries
in directories specified in /usr/lib and /lib
are still searched as a last resort. already
operated this way.
Fixed a bug in libldso.a where the arguments to
shared_loader were not parsed correctly (Wolfram Gloger).
Added support for RELA-style relocations under Linux/68k
(Andreas Schwab).
Changed to only map the cache once for all
libraries instead of individually for each library.
Changed continue searching the cache instead of
giving up when failing to load the first entry found.
Changed to produce output similar to when
run from ldd or when errors occur.
Changes in version 1.6.7:
Changed the install scripts to make sure that and are always usable.
Added support for Linux/Sparc (Eric Youngdale).
Added support for Linux/68k (Andreas Schwab).
Fixed various bugs in dealing with closing
files, unmapping memory, dereferencing NULL pointers and
printing library names (David Engel, Eric Youngdale and
Andreas Schwab).
Replaced the manual page for libdl with a freely
distributable one (Adam Richter).
Fixed a bug in where LD_LIBRARY_PATH and
LD_PRELOAD were not cleared for setuid/setgid programs.
Fixed a bug in libdl where dlsym would not return the
correct address of a symbol if it was redefined in another
library (Oleg Kibirev).
Changed to use the following order to search
for libraries: LD_{ELF_}LIBRARY_PATH,, rpath,
/usr/lib and /lib.
Changed to not needlessly allocate memory when
Changes in version 1.6.6:
Changed ldconfig to not warn about removing stale links
unless the -v option is specified.
Added manual pages for libdl (from FreeBSD/Sun)
Fixed a bug in dealing with preloading of objects
generated by recent versions of ld (Mitch D'Souza).
Fixed bugs in ldd where some errors were either not
detected or not printed.
Fixed a bug in where the trailing nul in a
library name was not being copied (Owen Taylor).
Changes in version 1.6.5:
Changed ldconfig to remove stale symbolic links.
Added debug hooks in and to be used
by a future version of gdb (Eric Youngdale).
Changes in version 1.6.4:
Change to print on stdout instead of stderr
when run from ldd.
Added support for Debian GNU/Linux packaging.
Changes in version 1.6.3:
Fixed a bug in libdl when closing a library (H.J. Lu).
Changes in version 1.6.2:
Changed the error message printed by ldd when a file is
not a.out or ELF. It used to only list a.out formats.
Changed ldconfig to no longer cache and set up links for
Changed and libdl to not conflict with upcoming
changes in kernel header files.
Changed to not print preloaded libraries.
Changes in version 1.6.1:
Updated the installation script.
Changed and to look for LD_AOUT_PRELOAD
and LD_ELF_PRELOAD, respectively, before LD_PRELOAD.
Changed and to use LD_AOUT_LIBRARY_PATH
and LD_ELF_LIBRARY_PATH, respectively, instead of
Changes in version 1.6.0:
Changed ldconfig to process libraries which do not have
a minor version or patch level number.
Incorporated and
Changed and to not miss entries in the
cache when the fully qualified library is requested.
Changed ldconfig to use stdout instead of stderr when
printing the cache.
Changes in version 1.5.3:
LD_PRELOAD enhancements (Tristan Gigold).
LD_PRELOAD patch for linux-68k (Andreas Schwab).
Changes in version 1.5.2:
More ELF changes (Mitch D'Souza).
Changed ldconfig to also update the link for
Changes in version 1.5.1:
More ELF and LD_PRELOAD changes (Mitch D'Souza).
Changes in version 1.5.0:
Chnaged all executables to QMAGIC (Mitch D'Souza and Rick
Added preliminary support for ELF to ldd and ldconfig (Eric
Youndale and H.J. Lu).
Added support for LD_PRELOAD to (Mitch D'Souza).
Removed the "advertising" clause from the copyright notices
in all source files.
Changes in version 1.4.4:
Changed ldconfig to support QMAGIC libraries.
Fixed a bug in where some of the error messages had
transposed arguments.
Changes in version 1.4.3:
Fixed an obscure bug in where an index was not being
incremented when a library was not found using the cache.
Changes in version 1.4.2:
Changed ldconfig to issue a warning and continue instead
of an error and exiting when a link can't be updated.
This is useful when some libraries are imported on read-
only file systems, such as an NFS mounted /usr.
Changed to be more robust in searching for libraries.
A library is not considered found unless it can actually be
loaded. If a library is not found using the cache, the
standard directories are searched as in pre-cache versions.
Changes in version 1.4.1:
Fixed minor Makefile problems.
Added support for linux-68k.
Fixed a bug in where libraries with absolute paths
were not handled correctly.
Changed to ignore the directory in the names of
shared libraries by default. This allows older libraries
with absolute paths, such as the XView libraries, to take
advantage of the cache support.
Added a minimal usage message to ldconfig.
Changes in version 1.4:
Fixed bug in where minor version numbers were not
reported correctly when a minor version incompatibility
was found.
Fixed bug in ldconfig where libraries with subversion
numbers greater than 9 were not compared correctly.
Added Mitch D'Souza's support for suppressing warning
messages from about minor version incompatibilities.
Added Mitch D'Souza's support for using a cache to speed
up searching for libraries in the standard directories.
Added Mitch D'Souza's support for a debugging version of Link with -lldso if you think you are experiencing
dynamic linker problems.
Changes in version 1.3:
Added support for libraries using absolute pathnames. If I
had known that the XView libraries used them, I would have
added this earlier.
Fixed a bug handling old libraries using a pathname beginning
with '/' or '/lib/'.
Changes in version 1.2a:
Fixed a minor bug in ldd which caused all files, specifically
scripts, to be recognized as binaries. Thanks to Olaf Flebbe
for reporting it.
David Engel