change related to AT_EXECFN. We cannot use that string.
* sysdeps/generic/ldsodefs.h (struct rtld_global_ro): Remove
_dl_execfn member.
* elf/dl-support.c: Remove _dl_execfn variable.
(_dl_aux_init): Remove handling of AT_EXECFN.
* elf/dl-sysdep.c (_dl_sysdep_start): Remove handling of AT_EXECFN.
* elf/rtld.c (process_envvars): Remove use of __ASSUME_AT_EXECFN.
argument.
(_dl_lookup_symbol_x): Adjust caller.
* sysdeps/generic/ldsodefs.h (struct link_namespaces): Remove
_ns_global_scope.
* elf/rtld.c (dl_main): Don't initialize _ns_global_scope.
* elf/dl-libc.c: Revert l_scope name changes.
* elf/dl-load.c: Likewise.
* elf/dl-object.c: Likewise.
* elf/rtld.c: Likewise.
* elf/dl-close.c (_dl_close): Likewise.
* elf/dl-open.c (dl_open_worker): Likewise. If not SINGLE_THREAD_P,
always use __rtld_mrlock_{change,done}. Always free old scope list
here if not l_scope_mem.
* elf/dl-runtime.c (_dl_fixup, _dl_profile_fixup): Revert l_scope name
change. Never free scope list here. Just __rtld_mrlock_lock before
the lookup and __rtld_mrlock_unlock it after the lookup.
* elf/dl-sym.c: Likewise.
* include/link.h (struct r_scoperec): Remove.
(struct link_map): Replace l_scoperec with l_scope, l_scoperec_mem
with l_scope_mem and l_scoperec_lock with l_scope_lock.
Implement reference counting of scope records.
* elf/dl-close.c (_dl_close): Remove all scopes from removed objects
from the list in objects which remain. Always allocate new scope
record.
* elf/dl-open.c (dl_open_worker): When growing array for scopes,
don't resize, allocate a new one.
* elf/dl-runtime.c: Update reference counters before using a scope
array.
* elf/dl-sym.c: Likewise.
* elf/dl-libc.c: Adjust for l_scope name change.
* elf/dl-load.c: Likewise.
* elf/dl-object.c: Likewise.
* elf/rtld.c: Likewise.
* include/link.h: Inlcude <rtld-lowlevel.h>. Define struct
r_scoperec. Replace r_scope with pointer to r_scoperec structure.
Add l_scoperec_lock.
* sysdeps/generic/ldsodefs.h: Include <rtld-lowlevel.h>.
* sysdeps/generic/rtld-lowlevel.h: New file.
* include/atomic.h: Rename atomic_and to atomic_and_val and
atomic_or to atomic_or_val. Define new macros atomic_and and
atomic_or which do not return values.
* sysdeps/x86_64/bits/atomic.h: Define atomic_and and atomic_or.
Various cleanups.
* sysdeps/i386/i486/bits/atomic.h: Likewise.
2006-09-29 Ulrich Drepper <drepper@redhat.com>
[BZ #3273]
* nscd/nscd_initgroups.c (__nscd_getgrouplist): It is OK to have
found no group members.
Patch by Petr Baudis.
2006-09-29 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (_dl_start_final): If not USE___THREAD, don't
assert bootstrap_map.l_tls_modid is zero.
(_dl_start): Initialize bootstrap_map.l_tls_modid to 0
if USE___THREAD.
From Alexandre Oliva <aoliva@redhat.com>.
* elf/tst-audit2.c: New file.
* elf/Makefile (tests): Add it.
($(objpfx)tst-audit2.out): New target.
(tst-audit2-ENV): New variable.
* elf/tst-leaks1.c: Include <stdio.h>.
Tom Gall <tom_gall@vnet.ibm.com>
* elf/rtld.c (dl_main): Initialize l_local_scope for sysinfo_map.
* sysdeps/powerpc/elf/libc-start.c: Move this...
* sysdeps/unix/sysv/linux/powerpc/libc-start.c: ...to here.
* sysdeps/powerpc/powerpc32/dl-start.S: Add _dl_main_dispatch label.
* sysdeps/powerpc/powerpc32/hp-timing.h: New file.
* sysdeps/unix/sysv/linux/powerpc/Versions: New file.
* sysdeps/unix/sysv/linux/clock_getres.c: If HAVE_CLOCK_GETRES_VSYSCALL
is not defined, redefine INTERNAL_VSYSCALL and INLINE_VSYSCALL to
INTERNAL_SYSCALL and INLINE_SYSCALL respectively. Otherwise include
<bits/libc-vdso.h>. Use INLINE_VSYSCALL and INTERNAL_SYSCALL instead
of the normal versions throughout the code.
* sysdeps/unix/sysv/linux/clock_gettime.c: Likewise if
HAVE_CLOCK_GETTIME_VSYSCALL is defined.
* sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h: New file.
* sysdeps/unix/sysv/linux/powerpc/dl-vdso.c: New file.
* sysdeps/unix/sysv/linux/powerpc/dl-vdso.h: New file.
* sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c: Use vDSO.
* sysdeps/unix/sysv/linux/powerpc/gettimeofday.c: New file.
* sysdeps/unix/sysv/linux/powerpc/Makefile: Add dl-vdso to routines.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h: Define
INLINE_VSYSCALL, INTERNAL_VSYSCALL, INTERNAL_SYSCALL_NCS,
INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK, HAVE_CLOCK_GETRES_VSYSCALL,
and HAVE_CLOCK_GETTIME_VSYSCALL.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h: Likewise.
* elf/rtld.c: Define __pointer_chk_guard_local and if necessary
__pointer_chk_guard.
(_rtld_global_ro): Initialize _dl_pointer_guard.
(dl_main): Initialize __pointer_chk_guard_local and either
__pointer_chk_guard or TLS value if necessary.
(process_envvars): Recognize and handle LD_POINTER_GUARD.
* sysdeps/generic/ldsodefs.h (rtld_global_ro): Add _dl_pointer_guard.
* sysdeps/i386/__longjmp.S: Use PTR_DEMANGLE for PC if defined.
* sysdeps/x86_64/__longjmp.S: Likewise.
* sysdeps/i386/bsd-_setjmp.S: Use PTR_MANGLE for PC if defined.
* sysdeps/i386/bsd-_setjmp.S: Likewise.
* sysdeps/i386/setjmp.S: Likewise.
[IS_IN_rtld]: Avoid call to __sigjmp_save.
* sysdeps/i386/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/i386/sysdep.h: Define PTR_MANGLE and
PTR_DEMANGLE.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
* sysdeps/i386/elf/setjmp.S: Removed.
* sysdeps/i386/elf/bsd-setjmp.S: Removed.
* configure.in: Add --enable-stackguard-randomization option.
(ENABLE_STACKGUARD_RANDOMIZE): New define.
* config.h.in (ENABLE_STACKGUARD_RANDOMIZE): Add.
* sysdeps/unix/sysv/linux/dl-osinfo.h: Include stdint.h.
(_dl_setup_stack_chk_guard): New inline function.
* sysdeps/generic/dl-osinfo.h: Include stdint.h.
(_dl_setup_stack_chk_guard): New inline function.
* elf/rtld.c (__stack_chk_guard): New variable.
(dl_main): Remove all traces of TLS_INIT_TP_EXPENSIVE.
Set __stack_chk_guard to _dl_setup_stack_chk_guard (),
use THREAD_SET_STACK_GUARD if defined.
* elf/Versions (ld): Export __stack_chk_guard@@GLIBC_2.4.
* sysdeps/generic/libc-start.c (__stack_chk_guard): New variable.
(__libc_start_main): Set __stack_chk_guard to
_dl_setup_stack_chk_guard (), use THREAD_SET_STACK_GUARD if defined.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Remove all
traces of TLS_INIT_TP_EXPENSIVE.
* debug/Versions (libc): Export __stack_chk_fail@@GLIBC_2.4.
* debug/Makefile (routines): Add stack_chk_fail.
(static-only-routines): Add stack_chk_fail_local.
* debug/stack_chk_fail_local.c: New file.
* debug/stack_chk_fail.c: New file.
* elf/Makefile: Add rules to build and run tst-stackguard1{,-static}
tests.
* elf/tst-stackguard1.c: New file.
* elf/tst-stackguard1-static.c: New file.
* elf/stackguard-macros.h: New file.
2005-06-13 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/clock_gettime.c (clock_gettime): Implement case
where HANDLED_REALTIME is not defined. [BZ #966]
2005-06-13 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/netlinkaccess.h (__netlink_sendreq,
__netlink_receive): Remove prototypes.
(__netlink_request): New prototype.
* sysdeps/unix/sysv/linux/ifaddrs.c: Include <alloca.h> and
<stdint.h>.
(__netlink_sendreq): Make static.
(__netlink_receive): Rename to...
(__netlink_request): ... this. Add type argument, call
__netlink_sendreq. If MSG_TRUNC is set after recvmsg, retry
with a bigger buffer. Don't record buffers that contain no
messages we are expecting.
(getifaddrs): Use __netlink_request instead of __netlink_sendreq
and __netlink_receive pairs. Formatting.
* sysdeps/unix/sysv/linux/if_index.c (if_nameindex_netlink): Use
__netlink_request instead of __netlink_sendreq and __netlink_receive
pair.
2005-06-13 Thorsten Kukuk <kukuk@suse.de>
* sysdeps/unix/sysv/linux/netinet/if_tr.h: Don't include kernel
headers, instead copy important structs/defines.
2005-06-13 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (dl_main): Move DT_DEBUG setup before first
_dl_debug_state call.
real malloc in the catch object.
(_dl_catch_error): Forward information about malloc use to caller
in new parameter.
(_dl_out_of_memory): Make static.
* elf/dl-deps.c: Adjust callers of _dl_catch_error.
* elf/dl-libc.c: Likewise.
* elf/dl-open.c: Likewise.
* elf/rtld.c: Likewise.
Add new --audit option.
* sysdeps/generic/ldsodefs.h: Remove _dl_out_of_memory declaration.
(rtld_global_ro._dl_signal_error): Add new parameter.
* include/dlfcn.h (_dl_catch_error): Add new parameter.
* dlfcn/dlfcn.c (_dlerror_run): Pass additional parameter to
_dl_catch_error. Only free if the returned newly value says so.
[(NEED_DL_SYSINFO || NEED_DL_SYSINFO_DSO) && SHARED]: Scan
GLRO(dl_sysinfo_map) for PT_NOTE giving Linux kernel version,
we can skip the uname call if it's there.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Don't use
DL_SYSDEP_OSCHECK here.
* elf/rtld.c (dl_main) [DL_SYSDEP_OSCHECK]: Do it here instead.
* sysdeps/generic/ldsodefs.h (struct rtld_global_ro):
Add _dl_sysinfo_map.
* elf/rtld.c (dl_main): Don't call _dl_init_paths early in the
rtld_is_main case. Call it unconditionally later.
Move GLRO(dl_sysinfo_dso) handling earlier, before _dl_init_paths call.
Initialize GLRO(dl_sysinfo_map).
* elf/dl-load.c (open_path): Bail out if _dl_init_paths wasn't called.
* sysdeps/generic/dl-sysdep.c (_DL_FIRST_EXTRA): New macro.
(_dl_important_hwcaps)
[(NEED_DL_SYSINFO || NEED_DL_SYSINFO_DSO) && SHARED]: Scan
GLRO(dl_sysinfo_map) for PT_NOTE giving synthetic hwcap names
and bit values.
* elf/ldconfig.c (_DL_FIRST_EXTRA): New macro.
(hwcap_extra): New static variable.
(is_hwcap_platform): Check hwcap_extra for a matching name.
Remove tls special case.
(path_hwcap): Likewise.
(parse_conf): Parse "hwcap" directive to define synthetic hwcap bits
and their names, stored in hwcap_extra.
(main) [USE_TLS]: Initialize final synthetic hwcap bit as "tls".
* sysdeps/generic/ldsodefs.h (struct rtld_global_ro): Use uint64_t for
_dl_hwcap and _dl_hwcap_mask.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Cast a_val for
AT_HWCAP to unsigned long int.
* elf/dl-support.c (_dl_aux_init): Likewise.
(_dl_hwcap): Update defn.
* elf/cache.c (print_entry): Pad hwcap value with 0s in diagnostic.
* elf/ldconfig.c (search_dir): Likewise.
2005-03-15 Jakub Jelinek <jakub@redhat.com>
[BZ #786]
* sysdeps/generic/dl-tls.c (_dl_next_tls_modid): Handle
GL(dl_tls_static_nelem) == GL(dl_tls_max_dtv_idx).
* elf/Makefile: Add rules to build and run tst-tls15.
* elf/tst-tls15.c: New test.
* elf/tst-tlsmod15a.c: New file.
* elf/tst-tlsmod15b.c: New file.
2005-03-20 Ulrich Drepper <drepper@redhat.com>
* elf/rtld.c (dl_main): Always call init_tls if we have audit modules.
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.
__libc_message to kill GCC warning about noreturn function returning.
* elf/rtld.c (dlmain): If LD_TRACE_PRELINKING, clear l_relocated flag
before relocating ld.so again.
* elf/rtld.c (_dl_start): Set bootstrap_map.l_relocated even
for already prelinked ld.so.
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.
2005-01-05 Steven Munroe <sjmunroe@us.ibm.com>
* elf/rtld.c (dl_main) [NEED_DL_SYSINFO_DSO]: Insure l_map_end and
l_text_end are set for a VDSO with a single PT_LOAD entry.
piping to cat; when not, don't use the pipe at all.
Pipe to cat in all cases of running the executable.
When direct running exits with code 5, retry running via ${RTLD}.
* elf/rtld.c (process_envvars): If __libc_enable_secure and
mode != normal, exit with exitcode 5.
2004-12-01 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (process_envvars): Don't consider LD_SHOW_AUXV
and LD_DYNAMIC_WEAK if __libc_enable_secure.
If __libc_enable_secure, /etc/suid-debug doesn't exist and
program will be actually run, turn off all debugging.
* sysdeps/generic/unsecvars.h (UNSECURE_ENVVARS): Add LD_DEBUG,
LD_DYNAMIC_WEAK and LD_SHOW_AUXV.
2004-11-13 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (print_statistics): Avoid segfaults if not all namespaces
are used. Fix computation of num_relative_relocations on RELA
architectures other than IA-64 and Alpha.
2004-11-13 Ulrich Drepper <drepper@redhat.com>
* malloc/malloc.c (_int_free): Use munmap_chunk for handling
mmaped memory.
_dl_sysinfo_dso under [NEED_DL_SYSINFO_DSO] as well.
* elf/rtld.c (dl_main): Set up GLRO(dl_sysinfo_dso) under
[NEED_DL_SYSINFO_DSO] as well.
* sysdeps/generic/dl-sysdep.c (_dl_show_auxv): Always include
AT_SYSINFO and AT_SYSINFO_EHDR in name table.
(_dl_sysdep_start) [NEED_DL_SYSINFO_DSO]: Match AT_SYSINFO_EHDR.
* elf/dl-support.c (_dl_sysinfo_dso): Define also under
[NEED_DL_SYSINFO_DSO].
(_dl_aux_init) [NEED_DL_SYSINFO || NEED_DL_SYSINFO_DSO]:
Match AT_SYSINFO_EHDR and set GL(dl_sysinfo_dso).
2004-11-05 Roland McGrath <roland@redhat.com>
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>
2004-09-23 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/bits/dlfcn.h: Add RTLD_DEEPBIND.
* elf/dl-object.c (_dl_new_object): Add new parameter mode. If mode
has RTLD_DEEPBIND set add local searchlist before global scope.
* sysdeps/generic/ldsodefs.h (_dl_new_object): Adjust prototype.
* elf/rtld.c: Adjust callers of _dl_new_object.
* elf/dl-load.c: Likewise.
(_dl_map_object_from_fd): If RTLD_DEEPBIND is used, don't do anything
for DF_SYMBOLIC.
* elf/dl-open.c (dl_open_writer): Pass RTLD_DEEPBIND flag on to
_dl_map_object_deps.
* elf/tst-deep1.c: New file.
* elf/tst-deep1mod1.c: New file.
* elf/tst-deep1mod2.c: New file.
* elf/tst-deep1mod3.c: New file.
* elf/Makefile: Add rules to build and run new tests.
* elf/dl-deps.c: Pretty printing.
2004-09-20 Ulrich Drepper <drepper@redhat.com>
* elf/dl-load.c (_dl_map_object_from_fd): Add some error checking.
Reorder code slightly.
* elf/rtld.c (dl_main): No need to check whether l_info[DT_HASH]
is non-null, _dl_setup_hash will do that.
2004-09-17 Ulrich Drepper <drepper@redhat.com>
* include/link.h (struct link_map): Add l_used element.
* sysdeps/generic/ldsodefs.h: Define DL_DEBUG_UNUSED.
* elf/rtld.c (process_dl_debug): Recognize unused.
(dl_main): When unused debug flag is set check for unused direct
dependencies.
When printing dependencies and SONAME starts with /, omit the SONAME =>
part.
* elf/dl-lookup.c (_dl_lookup_symbol_x): Mark object in which the
symbol has been found as used.
* elf/ldd.bash.in: Add -u option.
2004-07-10 Ulrich Drepper <drepper@redhat.com>
* elf/ldconfig.c: Define PROCINFO_CLASS as static before including
ldsodefs.h.
* sysdeps/generic/ldsodefs.h: Only define PROCINFO_CLASS if it is not
already defined.
* sysdeps/i386/dl-procinfo.c: Define PROCINFO_CALLS only if not
already defined.
* elf/rtld.c (print_statistics): Mark with noinline attribute.
* sysdeps/i386/dl-machine.h (elf_machine_rel): Mark with always_inline
attribute.
(elf_machine_rel_relative): Likewise.
* include/string.h: Add libc_hidden_proto for __strtok_r and
__strsep_g.
* sysdeps/generic/strsep.c: Add libc_hidden_def.
* sysdeps/generic/strtok_r.c: Likewise.
* sysdeps/i386/strtok_r.S: Add alias for internal symbol.
* sysdeps/i386/i686/strtok_r.S: Likewise.
* sysdeps/x86_64/strtok_r.S: Likewise.
2004-07-09 Alexandre Oliva <aoliva@redhat.com>
* inet/getnetgrent_r.c (internal_setnetgrent): Make it hidden
instead of internal-linkage, such that we can alias to it.
(internal_endnetgrent, internal_getnetgrent_r): Likewise.
2004-07-05 Ulrich Drepper <drepper@redhat.com>
* elf/dl-init.c: Don't define and use _dl_starting_up if
HAVE_INLINED_SYSCALLS is defined and the variable is not used.
* elf/dl-support.c: Likewise.
* elf/rtld.c: Likewise.
* elf/dl-misc.c (_dl_debug_vdprintf): Use writev syscall directly
if HAVE_INLINED_SYSCALLS is defined.
* sysdeps/powerpc/powerpc64/dl-machine.h: Don't rest _dl_starting_up
here.
* sysdeps/powerpc/powerpc32/dl-start.S: Likewise.
* sysdeps/unix/sysv/linux/configure.in: Define HAVE_INLINED_SYSCALLS.
* config.h.in: Add entry for HAVE_INLINED_SYSCALLS.
* sysdeps/posix/profil.c: If compiled for ld.so, omit code which
is needed to stop profiling.
* elf/dl-open.c (dl_open_worker): If a newly opened object is to be
profile make sure it cannot be unloaded.
* sysdeps/unix/sysv/linux/dl-origin.c: Inline readlink syscall.
* sysdeps/unix/sysv/linux/fcntl.c: If compiled without cancellation
support, make sure the helper function is inlined.
* sysdeps/unix/sysv/linux/pread.c: Likewise.
* sysdeps/unix/sysv/linux/pwrite.c: Likewise.
* sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Likewise.
2004-03-06 Ulrich Drepper <drepper@redhat.com>
* elf/dl-lookup.c: We don't need for specialized lookup functions.
Combining the functionality does not slow down relocation processing,
it might even speed it up a little.
* sysdeps/generic/ldsodefs.h: Adjust prototypes for lookup function.
Add only one function pointer to rtlf_global_ro.
* elf/do-lookup.h: Replace #ifs with ifs.
* elf/dl-libc.c: Adjust _dl_lookup_* callers.
* elf/dl-reloc.c: Likewise.
* elf/dl-runtime.c: Likewise.
* elf/dl-sym.c: Likewise.
* elf/rtld.c: Likewise. Adjust _rtld_global_ro initialization.
* sysdeps/generic/ldsodefs.h (__rtld_local_attribute__,
__rtld_global_attribute__): Undef after use.
(_rtld_local_ro): Define __rtld_local_attribute__ with just hidden
if available.
* sysdeps/alpha/Subdirs: New file.
* sysdeps/alpha/soft-fp/Makefile: New file.
* sysdeps/alpha/soft-fp/Versions: New file.
* sysdeps/alpha/soft-fp/local-soft-fp.h: New file.
* sysdeps/alpha/soft-fp/ots_add.c: New file.
* sysdeps/alpha/soft-fp/ots_cmp.c: new file.
* sysdeps/alpha/soft-fp/ots_cmpe.c: New file.
* sysdeps/alpha/soft-fp/ots_cvtqux.c: New file.
* sysdeps/alpha/soft-fp/ots_cvtqx.c: New file.
* sysdeps/alpha/soft-fp/ots_cvttx.c: New file.
* sysdeps/alpha/soft-fp/ots_cvtxq.c: New file.
* sysdeps/alpha/soft-fp/ots_cvtxt.c: New file.
* sysdeps/alpha/soft-fp/ots_div.c: New file.
* sysdeps/alpha/soft-fp/ots_mul.c: New file.
* sysdeps/alpha/soft-fp/ots_nintxq.c: New file.
* sysdeps/alpha/soft-fp/ots_sub.c: New file.
2004-03-06 Ulrich Drepper <drepper@redhat.com>
* elf/dl-open.c: No need to pass any parameter to _dl_start_profile.
They are the same in both places.
* elf/dl-profile.c: Likewise.
* elf/rtld.c: Likewise.
* sysdeps/generic/ldsodefs.h: Likewise.
* elf/dl-support.c: Define _dl_profile_output variable. Initialize it.
* sysdeps/generic/ldsodefs.h (struct rtld_global): Move
dl_debug_fd to rtld_global_ro.
* elf/rtld.c: Use GLRO instead of GL for dl_debug_fd.
* elf/dl-misc.c: Likewise.
* elf/rtld.c (dl_main): Adjust l->l_ld of the vDSO by l->l_addr.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Only set
GL(dl_sysinfo) if non-zero.
2004-02-26 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (dl_main): Correctly set up l_map_end and l_addr
in vDSO's link_map, don't assume l_addr == 0. Set GL(dl_sysinfo)
from e_entry only if AT_SYSINFO not present and adjust by l_addr.
Take vDSO into account when inserting rtld into _dl_loaded chain.
2004-02-19 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/generic/libc-start.c [LIBC_START_DISABLE_INLINE] (STATIC):
Define as static.
* sysdeps/powerpc/elf/libc-start.c: Define LIBC_START_DISABLE_INLINE
because gcc does not allow inline of functions that call setjmp.
2004-02-19 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/powerpc64/Makefile: Use -finline-limit.
2004-02-19 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (_dl_argv): If DL_ARGV_NOT_RELRO defined, don't
use attribute_relro for _dl_argv.
* sysdeps/alpha/dl-machine.h (DL_ARGV_NOT_RELRO): Define.
* sysdeps/ia64/dl-machine.h (DL_ARGV_NOT_RELRO): Define.
* sysdeps/sparc/sparc32/dl-machine.h (DL_ARGV_NOT_RELRO): Define.
* sysdeps/sparc/sparc64/dl-machine.h (DL_ARGV_NOT_RELRO): Define.
vfork instead of fork.
2004-01-22 Jakub Jelinek <jakub@redhat.com>
* elf/dl-reloc.c (_dl_relocate_object): Move PT_GNU_RELRO protection
into...
(_dl_protect_relro): New routine.
* sysdeps/generic/ldsodefs.h (_dl_protect_relro): New prototype.
* elf/rtld.c (_dl_start_final): Copy l_relro_addr and l_relro_size
from bootstrap_map.
(_dl_main): Don't set GL(_dl_loaded)->l_relro_{addr,size} here.
Call _dl_protect_relro for libraries if prelinking.
2004-01-14 Ulrich Drepper <drepper@redhat.com>
* configure.in: Define HAVE_Z_RELRO if the linker supports -z relro.
* config.h.in: Add entry for HAVE_Z_RELRO.
* include/libc-symbols.h: Define attribute_relro.
* elf/dl-load.c: Add attribute_relro to env_path_list, capstr, ncapstr,
max_capstrlen, and max_dirnamelen definitions.
* elf/rtld.c: Add attribute_relro to _dl_argc, _dl_argv, _dl_skip_args,
load_time, start_time, library_path, preloadlist, version_info,
any_debug.
Remove rtld_total_time. Make it a local variable. Pass pointer to
it to print_statistics. Change print_statistics accordingly.
* sysdeps/generic/dl-sysdep.c: Add attribute_relro to _dl_auxv. Use
attribute_relro instead of explicitly assigning variable to the
.data.rel.ro section for __libc_enable_secure and __libc_stack_end.
* sysdeps/generic/ldsodefs.h: Declare __libc_stack_end, _dl_argc,
_dl_argv, _dl_argv_internal with attribute_relro.
2004-01-13 Ulrich Drepper <drepper@redhat.com>
* sysdeps/x86_64/dl-machine.h: Include <tls.h>.
* elf/rtld.c (_dl_start_final): Initialze __libc_stack_end here.
* sysdeps/generic/dl-sysdep.c: Define __libc_stack_end with
rtld_hidden_def and move into .data.rel.ro section.
* sysdeps/generic/ldsodefs.h: Declare __libc_stack_end with
rtld_hidden_proto.
* sysdeps/generic/libc-start.c: Only initialize __libc_stack_end here
if !SHARED.
* sysdeps/unix/sysv/linux/dl-execstack.c
(_dl_make_stack_executable): Move common code in front. Use
__builtin_expect.
2004-01-13 Ulrich Drepper <drepper@redhat.com>
* Makeconfig: Define relro-LDFLAGS if have-z-relro==yes. Add it to
LDFLAGS.so and LDFLAGS-rtld.
(+link): Add relro-LDFLAGS.
* Makeconfig (shlib.lds): Place __libc_subfreeres, __libc_atexit, and
__libc_thread_subfreeres sections after .jcr section.
* config.make.in: Add have-z-relro.
* configure.in: Add check for -z relro option.
* include/link.h (struct link_map): Add relro_addr and relro_size
members.
* elf/dl-load.c (_dl_map_object_from_fd): Recognize PT_GNU_RELRO.
* elf/dl-reloc.c (_dl_relocate_object): At the end, make relro
part of loaded segments read-only.
* elf/elf.h: Define PT_GNU_RELRO.
* elf/rtld.c (_dl_start): Recognize PT_GNU_RELRO of ld.so.
(dl_main): Recognize PT_GNU_RELRO of the application. Call
_dl_debug_initialize and initialize l_info[DT_DEBUG] before
relocations.
2003-12-17 Ulrich Drepper <drepper@redhat.com>
* elf/rtld.c: Don't use strong_alias to define _rtld_local. This
removes the visibility attributes which might be defined earlier
for some gcc versions. Instead spell out what strong_alias does
plus the visibility.
2003-12-02 David Mosberger <davidm@hpl.hp.com>
* sysdeps/ia64/elf/initfini.c: Add unwind info.
* sysdeps/ia64/dl-machine.h (elf_machine_matches_host): Mark with
attribute "unused".
(elf_machine_dynamic): Mark with attributes "unused" and "const".
(elf_machine_runtime_setup): Likewise.
* sysdeps/generic/dl-fptr.c (make_fptr_table): Mark with
attribute "always_inline".
* sysdeps/ia64/dl-machine.h (__ia64_init_bootstrap_fdesc_table):
Likewise.
* configure.in: Check whether compiler has libunwind support.
* config.make.in (have-cc-with-libunwind): New variable.
* config.h.in (HAVE_CC_WITH_LIBUNWIND): New macro.
* Makeconfig (gnulib): If have-cc-withh-libunwind is "yes", also
mention -lunwind.
003-11-12 David Mosberger <davidm@hpl.hp.com>
* sysdeps/unix/sysv/linux/ia64/sysdep.h: Define DO_CALL_VIA_BREAK.
Redefine DO_CALL to use vdso if supported, otherwise DO_CALL_VIA_BREAK.
Likewise for DO_INLINE_SYSCALL. Make INTERNAL_SYSCALL use
DO_INLINE_SYSCALL.
* sysdeps/unix/sysv/linux/ia64/vfork.S: Use DO_CALL_VIA_BREAK()
instead of DO_CALL().
* sysdeps/unix/sysv/linux/ia64/clone2.S: Use break directly instead
of DO_CALL().
* sysdeps/unix/sysv/linux/ia64/brk.S (__curbrk): Restructure it
to take advantage of DO_CALL() macro.
* sysdeps/unix/sysv/linux/ia64/setcontext.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/getcontext.S: Likewise.
* elf/rtld.c (dl_main): Restrict dl_sysinfo_dso check to first
program header. On ia64, the check failed previously because
there are two program headers.
* sysdeps/generic/s_nexttowardf.c: Likewise.
* math/bug-nexttoward.c: New file.
2003-11-25 Ulrich Drepper <drepper@redhat.com>
* posix/runptests.c (main): Make errors fatal.
* posix/PTESTS: One test in GA135 and GA136 check functionality
which seems not guaranteed.
2003-11-25 Jakub Jelinek <jakub@redhat.com>
* posix/regexec.c (re_search_internal): If prune_impossible_nodes
returned REG_NOMATCH, set match_last to -1. Don't initialize
pmatch[0] needlessly. Fix comment.
(prune_impossible_nodes): Don't segfault on NULL state_log entry.
(set_regs): Fix comment.
* posix/regcomp.c (parse_bracket_exp): Only set has_plural_match
if adding both SIMPLE_BRACKET and COMPLEX_BRACKET.
(build_charclass_op): Set has_plural_match if adding both
SIMPLE_BRACKET and COMPLEX_BRACKET.
* posix/bug-regex11.c (tests): Fix register values for one commented
out test. Add new tests.
* posix/regex_internal.c (re_string_allocate): Make sure init_len
is at least dfa->mb_cur_max.
(re_string_reconstruct): If is_utf8, don't fall back into
re_string_skip_chars just because idx points into a middle of
valid UTF-8 character. Instead, set the wcs bytes which correspond
to the partial character bytes to WEOF.
* posix/regexec.c (re_search_internal): Allocate input.bufs_len + 1
instead of dfa->nodes_len + 1 state_log entries initially.
* posix/bug-regex20.c (main): Uncomment backwards case insensitive
tests.
* include/dlfcn.h (__RTLD_OPENEXEC): Define.
* elf/dl-load.c (_dl_map_object_from_fd): Don't allow loading
executables unless __RTLD_OPENEXEC flag is present.
* elf/rtld.c (dl_main): Pass __RTLD_OPENEXEC flag to
_dl_map_object when loading the executable.
reverse lookup format for IPv6 addresses is using bitstring and
* resolv/ns_name.c: Implement encoding and decoding bitstring in
2003-09-30 Ulrich Drepper <drepper@redhat.com>
* elf/rtld.c (dl_main): Also set l_map_start.
2003-09-30 Daniel Jacobowitz <drow@mvista.com>
* elf/rtld.c (dl_main): Set l_libname and l_name for the sysinfo DSO
to work around kernel problem.
GL(dl_stack_flags) according to rtld's own PT_GNU_STACK.
Move GL(dl_make_stack_executable_hook) initialization up.
* elf/tst-execstack-prog.c: New file.
* elf/Makefile (tests-execstack-yes): Add it.
(LDFLAGS-tst-execstack-prog): New variable.
2003-08-07 Jakub Jelinek <jakub@redhat.com>
* sysdeps/generic/ldsodefs.h (_rtld_global): Add
_dl_rtld_lock_recursive and _dl_rtld_unlock_recursive.
* elf/rtld.c (rtld_lock_default_lock_recursive,
rtld_lock_default_unlock_recursive): New functions.
(dl_main): Initialize _dl_rtld_lock_recursive and
_dl_rtld_unlock_recursive.
2003-08-05 Jakub Jelinek <jakub@redhat.com>
* elf/ldconfig.c (main): Append SLIBDIR and LIBDIR to
config_file directories instead of prepending.
2003-07-31 Jakub Jelinek <jakub@redhat.com>
* dlfcn/dlerror.c (once): New.
(dlerror): Call __libc_once.
(_dlerror_run): Remove once.
2003-07-31 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h (struct sigcontext):
Sync with 2.5.7 and 2.5.73 kernel changes.
2003-07-31 Jakub Jelinek <jakub@redhat.com>
* dlfcn/eval.c (funcall): Add noinline attribute to shut up warnings.
* elf/rtld.c (dl_main): Cast ElfW(Addr) arguments with %Zx/%Zd
formats to size_t.
* elf/dl-lookup.c (_dl_debug_bindings): Likewise.
* elf/tst-tls6.c (do_test): Use %zd format for l_tls_modid.
* elf/tst-tls8.c (do_test): Use %zd format for modid1 and modid2.
* gmon/tst-sprofil.c (main): Add parens to shut up warning.
* iconv/tst-iconv3.c (main): Use %td instead of %zd for pointer
difference argument.
* stdio-common/tst-wc-printf.c (main): Cast arguments with %C
format to wint_t.
* stdlib/tst-limits.c (main): For WORD_BIT and LONG_BIT, use
%d format and cast expected value to int.
* sysdeps/generic/libc-start.c (STATIC): Add
__attribute__((always_inline) if LIBC_START_MAIN is already defined.
* sysdeps/powerpc/fpu/w_sqrt.c (a_nan, a_inf): Change from uint32_t
to ieee_float_shape_type.
(__sqrt): Avoid type punning.
* sysdeps/powerpc/fpu/w_sqrtf.c (a_nan, a_inf): Change from uint32_t
to ieee_float_shape_type.
(__sqrtf): Avoid type punning.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela): Don't define
refsym if in dl-conflict.c.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/unix/sysv/linux/i386/semctl.c (union semun): Add __old_buf.
(__new_semctl): Shut up warning.
* sysdeps/unix/sysv/linux/semctl.c (union semun): Add __old_buf.
(__new_semctl): Shut up warning.
* sysdeps/unix/sysv/linux/shmctl.c (__new_shmctl): Wrap long lines.
Change old into union of __old_shmid_ds and __old_shminfo structs.
Adjust all users.
* wcsmbs/wcsmbs-tst1.c (main): Cast arguments with %C format to wint_t.
2003-07-31 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/utimes.c (__utimes): Fix actime and
modtime computation.
* sysdeps/unix/sysv/linux/futimes.c (__futimes): Likewise.
* sysdeps/posix/utimes.c (__utimes): Likewise.
2003-07-24 Ulrich Drepper <drepper@redhat.com>
* include/link.h (struct link_map): Add l_tls_firstbyte_offset field.
* sysdeps/generic/dl-tls.c [TLS_TCB_AT_TP] (_dl_determine_tlsoffset):
Fix calculation of offsets to take misalignment of first byte in
file into account.
* elf/dl-load.c (_dl_map_object_from_fd): Initialize
l_tls_firstbyte_offset field.
* elf/rtld.c (_dl_start_final, _dl_start, dl_main): Likewise.
* elf/dl-reloc.c (_dl_allocate_static_tls): Change return type to int.
Take l_tls_firstbyte_offset information into account.
(CHECK_STATIS_TLS): _dl_allocate_static_tls can fail now.
* sysdeps/generic/ldsodefs.h: Adjust _dl_allocate_static_tls prototype.
* elf/Makefile: Add rules to build and run tst-tls14.
* elf/tst-tls14.c: New file.
* elf/tst-tlsmod14a.c: New file.
* elf/tst-tlsmod14b.c: New file.
2003-06-16 Ulrich Drepper <drepper@redhat.com>
* elf/rtld.c (dl_main): Use l_map_start not l_addr in Phdr
computation so that prelinking wroks.
* inet/netinet/ip6.h (IP6OPT_PAD1, IP6OPT_PADN): Define.
2003-04-22 Roland McGrath <roland@redhat.com>
* elf/elf.h (AT_SYSINFO_EHDR): New macro, replaces AT_SYSINFO_EH_FRAME.
* sysdeps/generic/ldsodefs.h (struct rtld_global): Remove
dl_sysinfo_eh_frame member, add dl_sysinfo_dso member instead.
* elf/dl-support.c: Update defn.
* sysdeps/generic/libc-start.c: Don't call __register_frame_info_bases.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start) [NEED_DL_SYSINFO]:
Set GL(dl_sysinfo_dso) from AT_SYSINFO_EHDR.
(_dl_show_auxv): Grok AT_SYSINFO_EHDR, not AT_SYSINFO_EH_FRAME.
* elf/rtld.c (dl_main) [NEED_DL_SYSINFO]: If GL(dl_sysinfo_dso) is
set, set up a link_map for the preloaded, prelinked object.
2002-12-28 Ulrich Drepper <drepper@redhat.com>
* descr.h (struct pthread): Move header.data.list to the back of the
struct.
* sysdeps/i386/tls.h (tcbhead_t): Move list to the back of the struct.
(MULTIPLE_THREADS_OFFSET): Adjust offset.
(SYSINFO_OFFSEET): Likewise.
2002-12-27 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h (USE_DL_SYSINFO):
Define.
(DL_SYSINFO_DEFAULT): Cast to uintptr_t to avoid warnings.
* sysdeps/unix/sysv/linux/i386/dl-sysdep.h (NEED_DL_SYSINFO,
DL_SYSINFO_DEFAULT, DL_SYSINFO_IMPLEMENTATION): Define.
(USE_DL_SYSINFO): Undef.
2002-12-22 Jakub Jelinek <jakub@redhat.com>
* Makefile (tests-reverse): Use $(objpfx)../libc.so instead of
$(common-objpfx)libc.so.
* tst-cancel4.c (tf_write, tf_writev): Increase buf sizes so that
it is bigger than pipe buffer size even on arches with bigger
page size.
(tf_usleep): Cast usleep argument to useconds_t to avoid warnings.
2002-12-19 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/sysdep.h: Add support to use AT_SYSINFO
information for system calls.
* sysdeps/generic/dl-sysdep.h: Define RTLD_PRIVATE_ERRNO to 1 only
for ld.so.
* elf/rtld.c (_dl_start) [USE___THREAD]: Define initdtv.
2002-12-18 Ulrich Drepper <drepper@redhat.com>
* elf/dl-support.c [NEED_DL_SYSINFO]: Define and initialize
_dl_sysinfo.
[DL_SYSINFO_IMPLEMENTATION]: If defined use it to generate the needed
code.
* elf/rtld.c [DL_NEED_SYSINFO]: Initialize _dl_sysinfo element of
_rtld_global.
[DL_SYSINFO_IMPLEMENTATION]: If defined use it to generate the needed
code.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start) [NEED_DL_SYSINFO]:
Check for AT_SYSINFO and set _dl_sysinfo appropriately.
* sysdeps/generic/ldsodefs.h (struct rtld_global) [NEED_DL_SYSINFO]:
Add _dl_sysinfo.
* malloc/hooks.c [_LIBC && (USE___THREAD || (USE_TLS && !SHARED))]
(malloc_starter, memalign_starter, free_starter): Don't define these.
* malloc/malloc.c [_LIBC && (USE___THREAD || (USE_TLS && !SHARED))]:
Don't declare them either.
* malloc/arena.c (ptmalloc_init) [_LIBC && USE_TLS]: Don't call
__pthread_initialize, so no need to set hooks to *_starter.
(ptmalloc_init_minimal): New function, broken out of ptmalloc_init.
[_LIBC && SHARED && USE_TLS && !USE___THREAD]
(__libc_malloc_pthread_startup): New function.
* malloc/Versions (libc: GLIBC_PRIVATE): New set, add that function.
* malloc/hooks.c (memalign_starter): New function.
* malloc/malloc.c: Declare it.
* malloc/arena.c (save_memalign_hook): New variable.
(ptmalloc_init): Set __memalign_hook to memalign_starter.
* elf/dl-minimal.c (free): Clear the memory.
(calloc): Just call malloc, knowing all memory it returns is cleared.
* sysdeps/generic/dl-tls.c (allocate_dtv): Use calloc instead of
malloc and memset; calloc can avoid the zeroing when redundant.
(_dl_tls_setup): Likewise.
* elf/dl-load.c (decompose_rpath): Likewise.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Comment out memset
call, since memory from sbrk at startup is already zero.
* elf/rtld.c (_dl_start, dl_main): TLS_INIT_TP macro now returns an
error string for failure, null for success. Update callers.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Likewise.
* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
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.
changed from [USE_TLS && HAVE___THREAD].
* sysdeps/i386/dl-machine.h (elf_machine_type_class, elf_machine_rel):
Disable TLS relocs if [RTLD_BOOTSTRAP && !USE___THREAD].
* sysdeps/x86_64/dl-machine.h
(elf_machine_type_class, elf_machine_rela): Likewise.
* sysdeps/sh/dl-machine.h (elf_machine_type_class, elf_machine_rela):
Likewise.
* include/link.h (struct link_map): Remove member l_tls_tp_initialized.
* elf/rtld.c (_dl_start_final, dl_main): Don't use it.
(_dl_start): Conditionalize PT_TLS check on [USE___THREAD].
* sysdeps/i386/dl-tls.h (__TLS_GET_ADDR): Use ___tls_get_addr_internal
instead of ___tls_get_addr.
(___tls_get_addr_internal): Add attribute_hidden to decl.
* sysdeps/generic/ldsodefs.h (struct rtld_global): New variable
_dl_error_catch_tsd.
* elf/rtld.c (startup_error_tsd): New function.
(dl_main): Point _dl_error_catch_tsd at that.
* elf/dl-error.c: Don't use libc-tsd.h for DL_ERROR,
use new function pointer instead.
* elf/dl-tsd.c: New file.
* elf/Makefile (routines): Add it.
2002-10-07 Roland McGrath <roland@redhat.com>
* elf/dl-misc.c (_dl_debug_vdprintf): Use INTERNAL_SYSCALL macro for
writev if it's available. Otherwise if [RTLD_PRIVATE_ERRNO] then
take _dl_load_lock around calling __writev.
* sysdeps/unix/sysv/linux/i386/sysdep.h (INTERNAL_SYSCALL): New macro.
(INLINE_SYSCALL): Use that.
* sysdeps/generic/dl-sysdep.h: New file.
* sysdeps/mach/hurd/dl-sysdep.h: New file.
* sysdeps/generic/ldsodefs.h: Include <dl-sysdep.h>.
* include/errno.h [IS_IN_rtld]: Include <dl-sysdep.h> to define ...
[RTLD_PRIVATE_ERRNO]: Use a hidden global variable for errno and
access it directly.
* elf/dl-minimal.c (__errno_location): Removed.
* sysdeps/unix/i386/sysdep.S (__syscall_errno) [RTLD_PRIVATE_ERRNO]:
Use GOTOFF access for errno.
* sysdeps/unix/sysv/linux/i386/sysdep.h
[RTLD_PRIVATE_ERRNO] (SYSCALL_ERROR_HANDLER): Likewise.
* sysdeps/unix/x86_64/sysdep.S (__syscall_errno) [RTLD_PRIVATE_ERRNO]:
Use PC-relative access for errno.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h
[RTLD_PRIVATE_ERRNO] (SYSCALL_ERROR_HANDLER): Likewise.
* include/tls.h: New file.
(USE___THREAD): New macro.
Define to 1 under [USE_TLS && HAVE___THREAD] and only when compiling
libc or libpthread.
* sysdeps/unix/sysv/linux/i386/sysdep.h [USE___THREAD]: Conditional
changed from [USE_TLS && HAVE___THREAD].
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
* sysdeps/unix/i386/sysdep.S: Likewise.
* sysdeps/unix/x86_64/sysdep.S: Likewise.
* include/errno.h: Likewise.
* include/netdb.h: Likewise.
* include/resolv.h: Likewise.
* sysdeps/generic/errno.c: New file.
* csu/Makefile (aux): New variable, list errno.
* sysdeps/unix/sysv/linux/i386/sysdep.S (errno, _errno): Remove defns.
* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/arm/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/cris/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/hppa/sysdep.c: Likewise.
* sysdeps/unix/sysv/linux/ia64/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/powerpc/sysdep.c: Likewise.
* sysdeps/unix/sysv/linux/sparc/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/sh/sysdep.S: Likewise.
* sysdeps/unix/alpha/sysdep.S: Likewise.
* sysdeps/generic/start.c: Likewise.
* sysdeps/unix/start.c: Likewise.
* sysdeps/unix/arm/start.c: Likewise.
* sysdeps/unix/bsd/ultrix4/mips/start.S: Likewise.
* sysdeps/unix/sparc/start.c: Likewise.
* sysdeps/unix/sysv/irix4/start.c: Likewise.
* sysdeps/unix/sysv/linux/mips/sysdep.S: File removed.
* manual/search.texi (Tree Search Function, Hash Search Function):
Mention search.h clearly.
2002-10-05 Roland McGrath <roland@redhat.com>
* elf/dl-fxstat64.c: File removed.
* elf/dl-xstat64.c: File removed.
* elf/Makefile (rtld-routines): Remove them.
* sysdeps/unix/sysv/linux/xstat64.c: Remove RTLD_STAT64 conditionals.
Instead, use strong_alias instead of versioned_symbol in the
!SHLIB_COMPAT case.
* sysdeps/unix/sysv/linux/fxstat64.c: Likewise.
* sysdeps/unix/sysv/linux/lxstat64.c: Likewise.
* include/shlib-compat.h
(SHLIB_COMPAT): Require that IS_IN_##lib be defined nonzero.
[! NOT_IN_libc] (IS_IN_libc): Define it.
* cppflags-iterator.mk (CPPFLAGS-$(cpp-src)): Use -Dx=1 not just -Dx.
* elf/Makefile (CPPFLAGS-.os): Likewise.
* sunrpc/rpc_main.c (main): Don't declare with noreturn attribute.
Return the status instead of calling exit.
* Makeconfig (CFLAGS): Prepend -std=gnu99.
* Makerules (+make-deps): Use $(CFLAGS) only for .c sources.
Remove superfluous rm command, whose @ plus make bugs hid
all these commands from the make output.
* include/stubs-prologue.h: New file. Give #error under #ifdef _LIBC.
* Makefile ($(inst_includedir)/gnu/stubs.h): Depend on it.
Use that file's contents instead of literal echo's for the prologue.
* include/features.h: Include <gnu/stubs.h> unconditionally.
* include/gnu/stubs.h: New file.
2002-09-30 Roland McGrath <roland@redhat.com>
* elf/rtld-Rules: New file.
* elf/Makefile ($(objpfx)librtld.map, $(objpfx)librtld.mk,
$(objpfx)rtld-libc.a): New targets.
(generated): Add them.
(reloc-link): Remove -o $@ from the variable.
($(objpfx)dl-allobjs.os): Add -o $@ after $(reloc-link).
(distribute): Add rtld-Rules.
(CPPFLAGS-.os): Define this instead of CFLAGS-.os.
* Makerules ($(+sysdir_pfx)sysd-rules): Emit rules for rtld-% targets.
(common-mostlyclean, common-clean): Clean up rtld-* files.
* sysdeps/unix/make-syscalls.sh: Add rtld-*.os target name to rules.
* sysdeps/mach/hurd/_exit.c: Add libc_hidden_def.
* sysdeps/generic/_exit.c: Likewise.
2002-09-12 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (struct dl_start_final_info): New.
(_dl_start_final): Change second argument to struct
dl_start_final_info *. Set start_time from info.
(_dl_start): Remove bootstrap_map variable, add info.
Define bootstrap_map as macro. If not DONT_USE_BOOTSTRAP_MAP,
store HP_TIMING_NOW result into info.start_time.
resetting handler, to avoid the possibility of a spurious SIGALRM
delivered to the user's handler.
Reported by Amit D. Chaudhary <amitc@brocade.com>,
* misc/Makefile (CFLAGS-init-misc.c): Varaible removed. It served to
set -fkeep-inline-functions, which is not needed for the current file.
* sysdeps/generic/ldsodefs.h: Add attribute_hidden to *_internal decls.
(_dl_setup_hash): Add attribute_hidden.
(_dl_sysdep_start, _dl_sysdep_start_cleanup): Likewise.
(_dl_sysdep_read_whole_file, _dl_dprintf): Likewise.
(_dl_new_object, _dl_map_object_deps): Likewise.
(_dl_map_object_deps_internal): Remove decl.
* elf/rtld.c (__mempcpy, _exit): Redeclare locally as hidden.
* sysdeps/i386/dl-machine.h [PI_STATIC_AND_HIDDEN
&& HAVE_VISIBILITY_ATTRIBUTE && HAVE_HIDDEN
&& !HAVE_BROKEN_VISIBILITY_ATTRIBUTE]
(elf_machine_dynamic, elf_machine_load_address): Rewritten without asm,
instead relying on the compiler to produce only GOTOFF variable refs.
* elf/rtld.c (_dl_start_final): Move defn before _dl_start so it can
be inlined. Declare it with always_inline if [DONT_USE_BOOTSTRAP_MAP]
and with noinline otherwise. Remove hack alloca use to prevent
inlining, we can ask for it explicitly nowadays.
* elf/rtld.c (start_time): New global variable. Moved from _dl_start.
(DONT_USE_BOOTSTRAP_MAP): Define if we can use non-exported symbols
before relocation.
(_dl_start): Don't use local bootstrap_map variable if
DONT_USE_BOOTSTRAP_MAP is defined. Use GL(dl_rtld_map). Don't
pass bootstrap_map to _dl_start_final in this case either. Don't
pass start_time to _dl_start_final ever.
(_dl_start_final): Don't copy bootstrap_map of DONT_USE_BOOTSTRAP_MAP.
* elf/dl-deps.c (_dl_map_object_deps): Revert patch from 2002-05-28.
This cripples the scope lists necessary to search for symbols in
dependencies which are not in the global scope.
* elf/rtld.c (_dl_start): Pass extra argument 1 to TLS_INIT_TP.
(dl_main): Padd extra argument 0 to TLS_INIT_TP.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Pass extra
argument 1 to TLS_INIT_TP.
* sysdeps/generic/tls.h (TLS_INIT_TP): Describe new parameter.
* locale/loadarchive.c (_nl_load_locale_from_archive): Store strdup of
2002-08-15 Ulrich Drepper <drepper@redhat.com>
* csu/Makefile: Define elide-routines.os not static-only-routines.
* include/sched.h (__clone): Add varargs at the end.
* elf/rtld.c (_dl_start): All TLS_INIT_TP to fail and stop in that
case.
(TLS_INIT_HELPER): If defined use it.
* sysdeps/generic/libc-tls.c (TLS_INIT_HELPER): Likewise.
* locale/loadarchive.c (archfname): Add missing slash.
* sysdeps/generic/strtold.c (__strtold_internal): Add libc_hidden_def.
* wcsmbs/wcstold.c (__wcstold_internal): Add libc_hidden_def.
* sysdeps/generic/ldsodefs.h (struct rtld_global): Replace member
`bool _dl_initial_dtv_malloced' with `void *_dl_initial_dtv'.
* elf/rtld.c (dl_main): Set it to the new dtv for the main thread.
* sysdeps/generic/dl-tls.c (__tls_get_addr): When reallocating the
dtv, check if it matches _dl_initial_dtv; if so, malloc and copy the
old data, abandoning the original memory allocated by rtld at startup,
instead of calling realloc normally.
cppflags-iterator.mk, must append .c to $(tests) and $(xtests)
words. Combine the two loops into one on the concatenated list,
including those as well as $(test-srcs).
* elf/dl-minimal.c (__libc_memalign): Guts of malloc moved here,
since we align here with optimally minimal waste anyway.
(malloc): Just call that.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Set l_tls_offset to
the right variable.
* elf/dl-load.c (_dl_map_object_from_fd): Use p_vaddr, not p_offset,
to compute memory location for l_tls_initimage.
* elf/rtld.c (_dl_start): Likewise.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Likewise.
* libio/oldiopopen.c: Move #include's before #if SHLIB_COMPAT,
because the .d file is generated in the non-shared case and
so fails to catch them otherwise.
* sysdeps/generic/dl-tls.c (_dl_allocate_tls_storage): New function,
split out of _dl_allocate_tls.
(_dl_allocate_tls_init): Likewise.
(_dl_allocate_tls): Call those.
* sysdeps/generic/ldsodefs.h: Declare them with attribute_hidden.
* elf/rtld.c (dl_main): Call them separately instead of calling
_dl_allocate_tls. Delay _dl_allocate_tls_init until after relocation
is finished, so that the initializer data has been relocated before we
copy it into the main thread's TLS block.
* sysdeps/generic/dl-tls.c (_dl_allocate_tls): Fix off-by-one error in
loop conditions, prevented the last used module from being initialized.
2002-04-08 kaz Kojima <kkojima@rr.iij4u.or.jp>
* elf/elf.h: Define R_SH_TLS_xxx macros.
* elf/rtld.c: Remove an extra parenthesis.
* elf/tls-macros.h: Define SH version TLS_LE, TLS_IE, TLS_LD and
TLS_GD macros.
* sysdeps/generic/dl-tls.c: Add a missing semi-colon.
* sysdeps/sh/dl-lookupcfg.h: New file.
* sysdeps/sh/dl-tls.h: New file.
* sysdeps/sh/dl-machine.h (elf_machine_type_class): Set
ELF_RTYPE_CLASS_PLT also for the three TLS relocations.
(elf_machine_rela): Handle R_SH_TLS_DTPMOD32, R_SH_TLS_DTPOFF32 and
R_SH_TLS_TPOFF32 relocations.
2002-03-14 Ulrich Drepper <drepper@redhat.com>
* elf/dl-minimal.c (malloc): Declare _end as hidden.
(__errno_location): New function. Declare errno as hidden.
* elf/rtld.c (_dl_argc): Define as hidden.
(_dl_skip_args): Define as hidden.
(_begin, _end): Declare as hidden.
* sysdeps/generic/dl-sysdep.c (_end): Declare as hidden.
* sysdeps/generic/entry.h (_start): Declare as hidden.
* sysdeps/generic/ldsodefs.h (_dl_argc): Declare as hidden.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Declare
_dl_runtime_resolve and _dl_runtime_profile as hidden.
(RTLD_START): Use GOTOFF to access _dl_skip_args and _dl_fini.
2002-02-12 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/dl-tls.c (TLS_DTV_UNALLOCATED): Renamed from
TLS_DTV_UNALLOCATE.
(oom): New function.
(_dl_next_tls_modid): Rewrite to handle dl_tls_dtv_slotinfo_list.
(_dl_determine_tlsoffset): Likewise.
(_dl_allocate_tls): Likewise.
(__TLS_GET_ADDR): Define if not already defined.
(_dl_tls_symaddr): New function.
(allocate_and_init): New function.
(__tls_get_addr): Actually implement handling of generation counter
and deferred allocation.
* sysdeps/generic/ldsodefs.h (_rtld_global): Remove _dl_initimage_list,
add _dl_tls_dtv_slotinfo_list, _dl_tls_static_nelem, and
_dl_tls_generation.
Define TLS_SLOTINFO_SURPLUS and DTV_SURPLUS.
Declare _dl_tls_symaddr.
* sysdeps/i386/dl-tls.h: Disable __tls_get_addr handling unless
SHARED.
* include/link.h (struct link_map): Remove l_tls_nextimage and
l_tls_previmage.
* elf/dl-sym.c (_dl_sym): After successful lookup call _dl_tls_symaddr
instead of DL_SYMBOL_ADDRESS for STT_TLS symbols.
(_dl_vsym): Likewise.
* elf/rtld.c (_dl_start_final): Adjust initdtv initialization for new
layout.
(dl_main): Allow PT_TLS be present for empty segment. Remove
nextimage list handling. Instead add all modules using TLS to
dl_tls_dtv_slotinfo_list.
* elf/dl-open.c (dl_open_worker): After successfully loading all
objects add those with TLS to the dl_tls_dtv_slotinfo_list list.
* elf/dl-load.c (_dl_map_object_from_fd): If PT_TLS entry is for an
empty segment don't do anything. Remove handling of initimage list.
* elf/Versions [ld] (GLIBC_2.0): Add __libc_memalign.
(GLIBC_PRIVATE): Add _dl_tls_symaddr.
* elf/dl-minimal.c: Define __libc_memalign.
* elf/dl-support.c: Remove _dl_initimage_list. Add
_dl_tls_dtv_slotinfo_list, _dl_tls_static_nelem, and
_dl_tls_generation.
* include/stdlib.h: Declare __libc_memalign.
* elf/Makefile: Add rules to build and run tst-tls4 and tst-tls5.
* elf/tst-tls4.c: New file.
* elf/tst-tls5.c: New file.
* elf/tst-tlsmod2.c: New file.
* elf/tls-macros.h: asms using ___tls_get_addr destroy %ecx and %edx.
* elf/tst-tlsmod1.c: Don't define variables unles USE_TLS.
* elf/tst-tls1.c: Use test-skeleton.c.
* elf/tst-tls2.c: Likewise.
* elf/tst-tls3.c: Likewise.
* elf/dl-conflict.c (RESOLVE_MAP): Return NULL not 0.
* sysdeps/mips/machine-gmon.h: Update MCOUNT for current GCC behavior.
* elf/dl-deps.c (struct openaux_args): Add open_mode element.
(openaux): Pass open_mode as new last argument to _dl_map_object.
(_dl_map_object_deps): Add new argument open_mode. Initialize
open_mode element of args variable with it.
* elf/dl-open.c (dl_open_worker): Pass __RTLD_DLOPEN flag is set to
_dl_map_object_deps.
* elf/rtld.c (dl_main): Add zero as last parameter to
_dl_map_object_deps call.
* sysdeps/generic/ldsodefs.h: Adjust prototype of _dl_map_object_deps.
* elf/nodlopen2.c: New file.
* elf/nodlopenmod2.c: New file.
* elf/Makefile: Add rules to build and run nodlopen2.
* elf/tls-macros.hgg: ...here. New file.
2002-02-08 Richard Henderson <rth@redhat.com>
* elf/Makefile (tests): Add tst-tls1.
* elf/tst-tls1.c: New file.
* sysdeps/generic/dl-tls.c (_dl_determine_tlsoffset): Don't handle
alignment of TCB for now.
* elf/rtld.c (dl_main): Use p_vaddr as address of TLS
initialization image for the application itself.
loop to initialize TLS block.
2002-02-08 Ulrich Drepper <drepper@redhat.com>
* elf/rtld.c (_dl_start_final): Install DTV explicitly.
(dl_main): Move dtv/static TLS handling before relocation.
Unconditionally call _dl_tlsoffset. Call _dl_allocate_tls and
TLS_INIT_TP to allocate and install the dtv/static TLS block.
* sysdeps/generic/dl-tls.c (_dl_determine_tlsoffset): If no object
so far uses TLS initialize GL(dl_tls_static_size) and
GL(dl_tls_static_align) to account for the TCB.
(_dl_allocate_tls): New function.
* sysdeps/generic/ldsodefs.h (rtld_global): Add
_dl_initial_dtv_malloced.
* configure.in: Test for __builtin_memset more realistically.
* csu/version.c (banner): If TLS support available say so.
2002-02-07 Andreas Schwab <schwab@suse.de>
* configure.in: Fix check for -zcombreloc.
2002-02-06 H.J. Lu <hjl@gnu.org>
* config.h.in (HAVE_BUILTIN_MEMSET): New.
* configure.in: Check if __builtin_memset really works.
* elf/rtld.c (_dl_start): Check HAVE_BUILTIN_MEMSET instead of
__GNUC_PREREQ (2, 96) before using __builtin_memset.
2002-02-06 Jakub Jelinek <jakub@redhat.com>
* io/bug-ftw3.c (main): Don't try the test if root.
2002-02-06 Martin Schwidefsky <schwidefsky@de.ibm.com>
* sysdeps/unix/sysv/linux/s390/brk.c (__brk): Correct inline assembly
constraints.
* sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h (RLIMIT_LOCKS):
Add RLIMIT_LOCKS and adjust RLIMIT_NLIMITS.
* sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h (RLIMIT_LOCKS):
Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/clone.S (clone): Make clone
a weak alias for __clone.
* sysdeps/unix/sysv/linux/s390/s390-64/clone.S (clone): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/profil-counter.h: Fix typo.
* sysdeps/unix/sysv/linux/s390/s390-64/Makefile: Add framestate.
* sysdeps/unix/sysv/linux/s390/s390-64/Versions: New file.
* sysdeps/unix/sysv/linux/s390/s390-64/mmap.S (__mmap64): Make __mmap
a weak alias for __mmap64.
* sysdeps/mips/atomicity.h (exchange_and_add): Not use branch likely.
* sysdeps/unix/sysv/linux/mips/sys/tas.h (_test_and_set): Likewise.
* sysdeps/generic/dl-tls.c: Don't read TLS header if TLS is not needed.
2002-02-06 Ulrich Drepper <drepper@redhat.com>
* Versions.def [ld]: Add GLIBC_2.3.
* elf/Versions [ld]: Add __tls_get_addr to GLIBC_2.3.
* elf/Makefile (dl-routines): Add dl-tls.
(distribute): Add dl-tls.h.
* sysdeps/generic/ldsodefs.h (struct rtld_global): Remove
_dl_tls_module_cnt, add _dl_tls_max_dtv_idx and _dl_tls_dtv_gaps.
Add prototypes for _dl_next_tls_modid and _dl_determine_tlsoffset.
* elf/dl-load.c (_dl_map_object_from_fd): Store alignment requirement
along with the other info in the link map. Change queueing of init
images for double linked list. Use _dl_next_tls_modid to compute
l_tls_modid.
* elf/rtld.c (_dl_start_final): Store alignment requirement
along with the other info in rtld map and executable map.
(dl_main): Add ld.so to the init image list if necessary. Compute
final module ID with _dl_next_tls_modid.
* include/link.h (struct link_map): Add l_tls_previmage and
l_tls_align.
* eld/dl-support.c: Define _dl_tls_max_dtv_idx and _dl_tls_dtv_gaps.
* sysdeps/i386/elf/Versions: New file.
* sysdeps/generic/dl-tls.c: New file.
* sysdeps/generic/dl-tls.h: New file.
* sysdeps/i386/dl-tls.h: New file.
attribute((packed)) to counter stupid people misusing gcc options.
* elf/rtld.c (_dl_start): Fill TLS values in link map for rtld.
* include/link.h (struct link_map): Add various members for TLS
information.
* sysdeps/generic/ldsodefs.h (struct rtld_global): Remove
_rtld_tlsoffset, add _dl_initimage_list.
* sysdeps/i386/dl-lookupcfg.h: New file.
* sysdeps/i386/dl-machine.h (elf_machine_rel): Implement missing
TLS relocation. When using TLS we now use RESOLVE_MAP.
(elf_machine_rela): Use RESOLVE_MAP instead of RESOLVE_MAP if TLS
is used.
* sysdeps/generic/dl-cache.c (_dl_cache_libcmp): Mark as possibly
unused.
* elf/rtld.c (_dl_start_final): Allocate TLS and initialize
thread-pointer as soon as possible.
* sysdeps/generic/ldsodefs.h: Include <tls.h>. Define first TLS
elements in rtld_global.
* sysdeps/generic/tls.h: New file.
* elf/Makefile (distribute): Add tls.h.
* sysdeps/i386/dl-machine.h (elf_machine_rel): Add support for TLS
relocations. Not complete yet.
* resolv/resolv.h: Allow user to define __need_res_state and only
define __res_start structure then.
* include/resolv.h: Only declare functions if _RESOLV_H_ is defined.
2002-02-03 Andreas Schwab <schwab@suse.de>
* sysdeps/posix/readv.c: Use ssize_t for bytes_read.
* sysdeps/posix/writev.c: Use ssize_t for bytes_written. Fix comment.
2002-02-03 Thorsten Kukuk <kukuk@suse.de>
* sysdeps/posix/writev.c: Check for ssize_t overflow, don't use
alloca if the memory reqirements are too high.
2002-02-03 Ulrich Drepper <drepper@redhat.com>
* elf/dl-load.c (decompose_rpath): Avoid using strstr.
* elf/dl-minimal.c (_strerror_r): Use _itoa instead of _itoa_word since
the former is available anyway and speed isn't important here.
* elf/dl-misc.c (_dl_debug_vdprintf): Likewise.
* elf/dl-version.c (match_symbol): Likewise.
(_dl_check_map_versions): Likewise.
* elf/rtld.c (process_envvars): Likewise.
(print_statistics): Likewise.
* sysdeps/generic/dl-sysdep.c (_dl_show_auxv): Likewise.
* elf/dl-minimal.c (_itoa): Always define it. Make it work for all
bases. Add assert to catch uses of unimplemented features.
(__strsep): Add assert to catch uses of unimplemented features.
* elf/dl-object.c (_dl_new_object): Don't use rawmemchr. Use strchr
and avoid inline optimization.
* elf/rtld.c (process_envvars): Likewise.
* elf/dl-open.c: Don't include <stdio-common/_itoa.h>.
* elf/dl-profile.c (_dl_start_profile): Help compiler to avoid ffs.
* elf/rtld.c (dl_main): Avoid strsep inline optimization.
* stdio-common/_itoa.h: Minor simplifications of the code.
* stdio-common/_itoa.c: Likewise.
* elf/dl-reloc.c (_dl_relocate_object): Use _dl_debug_printf
instead of _dl_printf for debugging info output.
* sysdeps/mips/atomicity.h (exchange_and_add): Use branch likely.
* elf/dl-object.c (_dl_new_object): Avoid using strrchr. We have
more information.
* elf/rtld.c (dl_main): Avoid strrchr.
* sysdeps/unix/sysv/linux/dl-origin.c (_dl_get_origin): Use the
result of readlink. Search from the back for '/'.
2002-02-01 Ulrich Drepper <drepper@redhat.com>
* elf/rtld.c (_dl_start): Mark as internal_function.
* sysdeps/i386/dl-machine.h (RTLD_START): Pass parameter for _dl_start
in register.
(elf_machine_rel): Cleanup and minor optimization for RTLD_BOOTSTRAP.
General pretty printing.
2001-12-11 Jakub Jelinek <jakub@redhat.com>
* elf/Makefile (dl-routines): Add conflict.
(rtld-ldscript-in, rtld-ldscript, rtld-parms): Remove.
(ld.so): Add _begin local symbol.
* elf/elf.h (DT_VALTAGIDX, DT_VALNUM, DT_ADDRTAGIDX, DT_ADDRNUM):
Define.
* elf/dl-deps.c (_dl_build_local_scope): New.
(_dl_map_object_deps): If LD_TRACE_PRELINKING, compute local scopes
of all libraries.
* elf/do-rel.h (VALIDX): Define.
(elf_dynamic_do_rel): If ELF_MACHINE_PLT_REL is defined, don't do
lazy binding for RELA. If DT_GNU_PRELINKED, DT_RELACOUNT relocations
can be skipped.
* elf/dl-conflict.c: New file.
* elf/dl-lookup.c (_dl_debug_bindings): New.
(_dl_lookup_symbol): Use _dl_debug_bindings. Reference_name is always
non-NULL.
(_dl_lookup_symbol_skip): Likewise.
(_dl_lookup_versioned_symbol): Likewise.
(_dl_lookup_versioned_symbol_skip): Likewise.
* elf/dl-runtime.c (PLTREL): If ELF_MACHINE_PLT_REL is defined,
define to ElfW(Rel).
* elf/dynamic-link.h (elf_get_dynamic_info): Record selected dynamic
tags in the DT_VALRNGLO..DT_VALRNGHI and DT_ADDRRNGLO..DT_ADDRRNGHI
ranges.
Don't adjust address dynamic tags if l_addr is 0.
* elf/rtld.c (_dl_trace_prelink, _dl_trace_prelink_map): New variables.
(_dl_start): Skip ELF_DYNAMIC_RELOCATE if ld.so is prelinked.
(VALIDX, ADDRIDX): Define.
(_dl_start_final): Initialize _dl_rtld_map's l_map_start and l_map_end.
(dl_main): Print library list for LD_TRACE_PRELINKING.
If prelinking information can be used, skip relocating libraries and
call _dl_resolve_conflicts instead.
(process_envvars): Handle LD_TRACE_PRELINKING envvar.
* elf/dl-load.c (_dl_map_object): Don't create fake libs
if LD_TRACE_PRELINKING.
* include/link.h (struct link_map) [l_info]: Add DT_VALNUM
+ DT_ADDRNUM.
* sysdeps/generic/ldsodefs.h (_dl_trace_prelink_map): New declaration.
(DL_DEBUG_PRELINK): Define.
(_dl_resolve_conflicts): Add prototype.
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): Reinitialize
.plt for prelinked libraries where prelinking info cannot be used.
(elf_machine_rela): If relocating R_ALPHA_JMP_SLOT in .gnu.conflict
section, use RESOLVE_CONFLICT_FIND_MAP to find out reloc's link_map.
* sysdeps/arm/bits/link.h: New file.
* sysdeps/arm/dl-machine.h (elf_machine_runtime_setup): Save original
content of .got[1].
(ELF_MACHINE_NO_RELA): Only define if RTLD_BOOTSTRAP.
(ELF_MACHINE_PLT_REL): Define.
(elf_machine_rela, elf_machine_rela_relative): New.
(elf_machine_lazy_rel): Reinitialize R_ARM_JUMP_SLOT address instead
of adjusting it if prelinked and prelinking cannot be used.
* sysdeps/i386/bits/link.h: New file.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Save original
content of .got[1].
(ELF_MACHINE_NO_RELA): Only define if RTLD_BOOTSTRAP.
(ELF_MACHINE_PLT_REL): Define.
(elf_machine_rela, elf_machine_rela_relative): New.
(elf_machine_lazy_rel): Reinitialize R_386_JUMP_SLOT address instead
of adjusting it if prelinked and prelinking cannot be used.
* sysdeps/powerpc/dl-machine.h (elf_machine_rela): If relocating
conflicts, skip finaladdr computation. Use RESOLVE_CONFLICT_FIND_MAP
to find out map for R_PPC_JMP_SLOT relocs.
* sysdeps/sparc/sparc32/dl-machine.h (VALIDX): Define.
(OPCODE_BA): Define.
(elf_machine_runtime_setup): Reinitialize .plt for prelinked
libraries where prelinking info cannot be used.
(sparc_fixup_plt): Renamed from elf_machine_fixup_plt.
(elf_machine_fixup_plt): Call sparc_fixup_plt.
(elf_machine_rela): Set value to 0 if relocating conflicts.
Call sparc_fixup_plt for R_SPARC_JMP_SLOT.
* sysdeps/sparc/sparc64/dl-machine.h (VALIDX): Define.
(sparc64_fixup_plt): Fix a typo.
(elf_machine_rela): Set value to 0 if relocating conflicts.
Handle R_SPARC_JMP_SLOT relocs when relocating conflicts.
(elf_machine_runtime_setup): Reinitialize .plt for prelinked
libraries where prelinking info cannot be used.
* sysdeps/sh/bits/link.h: New file.
* sysdeps/sh/dl-machine.h (elf_machine_runtime_setup): Save original
content of .got[1].
(elf_machine_lazy_rel): Reinitialize R_SH_JMP_SLOT address instead
of adjusting it if prelinked and prelinking cannot be used.
* sysdeps/s390/s390-32/bits/link.h: New file.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_runtime_setup):
Save original content of .got[1].
(elf_machine_lazy_rel): Reinitialize R_390_JMP_SLOT address instead
of adjusting it if prelinked and prelinking cannot be used.
* sysdeps/s390/s390-64/bits/link.h: New file.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_runtime_setup):
Save original content of .got[1].
(elf_machine_lazy_rel): Reinitialize R_390_JMP_SLOT address instead
of adjusting it if prelinked and prelinking cannot be used.
* sysdeps/x86_64/bits/link.h: New file.
* sysdeps/x86_64/dl-machine.h (elf_machine_runtime_setup):
Save original content of .got[1].
(elf_machine_lazy_rel): Reinitialize R_X86_64_JMP_SLOT address instead
of adjusting it if prelinked and prelinking cannot be used.
* elf/elf.h: Add dynamic tag definitions for prelinking.
* elf/rtld.c (process_envvars): Avoid using array of string pointers.
Rewrite code to remove environment varables for SUID binaries.
Small optimization in LD_PROFILE handling.
* sysdeps/generic/unsecvars.h: Adjust format for process_envvars
changes.
* sysdeps/unix/sysv/linux/i386/dl-librecon.h: Likewise.
* sysdeps/generic/dl-sysdep.c: Don't initialize _dl_cpuclock_offset.
2001-10-26 Ulrich Drepper <drepper@redhat.com>
* string/strxfrm.c [USE_IN_EXTENDED_LOCALE_MODEL]: Correctly get
nrules value.
2001-10-24 H.J. Lu <hjl@gnu.org>
* sysdeps/generic/bits/dlfcn.h (DL_CALL_FCT): Cast to void *.
Use __BEGIN_DECLS/__END_DECLS around prototypes.
* sysdeps/mips/bits/dlfcn.h (DL_CALL_FCT): Likewise.
2001-10-21 Jim Meyering <meyering@lucent.com>
* malloc/obstack.c (_): Honor the setting of ENABLE_NLS. Otherwise,
this code would end up calling gettext even in packages built
with --disable-nls.
* posix/getopt.c (_): Likewise.
* posix/regex.c (_): Likewise.
2001-10-26 Ulrich Drepper <drepper@redhat.com>
* resolv/gethnamaddr.c (gethostbyaddr): Use ip6.addr for reverse
lookup not ip6.int.
* resolv/nss_dns/dns-host.c (_nss_dns_gethostbyaddr_r): Likewise.
Reported by Martin.v.Loewis@t-online.de [PR libc/2598].
2001-10-19 Jakub Jelinek <jakub@redhat.com>
* misc/sys/cdefs.h (__attribute_used__): Define.
* elf/rtld.c (_dl_start): Add __attribute_used__.
* elf/dl-runtime.c (fixup, profile_fixup): Likewise.
2001-08-31 Richard Henderson <rth@redhat.com>
* elf/dl-support.c (_dl_cpuclock_offset): Protect with NONAVAIL.
(HP_TIMING_AVAIL): Set to HP_SMALL_TIMING_AVAIL if present.
* elf/rtld.c (HP_TIMING_AVAIL): Likewise.
(print_statistics): Make scalar unsigned long long.
* sysdeps/alpha/hp-timing.h: New file.
2001-08-31 Jakub Jelinek <jakub@redhat.com>
* stdio-common/perror.c (perror): Save errno early, pass it
down to perror_internal.
(perror_internal): Add errnum argument.
2001-08-31 Jakub Jelinek <jakub@redhat.com>
* sysdeps/alpha/dl-machine.h (elf_machine_rela): Remove unused code.
Don't add old memory content for R_ALPHA_REFQUAD.
2001-08-24 Ulrich Drepper <drepper@redhat.com>
* elf/rtld.c (print_statistics): Printf % after percent values.
* elf/dl-misc.c (_dl_debug_vdprintf): Implement %%.
* elf/dl-lookup.c (_dl_lookup_symbol): If we use the cache we
don't have to compute the hash value and initialize current_value.
Move reference_name variable to where it is needed.
(_dl_lookup_versioned_symbol): Likewise.
2001-08-11 Ulrich Drepper <drepper@redhat.com>
* malloc/malloc.c (ptmalloc_init): Don't call getenv five times.
Instead use new function next_env_entry which iterates over the
environment once.
* sysdeps/arm/dl-machine.h (elf_machine_runtime_setup): Only set
_dl_profile_map for the right object.
* elf/dl-reloc.c (_dl_relocate_object): Allocate l_reloc_result
only if consider_profiling is != 0, not if _dl_profile != NULL.
* sysdeps/generic/dl-environ.c (_dl_next_ld_env_entry): Optimize a bit.
Now returns pointer to first character set "LD_".
* elf/rtld.c (process_envvars): Adjust for change above.
* sysdeps/unix/sysv/linux/dl-librecon.h (EXTRA_LD_ENVVARS): Likewise.
* sysdeps/unix/sysv/linux/i386/dl-librecon.h (EXTRA_LD_ENVVARS):
Likewise.
2001-08-10 Wolfram Gloger <wg@malloc.de>
* malloc/malloc.c (grow_heap): Use mmap() rather than mprotect()
to allocate new memory, for better performance with Linux-2.4.x.
2001-06-07 David Mosberger <davidm@hpl.hp.com>
* sysdeps/ia64/dl-symaddr.c (_dl_symbol_address): Update call to
__ia64_make_fptr() for new interface.
(_dl_function_address): Remove.
* sysdeps/ia64/dl-machine.h (IA64_BOOT_FPTR_TABLE_LEN): Rename
from IA64_BOOT_FPTR_SIZE and reduce its value from 256 to 200.
(struct ia64_fdesc): Rename from struct ia64_fptr and drop "next"
pointer. Rename member "func" to "ip".
(struct ia64_fdesc_table): New type.
(__ia64_make_fptr): Change prototype.
(__ia64_init_bootstrap_fdesc_table): New function.
(ELF_MACHINE_BEFORE_RTLD_RELOC): New macro.
(__boot_ldso_fptr): Removed.
(__fptr_next): Removed.
(__fptr_root): Removed.
(__fptr_count): Removed.
(TRAMPOLINE_TEMPLATE): Fix typo in comment. Don't use multi-line
strings to avoid warning from gcc3.
(RTLD_START): Don't use multi-line strings.
(ELF_MACHINE_START_ADDRESS): Use DL_STATIC_FUNCTION_ADDRESS.
(elf_machine_fixup_plt): Update the code entry point in the
function descriptor through a "volatile" pointer to ensure proper
write ordering.
(elf_machine_rela): Simplify handling of FPTR relocs: always call
__ia64_make_fptr().
* sysdeps/ia64/dl-lookupcfg.h (DL_AUTO_FUNCTION_ADDRESS): New macro.
(DL_STATIC_FUNCTION_ADDRESS): Likewise.
(DL_DT_INIT_ADDRESS): Use DL_AUTO_FUNCTION_ADDRESS.
(DL_DT_FINI_ADDRESS): Likewise.
* sysdeps/ia64/dl-fptr.c: Rewrite for better scalability and to
avoid deadlocks.
* include/link.h: Add member machine specific "l_mach" member to
link_map.
* sysdeps/generic/bits/link.h: New file.
* sysdeps/ia64/bits/link.h: Likewise.
* elf/rtld.c (_dl_start): Fix typo in comment.
(_dl_start_final): Copy new "l_mach" member from temporary to
final bootstrap map.
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.
2001-05-20 Bruno Haible <haible@clisp.cons.org>
* iconvdata/cp1255.c: Completely rewritten.
* iconvdata/Makefile (gen-8bit-gap-modules): Remove cp1255.
* iconvdata/testdata/WINDOWS-1255: New file.
* iconvdata/testdata/WINDOWS-1255..UTF8: New file.
* iconvdata/TESTS: Add WINDOWS-1255 test.
* iconvdata/CP1255.irreversible: New file.
2001-05-20 Bruno Haible <haible@clisp.cons.org>
* iconvdata/cp1258.c: Completely rewritten.
* iconvdata/Makefile (gen-8bit-gap-modules): Remove cp1258.
* iconvdata/testdata/WINDOWS-1258: New file.
* iconvdata/testdata/WINDOWS-1258..UTF8: New file.
* iconvdata/TESTS: Add WINDOWS-1258 test.
* iconvdata/tst-table-from.c (try): Reset the iconv descriptor before
the main call, and flush it afterwards.
(utf8_decode): Return a string, possibly containing several Unicode
characters.
(main): Update all utf8_decode calls.
* iconvdata/CP1258.irreversible: New file.
2001-05-20 Bruno Haible <haible@clisp.cons.org>
* iconv/gconv.c (__gconv): For flush without output, pass do_flush = 2.
* iconv/skeleton.c: Distinguish do_flush = 1 and do_flush = 2. In the
first case, set outbuf, outstart, outend, and call PREPARE_LOOP before
EMIT_SHIFT_TO_INIT; then pass the output produced by this step down to
the next step. In the second case, clear the state without calling
EMIT_SHIFT_TO_INIT.
* iconvdata/ibm930.c (EMIT_SHIFT_TO_INIT): Use outbuf instead of
data->__outbuf, and outend instead of data->__outbufend.
* iconvdata/ibm933.c (EMIT_SHIFT_TO_INIT): Likewise.
* iconvdata/ibm935.c (EMIT_SHIFT_TO_INIT): Likewise.
* iconvdata/ibm937.c (EMIT_SHIFT_TO_INIT): Likewise.
* iconvdata/ibm939.c (EMIT_SHIFT_TO_INIT): Likewise.
* iconvdata/iso-2022-cn.c (EMIT_SHIFT_TO_INIT): Likewise.
* iconvdata/iso-2022-cn-ext.c (EMIT_SHIFT_TO_INIT): Likewise.
* iconvdata/iso-2022-jp.c (EMIT_SHIFT_TO_INIT): Likewise.
* iconvdata/iso-2022-kr.c (EMIT_SHIFT_TO_INIT): Likewise.
* iconvdata/utf-7.c (EMIT_SHIFT_TO_INIT): Likewise.
2001-05-21 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (dl_main): Compute l_map_end for the main program.
* elf/dl-sym.c (_dl_sym): Don't check for l_addr == 0.
If match == _dl_loaded, caller can still come from the main program.
(_dl_vsym): Likewise.
* elf/dl-open.c (dl_open_worker): Don't check for l_addr == 0.
* elf/dl-error.c (_dl_signal_error): Change NULL objname into "".
* elf/restest2.c: New test.
* elf/Makefile (tests): Add restest2.
(restest2, LDFLAGS-restest2): Add rules.
2001-04-10 Andreas Schwab <schwab@suse.de>
* math/libm-test.inc (csinh_test): Don't require the invalid
exception for csinh (x + iNaN), but make it optional.
2001-04-09 David Mosberger <davidm@hpl.hp.com>
* sysdeps/ia64/elf/start.S (_start): Add unwind directives.
* sysdeps/generic/entry.h [!__ASSEMBLY__]: Declare _start.
* sysdeps/ia64/elf/entry.h: New file.
* sysdeps/unix/sysv/linux/mips/entry.h [!__ASSEMBLY__]: Declare
__start.
* elf/rtld.c: Don't declare ENTRY_POINT. Use ENTRY_POINT instead
of &ENTRY_POINT.
* sysdeps/generic/dl-sysdep.c: Likewise.
* sysdeps/mach/hurd/dl-sysdep.c: Likewise.
* sysdeps/ia64/elf/start.S: Save base address of register backing
store in __libc_ia64_register_backing_store_base.
options after $(build-module), which is no longer a single command.
(LDFLAGS-link-rpcuserlibs): New variable to hold those options.
(LDFLAGS-libmachuser-link.so, LDFLAGS-libhurduser-link.so): New
variables using it. Reported by Mark Kettenis <kettenis@gnu.org>.
2001-03-11 Roland McGrath <roland@frob.com>
* elf/rtld.c (dl_main): Add cast to quiet warning.
* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
* iconv/gconv_conf.c (__gconv_get_path): Likewise.
(__gconv_read_conf): Likewise.
* iconv/gconv_db.c (gen_steps): Likewise.
(__gconv_find_transform): Likewise.
* locale/programs/charmap-dir.c (fopen_uncompressed): Likewise.
(fopen_uncompressed): Use const in second argument's type.
2001-03-11 Roland McGrath <roland@frob.com>
* sysdeps/mach/hurd/dl-sysdep.c (__writev): New function.
* mach/mach_error.h: Fix ancient #endif syntax.
* hurd/hurdmalloc.c: Likewise.
* sysdeps/generic/atomicity.h (exchange_and_add, atomic_add,
compare_and_swap): Add volatile qualifier to first arg, to bring
these prototypes in line with all the other implementations.
Add a #warning to remind the builder that these are not atomic.
2001-03-04 Roland McGrath <roland@frob.com>
* hurd/vpprintf.c (vpprintf) [USE_IN_LIBIO]: Use innermore first
member of TEMP_F so its type is _IO_FILE * as expected.
* hurd/fopenport.c (seekio): Conditionalize type of POS argument
on [USE_IN_LIBIO]. Check the value for overflow, since for libio
it might exceed off_t's range.
2001-02-25 Roland McGrath <roland@frob.com>
* sysdeps/mach/hurd/sysd-stdio.c (__stdio_reopen): Use prototype.
* sysdeps/unix/bsd/getpt.c (__posix_openpt): Likewise.
* sysdeps/mach/hurd/i386/intr-msg.h (SYSCALL_EXAMINE): Make this a
macro instead of an inline function,
(MSG_EXAMINE): Likewise.
* hurd/hurd/ioctl.h (_HURD_HANDLE_IOCTLS_1): Remove extraneous ##.
* hurd/get-host.c: Include <string.h> for decls of built-ins.
* hurd/hurdchdir.c: Likewise.
* sysdeps/mach/hurd/i386/sigreturn.c: Likweise.
* sysdeps/mach/hurd/opendir.c: Likewise.
* mach/mach_init.c: Include <unistd.h> for _exit decl.
* mach/errsystems.awk: Give output file a trailing newline.
* mach/Machrules (MIG): Prepend CC='${CC}' to the mig command, so that
the script will use our compiler for the cpp stage.
With --enable-all-warnings we get a whole bunch of warnings,
and these are just a few fixes; there are more needed to silence it.
* mach/mach/mig_support.h (__mig_strncpy, mig_strncpy): Add extern
decls before extern inline defns to quiet gcc warning.
* hurd/hurd/threadvar.h (__hurd_threadvar_location_from_sp): Likewise.
* sysdeps/mach/i386/machine-sp.h (__thread_stack_pointer): Likewise.
2001-03-07 David Mosberger <davidm@hpl.hp.com>
* sysdeps/ia64/bits/fenv.h (FE_NONIEEE_ENV): New macro.
2001-03-07 Jes Sorensen <jes@linuxcare.com>
* sysdeps/unix/sysv/linux/ia64/ioperm.c (_ioperm): Remove unused
variables addr & len.
2001-02-22 Jes Sorensen <jes@linuxcare.com>
* sysdeps/ia64/fpu/feenablxcpt.c (feenableexcept): Remove
punctuation in asm constraint.
2001-03-07 Mark Kettenis <kettenis@gnu.org>
* resolv/netdb.h [__USE_GNU]: Define __need_timespec and include
<time.h> to get definition of `struct timespec'.
2001-03-08 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (dl_main): If tracing, warn about undefined symbols if
LD_WARN=1, not if LD_WARN is unset.
2001-03-07 Andreas Schwab <schwab@suse.de>
* elf/ldconfig.h: Moved to ...
* sysdeps/generic/ldconfig.h: ... here.
* sysdeps/unix/sysv/linux/i386/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/m68k/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/ia64/ldconfig.h: New file.
* elf/readlib.c (interpreters, known_libs): Use
SYSDEP_KNOWN_INTERPRETER_NAMES and SYSDEP_KNOWN_LIBRARY_NAMES
instead of hard coding old names.
* Versions.def: Add libanl definition.
* shlig-versions: Add entry for libanl.
* resolv/Makefile (distribute): Add gai_misc.h and ga_test.c.
(routines): Add gai_sigqueue.
(extra-libs): Add libanl.
(libanl-routines): New variable.
Add rules to build libanl and ga_test.
* resolv/Versions [libc] (GLIBC_2.2.3): Add __gai_sigqueue.
[libanl]: New library.
* resolv/netdb.h: Add definitions for libanl.
* resolv/getaddrinfo_a.c: New file.
* resolv/gai_cancel.c: New file.
* resolv/gai_error.c: New file.
* resolv/gai_misc.c: New file.
* resolv/gai_misc.h: New file.
* resolv/gai_notify.c: New file.
* resolv/gai_suspend.c: New file.
* resolv/ga_test.c: New file.
* sysdeps/generic/gai_sigqueue.c: New file.
* sysdeps/unix/sysv/linux/gai_sigqueue.c: New file.
* sysdeps/generic/bits/siginfo.h: Allow __need_sigevent_t being defined
and provide only that definition.
* sysdeps/unix/sysv/linux/alpha/bits/siginfo.h: Likewise.
* sysdeps/unix/sysv/linux/bits/siginfo.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/siginfo.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h: Likewise.
* rt/aio_misc.c: Fix typos in comments.
* rt/lio_listio.c: Pretty printing. Little optimization in request
list handling.
* elf/rtld.c: Remove commented out code.
* elf/rtld.c (process_envvars): Call __strtoul_internal instead of
strtoul.
* elf/dl-minimal.c (strtol, __strtol_internal, strtoul): Removed.
(__sigjmp_save): Set __mask_was_saved to zero since we don't save
anything.
* dlfcn/eval.c (__strtol_internal): Define here.
(eval): Use __strtol_internal instead of strtol.
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.
* include/link.h (struct link_map): New bit field l_faked.
* elf/dl-deps.c: Use l_faked field in struct link_map instead of
the magic l_opencount==0.
* elf/dl-load.c: Likewise.
* elf/dl-version.c: Likewise.
* elf/rtld.c: Likewise.
* elf/rtld.c (_dl_dynamic_weak): Set to 1 by default for now.
* elf/dl-support.c: Likewise.
necessary. Move includes of POSIX and Unix limits files to the end.
2000-08-26 Ulrich Drepper <drepper@redhat.com>
* elf/Makefile (distribute): Add unloadmod.c, reldepmod1.c,
reldepmod2.c, reldepmod3.c, and reldepmod4.c.
(tests): Add unload, reldep, reldep2, and reldep3.
(modules-names): Add unloadmod, reldepmod1, reldepmod2, reldepmod3,
and reldepmod4.
Add rules to build and run unload, reldep, reldep2, and reldep3.
* elf/dl-lookup.c (_dl_lookup_symbol): Add new parameter explicit.
Don't create relocation dependency if it is nonzero.
(_dl_lookup_symbol_skip): Remove relocation dependency stuff. This
can never happen here.
(_dl_lookup_versioned_symbol): Add new parameter explicit.
Don't create relocation dependency if it is nonzero.
(_dl_lookup_versioned_symbol_skip): Remove relocation dependency
stuff. This can never happen here.
* sysdeps/generic/ldsodefs.h: Change prototypes.
* elf/dl-reloc.c (RESOLVE_MAP): Pass 0 in explicit parameter to
_dl_lookup_up and _dl_lookup_versioned_symbol.
(RESOLV): Likewise.
* elf/dl-runtime.c (fixup): Likewise.
(profile_fixup): Likewise.
* elf/dl-libc.c (do_dlsym): Pass 1 in explicit parameter to
_dl_lookup_symbol.
* elf/dl-symbol.c (_dl_symbol_value): Likewise.
* elf/rtld.c (dl_main): Likewise.
* elf/dl-sym.c (_dl_sym): Pass 1 in explicit parameter to
_dl_lookup_symbol if handle is not RTLD_DEFAULT. Always compute
and pass down the caller map.
(_dl_vsym): Likewise.
* elf/reldep.c: New file.
* elf/reldep2.c: New file.
* elf/reldep3.c: New file.
* elf/reldepmod1.c: New file.
* elf/reldepmod2.c: New file.
* elf/reldepmod3.c: New file.
* elf/reldepmod4.c: New file.
* elf/unload.c: New file.
* elf/unloadmod.c: New file.
* elf/do-lookup.h: Remove unused undef_name parameter.
* elf/dl-lookup.c: Adjust callers.
2000-08-19 Ulrich Drepper <drepper@redhat.com>
* elf/Versions [ld] (GLIBC_2.2): Export _dl_check_map_versions.
* elf/dl-deps.c (_dl_map_object_deps): If object was dependency of
a dynamically loaded object remove old l_initfini list.
* elf/dl-libc.c (free_mem): Used as __libc_subfreeres callback to
remove some dynamically allocated memory blocks in the dynamic
loading data structures.
* elf/dl-load.c (add_name_to_object): Initialize dont_free to 0.
* elf/dl-open.c (dl_open_workder): Don't call _dl_check_all_versions.
Instead call _dl_check_map_versions only for the dependencies.
* elf/rtld.c: Avoid unneccessary initializations. Mark l_libname
information of initial objects as not free-able.
* sysdeps/generic/ldsodefs.h (struct libname_list): Add dont_free
element.
* elf/filter.c: Call mtrace.
* elf/restest1.c: Likewise. Close the objects.
* elf/loadtest.c: Call mtrace. Check result of dlclose. Print more
debug information.
* elf/constload1.c: Add comment explaining not freed memory.
* 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.
* elf/Versions (ld): Export _dl_out_of_memory for GLIBC_2.2.
* dlfcn/dlerror.c (dlerror): Don't free the error string if it is the
report that we are out of memory.
* elf/dl-deps.c (_dl_map_object_deps): Likewise.
* elf/dl-libc.c (dlerror_run): Likewise.
* elf/dl-open.c (_dl_open): Likewise.
* elf/rtld.c (dl_main): Likewise.
* elf/dl-error.c: Define _dl_out_of_memory.
(_dl_signal_error): Return _dl_signal_error if we cannot duplicate
the error string.
* sysdeps/generic/ldsodefs.h: Declare _dl_out_of_memory.
* dlfcn/dlerror.c (free_key_mem): Also free error string.
* iconv/loop.c: Fix comment.
2000-07-09 Mark Kettenis <kettenis@gnu.org>
* elf/rtld.c (dl_main): Move call to __libc_check_standard_fds...
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): ... to here.
2000-07-10 Ulrich Drepper <drepper@redhat.com>
* include/features.h: Include ISO C99 features if the compiler used
is an ISO C99 compiler.
Patch by Joseph S. Myers <jsm28@cam.ac.uk>.
2000-07-08 Mark Kettenis <kettenis@gnu.org>
* iconv/gconv_conf.c: Include <bits/libc-lock.h>.
* dlfcn/dlfcn.h: Pretty print dladdr declaraction.
* elf/rtld.c (process_envvars): Recognize LD_DYNAMIC_WEAK.
(_dl_dynamic_weak): New variable.
* elf/dl-support.c: Likewise.
* sysdeps/generic/ldsodefs.h: Declare _dl_dynamic_weak.
* elf/do-lookup.h: If we find a weak definition treat it like a
normal symbol unless _dl_dynamic_weak is nonzero. In the latter
case treat it like before.
2000-05-05 Ulrich Drepper <drepper@redhat.com>
* elf/dl-load.c (_dl_map_object_from_fd): Little of computation of
parameter to mprotect and for variable assignments.
2000-05-03 Jes Sorensen <jes@linuxcare.com>
* sysdeps/generic/ldsodefs.h (LOOKUP_VALUE_ADDRESS): Check the
validity of map before dereferencing it.
* elf/dl-reloc.c (RESOLVE_MAP): Define.
2000-05-02 Jes Sorensen <jes@linuxcare.com>
* elf/dl-runtime.c (fixup): Add the value returned in the symbol
lookup to the arguments to elf_machine_fixup_plt().
* sysdeps/ia64/dl-machine.h (elf_machine_fixup_plt): Add Link_map
of the symbol being resolved to input argument list and make the
function return the pointer to the reloc.
* sysdeps/alpha/dl-machine.h (elf_machine_fixup_plt): Change
return valuie to lookup_t and return the value.
* sysdeps/arm/dl-machine.h (elf_machine_fixup_plt): Likewise.
* sysdeps/generic/dl-machine.h (elf_machine_fixup_plt): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_fixup_plt): Likewise.
* sysdeps/m68k/dl-machine.h (elf_machine_fixup_plt): Likewise.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_fixup_plt): Likewise.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_fixup_plt): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_fixup_plt): Likewise.
Make it an inline function returning value after calling
__elf_machine_fixup_plt().
* elf/dl-sym.c (_dl_vsym): Use DL_SYMBOL_ADDRESS() to obtain the
symbol address.
* elf/dl-symbol.c (_dl_symbol_value): Use LOOKUP_VALUE_ADDRESS to
obtain the symbol address.
* sysdeps/generic/ldsodefs.h: Add generic DL_SYMBOL_ADDRESS() macro
depending on the definition of ELF_FUNCTION_PTR_IS_SPECIAL.
* sysdeps/ia64/dl-machine.h: Add DL_SYMBOL_ADDRESS() macro calling
_dl_symbol_address() - this way DL_SYMBOL_ADDRESS() turns into an
inline on non ia64.
2000-04-28 Jes Sorensen <jes@linuxcare.com>
* elf/dl-runtime.c (fixup): Use the portable macros to get the
symbol address of an object.
* elf/dl-runtime.c (fixup-profile): Use the portable macros to get
the symbol address of an object.
* elf/dl-libc.c (struct do_dlsym_args): Change loadbase to a lookup_t.
* elf/dl-lookup.c (_dl_lookup_symbol): Likewise.
(_dl_lookup_symbol_skip): Likewise.
(_dl_lookup_versioned_symbol): Likewise.
(_dl_lookup_versioned_symbol_skip): Likewise.
2000-04-27 Jes Sorensen <jes@linuxcare.com>
* elf/rtld.c (_dl_start): Get the function pointer return address
via _dl_start_address for architectures that need a function
pointer descriptor rather than just a pointer (ia64).
* sysdeps/generic/dl-lookupcfg.h: New file.
* sysdeps/ia64/dl-lookupcfg.h: New file.
* sysdeps/ia64/dl-machine.h: New file.
* sysdeps/ia64/dl-symaddr.c: New file.
* sysdeps/ia64/dl-fptr.c: New file.
* elf/elf.h: Add IA-64 specific definitions.
* sysdeps/generic/hp-timing.h (HP_TIMING_NONAVAIL): Define to
signal timing is not really implemented.
2000-04-17 Andreas Jaeger <aj@suse.de>
* elf/rtld.c (process_dl_debug): Mention statistics in help message.
2000-04-17 Jakub Jelinek <jakub@redhat.com>
* Makefile (install): Use slibdir and libdir instead of inst_slibdir
and inst_libdir.
2000-04-17 Ulrich Drepper <drepper@redhat.com>
* elf/dl-version.c (_dl_check_map_versions): New argument trace_mode.
Before testing versions check that we actually loaded the object
and whether we are in trace mode. If not loaded during tracing don't
test versions in this object.
(_dl_check_all_versions): Take new parameter and pass to
_dl_check_map_versions.
* sysdeps/generic/ldsodefs.h: Update prototypes for
_dl_check_all_versions and _dl_check_map_versions.
* elf/rtld.c (struct version_check_args): Add dotrace.
(version_check_doit): Pass args->dotrace to _dl_check_all_versions.
(dl_main): Pass info about trace mode to version_check_doit.
* elf/dl-open.c (dl_open_worker): Pass zero as new argument to
_dl_check_all_versions.
* manual/users.texi (XPG Functions): Document utmpxname, getutmp,
and getutmpx.
Patch by Bryan Henderson <bryanh@giraffe-data.com>.
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.
* elf/dl-deps.c (_dl_map_object_deps): Change return type and remove
last parameter. Move code to add map to global scope from here...
* elf/dl-open.c (dl_open_worker): ...here.
* elf/ldsodefs.h: Adjust declaration of _dl_map_object_deps.
* elf/rtld.c: Adjust call to _dl_map_object_deps.
* string/bits/string2.h: Fix aliasing problems.
* sysdeps/i386/i486/bits/string.h: Likewise.
* sysdeps/i386/bits/string.h: Likewise.
1998-12-28 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/powerpc/dl-machine.c: Handle shared library profiling.
* elf/rtld.c (dl_main): Don't call malloc() between
re-relocating the dynamic linker and running the application's crt0.
1999-07-21 Paul D. Smith <psmith@gnu.org>
* sysdeps/generic/glob.c: Move getlogin{,_r} prototypes below
glob.h to get __P() macro.
* posix/fnmatch.c (internal_fnmatch): Use K&R definition syntax,
not ANSI.
(__strchrnul): This won't exist outside GLIBC, so create one.
1999-07-25 Jakub Jelinek <jj@ultra.linux.cz>
* sysdeps/unix/sysv/linux/sparc/bits/types.h: Always define __qaddr_t.
__ino64_t should be 32bit unsigned type on sparc32.
Define __off64_t to __quad_t instead of __int64_t.
Make __pic_pid_t unsigned on sparc32.
1999-07-25 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* localedata/tst-rpmatch.sh: Use "&" instead of "" to avoid a bug
in bash 2.03.
1999-07-25 Ulrich Drepper <drepper@cygnus.com>
1999-07-24 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-fini.c: Handle DT_FINI_ARRAY.
* elf/link.h (struct link_map): Remove l_init_running. Add l_runcount
and l_initcount.
* elf/dl-init.c: Handle DT_INIT_ARRAY.
* elf/dynamic-link.h: Change parameters. Now only get link_map
pointer. Calculate l_initcount.
* elf/link.h (struct link_map): Add l_runpath_dirs.
* elf/dynamic-link.h: If RUNPATH is given, set RPATH to NULL.
* elf/dl-load.c: Pretty print.
(decompose_rpath): Take new parameter with info from where the path
comes. Pass it the fillin_rpath.
(_dl_init_paths): Initialize l_runpath_dirs.
(_dl_map_object): Don't search using RPATHs if object has RUNPATH.
Search using RUNPATH after LD_LIBRARY_PATH.
* elf/dl-support.c: Adjust comment.
* elf/rtld.c: Adjust help message.
1999-07-12 Andreas Schwab <schwab@suse.de>
* elf/rtld.c (dl_main): When putting back the interpreter object
handle the case where a missing object might occur in the list of
objects but not in the search list when in trace mode.
* elf/rtld.c: Split _dl_start in two pieces to prevent GOT usage
before the relocation happened.
Patch by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>.
1999-05-11 Ulrich Drepper <drepper@cygnus.com>
* elf/Versions (ld.so) [GLIBC_2.1.1]: Add _dl_lazy.
* elf/dl-open.c (_dl_open_worker): Only relocate newly loaded objects
lazily if LD_BIND_NOW is not set.
* elf/dl-support.c (_dl_lazy): New variable.
(non_dynamic_init): Set _dl_lazy according to LD_BIND_NOW envvar.
* elf/rtld.c (_dl_lazy): new global variable.
( dl_main): Remove lazy, replace it by _dl_lazy.
1999-05-06 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* locale/setlocale.c (new_composite_name): Check also whether the
first category name differs.
1999-05-11 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ftime.c: Use the bsd implementation, not
the generic one.
1999-05-11 Philip Blundell <pb@nexus.co.uk>
* sysdeps/generic/bits/socket.h (struct sockaddr_storage): New
structure; storage suitable for any socket address.
* sysdeps/unix/sysv/linux/bits/socket.h (struct sockaddr_storage):
Likewise.
* sysdeps/unix/sysv/linux/mips/bits/socket.h (struct
sockaddr_storage): Likewise.
* inet/netinet/in.h: Use ULONG_MAX not ~0 to test for a 64-bit
platform.
1999-03-29 Ulrich Drepper <drepper@cygnus.com>
* elf/rtld.c (process_envvars): Do not automatically prevent lazy
relocation for SUID binaries.
* misc/regexp.h (compile): Cast some pointers to (char *) to avoid
1999-02-23 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* malloc/malloc.c (mALLOC_SET_STATe): Handle the case where a
non-checked heap is restored when malloc checking was requested by
the user.
(struct malloc_state): Add using_malloc_checking.
(MALLOC_STATE_VERSION): Increment minor.
(using_malloc_checking, disallow_malloc_check): New variables.
(__malloc_check_init): Use them.
(mALLOC_GET_STATe): Use mALLOc to allocate the malloc_state, so
that it can the chunk is properly instrumented when malloc
checking is enabled. Set the new using_malloc_checking field.
(malloc_hook_ini): Correct signature when _LIBC is not defined.
1999-02-23 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* sysdeps/unix/sysv/linux/i386/dl-librecon.h
(DISTINGUISH_LIB_VERSIONS): Don't relocate DT_STRTAB a second
time.
* elf/rtld.c (dl_main): Rename paths_initialized to rtld_is_main.
Don't call elf_get_dynamic_info and _dl_setup_hash a second time
if ld.so is the main program.
* stdio-common/vfprintf.c (vfprintf): If precision or width is too
* elf/dynamic-link.h (elf_get_dynamic_info): Take new argument with
load address. Relocate d_ptr in DT_DTRTAB, DT_SYMTAB, DT_RELA, DT_REL,
DT_JMPREL, DT_PLTGOT, and DT_VERSYM l_info entry.
(_ELF_DYNAMIC_DO_RELOC): Take extra argument which specifies whether
rel and rela relocations can both happen and skip one test if this
is not possible.
(ELF_DYNAMIC_DO_RELA, ELF_DYNAMIC_DO_REL): Call _ELF_DYNAMIC_DO_RELOC
appropriately.
* elf/dl-addr.c (_dl_addr): DT_SYMTAB and DT_STRTAB entries are
already relocated.
* elf/dl-deps.c (_dl_map_object_deps): DT_STRTAB entry is already
relocated.
* elf/dl-load.c (_dl_init_paths): DT_STRTAB entry is already relocated.
(_dl_map_object_from_fd): Call elf_get_dynamic_info with new argument.
(_dl_map_object): DT_STRTAB entry is already relocated.
* elf/dl-lookup.c (do_lookup): DT_STRTAB and DT_SYMTAB entries are
already relocated.
* elf/dl-reloc.c (_dl_relocate_object): DT_STRTAB entry is already
relocated.
* elf/dl-runtime.c (fixup): DT_SYMTAB, DT_STRTAB, DT_JMPREL, and
DT_VERSYM entries are already relocated.
(profile_fixup): Likewise.
* elf/dl-version.c: Rename VERSTAG macro into VERSYMIDX. Replace
all users.
(match_symbol): DT_STRTAB entry is already relocated.
(_dl_check_map_versions): Likewise. Also fo DT_VERSYM.
* elf/do-rel.h (elf_dynamic_do_rel): reladdr is now assumed to be
relocated already. DT_SYMTAB and DT_VERSYM entries are also relocated.
* elf/rtld.c (_dl_start): Pass extra argument to elf_get_dynamic_info.
(find_needed): DT_STRTAB entry is already relocated.
(dl_main): Pass extra argument to elf_get_dynamic_info.
DT_STRTAB entry is already relocated.
* sysdeps/alpha/dl-machine.h (elf_machine_fixup_plt): DT_JMPREL and
DT_PLTGOT entries are already relocated.
(elf_machine_rela): Likewise for DT_SYMTAB.
* sysdeps/arm/dl-machine.h (elf_machine_rel): DT_STRTAB is already
relocated.
* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/powerpc/dl-machine.c (__process_machine_rela): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_got_rel): Likewise.
(elf_machine_got_rel): Likewise for DT_SYMTAB and DT_STRTAB.
* grp/initgroups.c (initgroups): If function in current module was
successful don't stop but continue to process to get all the groups.
* elf/link.h (link_map): Add l_dev and l_ino.
* elf/dl-load.c (_dl_map_object_from_fd): Test dev/ino of newly
loaded shared object with all laoded objects. Initialize l_ino
and l_dev in case it's new.
* elf/rtld.c (dl_main): Explain situation is l_dev/l_ino with main
object.
* elf/Makefile: Compile and run new test.
* elf/multiload.c: New file.
1998-12-27 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-lookup.c (_dl_num_relocations): New variable.
(do_lookup): Increment _dl_num_relocations for every call.
* elf/rtld.c (print_statistics): New function.
(_dl_debug_statistics): New variable. Set when statistics are asked
for.
(rtld_total_time, relocate_time, load_time): New variables. Used
in print_statistics.
(_dl_start): Record start and end time of startup. Call
print_statistics if needed.
(dk_main): Record times for relocations and loading.
(process_dl_debug): Recognize statistics.
Low-level, low-overhead, high-precision timing funcationality.
* sysdeps/generic/hp-timing.h: New file.
* sysdeps/i386/i686/Makefile: New file.
* sysdeps/i386/i686/hp-timing.h: New file.
* sysdeps/i386/i686/hp-timing.c: New file.
* sysdeps/i386/dl-machine.h (elf_machine_rel): Reverse order of OR
clauses to avoid accessing global variables during rtld relocation.
* sunrpc/rpc_main.c: Unify messages.
* sysdeps/unix/sysv/linux/arm/Dist: Add ioperm.c and sys/io.h.
* elf/rtld.c: Add a few __builtin_expects where they will improve
a lot.
1998-11-05 Ulrich Drepper <drepper@cygnus.com>
1998-11-04 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* libio/genops.c (_IO_least_marker): Add additional parameter
end_p replacing fp->_IO_read_end.
(save_for_backup): Likewise. All callers changed. Use _IO_size_t
and _IO_ssize_t instead of int.
(_IO_switch_to_main_get_area): Remove use of _IO_save_ptr.
(_IO_switch_to_backup_area): Likewise. Fix comments.
(_IO_seekmark): Undo last change.
(_IO_default_pbackfail): Correct use of backup area.
* libio/libio.h (_IO_FILE_complete): Remove _IO_save_ptr.
* elf/Versions [libc, GLIBC_2.01]: Add _dl_global_scope_alloc.
* elf/dl-open.c (_dl_global_scope_alloc): Move definition to
* elf/dl-deps.c: ...here.
* elf/dl-open.c (dl_open_worker): Call _dl_map_object_deps with
new parameter and expect result. Remove code handling RTLD_GLOBAL.
Add return value of _dl_map_object_deps to
_dl_main_searchlist->r_nlist.
* elf/dl-deps.c (_dl_map_object_deps): Change to return value.
If we parameter GLOBAL is nonzero add object and dependencies to
the global scope.
* elf/ldsodefs.h: Adapt prototype for _dl_map_object_deps.
* elf/rtld.c (dl_main): Call _dl_map_object_deps with new parameter.
Mark all objects as in global scope.
* elf/dl-object.c (_dl_new_object): Initialize l_global to zero.
* sysdeps/unix/sysv/linux/bits/sockunion.h: Add Econet support.
* sysdeps/unix/sysv/linux/i386/sysdep.h: Add .L prefix to symbols
used in macro magic.
1998-11-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/netatalk/at.h: Include <linux/atalk.h>
before <sys/socket.h> to make sockaddr_at available to
<sys/socket.h>.
* posix/glob.h: Remove __P from parameter lists of declarations.
1998-11-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* time/tzset.c (tz_compute): Remove unused parameter timer.
Change caller.
1998-11-02 Mark Kettenis <kettenis@phys.uva.nl>
* sysdeps/generic/bits/types.h (__ipc_pid_t): New typedef.
1998-11-02 Ulrich Drepper <drepper@cygnus.com>
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-22 19:58 -0400 Zack Weinberg <zack@rabi.phys.columbia.edu>
* posix/execvp.c: Don't give up searching the PATH if execve
returns ENOTDIR.
1998-09-22 12:53 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/init-first.c (init): Don't call setfpucw only
if _dl_fpu_control_set is set.
* sysdeps/generic/dl-sysdep.c: Don't set _dl_fpu_control_set.
* elf/rtld.c: Don't define _dl_fpu_control_set.
* elf/Versions: Remove _dl_fpu_control_set.
1998-09-22 11:51 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/alpha/bits/sigaction.h (SA_ONSTACK): Define.
* sysdeps/unix/sysv/linux/sparc/bits/sigaction.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise.
Correct values of other SA_* macros according to kernel headers.
1998-09-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/dl-load.c (_dl_init_paths): Avoid warning about unused
variable l.
* elf/dl-error.c (_dl_catch_error): Avoid warning about clobbering
old.
1998-09-21 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/ldsodefs.h: Fix typo in comment.
1998-09-21 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libio/genops.c (_IO_default_pbackfail): Add cast to unsigned
char when comparing buffer contents with putback character.
1998-09-21 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/Makefile (dl-routines, elide-routines.os, rtld-routines):
Undo last change.
* elf/Versions: Undo last change. Export _dl_fpu_control and
_dl_fpu_control_set.
* elf/rtld.c (_dl_fpu_control, _dl_fpu_control_set): New
variables. Include <fpu_control.h>.
* sysdeps/generic/dl-sysdep.c: Store AT_FPUCW value in
_dl_fpu_control instead of __fpu_control, set _dl_fpu_control_set
to indicate that is was seen.
* sysdeps/unix/sysv/linux/init-first.c: Omit call to __setfpucw
only if _dl_fpu_control was set and is equal to desired value.
* math/Makefile (aux): Undo last change.
* math/Versions: Export __fpu_control with version GLIBC_2.0.
1998-09-14 11:26 Ulrich Drepper <drepper@cygnus.com>
* wcsmbs/wcsmbs-tst1.c: Include stdlib.h.
1998-09-14 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* libc-work/nis/nss_nisplus/nisplus-service.c
(_nss_nisplus_parse_servent): Convert port in network byte order.
1998-09-14 07:53 -0400 Zack Weinberg <zack@rabi.phys.columbia.edu>
* stdlib/stdlib.h: Add a switch, __need_malloc_and_calloc,
to provide only malloc and calloc.
* include/stdlib.h: Support the above.
* string/bits/string2.h: Use __need_malloc_and_calloc when
including stdlib.h.
(__string2_1bptr_p): Avoid -Wbad-function-cast warnings.
* iconvdata/iso-2022-jp.c: Include <stdlib.h>.
* iconvdata/iso646.c: Include <stdlib.h>.
1998-09-14 07:51 -0400 Zack Weinberg <zack@rabi.phys.columbia.edu>
* sunrpc/rpc_cout.c: Add braces around ambiguous else.
* sysdeps/libm-ieee754/w_pow.c: Likewise.
* sysdeps/libm-ieee754/w_powf.c: Likewise.
* sysdeps/libm-ieee754/w_powl.c: Likewise.
1998-09-14 07:57 -0400 Zack Weinberg <zack@rabi.phys.columbia.edu>
* stdio-common/stdio_lim.h.in: New file. All parameters
are adjustable at build time.
* Rules: Add a rule to build bits/stdio_lim.h from
stdio-common/stdio_lim.h.in. (It has to be in Rules so that
all subdirectories know how to make the file. It can't be
in Makerules because then it gets built at top level and the
dependencies are wrong.)
* stdio-common/Makefile (distribute): Add stdio_lim.h.in.
* sysdeps/unix/sysv/linux/Makefile: Delete rules to make
stdio_lim.h.
* sysdeps/unix/sysv/linux/stdio_lim.h.in: Removed.
* sysdeps/unix/sysv/linux/Dist: Take out stdio_lim.h.in.
* sysdeps/posix/Makefile: Removed.
* sysdeps/posix/mk-stdiolim.c: Removed.
* sysdeps/generic/bits/stdio_lim.h: Removed.
1998-09-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* argp/argp-help.c: Fixup indentation.
* nss/nss_files/files-alias.c: Quiet -Wparentheses warning.
* resolv/nss_dns/dns-network.c: Likewise.
* resolv/res_send.c: Likewise.
* rt/aio_cancel.c: Likewise.
* rt/aio_misc.c: Likewise.
1998-09-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makefile (install-symbolic-link): Remove the link list file at last.
* Makerules (install-clean-symbolic-link-list): Removed.
1998-09-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* timezone/tst-timezone.c: Print time in UTC to get consistent
output.
1998-09-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/rtld.c (_dl_rpath): Removed.
* elf/dl-support.c (_dl_path): Removed.
* elf/Makefile ($(objpfx)ld.so): Don't pass -rpath.
(CFLAGS-dl-support.c): Removed.
* elf/dl-load.c (env_path_list): Renamed from fake_path_list. All
uses changed.
(_dl_init_paths): Always set env_path_list from LD_LIBRARY_PATH,
instead of appending it to the main map's rpath info.
(_dl_map_object): Consistently use LD_LIBRARY_PATH after all
DT_RPATHs. This makes it effective again.
(decompose_rpath): Remove second parameter, callers changed.
(fillin_rpath): Allocate enough space in curwd.
(expand_dynamic_string_token): Cope with get_origin returning -1.
1998-09-14 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* libc-work/nis/nss_compat/compat-pwd.c: Add support for
passwd.adjunct.
* nis/nss_nis/nis-pwd.c (_nss_nis_getpwent_r): Correct test for
invalid password.
1998-09-13 18:06 Ulrich Drepper <drepper@cygnus.com>
* locale/programs/locale.c: Update dates.
1998-09-02 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-load.c (fillin_rpath): Handle "/" as RPATH correctly.
(_dl_map_object_from_fd): Make NAME argument const.
Remove last parameter in _dl_new_object call.
(print_search_path): Correct construction of composed path name.
(_dl_map_object): Prevent looking at RPATH of the main map twice.
Remove last parameter in _dl_new_object call.
* elf/dl-object.c: Remove last parameter. Determine whether create
origin entry based on empty realname. Handle file in root directory
correctly.
* elf/ldsodefs.h: Adjust prototype for _dl_new_object.
* elf/rtld.c (dl_main): Add comment describing reason for memory leak.
Remove last parameter in _dl_new_object call.
* sysdeps/generic/dl-origin.h: Handle file in root directory correctly.
* sysdeps/unix/sysv/linux/dl-origin.h: Likewise.
1998-08-09 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/powerpc/Makefile [subdir=elf]: Add new files split out of
dl-machine.h.
* sysdeps/powerpc/dl-machine.c: New file.
* sysdeps/powerpc/dl-machine.h: Move much stuff into separate
files. Revise ELF_PREFERRED_ADDRESS to take account of
the new mapping information (fixes bug involving huge bloated
web browser). Set ELF_MACHINE_PLTREL_OVERLAP.
* sysdeps/powerpc/dl-start.S: New file.
* elf/dl-load.c (_dl_map_object_from_fd): Initialise l_map_start,
l_map_end.
* elf/do-rel.h: Call elf_machine_rel only once (to save space).
* elf/dynamic-link.h: Allow PLT relocs to be in the middle of the
others. Call elf_dynamic_do_##reloc only once (to save even more
space).
* elf/link.h: Add new members l_map_start and l_map_end to keep
track of the memory map.
* elf/rtld.c (_dl_start): Initialise l_map_start for ld.so and
the executable.
1998-09-01 11:53 Ulrich Drepper <drepper@cygnus.com>
* debug/Makefile (catchsegv): We need not rewrite SOVER anymore.
Reported by Andreas Jaeger.
* posix/glob.h: Use __size_t instead of size_t in definitions and
make sure this is defined.
* manual/locale.texi: Almost complete rewrite. Document more functions
Call _dl_new_object with extra argument.
Call _dl_new_object with extra argument.
but the main one if new argument is nonzero.
* elf/ldsodefs.h: Adjust for _dl_new_object change.
(dl_main): Call _dl_new_object with extra argument.
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.