sure no reference to the unloaded map's search list remains in the
dependency's scope.
2006-09-16 Jakub Jelinek <jakub@redhat.com>
* elf/Makefile: Add rules to build and run unload7 test.
* elf/unload7.c: New test.
* elf/unload7mod1.c: New file.
* elf/unload7mod2.c: New file.
(_dl_close): If called recursively, just remember GC needs to be rerun
and decrease l_direct_opencount. Avoid GC if l_direct_opencount
decreased to 1. Rerun GC at the end if any destructor unloaded some
additional libraries.
* elf/Makefile: Add rules to build and run unload6 test.
* elf/unload6.c: New test.
* elf/unload6mod1.c: New file.
* elf/unload6mod2.c: New file.
* elf/unload6mod3.c: New file.
* malloc/hooks.c (mem2chunk_check): Add magic_p argument, set *magic_p
if magic_p is not NULL.
(top_check): Invoke MALLOC_FAILURE_ACTION if MORECORE failed.
(malloc_check): Fail if sz == -1.
(free_check): Adjust mem2chunk_check caller.
(realloc_check): Likewise. Fail if bytes == -1. If bytes == 0 and
oldmem != NULL, call free_check and return NULL. If reallocating
and returning NULL, invert magic byte again to make oldmem valid
region for further checking.
(memalign_check): Fail if bytes == -1.
* malloc/Makefile: Add rules to build and run tst-mcheck.
* malloc/tst-mcheck.c: New test.
function _dl_sort_fini.
(_dl_sort_fini): New function.
* sysdeps/generic/ldsodefs.h: Declare _dl_sort_fini.
* elf/dl-close.c (_dl_close): Call _dl_sort_fini before running
destructors to call them in the right order.
Change type of l_idx to int.
* elf/dl-close.c: Basically rewrite. Do not use l_opencount to
determine whether a DSO has to be unloaded. Instead compute this
in this function.
* elf/dl-deps.c: No need to manipulate l_opencount anymore.
* elf/dl-lookup.c: Likewise.
* elf/rtld.c: Likewise
* elf/dl-open.c: Likewise. Use l_init_called to determine whether
object was just loaded.
* elf/dl-fini.c: Bump l_direct_opencount instead of l_opencount.
* elf/dl-load.c (_dl_map_object_from_fd): Do not recognize DSO which
is about to be unloaded as a match.
(_dl_map_object): Likewise.
* elf/do-lookup.h (do_lookup_x): Do not look into DSO which is about
to be unloaded.
* elf/circleload1.c: Don't use l_opencount anymore.
* elf/neededtest.c: Likewise.
* elf/neededtest2.c: Likewise.
* elf/neededtest3.c: Likewise.
* elf/neededtest4.c: Likewise.
* elf/unload.c: Likewise.
* elf/unload2.c: Likewise.
* elf/loadtest.c: Likewise.
* elf/rtld.c: Preloading errors are now never fatal.
2005-03-08 Jakub Jelinek <jakub@redhat.com>
* elf/Makefile: Add rules to build and run unload5 test.
* elf/unload5.c: New file.
2005-03-08 Jakub Jelinek <jakub@redhat.com>
* elf/Makefile: Add rules to build and run unload4 test.
* elf/unload4.c: New file.
* elf/unload4mod1.c: New file.
* elf/unload4mod2.c: New file.
* elf/unload4mod3.c: New file.
* elf/unload4mod4.c: New file.
2005-03-01 H.J. Lu <hongjiu.lu@intel.com>
[BZ #776]
* iconv/iconvconfig.c: Fix comment for the output file.
(write_output): Clear padding in header.
2005-03-03 Ulrich Drepper <drepper@redhat.com>
* elf/dl-close.c (_dl_close): Don't try to set up new searchpath if the
loader is closed. Fixes unload3.
* elf/tst-global1.c: New file.
* elf/Makefile (tests): Add tst-global1.
2005-03-03 Jakub Jelinek <jakub@redhat.com>
* elf/Makefile: Add rules to build and run unload3 test.
* elf/unload3.c: New test.
* elf/unload3mod1.c: New file.
* elf/unload3mod2.c: New file.
* elf/unload3mod3.c: New file.
* elf/unload3mod4.c: New file.
2005-01-09 Ulrich Drepper <drepper@redhat.com>
* elf/dl-debug.c (_dl_debug_initialize): Take extra parameter and
use it to select the r_debug structure for that namespace.
* elf/dl-close.c (_dl_close): Adjust call to _dl_debug_initialize.
* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
* elf/dl-open.c (_dl_open): Likewise.
* elf/rtld.c (dl_main): Likewise.
* sysdeps/generic/ldsodefs.h (struct link_namespaces): Add _ns_debug
member.
(_dl_debug_initialize): Add new parameter in declaration.
* elf/dl-close.c (_dl_close): Make sure auditing callbacks are not
called for the auditing objects themselves.
* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
2004-10-14 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (_dl_start): Fix one last dl_loaded.
* elf/dl-load.c (_dl_map_object_from_fd): Avoid definition of
label when it is not needed.
* elf/dl-close.c (_dl_close): Typo: & -> &&.
Update.
Add support for namespaces in the dynamic linker.
* dlfcn/Makefile (libdl-routines): Add dlmopen.
* dlfcn/Versions [libdl, GLIBC_2.3.4]: Add dlmopen.
* dlfcn/dlfcn.h: Define Lmid_t, LM_ID_BASE, and LM_ID_NEWLM.
Declare dlmopen. Document RTLD_DI_LMID.
* dlfcn/dlinfo.c: Handle RTLD_DI_LMID.
* dlfcn/dlmopen.c: New file.
* dlfcn/dlopen.c: Pass new parameter to _dl_open.
* dlfcn/dlopenold.c: Likewise.
* elf/dl-addr.c: Adjust for removal of GL(dl_loaded).
* elf/dl-caller.c: Likewise.
* elf/dl-close.c: Likewise.
* elf/dl-conflict.c: Likewise.
* elf/dl-debug.c: Likewise.
* elf/dl-lookup.c: Likewise.
* elf/dl-sym.c: Likewise.
* elf/dl-version.c: Likewise.
* elf/do-lookup.h: Likewise.
* elf/rtld.c: Likewise.
* sysdeps/unix/sysv/linux/i386/dl-librecon.h: Likewise.
* elf/dl-depsc: Likewise. Add new parameter to _dl_map_object.
* elf/dl-fini.c: Call destructors in all namespaces.
* elf/dl-iteratephdr.c: Compute total nloaded. Adjust for removal of
GL(dl_loaded).
* elf/dl-libc.c: Pass new parameter to _dl_open. Adjust for removal
of GL(dl_loaded).
* elf/dl-load.c (_dl_map_object_from_fd): Don't load ld.so a second
time. Reuse the one from the main namespace in all others.
Pass new parameter to _dl_new_object.
Adjust for removal of GL(dl_loaded).
* elf/dl-object.c: Take new parameter. Use it to initialize l_ns.
Adjust for removal of GL(dl_loaded).
* elf/dl-open.c (_dl_open): Take new parameter.
Adjust for removal of GL(dl_loaded).
* elf/dl-support.c: Replace global _dl_loaded etc variables with
_dl_ns variable.
* include/dlfcn.h: Adjust prototype of _dl_open.
Define __LM_ID_CALLER.
* include/link.h: Add l_real, l_ns, and l_direct_opencount elements.
* sysdeps/generic/dl-tls.c: Bump TLS_STATIC_SURPLUS. Since libc is
using TLS we need memory appropriate to the number of namespaces.
* sysdeps/generic/ldsodefs.h (struct rtld_global): Replace _dl_loaded,
_dl_nloaded, _dl_global_scope, _dl_main_searchlist, and
_dl_global_scope_alloc with _dl_ns element. Define DL_NNS.
Adjust prototypes of _dl_map_object and member in rtld_global_ro.
* malloc/malloc.c: Include <dlfcn.h>.
* malloc/arena.c (ptmalloc_init): If libc is not in primary namespace,
never use brk.
* elf/Makefile: Add rules to build and run tst-dlmopen1 and
tst-dlmopen2.
* elf/tst-dlmopen1.c: New file.
* elf/tst-dlmopen1mod.c: New file.
* elf/tst-dlmopen2.c: New file.
* elf/dl-close.c: Improve reference counting by tracking direct loads.
* elf/dl-lookup.c (add_dependency): Likewise.
* elf/dl-open.c (dl_open_worker): Likewise.
* elf/rtld.c (dl_main): Likewise.
2004-09-09 GOTO Masanori <gotom@debian.or.jp>
[BZ #77]
* elf/dl-close.c: Count down l_opencount to check not only for
l_reldeps, but also l_initfini.
2004-10-13 Ulrich Drepper <drepper@redhat.com>
2003-01-11 Jim Meyering <jim@meyering.net>
* io/ftw.c [HAVE_CONFIG_H]: Include <config.h>.
[HAVE_SYS_PARAM_H || _LIBC]: Guard inclusion of <sys/param.h>.
Include <sys/stat.h>, not <include/sys/stat.h>, if !_LIBC.
[!_LIBC] (__chdir, __closedir, __fchdir, __getcwd, __opendir): Define.
[!_LIBC] (__readdir64, __tdestroy, __tfind, __tsearch): Define.
[!_LIBC] (internal_function, dirent64, MAX): Define.
(__set_errno): Define if not already defined.
(open_dir_stream): When FTW_CHDIR is enabled, invoke opendir on
the basename, not the entire file name.
(process_entry): When FTW_CHDIR is enabled, invoke XSTAT or LXSTAT on
the basename, not the entire file name.
2003-01-12 Ulrich Drepper <drepper@redhat.com>
* string/tester.c (test_strcpy): Disable last added strcpy until
it is fixed.
2003-01-11 Philip Blundell <philb@gnu.org>
* sysdeps/unix/sysv/linux/arm/socket.S: Add cancellation support.
2003-01-11 Andreas Schwab <schwab@suse.de>
* Makerules: Add vpath for %.dynsym and %.so so that the
implicit rule chaining for check-abi works.
2003-01-11 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/sh/sysdep.h (SYSCALL_ERROR_HANDLER):
Add non-PIC case.
2003-01-11 Jakub Jelinek <jakub@redhat.com>
* elf/tls-macros.h [__ia64__] (__TLS_CALL_CLOBBERS): Define.
[__ia64__] (TLS_LE, TLS_IE): Fix typos. Add ;; at start of asm if
gp is used early.
[__ia64__] (TLS_LD, TLS_GD): Likewise. Use __TLS_CALL_CLOBBERS.
* elf/Makefile ($(objpfx)tst-tlsmod5.so, $(objpfx)tst-tlsmod6.so):
Ensure libc.so in DT_NEEDED.
* sysdeps/alpha/dl-machine.h (elf_machine_rela): Move
CHECK_STATIC_TLS before l_tls_offset use.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela):
Likewise.
* sysdeps/sh/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/generic/dl-tls.c (_dl_allocate_tls_storage) [TLS_DTV_AT_TP]:
Allocate TLS_PRE_TCB_SIZE bytes below result.
(_dl_deallocate_tls) [TLS_DTV_AT_TP]: Adjust before freeing.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): If
TLS_INIT_TP_EXPENSIVE is not defined, allocate even if no PT_TLS
segment has been found. If TLS_DTV_AT_TP, allocate TLS_PRE_TCB_SIZE
bytes below result and add tcb_offset to memsz.
* sysdeps/ia64/dl-tls.h (__tls_get_addr): New prototype.
* sysdeps/ia64/dl-machine.h: Include tls.h.
(elf_machine_type_class): Return ELF_RTYPE_CLASS_PLT for TLS relocs
too.
(elf_machine_rela): Assume if sym_map != NULL sym is non-NULL too.
Handle R_IA64_DTPMOD*, R_IA64_DTPREL* and R_IA64_TPREL* relocations.
* sysdeps/ia64/libc-tls.c: New file.
2003-01-10 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/powerpc64/sysdep.h (PSEUDO_RET): Add branch hit.
* sysdeps/unix/sysv/linux/powerpc/bits/stat.h (STAT_VER_LINUX):
Fix type. Move definition out of #if.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/ftruncate64.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S: Add cancellation
support.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list: Remove
ftruncate64, pread64, pwrite64, truncate64 entries.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
(INLINE_SYSCALL): New version that supports function call like
syscalls. Add __builtin_expect.
(LOADARGS_n): Add argument size safety checks.
(INTERNAL_SYSCALL): New Macro.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/truncate64.c: New file.
* sysdeps/unix/sysv/linux/powerpc/sys/procfs.h [__PPC_ELF_H]: Avoid
redefinition of elf_fpreg_t and elf_fpregset_t.
2003-01-12 Ulrich Drepper <drepper@redhat.com>
* elf/dl-close.c (_dl_close): Add several asserts. Correct and
simplify test for unloading. If loader of a DSO is unloaded do not
use its scope anymore. Fall back to own scope and adjust opencounts.
Fix several comments.
* elf/dl-deps.c (_dl_map_object_deps): Always allocate memory for
the l_searchlist, not only for l_initfini.
* elf/dl-lookup.c (add_dependencies): Avoid creating relocation
dependencies if objects cannot be removed. Remove object with the
definition as not unloadable if necessary.
* elf/reldep6.c: Create relocation dependency before closing the first
module.
2003-01-10 Guido Gnther <agx@sigxcpu.org>
* elf/Makefile: Add rules to build and run reldep9 test.
* elf/reldep9.c: New file.
* elf/reldep9mod1.c: New file.
* elf/reldep9mod2.c: New file.
* elf/reldep9mod3.c: New file.
2003-01-09 Jakub Jelinek <jakub@redhat.com>
* elf/Makefile: Add rules to build and run nodelete2 test.
* elf/nodelete2.c: New file.
* elf/nodel2mod1.c: New file.
* elf/nodel2mod2.c: New file.
* elf/nodel2mod3.c: New file.
2003-01-09 Jakub Jelinek <jakub@redhat.com>
members to the end, so a libpthread compiled with !USE_TLS will still
find other members properly.
* sysdeps/i386/i486/bits/string.h (__strcpy_g): Add dummy output
operand for DEST memory. Fix dummy input operand to use SRC.
Reported by Davin McCall <davmac@ozonline.com.au>.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Account for TCB
alignment when initializing the DTV entry.
* elf/dl-load.c (_dl_map_object_from_fd): If we hit a TLS segment
when TLS has not been set up, try to set it up if we can.
* elf/tst-tls4.c: Revert last change.
* elf/tst-tls5.c: Likewise.
* elf/tst-tls6.c: Likewise.
* elf/tst-tls7.c: Likewise.
* elf/tst-tls8.c: Likewise.
* elf/tst-tls9.c: Likewise.
* sysdeps/generic/dl-tls.c [SHARED] (_dl_tls_setup): New function.
* sysdeps/generic/ldsodefs.h: Declare it.
* elf/Versions (ld: GLIBC_PRIVATE): Add it.
* sysdeps/generic/libc-tls.c (init_slotinfo): New static inline
function, broken out of __libc_setup_tls.
(init_static_tls): Likewise.
(__libc_setup_tls): Call them.
(_dl_tls_setup): New function, uses new subroutines.
* elf/dl-close.c (free_slotinfo): Make argument pointer to pointer.
Clear the pointer when returning true.
(libc_freeres_fn) [SHARED]: If GL(dl_initial_dtv) is null, free the
first element of the slotinfo list too.
* sysdeps/generic/dl-tls.c (_dl_determine_tlsoffset): Define only if
[SHARED].
* sysdeps/generic/ldsodefs.h (_dl_next_tls_modid): Declare as hidden.
(_dl_determine_tlsoffset): Likewise.
* elf/rtld.c (_dl_initial_error_catch_tsd): Renamed from
startup_error_tsd, made global.
(dl_main): Update initialization.
* elf/dl-tsd.c: Likewise.
* sysdeps/generic/ldsodefs.h: Declare it.
slotinfo list's len member to the proper size, not just 1.
Initialize static_map.l_tls_initimage.
* elf/dl-open.c (dl_open_worker): Fix loop searching for
dtv_slotinfo_list element containing new modules' l_tls_modid.
* elf/tst-tls9.c, elf/tst-tls9-static.c: New files.
* elf/tst-tlsmod5.c, elf/tst-tlsmod6.c: New files.
* elf/Makefile (tests): Add tst-tls9.
(tests-static): Add tst-tls9-static.
(tst-tls9-static-ENV): New variable.
($(objpfx)tst-tls9-static, $(objpfx)tst-tls9-static.out): New targets.
* elf/dl-close.c (remove_slotinfo): Remove an assert; the number of
modids used by partially loaded modules being closed can't be known.
* elf/dl-close.c (remove_slotinfo): Take new argument. If false,
allow IDX to be one past the current last slotinfo entry.
(_dl_close): Pass IMAP->l_init_called for that parameter.
* elf/dl-reloc.c (_dl_relocate_object: CHECK_STATIC_TLS): New macro
to signal error if an IE-model TLS reloc resolved to a dlopen'd module.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela):
Call it after performing TPOFF relocs.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/sh/dl-machine.h (elf_machine_rela): Likewise.
* elf/dl-conflict.c (CHECK_STATIC_TLS): New macro (no-op).
* elf/dl-close.c (remove_slotinfo): Change asserts so as not to crash
when closing a partially-initialized object.
* elf/dl-load.c (_dl_map_object_from_fd) [! USE_TLS]: Call lose
instead of _dl_fatal_printf when we see PT_TLS.
* elf/dl-close.c (remove_slotinfo): New function. Handles everything
for removing reference of module in slotinfo list.
(_dl_close): Use remove_slotinfo.
* sysdeps/generic/dl-tls.c: General pretty printing.
(oom): Define only if SHARED.
(_dl_next_tls_modid): Correct starting point for the case we assume
there is a gap. Add missing instruction grouping (doh!). Correct
tests for reaching maximum index.
* elf/Makefile: Add rules to build and run tst-tls7.
* elf/tst-tls7.c: New file.
* elf/tst-tlsmod3.c: New file.
* elf/tst-tlsmod1.c: Move #include "tls-macros.h" instead #ifdef
USE_TLS.
* elf/tst-tlsmod2.c: Likewise.
* elf/dl-close.c (_dl_close): When closing an object using TLS
either decrement dl_tls_max_dtv_idx or set dl_tls_dtv_gaps to
true. Increment dl_tls_generation only if we closed any TLS-using
object.
* elf/tst-tls6.c: New file.
* elf/Makefile: Add rules to build and run tst-tls6.
2002-02-13 Ulrich Drepper <drepper@redhat.com>
* elf/dl-close.c (_dl_close): Implement freeing entries in the
slotinfo array.
(free_mem): Free memory for the slotinfo array if possible.
2001-09-08 Ulrich Drepper <drepper@redhat.com>
* elf/dl-object.c: Avoid allocating extra memory block for name.
* elf/dl-close.c (_dl_close): Don't free l_libname if it is no
allocated separately.
* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
2001-09-08 Ulrich Drepper <drepper@redhat.com>
* elf/dl-close.c (_dl_close): If object has no r_list (i.e., wasn't
loaded directly) determine length if l_initfini list by iterating
over its elements. Minor optimizations.
* elf/dl-deps.c (_dl_map_object_deps): Always add own map to l_initfini
for dependency objects.
If object was already loaded check whether any of the dependencies
is already on the relocation dependency list. If yes, remove the
latter. Minor optimizations.
* elf/dl-lookup.c (add_dependency): Add check for self reference of
maps here. Search l_initfini list only if the object was loaded
directly and not only as a dependency.
(_dl_lookup_symbol): Add relocation dependency also if object
is not in global scope. Remove test for self-reference here.
(_dl_lookup_versioned_symbol): Likewise.
* elf/dl-object (_dl_new_object): Cleanup. Initialize dont_free
element of first name record.
* elf/loadtest.c: Add some more test to recognize early if an object
wasn't unloaded.
* elf/Makefile: Add rules to build and run reldep5.
* elf/reldep5.c: New file.
* elf/reldepmod5.c: New file.
* elf/reldepmod6.c: New file.
* elf/reldep2.c: Fix typo.
* elf/dl-object.c (_dl_new_object): Initialize l_scope and l_scope_max.
2001-09-07 Ulrich Drepper <drepper@redhat.com>
* include/link.h (struct link_map): Add l_scope_mem and l_scope_max
elements. Change l_scope to be a pointer only.
* elf/dl-object.c (_dl_new_ojbect): Initialize l_scope and l_scope_max.
* elf/dl-open.c (dl_open_worker): If dependency wasn't just opened
here add searchlist of newly open file to the dependency's scope.
* elf/dl-close.c (_dl_close): If dependency is used otherwise remove
only searchlist from its scope. Free own scope array if necessary.
* elf/Makefile (tests): Add dblload and dblunload now.
__libc_lock_define_recursive.
* elf/dl-open.c: Don't declare it here any more.
* elf/dl-close.c: Likewise.
* elf/dl-lookup.c: Likewise.
* elf/dl-iteratephdr.c: Likewise.
* elf/dl-lookup.c (add_dependency): Use __libc_lock_lock_recursive and
__libc_lock_unlock_recursive.
* elf/dl-close.c (_dl_close): Likewise
* elf/dl-iteratephdr.c (__dl_iterate_phdr): Likewise
* elf/dl-open.c (_dl_open): Likewise
* sysdeps/generic/bits/libc-lock.h
(__libc_lock_define_recursive): New macro.
* sysdeps/generic/bits/stdio-lock.h (_IO_lock_t): Use it.
(_IO_lock_lock): Use __libc_lock_lock_recursive.
(_IO_lock_unlock): Use __libc_lock_unlock_recursive.
2001-07-06 Paul Eggert <eggert@twinsun.com>
* manual/argp.texi: Remove ignored LGPL copyright notice; it's
not appropriate for documentation anyway.
* manual/libc-texinfo.sh: "Library General Public License" ->
"Lesser General Public License".
2001-07-06 Andreas Jaeger <aj@suse.de>
* All files under GPL/LGPL version 2: Place under LGPL version
2.1.
2000-12-30 Ulrich Drepper <drepper@redhat.com>
* elf/dl-close.c (_dl_close): We can ignore the NODELETE flag if the
object was not yet initialized.
2000-12-28 H.J. Lu <hjl@gnu.org>
* elf/dl-deps.c (_dl_map_object_deps): Make sure the DSO state
is always consistent even if its dependency is failed.
* elf/dl-open.c (_dl_open): Increment the open count before
calling _dl_close () in case of failure.
* elf/neededtest4.c: New file.
* elf/neededobj5.c: New file.
* elf/neededobj6.c: New file.
* elf/Makefile (distribute): Add neededobj5.c and neededobj6.c.
(tests): Add neededtest4.
(modules-names): Add neededobj5 and neededobj6.
($(objpfx)neededobj6.so): New target.
($(objpfx)neededtest4): New target.
($(objpfx)neededtest4.out): New target.
2000-11-15 H.J. Lu <hjl@gnu.org>
* sysdeps/generic/ldsodefs.h (DL_DT_INIT_ADDRESS): Defined if
ELF_FUNCTION_PTR_IS_SPECIAL is not defined.
(DL_DT_FINI_ADDRESS): Likewise.
* sysdeps/ia64/dl-lookupcfg.h (_dl_lookup_address): Set the
return type to ElfW(Addr).
(_dl_function_address): New prototype.
(DL_FUNCTION_ADDRESS): Defined.
(DL_DT_INIT_ADDRESS): Defined as DL_FUNCTION_ADDRESS.
(DL_DT_FINI_ADDRESS): Likewise.
* sysdeps/ia64/Versions (GLIBC_2.2): Add _dl_function_address.
* sysdeps/ia64/dl-machine.h (_dl_start_address): Removed.
(ELF_MACHINE_START_ADDRESS): Changed to DL_FUNCTION_ADDRESS.
* sysdeps/ia64/dl-symaddr.c (_dl_start_address): Renamed to ...
(_dl_function_address): This.
* elf/dl-fini.c (_dl_fini): Use DL_DT_FINI_ADDRESS to get the
function pointer for DT_FINI.
* elf/dl-close.c (_dl_close): Likewise.
* elf/dl-init.c (_dl_init): Use DL_DT_INIT_ADDRESS to get the
function pointer for DT_INIT.
2000-11-16 Jakub Jelinek <jakub@redhat.com>
* sysdeps/generic/printf_fphex.c (__printf_fphex): Compute correctly
end of wexpbuf buffer.
* elf/dl-close.c (_dl_close): Don't free memory for global scope
list immediately when empty. Move code to...
(free_mem): ...here. Called as part of __libc_subfreeres list.
* elf/dl-deps.c (_dl_map_object_deps): Put l_initfini array before
r_list array in allocated memory.
* elf/dl-close.c (_dl_close): Optimize access to l_initfini list
and remove use of r_list.
2000-10-24 Ulrich Drepper <drepper@redhat.com>
* elf/dl-close.c (_dl_close): Use correct list (l_initfini) when
computing new opencounts.
* elf/Makefile: Add rules to build and run neededtest3.
* neededtest3.c: New file.
* neededobj4.c: New file.
* elf/neededtest.c (main): Correct tests for failing dlopen.
2000-10-24 Ulrich Drepper <drepper@redhat.com>
Complete revamp of the reference counter handling.
* include/link.h (struct link_map): Add l_idx field.
* elf/dl-close.c: Handle decrementing of reference counters more
correctly. If necessary decrement reference counters of dependencies
of dependencies.
* elf/dl-lookup.c (add_dependency): Only increment reference counter
of the object itself and not also its dependencies.
* elf/dl-open.c: Increment reference counters here.
* elf/dl-deps.c: Remove reference counter handling here.
* elf/dl-load.c: Likewise.
* elf/rtld.c: Adjust for _dl_map_deps not handling reference counters.
* elf/loadtest.c: Print loaded objects at the beginning.
* elf/dl-close.c: Decrement opencount for all dependencies which can
be removed even if the object is not yet unloaded.
* elf/dl-deps.c (_dl_map_object_deps): If dependency is already in
the list decrement opencount of all dependencies.
* elf/dl-load.c (_dl_map_object_from_fd): Increment object of object
and all dependencies.
(_dl_map_object): Likewise.
* elf/dl-lookup.c (add_dependency): Likewise.
* elf/loadtest.c: Add debug when with more output.
2000-10-19 H.J. Lu <hjl@gnu.org>
* elf/Makefile (distribute): Add neededtest.c, neededobj1.c,
neededobj2.c and neededobj3.c.
(tests): Add neededtest.
(modules-names): Add neededobj1, neededobj2 and neededobj3.
($(objpfx)neededobj1.so): New target.
($(objpfx)neededobj2.so): Likewise.
($(objpfx)neededobj3.so): Likewise.
($(objpfx)neededtest): Likewise.
($(objpfx)neededtest.out): Likewise.
* elf/neededtest.c: New. Based on the bug report from
Allen Bauer <kylix_rd@hotmail.com>.
* elf/neededobj1.c: Likewise.
* elf/neededobj2.c: Likewise.
* elf/neededobj3.c: Likewise.
2000-10-20 Ulrich Drepper <drepper@redhat.com>
* elf/dl-close.c (_dl_close): Decrement reference counter for all
dependencies even if the DSO does not get unloaded.
* elf/dl-load.c (_dl_map_object_from_fd): Pass pointer to ELF header
to elf_machine_matches_host.
* sysdeps/alpha/dl-machine.h (elf_machine_matches_host): Parameter
is now pointer to ELF header.
* sysdeps/arm/dl-machine.h: Likewise.
* sysdeps/generic/dl-machine.h: Likewise.
* sysdeps/hppa/dl-machine.h: Likewise.
* sysdeps/i386/dl-machine.h: Likewise.
* sysdeps/ia64/dl-machine.h: Likewise.
* sysdeps/m68k/dl-machine.h: Likewise.
* sysdeps/mips/dl-machine.h: Likewise.
* sysdeps/mips/mips64/dl-machine.h: Likewise.
* sysdeps/powerpc/dl-machine.h: Likewise.
* sysdeps/s390/dl-machine.h: Likewise.
* sysdeps/sh/dl-machine.h: Likewise.
* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
* sysdeps/sparc/sparc64/dl-machine.h: Likewise.
Patch by Martin Schwidefsksy <schwidefsky@de.ibm.com>.
2000-10-20 Jakub Jelinek <jakub@redhat.com>
* include/limits.h: Include bits/wordsize.h, use #if __WORDSIZE == 64
check instead of #ifdef __alpha__.
* include/bits/xopen_lim.h (WORD_BIT, LONG_BIT): Don't count on
INT_MAX, __INT_MAX__, LONG_MAX or __LONG_MAX__ being defined when
this is included.
* posix/wordexp-tst.sh (testout): Place output file in build
directory. Patch by Joseph S. Myers <jsm28@cam.ac.uk>.
2000-10-05 Jakub Jelinek <jakub@redhat.com>
* sysdeps/sparc/sparc64/fpu/libm-test-ulps: New file.
2000-10-02 Jakub Jelinek <jakub@redhat.com>
* sunrpc/svc_udp.c (svcudp_recv): Set msg_controllen to all
remaining xp_pad space.
2000-10-05 Jakub Jelinek <jakub@redhat.com>
* elf/dl-close.c (_dl_close): Check imap's l_flags_1 for
DF_1_NODELETE, not list[i]'s.
2000-09-26 Jakub Jelinek <jakub@redhat.com>
* sysdeps/sparc/sparc32/bits/endian.h: Remove.
* sysdeps/sparc/sparc32/ieee754.h: New.
* sysdeps/sparc/sparc64/bits/endian.h: Move...
* sysdeps/sparc/bits/endian.h: ...here.
* sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Optimize.
* sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): Check
%o1, not %o0 to see if we're parent or child. Optimize.
2000-09-26 Jes Sorensen <jes@linuxcare.com>
* sysdeps/unix/sysv/linux/ia64/fork.S: New file (based on code
by Hans Boehm).
* sysdeps/unix/sysv/linux/ia64/vfork.S: New file (based on
code by Hans Boehm).
* sysdeps/unix/sysv/linux/ia64/fork.c: Deleted (obsoleted by fork.S).
2000-09-20 H.J. Lu <hjl@gnu.org>
* sysdeps/ia64/fpu/printf_fphex.c: New file.
* sysdeps/ia64/fpu/libm-test-ulps: New file.
2000-09-17 H.J. Lu <hjl@gnu.org>
* sysdeps/ia64/Makefile (long-double-fcts): New. Defined as yes.
* sysdeps/ia64/fpu/s_isinfl.c: New file. Include
sysdeps/i386/fpu/s_isinfl.c.
* sysdeps/ia64/fpu/s_isnanl.c: New file. Include
sysdeps/i386/fpu/s_isnanl.c.
* sysdeps/ia64/fpu/s_nextafterl.c: New file. Include
sysdeps/i386/fpu/s_nextafterl.c.
* sysdeps/ia64/fpu/bits/mathdef.h: New file. Copied from
sysdeps/i386/fpu/bits/mathdef.h.
2000-09-16 H.J. Lu <hjl@gnu.org>
* sysdeps/generic/ldsodefs.h (DL_UNMAP): New. Defined if
DL_UNMAP_IS_SPECIAL is not defined.
* sysdeps/ia64/dl-lookupcfg.h (DL_UNMAP_IS_SPECIAL): Defined.
(_dl_unmap): New prototype.
(DL_UNMAP): New. Defined as _dl_unmap.
* sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_unmap.
* elf/dl-close.c (_dl_close): Replace __munmap with DL_UNMAP.
2000-09-16 H.J. Lu <hjl@gnu.org>
* sysdeps/generic/ldsodefs.h (DL_LOOKUP_ADDRESS): New. Defined
if ELF_FUNCTION_PTR_IS_SPECIAL is not defined.
* sysdeps/ia64/dl-lookupcfg.h (_dl_lookup_address): New
prototype.
(DL_LOOKUP_ADDRESS): New. Defined as _dl_lookup_address.
* sysdeps/ia64/dl-fptr.c (_dl_lookup_address): New. Lookup
the memory location of a function from a function descriptor.
* sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_lookup_address.
* elf/dl-addr.c (_dl_addr): Use DL_LOOKUP_ADDRESS to get the
memory location.
2000-09-14 Jes Sorensen <jes@linuxcare.com>
* sysdeps/ia64/bits/byteswap.h (__bswap_16): Don't mark output
variable as input argument.
(__bswap_32): Likewise.
* sysdeps/ia64/dl-machine.h: Add missing stop bit in RTLD_START()
- found by Jim Wilson <wilson@cygnus.com>
2000-09-26 Ulrich Drepper <drepper@redhat.com>
* string/strxfrm.c: Only require alignment on __alignof__ (int32_t)
instead of 4.
2000-09-26 Andreas Schwab <schwab@suse.de>
* locale/programs/ld-collate.c (collate_output): Only require
alignment on __alignof__ (int32_t) instead of 4.
* locale/loadlocale.c (_nl_load_locale): Likewise.
* string/strcoll.c: Likewise.
2000-09-26 Jes Sorensen <jes@linuxcare.com>
* sysdeps/ieee754/ldbl-96/e_atan2l.c (__ieee754_atan2l): Add
parentheses around arithmetic used in | statement to kill compiler
warning.
* math/math_private.h: Add prototype for __finitel.
(__ilogbl): Likewise.
(__isinfl): Likewise.
(__isnanl): Likewise.
(__atanl): Likewise.
(__copysignl): Likewise.
(__expm1l): Likewise.
(__floorl): Likewise.
(__frexpl): Likewise.
(__ldexpl): Likewise.
(__log1pl): Likewise.
(__nanl): Likewise.
(__rintl): Likewise.
(__scalbnl): Likewise.
(__sqrtl): Likewise.
(fabsl): Likewise.
(__sincosl): Likewise.
(si_isr) [USE_GNU]: Likewise.
(ILL_BREAK) [USE_GNU]: Likewise.
(FPE_DECOVF) [USE_GNU]: Likewise.
(FPE_DECDIV) [USE_GNU]: Likewise.
(FPE_DECERR) [USE_GNU]: Likewise.
(FPE_INVASC) [USE_GNU]: Likewise.
(FPE_INVDEC) [USE_GNU]: Likewise.
(TRAP_BRANCH) [USE_GNU]: Likewise.
(TRAP_HWBKPT) [USE_GNU]: Likewise.
* sysdeps/ieee754/flt-32/s_exp2f.c: Likewise.
* sysdeps/generic/ldsodefs.h: Add declaration for _dl_all_dirs and
_dl_all_init_dirs.
* include/link.h (struct r_search_path_struct): New.
(struct link_map): Use it for l_rpath_dirs and l_runpath_dirs.
* elf/Versions [ld] (GLIBC_2.2): Add _dl_all_dirs and
_dl_all_init_dirs.
* elf/dl-close.c (_dl_close): Free l_rpath_dirs and l_runpath_dirs.
* elf/dl-libc.c (free_mem): Free _dl_all_dirs list except elements
added at startup time.
* elf/dl-load.c: Fix memory handling. r_search_path_struct
contains element to remember fact that we can free memory.
(all_dirs): Renamed to _dl_all_dirs. Made global.
(_dl_init_all_dirs): New variable.
(fillin_rpath): Save one malloc call.
(decompose_rpath): Change interface. New first parameter points to
r_search_path_struct.
(_dl_init_paths): Adjust for changes. Mark all memory as not
deletable. Set _dl_init_all_paths value.
(open_path): Remove may_free_dirs parameter. r_search_path_elem ***
parameter replaced with r_search_path_struct *. Information about
freeing now contained in r_search_path_struct.
(_dl_map_object): Adjust for above changes.
* elf/dl-open.c (dl_open_worker): Change format of debug info a bit.
* elf/Versions [ld] (GLIBC_2.2): Export _dl_debug_files.
* elf/dl-close.c (_dl_close): Print debug message if object is not
unloaded.
* elf/dl-open.c (dl_open_worked): Print message about opencount before
returning to caller.
2000-08-15 Ulrich Drepper <drepper@redhat.com>
* elf/multiload.c: Add mtrace call. Call dlclose for all handles and
free wd.
* elf/dl-deps.c (_dl_map_object_deps): Don't allocate needed list if
there is already one.
* elf/dl-close.c: Pretty print.
* elf/elf.h: Add various DF_1_*, DTF_1_*, and DF_P1_* entries.
* elf/dl-close.c (_dl_close): Don't close an object if it is marked
with nodelete.
* elf/dl-open.c (dl_open_worker): Pass RTLD_NOLOAD as new parameter
to _dl_map_object. Return immediately if no object loaded.
Set DF_1_NODELETE bit in l_flags_1 if RTLD_NODELETE was passed.
* elf/dynamic-link.h (elf_get_dynamic_info): Copy DT_FLAGS_1 entry
if it exists into l_flags_1 word.
* elf/dl-load.c (_dl_map_object_from_fd): Take no parameter and use
it to determine whether loading is wanted or not.
(_dl_map_object): Likewise.
Call _dl_map_object_from_fd with new parameter.
* sysdeps/generic/ldsodefs.h: Update prototype.
* elf/dl-deps.c: Add new parameter to _dl_map_object calls.
* elf/rtld.c: Likewise.
* elf/Makefile (tests): Add noload. Add rules to generate noload.
* elf/noload.c: New file.
* include/link.h (struct link_map): Add l_feature_1 and l_flags_1.
* sysdeps/generic/bits/dlfcn.h: Define RTLD_NOLOAD and RTLD_NODELETE.
* sysdeps/mips/bits/dlfcn.h: Likewise.
2000-04-02 Ulrich Drepper <drepper@redhat.com>
* elf/dl-fini.c (_dl_fini): Increment j counter after swapping in
element at this position.
* elf/Versions [ld.so] (GLIBC_2.2): Export _dl_load_lock.
* elf/link.h (struct link_map): Add l_reldepsmax, l_reldepsact, and
l_reldeps elements.
* elf/dl-lookup.c (add_dependency): New function.
(_dl_lookup_symbol): Use it whenever symbol was found in a global,
dynamically loaded object.
(_dl_lookup_symbol_skip): Likewise.
(_dl_lookup_versioned_symbol): Likewise.
(_dl_lookup_versioned_symbol_skip): Likewise.
* elf/dl-open.c: Don't define _dl_load_lock here...
* elf/rtld.c: ...but here...
* elf/dl-support.c: ...and here.
* elf/dl-close.c (_dl_close): Close also dependent objects introduce
through relocation.
* elf/dl-fini.c (_dl_fini): Also take dependencies introduced through
relocations.
* dlfcn/Makefile (glrefmain.out): Test is not expected to fail
anymore.
* dlfcn/glrefmain.c: Add one more debug message.
* Makeconfig (preprocess-versions): Don't add $(CPPFLAGS) to compiler
command line.
* Makerules (sysd-versions): Use ( ) instead of { }.
* elf/dl-load.c: Use __builtin_expect to signal that compiler should
optimize for the non-debugging case.
* elf/dl-lookup.c: Likewise.
* sysdeps/generic/libc-start.c: Likewise.
2000-03-30 Ulrich Drepper <drepper@redhat.com>
Implement dynamic determination of constructor/destructor order in
the dynamic linker.
* elf/Versions [ld.so] (GLIBC_2.0): Remove _dl_init_next.
(GLIBC_2.2): Add _dl_init.
* elf/dl-close.c: Also call all destructors in FINI_ARRAY.
r_duplist is not anymore allocated separately. l_initfini is and
therefore free it if necessary.
* elf/dl-deps.c: If a searchlist has to be allocated, put all in one
malloc block. Otherwise allocate l_initfini list only.
Put dependencies for the object in l_initfini list.
Sort dependencies for the object to be loaded topologically.
* elf/dl-fini.c: Before running the destructors sort the topologically.
* elf/dl-init.c (_dl_init): Renamed from _dl_init_next. Rewrite to
call constructors instead of iterating over the pointers. Get list of
objects for which to run constructors from l_initfini element. Accept
argc, argv, and env as parameters and pass them to the constructors.
* elf/ld-load.c (_dl_map_object_from_fd): Initialize l_ldnum member
with size of dynamic section.
* elf/dl-open.c (dl_open_worker): Only call _dl_init instead of
_dl_init_next and calling constructors ourself.
* elf/dl-preinit.c (_dl_preinit): Renamed from _dl_preinit_next.
Take argc, argv, and env as parameters and pass them to the
constructors. Rewrite to call all constructors and not iterate over
the pointers.
* elf/dynamic-link.h: Don't relocate DT_FINI_ARRAY entry. Don't
precompute l_initcount and l_preinitcount.
* elf/link.h (struct link_map): Add l_ldnum member.
Make l_phdr_allocated part of the bitfield. Remove l_runcount,
l_initcount, and l_preinitcount. Add l_initfini.
* sysdeps/generic/ldsodefs.h: Replace _dl_init_next prototype with
one for _dl_init.
* sysdeps/i386/dl-machine (RTLD_START): Rewrite to match new init
function interface.
* sysdeps/unix/sysv/linux/init-first.h: Removed.
* sysdeps/unix/sysv/linux/Dist: Delete file here as well.
* sysdeps/unix/sysv/linux/init-first.c [PIC]: Don't use
SYSDEP_CALL_INIT. Make _init a strong alias of init. The calling
conventions now match.
* sysdeps/generic/libc-start.c: Calling __libc_init_first has no
effect for shared objects. Don't emit message and call only for
static library.
* sysdeps/gnu/Makefile (libdl-routines): Add eval.
1999-07-06 Zack Weinberg <zack@rabi.columbia.edu>
* dlfcn: New directory. Move the following files from elf:
dladdr.c, dlclose.c, dlerror.c, dlfcn.h, dlopen.c,
dlopenold.c, dlsym.c, dlvsym.c.
* dlfcn/Makefile: New file.
* dlfcn/Versions: New file.
* dlfcn/dlsym.c: All ELF-specific code split out to new
function _dl_sym.
* dlfcn/dlvsym.c: All ELF-specific code split out to new
function _dl_vsym.
* elf/dl-sym.c: New file. _dl_sym and _dl_vsym are
implemented here.
* dlfcn/dladdr.c: Remove all references to ELF data structures
or headers.
* dlfcn/dlclose.c: Likewise.
* dlfcn/dlerror.c: Likewise.
* dlfcn/dlopen.c: Likewise.
* dlfcn/dlopenold.c: Likewise.
* Makeconfig (dlfcn): New variable - set to `dlfcn' if elf is
yes, empty otherwise.
(libdl): Set to dlfcn/libdl.so or libdl.a if elf is yes,
depending on build-shared.
(subdirs): Add $(dlfcn).
(rpath-dirs): Add dlfcn.
* elf/Makefile: Remove all references to libdl or its
components, except the ones relating to the test cases.
(routines): Add dl-sym.
* elf/Versions (libc): Add _dl_sym and _dl_vsym for GLIBC_2.2.
(libdl): Delete.
* elf/dl-close.c (_dl_close): Change argument to void *.
* elf/dl-open.c (_dl_open): Change return type to void *.
* elf/eval.c: Removed.
* elf/ldsodefs.h: Move prototypes of _dl_catch_error,
_dlerror_run, _dl_open, _dl_close, _dl_addr, and
_dl_mcount_wrapper_check to include/dlfcn.h. Delete
_CALL_DL_FCT macro.
* include/dlfcn.h: Also prototype _dl_sym and _dl_vsym here.
Include real header from dlfcn directory.
* include/ldsodefs.h: Removed.
* grp/initgroups.c: Use DL_CALL_FCT not _CALL_DL_FCT.
* nss/getXXbyYY_r.c: Likewise.
* nss/getXXent_r.c: Likewise.
* iconv/gconv.c: Likewise. Don't include ldsodefs.h.
* iconv/gconv_db.c: Likewise. Don't include ldsodefs.h.
* iconv/skeleton.c: Don't include ldsodefs.h.
* nss/nsswitch.h: Don't include ldsodefs.h. Include dlfcn.h.
1999-07-07 Ulrich Drepper <drepper@cygnus.com>
* elf/link.h (struct link_map): New field l_phdr_allocated.
* elf/dl-load.c (_dl_map_object_from_fd): Don't depend on having
the program header being part of any loaded segment. If it is not
allocate memory and set l_phdr_allocated flag.
* elf/dl-close.c (_dl_close): Free l_phdr if necessary.
1999-01-21 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-close.c: Rewrite the way adding to the global scope works
to handle error cases better than the last change.
The l_global flag is now only set when the object is actually
counted in the global scope list.
* elf/dl-deps.c: Likewise.
* elf/dl-open.c: Likewise.
* elf/dl-close.c: Handle failed loads which would have gone in the
global scope correctly.
* elf/testobj1.c: Include stdlib.h to get NULL defined.
* elf/testobj2.c: Likewise.
* elf/testobj3.c: Likewise.
* elf/testobj4.c: Likewise.
* elf/testobj5.c: Likewise.
* iconvdata/sami-ws2.c: New file.
1998-10-07 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-open.c (_dl_global_scope_alloc): Make global.
(dl_open_worker): Use realloc, not malloc to resize array.
* elf/rtld.c (_dl_initial_searchlist): New variable.
(_dl_main): Copy content of _dl_main_searchlist to
_dl_initial_searchlist.
* elf/ldsodefs.h: Add declarations for _dl_initial_searchlist and
_dl_global_scope_alloc.
* elf/Versions [libc, GLIBC_2.1]: Add _dl_initial_searchlist.
* elf/dl-close.c (_dl_close): When removing object with global
scope remove allocated searchlist if no dynamically loaded object
is on it anymore.
* elf/dl-support.c (_dl_initial_searchlist): Renamed from fake_scope.
(_dl_global_scope, _dl_main_searchlist): Use _dl_initial_searchlist.
* malloc/mtrace.c (tr_where): Don't print space in location string,
print it afterwards. Print better symbol name information.
1998-09-01 17:53 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-load.c (add_name_to_object): Change return type to void and
make NAME parameter const. Allocate room for NAME in same memory
block used for l_libname entry.
(_dl_map_object_from_fd): Don't free NAME on failure.
(map_segment): Pass SONAME to add_name_to_object, not a copy.
(_dl_map_object): Don't create copy of NAME. Pass NAME to
_dl_map_object_from_fd.
* elf/dl-object.c (dl_new_object): Allocate room for NAME in same
memory block used for l_libname entry.
* elf/dl-close.c: Adjust free()ing for this change.
1998-09-01 15:36 Ulrich Drepper <drepper@cygnus.com>
* malloc/Makefile: Include Makeconfig before testing config-sysdirs.
* malloc/mtrace.c: Add bug report address. Update email address.
Add more @XXX@ to print correct address size.
* elf/dl-addr.c (_dl_addr): Make sure that map to be examined is
really initialized.
* elf/dl-close.c (_dl_close): Use l_map_start and l_map_end info
for munmap call instead of examining phdr again.
Free all malloc()ed strings and arrays.
1998-08-31 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-close.c (_dl_close): Update _dl_loaded if the first
object on the list is removed. Don't use this code for PIC.
Reported by HJ Lu [PR libc/770].
1998-08-27 19:42 Ulrich Drepper <drepper@cygnus.com>
* elf/Makefile (distribute): Add dl-origin.h.
* sysdeps/generic/dl-origin.h: New file.
* sysdeps/unix/sysv/linux/dl-origin.h: New file.
* elf/link.h (struct link_map): Add l_origin field.
* elf/dl-load.c (expand_dynamic_string_token): New function.
(decompose_path): Remove WHERE argument, take link map pointer instead.
Call expand_dynamic_string_token instead of local_strdup to make copy
of rpath.
(_dl_init_paths): Call decompose_path with correct argument.
(_dl_map_object_from_fd): Define static is EXTERNAL_MAP_FROM_FD is
not defined.
Check EI_OSABI and EI_ABIVERSION fields in header.
(_dl_map_object): Call decompose_path with correct argument.
Call expand_dynamic_string_token instead of local_strdup to also
expand DST.
* elf/dl-object.c (_dl_new_object): Determine l_origin for all maps
but the main one.
* elf/dl-support.c: Define _dl_origin_path.
* elf/rtld.c: Likewise. Set _dl_origin_path based on LD_ORIGIN_PATH.
* elf/dl-close (_dl_close): Free l_name and l_origin.
* sysdeps/i386/useldt.h (THREAD_GETMEM, THREAD_SETMEM): Use P
modifier in asm, not c.
* sysdeps/mach/hurd/Makefile [subdirs==elf]: Define CFLAGS-dl-load.c
to -DEXTERNAL_MAP_FROM_FD to make _dl_map_object_from_fd extern.