1996-06-12 06:51:48 +02:00
|
|
|
/* Machine-dependent ELF dynamic relocation inline functions. Alpha version.
|
2004-01-16 06:59:42 +01:00
|
|
|
Copyright (C) 1996-2002, 2003, 2004 Free Software Foundation, Inc.
|
1996-12-04 02:41:39 +01:00
|
|
|
This file is part of the GNU C Library.
|
|
|
|
Contributed by Richard Henderson <rth@tamu.edu>.
|
1996-06-12 06:51:48 +02:00
|
|
|
|
1996-12-04 02:41:39 +01:00
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 06:58:11 +02:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
1996-06-12 06:51:48 +02:00
|
|
|
|
1996-12-04 02:41:39 +01:00
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
2001-07-06 06:58:11 +02:00
|
|
|
Lesser General Public License for more details.
|
1996-06-12 06:51:48 +02:00
|
|
|
|
2001-07-06 06:58:11 +02:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with the GNU C Library; if not, write to the Free
|
|
|
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
|
|
02111-1307 USA. */
|
1996-06-12 06:51:48 +02:00
|
|
|
|
1996-07-16 08:38:54 +02:00
|
|
|
/* This was written in the absence of an ABI -- don't expect
|
1996-06-12 06:51:48 +02:00
|
|
|
it to remain unchanged. */
|
|
|
|
|
1996-07-16 08:38:54 +02:00
|
|
|
#ifndef dl_machine_h
|
|
|
|
#define dl_machine_h 1
|
|
|
|
|
1996-06-12 06:51:48 +02:00
|
|
|
#define ELF_MACHINE_NAME "alpha"
|
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
|
2002-04-24 20:17:16 +02:00
|
|
|
/* Mask identifying addresses reserved for the user program,
|
|
|
|
where the dynamic linker should not map anything. */
|
|
|
|
#define ELF_MACHINE_USER_ADDRESS_MASK 0x120000000UL
|
|
|
|
|
2000-10-21 02:02:39 +02:00
|
|
|
/* Return nonzero iff ELF header is compatible with the running host. */
|
1996-06-12 06:51:48 +02:00
|
|
|
static inline int
|
2000-10-21 02:02:39 +02:00
|
|
|
elf_machine_matches_host (const Elf64_Ehdr *ehdr)
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
2000-10-21 02:02:39 +02:00
|
|
|
return ehdr->e_machine == EM_ALPHA;
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
|
1996-12-04 02:41:39 +01:00
|
|
|
/* Return the link-time address of _DYNAMIC. The multiple-got-capable
|
|
|
|
linker no longer allocates the first .got entry for this. But not to
|
|
|
|
worry, no special tricks are needed. */
|
|
|
|
static inline Elf64_Addr
|
|
|
|
elf_machine_dynamic (void)
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
1997-02-02 02:50:11 +01:00
|
|
|
#ifndef NO_AXP_MULTI_GOT_LD
|
1996-12-04 02:41:39 +01:00
|
|
|
return (Elf64_Addr) &_DYNAMIC;
|
1997-01-06 23:07:28 +01:00
|
|
|
#else
|
|
|
|
register Elf64_Addr *gp __asm__ ("$29");
|
|
|
|
return gp[-4096];
|
|
|
|
#endif
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Return the run-time load address of the shared object. */
|
|
|
|
static inline Elf64_Addr
|
|
|
|
elf_machine_load_address (void)
|
|
|
|
{
|
|
|
|
/* NOTE: While it is generally unfriendly to put data in the text
|
|
|
|
segment, it is only slightly less so when the "data" is an
|
|
|
|
instruction. While we don't have to worry about GLD just yet, an
|
|
|
|
optimizing linker might decide that our "data" is an unreachable
|
|
|
|
instruction and throw it away -- with the right switches, DEC's
|
|
|
|
linker will do this. What ought to happen is we should add
|
|
|
|
something to GAS to allow us access to the new GPREL_HI32/LO32
|
|
|
|
relocation types stolen from OSF/1 3.0. */
|
|
|
|
/* This code relies on the fact that BRADDR relocations do not
|
|
|
|
appear in dynamic relocation tables. Not that that would be very
|
|
|
|
useful anyway -- br/bsr has a 4MB range and the shared libraries
|
|
|
|
are usually many many terabytes away. */
|
|
|
|
|
|
|
|
Elf64_Addr dot;
|
2000-05-05 09:15:29 +02:00
|
|
|
long int zero_disp;
|
1996-06-12 06:51:48 +02:00
|
|
|
|
2001-09-23 04:10:30 +02:00
|
|
|
asm("br %0, 1f\n"
|
|
|
|
"0:\n\t"
|
|
|
|
"br $0, 2f\n"
|
|
|
|
"1:\n\t"
|
2002-02-27 19:11:27 +01:00
|
|
|
".section\t.data\n"
|
2001-09-23 04:10:30 +02:00
|
|
|
"2:\n\t"
|
|
|
|
".quad 0b\n\t"
|
|
|
|
".previous"
|
1996-06-12 06:51:48 +02:00
|
|
|
: "=r"(dot));
|
|
|
|
|
2001-09-23 04:10:30 +02:00
|
|
|
zero_disp = *(int *) dot;
|
1996-06-12 06:51:48 +02:00
|
|
|
zero_disp = (zero_disp << 43) >> 41;
|
|
|
|
|
2001-09-23 04:10:30 +02:00
|
|
|
return dot - *(Elf64_Addr *) (dot + 4 + zero_disp);
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
|
1996-07-16 08:38:54 +02:00
|
|
|
/* Set up the loaded object described by L so its unrelocated PLT
|
|
|
|
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
|
|
|
|
Update.
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
strtoull_l, strtof_l, strtod_l, and strtold_l.
* stdlib/stdlib.h: Add prototypes for new functions.
* stdlib/strtod.c: Change for compiling as strtoX_l.
* stdlib/strtol.c: Likewise.
* stdlib/strtof.c: Likewise.
* stdlib/strtold.c: Likewise.
* stdlib/strtod_l.c: New file.
* stdlib/strtof_l.c: New file.
* stdlib/strtold_l.c: New file.
* stdlib/strtol_l.c: New file.
* stdlib/strtoul_l.c: New file.
* stdlib/strtoll_l.c: New file.
* stdlib/strtoull_l.c: New file.
* string/Makefile (routines): Add strcasecmp_l and strncase_l.
* string/string.h: Add prototypes for new functions.
* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
* sysdeps/generic/strcasecmp_l.c: New file.
* sysdeps/generic/strncase_l.c: New file.
* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
wcsncase_l.
* wcsmbs/wchar.h: Add prototypes for new functions.
* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
* wcsmbs/wcscasecmp_l.c: New file.
* wcsmbs/wcsncase_l.c: New file.
* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
* wcsmcs/wcstod_l.c: New file.
* wcsmcs/wcstof_l.c: New file.
* wcsmcs/wcstold_l.c: New file.
* wcsmcs/wcstol_l.c: New file.
* wcsmcs/wcstoul_l.c: New file.
* wcsmcs/wcstoll_l.c: New file.
* wcsmcs/wcstoull_l.c: New file.
* Makeconfig (binfmt-subdir): New variable. Set to `elf' if
$(elf) is defined. More to come later when other binary formats
are supported.
* Makefile (subdirs): Remove elf. Add $(binfmt-subdir).
Suggested by Philip Blundell.
* stdlib/Makefile (headers): Add fmtmsg.h.
(routines): Add fmtmsg.
* stdlib/fmtmsg.c: New file.
* stdlib/fmtmsg.h: New file.
* manual/stdio.texi: Add description of fmtmsg and addseverity.
* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
documentation.
1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk>
* resolv/res_query.c (res_querydomain): Avoid potential buffer
overrun. Reported by Dan A. Dickey <ddickey@transition.com>.
1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* elf/dl-support.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Moved functions to ...
* elf/dl-misc.c: This new file.
* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
* elf/dl-misc.c: ... here.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Delete functions; they now come from
elf/dl-misc.c (dl-support.c had contained identical versions).
* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
that the regular ones in dl-misc work once we've initialized.
* elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c.
1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk>
* inet/Makefile (headers): Add netinet/inbits.h.
* inet/netinet/in.h: New file.
* sysdeps/generic/netinet/inbits.h: Likewise.
* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
* sysdeps/generic/netinet/ip6.h: Move to...
* inet/netinet/ip6.h: ... here.
* sysdeps/generic/netinet/icmp6.h: Move to...
* inet/netinet/icmp6.h: ... here.
* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
* sysdeps/generic/netinet/in.h: Remove.
1997-05-22 05:40 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
not looking at the new thread-safe .plt, don't be lazy about relocs.
(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
elf_machine_runtime_setup() decide if we can actually be lazy.
* elf/rtld.c (_dl_start): So don't call it.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
skeleton definition.
1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
stack by fxtract.
1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
add cast to (xdrproc_t) where necessary to prevent warnings.
1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.
* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
* nss/XXX-lookup.c: Add missing explanation.
1997-05-24 04:30:09 +02:00
|
|
|
static inline int
|
1997-07-29 00:35:20 +02:00
|
|
|
elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
1996-07-16 08:38:54 +02:00
|
|
|
{
|
|
|
|
Elf64_Addr plt;
|
|
|
|
extern void _dl_runtime_resolve (void);
|
1997-09-27 02:21:42 +02:00
|
|
|
extern void _dl_runtime_profile (void);
|
1996-07-16 08:38:54 +02:00
|
|
|
|
|
|
|
if (l->l_info[DT_JMPREL] && lazy)
|
|
|
|
{
|
|
|
|
/* The GOT entries for the functions in the PLT have not been
|
|
|
|
filled in yet. Their initial contents are directed to the
|
|
|
|
PLT which arranges for the dynamic linker to be called. */
|
2000-03-31 07:16:38 +02:00
|
|
|
plt = D_PTR (l, l_info[DT_PLTGOT]);
|
1996-07-16 08:38:54 +02:00
|
|
|
|
|
|
|
/* This function will be called to perform the relocation. */
|
1997-09-27 02:21:42 +02:00
|
|
|
if (!profile)
|
|
|
|
*(Elf64_Addr *)(plt + 16) = (Elf64_Addr) &_dl_runtime_resolve;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
*(Elf64_Addr *)(plt + 16) = (Elf64_Addr) &_dl_runtime_profile;
|
1998-06-27 11:52:12 +02:00
|
|
|
|
2004-03-05 11:29:47 +01:00
|
|
|
if (_dl_name_match_p (GLRO(dl_profile), l))
|
1998-06-27 11:52:12 +02:00
|
|
|
{
|
|
|
|
/* This is the object we are looking for. Say that we really
|
|
|
|
want profiling and the timers are started. */
|
2002-02-01 02:33:04 +01:00
|
|
|
GL(dl_profile_map) = l;
|
1998-06-27 11:52:12 +02:00
|
|
|
}
|
1997-09-27 02:21:42 +02:00
|
|
|
}
|
1996-07-16 08:38:54 +02:00
|
|
|
|
|
|
|
/* Identify this shared object */
|
|
|
|
*(Elf64_Addr *)(plt + 24) = (Elf64_Addr) l;
|
Update.
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
strtoull_l, strtof_l, strtod_l, and strtold_l.
* stdlib/stdlib.h: Add prototypes for new functions.
* stdlib/strtod.c: Change for compiling as strtoX_l.
* stdlib/strtol.c: Likewise.
* stdlib/strtof.c: Likewise.
* stdlib/strtold.c: Likewise.
* stdlib/strtod_l.c: New file.
* stdlib/strtof_l.c: New file.
* stdlib/strtold_l.c: New file.
* stdlib/strtol_l.c: New file.
* stdlib/strtoul_l.c: New file.
* stdlib/strtoll_l.c: New file.
* stdlib/strtoull_l.c: New file.
* string/Makefile (routines): Add strcasecmp_l and strncase_l.
* string/string.h: Add prototypes for new functions.
* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
* sysdeps/generic/strcasecmp_l.c: New file.
* sysdeps/generic/strncase_l.c: New file.
* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
wcsncase_l.
* wcsmbs/wchar.h: Add prototypes for new functions.
* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
* wcsmbs/wcscasecmp_l.c: New file.
* wcsmbs/wcsncase_l.c: New file.
* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
* wcsmcs/wcstod_l.c: New file.
* wcsmcs/wcstof_l.c: New file.
* wcsmcs/wcstold_l.c: New file.
* wcsmcs/wcstol_l.c: New file.
* wcsmcs/wcstoul_l.c: New file.
* wcsmcs/wcstoll_l.c: New file.
* wcsmcs/wcstoull_l.c: New file.
* Makeconfig (binfmt-subdir): New variable. Set to `elf' if
$(elf) is defined. More to come later when other binary formats
are supported.
* Makefile (subdirs): Remove elf. Add $(binfmt-subdir).
Suggested by Philip Blundell.
* stdlib/Makefile (headers): Add fmtmsg.h.
(routines): Add fmtmsg.
* stdlib/fmtmsg.c: New file.
* stdlib/fmtmsg.h: New file.
* manual/stdio.texi: Add description of fmtmsg and addseverity.
* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
documentation.
1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk>
* resolv/res_query.c (res_querydomain): Avoid potential buffer
overrun. Reported by Dan A. Dickey <ddickey@transition.com>.
1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* elf/dl-support.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Moved functions to ...
* elf/dl-misc.c: This new file.
* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
* elf/dl-misc.c: ... here.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Delete functions; they now come from
elf/dl-misc.c (dl-support.c had contained identical versions).
* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
that the regular ones in dl-misc work once we've initialized.
* elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c.
1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk>
* inet/Makefile (headers): Add netinet/inbits.h.
* inet/netinet/in.h: New file.
* sysdeps/generic/netinet/inbits.h: Likewise.
* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
* sysdeps/generic/netinet/ip6.h: Move to...
* inet/netinet/ip6.h: ... here.
* sysdeps/generic/netinet/icmp6.h: Move to...
* inet/netinet/icmp6.h: ... here.
* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
* sysdeps/generic/netinet/in.h: Remove.
1997-05-22 05:40 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
not looking at the new thread-safe .plt, don't be lazy about relocs.
(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
elf_machine_runtime_setup() decide if we can actually be lazy.
* elf/rtld.c (_dl_start): So don't call it.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
skeleton definition.
1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
stack by fxtract.
1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
add cast to (xdrproc_t) where necessary to prevent warnings.
1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.
* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
* nss/XXX-lookup.c: Add missing explanation.
1997-05-24 04:30:09 +02:00
|
|
|
|
|
|
|
/* If the first instruction of the plt entry is not
|
Update.
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.
2001-12-12 01:21:26 +01:00
|
|
|
"br $28, plt0", we have to reinitialize .plt for lazy relocation. */
|
|
|
|
if (*(unsigned int *)(plt + 32) != 0xc39ffff7)
|
|
|
|
{
|
|
|
|
unsigned int val = 0xc39ffff7;
|
|
|
|
unsigned int *slot, *end;
|
2001-12-31 18:46:59 +01:00
|
|
|
const Elf64_Rela *rela = (const Elf64_Rela *)
|
|
|
|
D_PTR (l, l_info[DT_JMPREL]);
|
Update.
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.
2001-12-12 01:21:26 +01:00
|
|
|
Elf64_Addr l_addr = l->l_addr;
|
|
|
|
|
|
|
|
/* br t12,.+4; ldq t12,12(t12); nop; jmp t12,(t12),.+4 */
|
|
|
|
*(unsigned long *)plt = 0xa77b000cc3600000;
|
|
|
|
*(unsigned long *)(plt + 8) = 0x6b7b000047ff041f;
|
|
|
|
slot = (unsigned int *)(plt + 32);
|
|
|
|
end = (unsigned int *)(plt + 32
|
|
|
|
+ l->l_info[DT_PLTRELSZ]->d_un.d_val / 2);
|
|
|
|
while (slot < end)
|
|
|
|
{
|
|
|
|
/* br at,.plt+0 */
|
|
|
|
*slot = val;
|
|
|
|
*(Elf64_Addr *) rela->r_offset = (Elf64_Addr) slot - l_addr;
|
|
|
|
val -= 3;
|
|
|
|
slot += 3;
|
|
|
|
++rela;
|
|
|
|
}
|
|
|
|
}
|
1996-07-16 08:38:54 +02:00
|
|
|
}
|
Update.
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
strtoull_l, strtof_l, strtod_l, and strtold_l.
* stdlib/stdlib.h: Add prototypes for new functions.
* stdlib/strtod.c: Change for compiling as strtoX_l.
* stdlib/strtol.c: Likewise.
* stdlib/strtof.c: Likewise.
* stdlib/strtold.c: Likewise.
* stdlib/strtod_l.c: New file.
* stdlib/strtof_l.c: New file.
* stdlib/strtold_l.c: New file.
* stdlib/strtol_l.c: New file.
* stdlib/strtoul_l.c: New file.
* stdlib/strtoll_l.c: New file.
* stdlib/strtoull_l.c: New file.
* string/Makefile (routines): Add strcasecmp_l and strncase_l.
* string/string.h: Add prototypes for new functions.
* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
* sysdeps/generic/strcasecmp_l.c: New file.
* sysdeps/generic/strncase_l.c: New file.
* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
wcsncase_l.
* wcsmbs/wchar.h: Add prototypes for new functions.
* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
* wcsmbs/wcscasecmp_l.c: New file.
* wcsmbs/wcsncase_l.c: New file.
* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
* wcsmcs/wcstod_l.c: New file.
* wcsmcs/wcstof_l.c: New file.
* wcsmcs/wcstold_l.c: New file.
* wcsmcs/wcstol_l.c: New file.
* wcsmcs/wcstoul_l.c: New file.
* wcsmcs/wcstoll_l.c: New file.
* wcsmcs/wcstoull_l.c: New file.
* Makeconfig (binfmt-subdir): New variable. Set to `elf' if
$(elf) is defined. More to come later when other binary formats
are supported.
* Makefile (subdirs): Remove elf. Add $(binfmt-subdir).
Suggested by Philip Blundell.
* stdlib/Makefile (headers): Add fmtmsg.h.
(routines): Add fmtmsg.
* stdlib/fmtmsg.c: New file.
* stdlib/fmtmsg.h: New file.
* manual/stdio.texi: Add description of fmtmsg and addseverity.
* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
documentation.
1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk>
* resolv/res_query.c (res_querydomain): Avoid potential buffer
overrun. Reported by Dan A. Dickey <ddickey@transition.com>.
1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* elf/dl-support.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Moved functions to ...
* elf/dl-misc.c: This new file.
* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
* elf/dl-misc.c: ... here.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Delete functions; they now come from
elf/dl-misc.c (dl-support.c had contained identical versions).
* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
that the regular ones in dl-misc work once we've initialized.
* elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c.
1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk>
* inet/Makefile (headers): Add netinet/inbits.h.
* inet/netinet/in.h: New file.
* sysdeps/generic/netinet/inbits.h: Likewise.
* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
* sysdeps/generic/netinet/ip6.h: Move to...
* inet/netinet/ip6.h: ... here.
* sysdeps/generic/netinet/icmp6.h: Move to...
* inet/netinet/icmp6.h: ... here.
* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
* sysdeps/generic/netinet/in.h: Remove.
1997-05-22 05:40 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
not looking at the new thread-safe .plt, don't be lazy about relocs.
(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
elf_machine_runtime_setup() decide if we can actually be lazy.
* elf/rtld.c (_dl_start): So don't call it.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
skeleton definition.
1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
stack by fxtract.
1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
add cast to (xdrproc_t) where necessary to prevent warnings.
1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.
* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
* nss/XXX-lookup.c: Add missing explanation.
1997-05-24 04:30:09 +02:00
|
|
|
|
|
|
|
return lazy;
|
1996-07-16 08:38:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* This code is used in dl-runtime.c to call the `fixup' function
|
|
|
|
and then redirect to the address it returns. */
|
1998-01-26 23:04:53 +01:00
|
|
|
#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name, IMB) \
|
|
|
|
extern void tramp_name (void); \
|
|
|
|
asm ( "\
|
2001-12-31 18:46:59 +01:00
|
|
|
.globl " #tramp_name " \n\
|
|
|
|
.ent " #tramp_name " \n\
|
|
|
|
" #tramp_name ": \n\
|
|
|
|
lda $sp, -44*8($sp) \n\
|
|
|
|
.frame $sp, 44*8, $26 \n\
|
|
|
|
/* Preserve all integer registers that C normally \n\
|
|
|
|
doesn't. */ \n\
|
|
|
|
stq $26, 0*8($sp) \n\
|
|
|
|
stq $0, 1*8($sp) \n\
|
|
|
|
stq $1, 2*8($sp) \n\
|
|
|
|
stq $2, 3*8($sp) \n\
|
|
|
|
stq $3, 4*8($sp) \n\
|
|
|
|
stq $4, 5*8($sp) \n\
|
|
|
|
stq $5, 6*8($sp) \n\
|
|
|
|
stq $6, 7*8($sp) \n\
|
|
|
|
stq $7, 8*8($sp) \n\
|
|
|
|
stq $8, 9*8($sp) \n\
|
|
|
|
stq $16, 10*8($sp) \n\
|
|
|
|
stq $17, 11*8($sp) \n\
|
|
|
|
stq $18, 12*8($sp) \n\
|
|
|
|
stq $19, 13*8($sp) \n\
|
|
|
|
stq $20, 14*8($sp) \n\
|
|
|
|
stq $21, 15*8($sp) \n\
|
|
|
|
stq $22, 16*8($sp) \n\
|
|
|
|
stq $23, 17*8($sp) \n\
|
|
|
|
stq $24, 18*8($sp) \n\
|
|
|
|
stq $25, 19*8($sp) \n\
|
|
|
|
stq $29, 20*8($sp) \n\
|
|
|
|
stt $f0, 21*8($sp) \n\
|
|
|
|
stt $f1, 22*8($sp) \n\
|
|
|
|
stt $f10, 23*8($sp) \n\
|
|
|
|
stt $f11, 24*8($sp) \n\
|
|
|
|
stt $f12, 25*8($sp) \n\
|
|
|
|
stt $f13, 26*8($sp) \n\
|
|
|
|
stt $f14, 27*8($sp) \n\
|
|
|
|
stt $f15, 28*8($sp) \n\
|
|
|
|
stt $f16, 29*8($sp) \n\
|
|
|
|
stt $f17, 30*8($sp) \n\
|
|
|
|
stt $f18, 31*8($sp) \n\
|
|
|
|
stt $f19, 32*8($sp) \n\
|
|
|
|
stt $f20, 33*8($sp) \n\
|
|
|
|
stt $f21, 34*8($sp) \n\
|
|
|
|
stt $f22, 35*8($sp) \n\
|
|
|
|
stt $f23, 36*8($sp) \n\
|
|
|
|
stt $f24, 37*8($sp) \n\
|
|
|
|
stt $f25, 38*8($sp) \n\
|
|
|
|
stt $f26, 39*8($sp) \n\
|
|
|
|
stt $f27, 40*8($sp) \n\
|
|
|
|
stt $f28, 41*8($sp) \n\
|
|
|
|
stt $f29, 42*8($sp) \n\
|
|
|
|
stt $f30, 43*8($sp) \n\
|
|
|
|
.mask 0x27ff01ff, -44*8 \n\
|
|
|
|
.fmask 0xfffffc03, -(44-21)*8 \n\
|
|
|
|
/* Set up our $gp */ \n\
|
|
|
|
br $gp, .+4 \n\
|
|
|
|
ldgp $gp, 0($gp) \n\
|
|
|
|
.prologue 0 \n\
|
|
|
|
/* Set up the arguments for fixup: */ \n\
|
|
|
|
/* $16 = link_map out of plt0 */ \n\
|
|
|
|
/* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */\n\
|
|
|
|
/* $18 = return address */ \n\
|
|
|
|
subq $28, $27, $17 \n\
|
|
|
|
ldq $16, 8($27) \n\
|
|
|
|
subq $17, 20, $17 \n\
|
|
|
|
mov $26, $18 \n\
|
|
|
|
addq $17, $17, $17 \n\
|
|
|
|
/* Do the fixup */ \n\
|
2002-11-08 03:20:41 +01:00
|
|
|
bsr $26, " #fixup_name " !samegp \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
/* Move the destination address into position. */ \n\
|
|
|
|
mov $0, $27 \n\
|
|
|
|
/* Restore program registers. */ \n\
|
|
|
|
ldq $26, 0*8($sp) \n\
|
|
|
|
ldq $0, 1*8($sp) \n\
|
|
|
|
ldq $1, 2*8($sp) \n\
|
|
|
|
ldq $2, 3*8($sp) \n\
|
|
|
|
ldq $3, 4*8($sp) \n\
|
|
|
|
ldq $4, 5*8($sp) \n\
|
|
|
|
ldq $5, 6*8($sp) \n\
|
|
|
|
ldq $6, 7*8($sp) \n\
|
|
|
|
ldq $7, 8*8($sp) \n\
|
|
|
|
ldq $8, 9*8($sp) \n\
|
|
|
|
ldq $16, 10*8($sp) \n\
|
|
|
|
ldq $17, 11*8($sp) \n\
|
|
|
|
ldq $18, 12*8($sp) \n\
|
|
|
|
ldq $19, 13*8($sp) \n\
|
|
|
|
ldq $20, 14*8($sp) \n\
|
|
|
|
ldq $21, 15*8($sp) \n\
|
|
|
|
ldq $22, 16*8($sp) \n\
|
|
|
|
ldq $23, 17*8($sp) \n\
|
|
|
|
ldq $24, 18*8($sp) \n\
|
|
|
|
ldq $25, 19*8($sp) \n\
|
|
|
|
ldq $29, 20*8($sp) \n\
|
|
|
|
ldt $f0, 21*8($sp) \n\
|
|
|
|
ldt $f1, 22*8($sp) \n\
|
|
|
|
ldt $f10, 23*8($sp) \n\
|
|
|
|
ldt $f11, 24*8($sp) \n\
|
|
|
|
ldt $f12, 25*8($sp) \n\
|
|
|
|
ldt $f13, 26*8($sp) \n\
|
|
|
|
ldt $f14, 27*8($sp) \n\
|
|
|
|
ldt $f15, 28*8($sp) \n\
|
|
|
|
ldt $f16, 29*8($sp) \n\
|
|
|
|
ldt $f17, 30*8($sp) \n\
|
|
|
|
ldt $f18, 31*8($sp) \n\
|
|
|
|
ldt $f19, 32*8($sp) \n\
|
|
|
|
ldt $f20, 33*8($sp) \n\
|
|
|
|
ldt $f21, 34*8($sp) \n\
|
|
|
|
ldt $f22, 35*8($sp) \n\
|
|
|
|
ldt $f23, 36*8($sp) \n\
|
|
|
|
ldt $f24, 37*8($sp) \n\
|
|
|
|
ldt $f25, 38*8($sp) \n\
|
|
|
|
ldt $f26, 39*8($sp) \n\
|
|
|
|
ldt $f27, 40*8($sp) \n\
|
|
|
|
ldt $f28, 41*8($sp) \n\
|
|
|
|
ldt $f29, 42*8($sp) \n\
|
|
|
|
ldt $f30, 43*8($sp) \n\
|
|
|
|
/* Flush the Icache after having modified the .plt code. */\n\
|
|
|
|
" #IMB " \n\
|
|
|
|
/* Clean up and turn control to the destination */ \n\
|
|
|
|
lda $sp, 44*8($sp) \n\
|
|
|
|
jmp $31, ($27) \n\
|
1997-09-27 02:21:42 +02:00
|
|
|
.end " #tramp_name)
|
1996-07-16 08:38:54 +02:00
|
|
|
|
1997-09-27 02:21:42 +02:00
|
|
|
#ifndef PROF
|
2000-05-08 17:40:26 +02:00
|
|
|
#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
|
1997-09-27 02:21:42 +02:00
|
|
|
TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup, imb); \
|
2000-03-26 22:35:45 +02:00
|
|
|
TRAMPOLINE_TEMPLATE (_dl_runtime_profile, profile_fixup, /* nop */);
|
1997-09-27 02:21:42 +02:00
|
|
|
#else
|
|
|
|
#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
|
1997-12-14 23:24:57 +01:00
|
|
|
TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup, imb); \
|
1998-01-25 18:01:47 +01:00
|
|
|
strong_alias (_dl_runtime_resolve, _dl_runtime_profile);
|
1997-09-27 02:21:42 +02:00
|
|
|
#endif
|
1996-07-16 08:38:54 +02:00
|
|
|
|
|
|
|
/* Initial entry point code for the dynamic linker.
|
|
|
|
The C function `_dl_start' is the real entry point;
|
|
|
|
its return value is the user program's entry point. */
|
|
|
|
|
|
|
|
#define RTLD_START asm ("\
|
2002-02-27 19:11:27 +01:00
|
|
|
.section .text \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
.set at \n\
|
|
|
|
.globl _start \n\
|
|
|
|
.ent _start \n\
|
|
|
|
_start: \n\
|
2003-06-06 07:54:15 +02:00
|
|
|
.frame $31,0,$31,0 \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
br $gp, 0f \n\
|
|
|
|
0: ldgp $gp, 0($gp) \n\
|
|
|
|
.prologue 0 \n\
|
|
|
|
/* Pass pointer to argument block to _dl_start. */ \n\
|
|
|
|
mov $sp, $16 \n\
|
2002-11-08 03:20:41 +01:00
|
|
|
bsr $26, _dl_start !samegp \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
.end _start \n\
|
|
|
|
/* FALLTHRU */ \n\
|
|
|
|
.globl _dl_start_user \n\
|
|
|
|
.ent _dl_start_user \n\
|
|
|
|
_dl_start_user: \n\
|
2003-06-06 07:54:15 +02:00
|
|
|
.frame $31,0,$31,0 \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
.prologue 0 \n\
|
|
|
|
/* Save the user entry point address in s0. */ \n\
|
|
|
|
mov $0, $9 \n\
|
|
|
|
/* See if we were run as a command with the executable \n\
|
|
|
|
file name as an extra leading argument. */ \n\
|
2002-11-08 03:20:41 +01:00
|
|
|
ldl $1, _dl_skip_args($gp) !gprel \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
bne $1, $fixup_stack \n\
|
|
|
|
$fixup_stack_ret: \n\
|
|
|
|
/* The special initializer gets called with the stack \n\
|
|
|
|
just as the application's entry point will see it; \n\
|
|
|
|
it can switch stacks if it moves these contents \n\
|
|
|
|
over. */ \n\
|
|
|
|
" RTLD_START_SPECIAL_INIT " \n\
|
|
|
|
/* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\
|
|
|
|
initializers. */ \n\
|
2002-11-08 03:20:41 +01:00
|
|
|
ldah $16, _rtld_local($gp) !gprelhigh \n\
|
|
|
|
ldq $16, _rtld_local($16) !gprellow \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
ldq $17, 0($sp) \n\
|
|
|
|
lda $18, 8($sp) \n\
|
|
|
|
s8addq $17, 8, $19 \n\
|
|
|
|
addq $19, $18, $19 \n\
|
2002-11-08 03:20:41 +01:00
|
|
|
bsr $26, _dl_init_internal !samegp \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
/* Pass our finalizer function to the user in $0. */ \n\
|
2002-11-08 03:20:41 +01:00
|
|
|
ldah $0, _dl_fini($gp) !gprelhigh \n\
|
|
|
|
lda $0, _dl_fini($0) !gprellow \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
/* Jump to the user's entry point. */ \n\
|
|
|
|
mov $9, $27 \n\
|
|
|
|
jmp ($9) \n\
|
|
|
|
$fixup_stack: \n\
|
|
|
|
/* Adjust the stack pointer to skip _dl_skip_args words.\n\
|
|
|
|
This involves copying everything down, since the \n\
|
|
|
|
stack pointer must always be 16-byte aligned. */ \n\
|
2004-01-16 06:59:42 +01:00
|
|
|
ldah $7, _dl_argv_internal($gp) !gprelhigh \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
ldq $2, 0($sp) \n\
|
2004-01-16 06:59:42 +01:00
|
|
|
ldq $5, _dl_argv_internal($7) !gprellow \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
subq $31, $1, $6 \n\
|
|
|
|
subq $2, $1, $2 \n\
|
|
|
|
s8addq $6, $5, $5 \n\
|
|
|
|
mov $sp, $4 \n\
|
|
|
|
s8addq $1, $sp, $3 \n\
|
|
|
|
stq $2, 0($sp) \n\
|
2004-01-16 06:59:42 +01:00
|
|
|
stq $5, _dl_argv_internal($7) !gprellow \n\
|
2001-12-31 18:46:59 +01:00
|
|
|
/* Copy down argv. */ \n\
|
|
|
|
0: ldq $5, 8($3) \n\
|
|
|
|
addq $4, 8, $4 \n\
|
|
|
|
addq $3, 8, $3 \n\
|
|
|
|
stq $5, 0($4) \n\
|
|
|
|
bne $5, 0b \n\
|
|
|
|
/* Copy down envp. */ \n\
|
|
|
|
1: ldq $5, 8($3) \n\
|
|
|
|
addq $4, 8, $4 \n\
|
|
|
|
addq $3, 8, $3 \n\
|
|
|
|
stq $5, 0($4) \n\
|
|
|
|
bne $5, 1b \n\
|
|
|
|
/* Copy down auxiliary table. */ \n\
|
|
|
|
2: ldq $5, 8($3) \n\
|
|
|
|
ldq $6, 16($3) \n\
|
|
|
|
addq $4, 16, $4 \n\
|
|
|
|
addq $3, 16, $3 \n\
|
|
|
|
stq $5, -8($4) \n\
|
|
|
|
stq $6, 0($4) \n\
|
|
|
|
bne $5, 2b \n\
|
|
|
|
br $fixup_stack_ret \n\
|
|
|
|
.end _dl_start_user \n\
|
|
|
|
.set noat \n\
|
1997-08-27 22:26:10 +02:00
|
|
|
.previous");
|
1996-07-16 08:38:54 +02:00
|
|
|
|
2000-04-15 19:15:10 +02:00
|
|
|
#ifndef RTLD_START_SPECIAL_INIT
|
|
|
|
#define RTLD_START_SPECIAL_INIT /* nothing */
|
|
|
|
#endif
|
|
|
|
|
2003-01-17 20:57:05 +01:00
|
|
|
/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry
|
|
|
|
or TLS variables, so undefined references should not be allowed
|
|
|
|
to define the value.
|
|
|
|
|
|
|
|
ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve
|
|
|
|
to one of the main executable's symbols, as for a COPY reloc.
|
|
|
|
This is unused on Alpha. */
|
|
|
|
|
|
|
|
#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
|
|
|
|
#define elf_machine_type_class(type) \
|
|
|
|
(((type) == R_ALPHA_JMP_SLOT \
|
|
|
|
|| (type) == R_ALPHA_DTPMOD64 \
|
|
|
|
|| (type) == R_ALPHA_DTPREL64 \
|
|
|
|
|| (type) == R_ALPHA_TPREL64) * ELF_RTYPE_CLASS_PLT)
|
|
|
|
#else
|
2001-08-27 00:28:16 +02:00
|
|
|
#define elf_machine_type_class(type) \
|
|
|
|
(((type) == R_ALPHA_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)
|
2003-01-17 20:57:05 +01:00
|
|
|
#endif
|
1997-03-25 03:25:35 +01:00
|
|
|
|
|
|
|
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
1997-09-27 02:21:42 +02:00
|
|
|
#define ELF_MACHINE_JMP_SLOT R_ALPHA_JMP_SLOT
|
1996-07-16 08:38:54 +02:00
|
|
|
|
|
|
|
/* The alpha never uses Elf64_Rel relocations. */
|
|
|
|
#define ELF_MACHINE_NO_REL 1
|
|
|
|
|
1996-06-12 06:51:48 +02:00
|
|
|
/* Fix up the instructions of a PLT entry to invoke the function
|
|
|
|
rather than the dynamic linker. */
|
2000-05-05 09:15:29 +02:00
|
|
|
static inline Elf64_Addr
|
|
|
|
elf_machine_fixup_plt (struct link_map *l, lookup_t t,
|
|
|
|
const Elf64_Rela *reloc,
|
|
|
|
Elf64_Addr *got_addr, Elf64_Addr value)
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
|
|
|
const Elf64_Rela *rela_plt;
|
|
|
|
Elf64_Word *plte;
|
2000-05-05 09:15:29 +02:00
|
|
|
long int edisp;
|
1996-06-12 06:51:48 +02:00
|
|
|
|
1997-09-27 02:21:42 +02:00
|
|
|
/* Store the value we are going to load. */
|
|
|
|
*got_addr = value;
|
|
|
|
|
1996-06-12 06:51:48 +02:00
|
|
|
/* Recover the PLT entry address by calculating reloc's index into the
|
|
|
|
.rela.plt, and finding that entry in the .plt. */
|
2000-03-31 07:16:38 +02:00
|
|
|
rela_plt = (void *) D_PTR (l, l_info[DT_JMPREL]);
|
2000-04-15 19:15:10 +02:00
|
|
|
plte = (void *) (D_PTR (l, l_info[DT_PLTGOT]) + 32);
|
1996-06-21 06:30:50 +02:00
|
|
|
plte += 3 * (reloc - rela_plt);
|
1996-06-12 06:51:48 +02:00
|
|
|
|
|
|
|
/* Find the displacement from the plt entry to the function. */
|
2000-05-05 09:15:29 +02:00
|
|
|
edisp = (long int) (value - (Elf64_Addr)&plte[3]) / 4;
|
1996-06-12 06:51:48 +02:00
|
|
|
|
1996-06-21 06:30:50 +02:00
|
|
|
if (edisp >= -0x100000 && edisp < 0x100000)
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
|
|
|
/* If we are in range, use br to perfect branch prediction and
|
1996-07-02 00:16:41 +02:00
|
|
|
elide the dependency on the address load. This case happens,
|
1996-06-12 06:51:48 +02:00
|
|
|
e.g., when a shared library call is resolved to the same library. */
|
1996-06-21 06:30:50 +02:00
|
|
|
|
|
|
|
int hi, lo;
|
|
|
|
hi = value - (Elf64_Addr)&plte[0];
|
2000-05-05 09:15:29 +02:00
|
|
|
lo = (short int) hi;
|
1996-06-21 06:30:50 +02:00
|
|
|
hi = (hi - lo) >> 16;
|
|
|
|
|
1997-09-27 02:21:42 +02:00
|
|
|
/* Emit "lda $27,lo($27)" */
|
1996-06-21 06:30:50 +02:00
|
|
|
plte[1] = 0x237b0000 | (lo & 0xffff);
|
|
|
|
|
|
|
|
/* Emit "br $31,function" */
|
|
|
|
plte[2] = 0xc3e00000 | (edisp & 0x1fffff);
|
Update.
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
strtoull_l, strtof_l, strtod_l, and strtold_l.
* stdlib/stdlib.h: Add prototypes for new functions.
* stdlib/strtod.c: Change for compiling as strtoX_l.
* stdlib/strtol.c: Likewise.
* stdlib/strtof.c: Likewise.
* stdlib/strtold.c: Likewise.
* stdlib/strtod_l.c: New file.
* stdlib/strtof_l.c: New file.
* stdlib/strtold_l.c: New file.
* stdlib/strtol_l.c: New file.
* stdlib/strtoul_l.c: New file.
* stdlib/strtoll_l.c: New file.
* stdlib/strtoull_l.c: New file.
* string/Makefile (routines): Add strcasecmp_l and strncase_l.
* string/string.h: Add prototypes for new functions.
* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
* sysdeps/generic/strcasecmp_l.c: New file.
* sysdeps/generic/strncase_l.c: New file.
* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
wcsncase_l.
* wcsmbs/wchar.h: Add prototypes for new functions.
* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
* wcsmbs/wcscasecmp_l.c: New file.
* wcsmbs/wcsncase_l.c: New file.
* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
* wcsmcs/wcstod_l.c: New file.
* wcsmcs/wcstof_l.c: New file.
* wcsmcs/wcstold_l.c: New file.
* wcsmcs/wcstol_l.c: New file.
* wcsmcs/wcstoul_l.c: New file.
* wcsmcs/wcstoll_l.c: New file.
* wcsmcs/wcstoull_l.c: New file.
* Makeconfig (binfmt-subdir): New variable. Set to `elf' if
$(elf) is defined. More to come later when other binary formats
are supported.
* Makefile (subdirs): Remove elf. Add $(binfmt-subdir).
Suggested by Philip Blundell.
* stdlib/Makefile (headers): Add fmtmsg.h.
(routines): Add fmtmsg.
* stdlib/fmtmsg.c: New file.
* stdlib/fmtmsg.h: New file.
* manual/stdio.texi: Add description of fmtmsg and addseverity.
* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
documentation.
1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk>
* resolv/res_query.c (res_querydomain): Avoid potential buffer
overrun. Reported by Dan A. Dickey <ddickey@transition.com>.
1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* elf/dl-support.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Moved functions to ...
* elf/dl-misc.c: This new file.
* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
* elf/dl-misc.c: ... here.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Delete functions; they now come from
elf/dl-misc.c (dl-support.c had contained identical versions).
* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
that the regular ones in dl-misc work once we've initialized.
* elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c.
1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk>
* inet/Makefile (headers): Add netinet/inbits.h.
* inet/netinet/in.h: New file.
* sysdeps/generic/netinet/inbits.h: Likewise.
* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
* sysdeps/generic/netinet/ip6.h: Move to...
* inet/netinet/ip6.h: ... here.
* sysdeps/generic/netinet/icmp6.h: Move to...
* inet/netinet/icmp6.h: ... here.
* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
* sysdeps/generic/netinet/in.h: Remove.
1997-05-22 05:40 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
not looking at the new thread-safe .plt, don't be lazy about relocs.
(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
elf_machine_runtime_setup() decide if we can actually be lazy.
* elf/rtld.c (_dl_start): So don't call it.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
skeleton definition.
1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
stack by fxtract.
1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
add cast to (xdrproc_t) where necessary to prevent warnings.
1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.
* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
* nss/XXX-lookup.c: Add missing explanation.
1997-05-24 04:30:09 +02:00
|
|
|
|
|
|
|
/* Think about thread-safety -- the previous instructions must be
|
|
|
|
committed to memory before the first is overwritten. */
|
|
|
|
__asm__ __volatile__("wmb" : : : "memory");
|
|
|
|
|
1997-09-27 02:21:42 +02:00
|
|
|
/* Emit "ldah $27,hi($27)" */
|
Update.
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
strtoull_l, strtof_l, strtod_l, and strtold_l.
* stdlib/stdlib.h: Add prototypes for new functions.
* stdlib/strtod.c: Change for compiling as strtoX_l.
* stdlib/strtol.c: Likewise.
* stdlib/strtof.c: Likewise.
* stdlib/strtold.c: Likewise.
* stdlib/strtod_l.c: New file.
* stdlib/strtof_l.c: New file.
* stdlib/strtold_l.c: New file.
* stdlib/strtol_l.c: New file.
* stdlib/strtoul_l.c: New file.
* stdlib/strtoll_l.c: New file.
* stdlib/strtoull_l.c: New file.
* string/Makefile (routines): Add strcasecmp_l and strncase_l.
* string/string.h: Add prototypes for new functions.
* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
* sysdeps/generic/strcasecmp_l.c: New file.
* sysdeps/generic/strncase_l.c: New file.
* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
wcsncase_l.
* wcsmbs/wchar.h: Add prototypes for new functions.
* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
* wcsmbs/wcscasecmp_l.c: New file.
* wcsmbs/wcsncase_l.c: New file.
* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
* wcsmcs/wcstod_l.c: New file.
* wcsmcs/wcstof_l.c: New file.
* wcsmcs/wcstold_l.c: New file.
* wcsmcs/wcstol_l.c: New file.
* wcsmcs/wcstoul_l.c: New file.
* wcsmcs/wcstoll_l.c: New file.
* wcsmcs/wcstoull_l.c: New file.
* Makeconfig (binfmt-subdir): New variable. Set to `elf' if
$(elf) is defined. More to come later when other binary formats
are supported.
* Makefile (subdirs): Remove elf. Add $(binfmt-subdir).
Suggested by Philip Blundell.
* stdlib/Makefile (headers): Add fmtmsg.h.
(routines): Add fmtmsg.
* stdlib/fmtmsg.c: New file.
* stdlib/fmtmsg.h: New file.
* manual/stdio.texi: Add description of fmtmsg and addseverity.
* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
documentation.
1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk>
* resolv/res_query.c (res_querydomain): Avoid potential buffer
overrun. Reported by Dan A. Dickey <ddickey@transition.com>.
1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* elf/dl-support.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Moved functions to ...
* elf/dl-misc.c: This new file.
* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
* elf/dl-misc.c: ... here.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Delete functions; they now come from
elf/dl-misc.c (dl-support.c had contained identical versions).
* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
that the regular ones in dl-misc work once we've initialized.
* elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c.
1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk>
* inet/Makefile (headers): Add netinet/inbits.h.
* inet/netinet/in.h: New file.
* sysdeps/generic/netinet/inbits.h: Likewise.
* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
* sysdeps/generic/netinet/ip6.h: Move to...
* inet/netinet/ip6.h: ... here.
* sysdeps/generic/netinet/icmp6.h: Move to...
* inet/netinet/icmp6.h: ... here.
* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
* sysdeps/generic/netinet/in.h: Remove.
1997-05-22 05:40 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
not looking at the new thread-safe .plt, don't be lazy about relocs.
(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
elf_machine_runtime_setup() decide if we can actually be lazy.
* elf/rtld.c (_dl_start): So don't call it.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
skeleton definition.
1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
stack by fxtract.
1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
add cast to (xdrproc_t) where necessary to prevent warnings.
1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.
* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
* nss/XXX-lookup.c: Add missing explanation.
1997-05-24 04:30:09 +02:00
|
|
|
plte[0] = 0x277b0000 | (hi & 0xffff);
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Don't bother with the hint since we already know the hint is
|
|
|
|
wrong. Eliding it prevents the wrong page from getting pulled
|
|
|
|
into the cache. */
|
1996-06-21 06:30:50 +02:00
|
|
|
|
|
|
|
int hi, lo;
|
1997-09-27 02:21:42 +02:00
|
|
|
hi = (Elf64_Addr)got_addr - (Elf64_Addr)&plte[0];
|
1996-06-21 06:30:50 +02:00
|
|
|
lo = (short)hi;
|
|
|
|
hi = (hi - lo) >> 16;
|
|
|
|
|
1997-09-27 02:21:42 +02:00
|
|
|
/* Emit "ldq $27,lo($27)" */
|
1996-06-21 06:30:50 +02:00
|
|
|
plte[1] = 0xa77b0000 | (lo & 0xffff);
|
|
|
|
|
|
|
|
/* Emit "jmp $31,($27)" */
|
|
|
|
plte[2] = 0x6bfb0000;
|
Update.
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
strtoull_l, strtof_l, strtod_l, and strtold_l.
* stdlib/stdlib.h: Add prototypes for new functions.
* stdlib/strtod.c: Change for compiling as strtoX_l.
* stdlib/strtol.c: Likewise.
* stdlib/strtof.c: Likewise.
* stdlib/strtold.c: Likewise.
* stdlib/strtod_l.c: New file.
* stdlib/strtof_l.c: New file.
* stdlib/strtold_l.c: New file.
* stdlib/strtol_l.c: New file.
* stdlib/strtoul_l.c: New file.
* stdlib/strtoll_l.c: New file.
* stdlib/strtoull_l.c: New file.
* string/Makefile (routines): Add strcasecmp_l and strncase_l.
* string/string.h: Add prototypes for new functions.
* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
* sysdeps/generic/strcasecmp_l.c: New file.
* sysdeps/generic/strncase_l.c: New file.
* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
wcsncase_l.
* wcsmbs/wchar.h: Add prototypes for new functions.
* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
* wcsmbs/wcscasecmp_l.c: New file.
* wcsmbs/wcsncase_l.c: New file.
* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
* wcsmcs/wcstod_l.c: New file.
* wcsmcs/wcstof_l.c: New file.
* wcsmcs/wcstold_l.c: New file.
* wcsmcs/wcstol_l.c: New file.
* wcsmcs/wcstoul_l.c: New file.
* wcsmcs/wcstoll_l.c: New file.
* wcsmcs/wcstoull_l.c: New file.
* Makeconfig (binfmt-subdir): New variable. Set to `elf' if
$(elf) is defined. More to come later when other binary formats
are supported.
* Makefile (subdirs): Remove elf. Add $(binfmt-subdir).
Suggested by Philip Blundell.
* stdlib/Makefile (headers): Add fmtmsg.h.
(routines): Add fmtmsg.
* stdlib/fmtmsg.c: New file.
* stdlib/fmtmsg.h: New file.
* manual/stdio.texi: Add description of fmtmsg and addseverity.
* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
documentation.
1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk>
* resolv/res_query.c (res_querydomain): Avoid potential buffer
overrun. Reported by Dan A. Dickey <ddickey@transition.com>.
1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* elf/dl-support.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Moved functions to ...
* elf/dl-misc.c: This new file.
* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
* elf/dl-misc.c: ... here.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Delete functions; they now come from
elf/dl-misc.c (dl-support.c had contained identical versions).
* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
that the regular ones in dl-misc work once we've initialized.
* elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c.
1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk>
* inet/Makefile (headers): Add netinet/inbits.h.
* inet/netinet/in.h: New file.
* sysdeps/generic/netinet/inbits.h: Likewise.
* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
* sysdeps/generic/netinet/ip6.h: Move to...
* inet/netinet/ip6.h: ... here.
* sysdeps/generic/netinet/icmp6.h: Move to...
* inet/netinet/icmp6.h: ... here.
* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
* sysdeps/generic/netinet/in.h: Remove.
1997-05-22 05:40 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
not looking at the new thread-safe .plt, don't be lazy about relocs.
(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
elf_machine_runtime_setup() decide if we can actually be lazy.
* elf/rtld.c (_dl_start): So don't call it.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
skeleton definition.
1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
stack by fxtract.
1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
add cast to (xdrproc_t) where necessary to prevent warnings.
1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.
* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
* nss/XXX-lookup.c: Add missing explanation.
1997-05-24 04:30:09 +02:00
|
|
|
|
|
|
|
/* Think about thread-safety -- the previous instructions must be
|
|
|
|
committed to memory before the first is overwritten. */
|
|
|
|
__asm__ __volatile__("wmb" : : : "memory");
|
|
|
|
|
1997-09-27 02:21:42 +02:00
|
|
|
/* Emit "ldah $27,hi($27)" */
|
Update.
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
strtoull_l, strtof_l, strtod_l, and strtold_l.
* stdlib/stdlib.h: Add prototypes for new functions.
* stdlib/strtod.c: Change for compiling as strtoX_l.
* stdlib/strtol.c: Likewise.
* stdlib/strtof.c: Likewise.
* stdlib/strtold.c: Likewise.
* stdlib/strtod_l.c: New file.
* stdlib/strtof_l.c: New file.
* stdlib/strtold_l.c: New file.
* stdlib/strtol_l.c: New file.
* stdlib/strtoul_l.c: New file.
* stdlib/strtoll_l.c: New file.
* stdlib/strtoull_l.c: New file.
* string/Makefile (routines): Add strcasecmp_l and strncase_l.
* string/string.h: Add prototypes for new functions.
* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
* sysdeps/generic/strcasecmp_l.c: New file.
* sysdeps/generic/strncase_l.c: New file.
* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
wcsncase_l.
* wcsmbs/wchar.h: Add prototypes for new functions.
* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
* wcsmbs/wcscasecmp_l.c: New file.
* wcsmbs/wcsncase_l.c: New file.
* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
* wcsmcs/wcstod_l.c: New file.
* wcsmcs/wcstof_l.c: New file.
* wcsmcs/wcstold_l.c: New file.
* wcsmcs/wcstol_l.c: New file.
* wcsmcs/wcstoul_l.c: New file.
* wcsmcs/wcstoll_l.c: New file.
* wcsmcs/wcstoull_l.c: New file.
* Makeconfig (binfmt-subdir): New variable. Set to `elf' if
$(elf) is defined. More to come later when other binary formats
are supported.
* Makefile (subdirs): Remove elf. Add $(binfmt-subdir).
Suggested by Philip Blundell.
* stdlib/Makefile (headers): Add fmtmsg.h.
(routines): Add fmtmsg.
* stdlib/fmtmsg.c: New file.
* stdlib/fmtmsg.h: New file.
* manual/stdio.texi: Add description of fmtmsg and addseverity.
* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
documentation.
1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk>
* resolv/res_query.c (res_querydomain): Avoid potential buffer
overrun. Reported by Dan A. Dickey <ddickey@transition.com>.
1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* elf/dl-support.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Moved functions to ...
* elf/dl-misc.c: This new file.
* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
* elf/dl-misc.c: ... here.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
_dl_sysdep_read_whole_file): Delete functions; they now come from
elf/dl-misc.c (dl-support.c had contained identical versions).
* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
that the regular ones in dl-misc work once we've initialized.
* elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c.
1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk>
* inet/Makefile (headers): Add netinet/inbits.h.
* inet/netinet/in.h: New file.
* sysdeps/generic/netinet/inbits.h: Likewise.
* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
* sysdeps/generic/netinet/ip6.h: Move to...
* inet/netinet/ip6.h: ... here.
* sysdeps/generic/netinet/icmp6.h: Move to...
* inet/netinet/icmp6.h: ... here.
* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
* sysdeps/generic/netinet/in.h: Remove.
1997-05-22 05:40 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
not looking at the new thread-safe .plt, don't be lazy about relocs.
(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
elf_machine_runtime_setup() decide if we can actually be lazy.
* elf/rtld.c (_dl_start): So don't call it.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
skeleton definition.
1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
stack by fxtract.
1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
add cast to (xdrproc_t) where necessary to prevent warnings.
1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.
* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
* nss/XXX-lookup.c: Add missing explanation.
1997-05-24 04:30:09 +02:00
|
|
|
plte[0] = 0x277b0000 | (hi & 0xffff);
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
|
1996-08-12 04:44:03 +02:00
|
|
|
/* At this point, if we've been doing runtime resolution, Icache is dirty.
|
|
|
|
This will be taken care of in _dl_runtime_resolve. If instead we are
|
|
|
|
doing this as part of non-lazy startup relocation, that bit of code
|
|
|
|
hasn't made it into Icache yet, so there's nothing to clean up. */
|
2000-05-05 09:15:29 +02:00
|
|
|
|
|
|
|
return value;
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
|
Update.
1997-10-12 05:09 Ulrich Drepper <drepper@cygnus.com>
* libio/Makefile (routines): Remove iofprintf.
* stdio-common/fprintf.c [USE_IN_LIBIO]: Define _IO_fprintf.
* libio/filedoalloc.c: Use _G_stat64 instead of stat.
* libio/fileops.c (_IO_file_open): Change to take extra argument
indicating whether 32 or 64 bit mode is wanted.
* libio/iofopen.c: Call _IO_file_open with extra argument set to 0.
* libio/iofopen64.c: Call _IO_file_open with extra argument set to 0.
* libio/iolibio.h (_IO_freopen, _IO_freopen64): Likewise.
* libio/iofgetpos.c: Pretty print.
* libio/iofgetpos64.c: Use _IO_fpos64_t for local variable `pos'.
* manual/conf.texi: Document all the _SC_ and _CS_ constants.
* manual/creature.texi: Document _LARGEFILE_SOURCE, _LARGEFILE64_SOURCE
and _FILE_OFFSET_BITS.
* manual/llio.texi: Document truncate and ftruncate.
* manual/stdio.texi: Document positional parameters for printf.
* math/Makefile (headers): Add tgmath.h.
(libm-support): Remove s_lrint, s_llrint, s_lround, and s_llround and
move to ...
(libm-calls): ... here. Add scalbln, s_nextafterx and s_fma.
* math/libm-test.c (lround_test, llround_test): Test for all FP formats
by using FUNC().
* math/libm.map: Add fma, fmaf, fmal, nextafterx, nextafterxf,
nextafterxl, scalbln, scalblnf, scalblnl, lrintf, lrintl, llrintf,
llrintl, lroundf, lroundl, llroundf, and llroundl.
* math/math.h: Document new platform specific macros from mathdef.h.
Remove declaration of lrint, llrint, lround, and llround.
* math/test-double.c: Define TEST_DOUBLE.
* math/test-idouble.c: Likewise.
* math/test-float.c: Define TEST_FLOAT.
* math/test-ifloat.c: Likewise.
* math/tgmath.h: New file.
* math/bits/mathcalls.h: Add nextafterx, scalbln, fma, lrint, llrint,
lround, and llround.
Change second argument of scalbn to `int'.
* sysdeps/libm-ieee754/s_fma.S: New file.
* sysdeps/libm-ieee754/s_fmaf.S: New file.
* sysdeps/libm-ieee754/s_fmal.S: New file.
* sysdeps/libm-i387/s_fma.S: New file.
* sysdeps/libm-i387/s_fmaf.S: New file.
* sysdeps/libm-i387/s_fmal.S: New file.
* sysdeps/libm-i387/s_llrint.S: Change to take double argument.
* sysdeps/libm-i387/s_lrint.S: Likewise.
* sysdeps/libm-i387/s_llrintf.S: New file.
* sysdeps/libm-i387/s_llrintl.S: New file.
* sysdeps/libm-i387/s_lrintf.S: New file.
* sysdeps/libm-i387/s_lrintl.S: New file.
* sysdeps/libm-ieee754/s_llrint.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lrint.c: Likewise.
* sysdeps/libm-ieee754/s_llrintf.S: New file.
* sysdeps/libm-ieee754/s_llrintl.S: New file.
* sysdeps/libm-ieee754/s_lrintf.S: New file.
* sysdeps/libm-ieee754/s_lrintl.S: New file.
* sysdeps/libm-i387/s_scalbln.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnf.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnl.c: New file. Empty file.
* sysdeps/libm-i387/s_scalbn.c: Add scalbln as alias.
* sysdeps/libm-i387/s_scalbnf.c: Add scalblnf as alias.
* sysdeps/libm-i387/s_scalbnl.c: Add scalblnl as alias.
* sysdeps/libm-ieee754/s_llround.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lround.c: Likewise.
* sysdeps/libm-ieee754/s_llroundf.c: Likewise.
* sysdeps/libm-ieee754/s_llroundl.c: Likewise.
* sysdeps/libm-ieee754/s_lroundf.c: Likewise.
* sysdeps/libm-ieee754/s_lroundl.c: Likewise.
* sysdeps/libm-ieee754/s_nextafterl.c: Add alias fo nextafterxl.
* sysdeps/libm-ieee754/s_nextafterx.c: New file.
* sysdeps/libm-ieee754/s_nextafterxf.c: New file.
* sysdeps/libm-ieee754/s_nextafterxl.c: New file.
* sysdeps/libm-ieee754/s_scalbln.c: New file.
* sysdeps/libm-ieee754/s_scalblnf.c: New file.
* sysdeps/libm-ieee754/s_scalblnl.c: New file.
* sysdeps/libm-ieee754/s_scalbn.c: Change to take `int' as second arg.
* sysdeps/libm-ieee754/s_scalbnf.c: Likewise.
* sysdeps/libm-ieee754/s_scalbnl.c: Likewise.
* stdlib/stdlib.h: Protect declarations of __strto*l_internal functions
by #ifdefs since they are duplicated in inttypes.h.
* sysdeps/wordsize-32/inttypes.h: Add definition of strtoimax and
strtoumax plus needed declarations.
* sysdeps/generic/confname.h (_SC_AIO_LISTIO_MAX): Fix typo.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* locale/programs/locfile.c (locfile_read): Correct while loop.
* db2/makedb.c (main): Add missing parameter for error output.
(process_input): Likewise.
* resolv/gethnamaddr.c (getanswer): Rewrite a bit to avoid warning.
1997-10-12 05:05 Ulrich Drepper <drepper@cygnus.com>
* libc-map: Add __bzero, __mempcpy.
1997-10-10 18:51 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Remove dependencies
on kernel_termios.h
1997-10-09 10:24 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
Add the changes from the Solaris 2.6 header files, use the new public
defines/functions.
* nis/nis_addmember.c: Updated.
* nis/nis_checkpoint.c: Updated.
* nis/nis_creategroup.c: updated.
* nis/nis_destroygroup.c: Updated.
* nis/nis_getservlist.c: Updated.
* nis/nis_ismember.c: Updated.
* nis/nis_lookup.c: Updated.
* nis/nis_modify.c: Updated.
* nis/nis_ping.c: Updated.
* nis/nis_print.c: Updated.
* nis/nis_print_group_entry.c: Updated.
* nis/nis_remove.c: Updated.
* nis/nis_removemember.c: Updated.
* nis/nis_xdr.c: Updated.
* nis/nss_nisplus/nisplus-alias.c: Updated.
* nis/nss_nisplus/nisplus-ethers.c: Updated.
* nis/nss_nisplus/nisplus-hosts.c: Updated.
* nis/nss_nisplus/nisplus-network.c: Updated.
* nis/nss_nisplus/nisplus-parser.c: Updated.
* nis/nss_nisplus/nisplus-proto.c: Updated.
* nis/nss_nisplus/nisplus-rpc.c: Updated.
* nis/nss_nisplus/nisplus-service.c: Updated.
* nis/rpcsvc/nis.h: Updated.
* nis/rpcsvc/nis.x: Updated.
* nis/rpcsvc/nis_object.x: Updated.
* nis/rpcsvc/nis_tags.h: Updated.
* nis/rpcsvc/nislib.h: Updated.
* nis/lckcache.c: Removed, since Sun has dropped the directory
signatures. The old cache version is now a security risk and not
longer supported by Sun.
* nis/nis_cache.c: Likewise.
* nis/rpcsvc/nis_cache.h: Likewise.
* nis/rpcsvc/nis_cache.x: Likewise.
* nis/nis_call.c: Remove calls to the cache functions.
* nis/libnsl.map: Remove cache and depending functions.
* nis/nis_intern.h: Likewise.
* nis/nis_add.c: Remove #include <rpcsvc/nislib.h>.
* nis/nis_domain_of.c: Likewise.
* nis/nis_domain_of_r.c: Likewise.
* nis/nis_error.c: Likewise.
* nis/nis_file.c: Likewise.
* nis/nis_local_names.c: Likewise.
* nis/nis_mkdir.c: Likewise.
* nis/nis_rmdir.c: Likewise.
* nis/nis_subr.c: Likewise.
* nis/nis_verifygroup.c: Likewise.
* nis/nis_clone.c: Removed, replaced by ...
* nis/nis_clone_dir.c: New.
* nis/nis_clone_obj.c: New.
* nis/nis_clone_res.c: New.
* nis/nis_table.c: Fixed bugs shown through the new clone functions.
* nis/nis_defaults.c: Fixed a lot of race conditions.
* nis/nis_free.c: Rewritten.
* sunrpc/auth_des.c: Fix use of free'ed pointer.
* nis/Makefile (libnsl-routines): Remove nis_clone, nis_cache and
lckcache. Add nis_clone_dir, nis_clone_obj, and nis_clone_res.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* wctype/test_wctype.c (TEST): Add parens to avoid ambiguity.
1997-10-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* include/features.h: Don't crash if _XOPEN_SOURCE is defined to
be empty.
1997-10-09 05:54 Ulrich Drepper <drepper@cygnus.com>
* nss/digits_dots.c: Place `result' in resbuf and not in `buffer'.
* nss/getXXbyYY_r.c: Make sure digits_dots.c sees `resbuf' as
struct and not a pointer. Little optimizations.
1997-10-09 05:00 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/getenv.c: Remove unused file.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/stub/morecore.c: Likewise.
* sysdeps/stub/putenv.c: Likewise.
* sysdeps/stub/sbrk.c: Likewise.
* sysdeps/stub/setenv.c: Likewise.
* sysdeps/stub/sysd-stdio.c: Likewise.
* sysdeps/stub/sysdep.h: Likewise.
Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.
1997-10-09 04:58 Ulrich Drepper <drepper@cygnus.com>
* configure.in: Add __bzero definition to DWARF2 unwind test.
Reported by David S. Miller <davem@caip.rutgers.edu>.
1997-10-07 Paul Eggert <eggert@twinsun.com>
* intl/loadmsgcat.c (_nl_load_domain):
Fix &&/|| typo when checking file size.
Check for overflow when stuffing off_t into size_t.
1997-10-07 18:11 Ulrich Drepper <drepper@cygnus.com>
* time/africa: Update from tzdata1997i.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* posix/globtest.sh: Add arguments for name of dynamic linker and
call dynamic linker to execute globtest.
* posix/Makefile (tests): Supply arguments to globtest.sh.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* nis/rpcsvc/ypupd.h: Add missing __END_DECLS.
1997-10-03 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libc.map: Add mempcpy, prctl.
1997-09-30 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/generic/memcmp.c: Avoid warnings.
* sysdeps/generic/memset.c: Likewise.
* sysdeps/generic/strchr.c: Likewise.
* sysdeps/generic/strlen.c: Likewise.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* malloc/Makefile ($(objpfx)mtrace): Fix typo.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix last change.
The R_68K_GLOB_DAT and R_68K_JMP_SLOT relocations really ignore
the addend, Richard.
(elf_machine_fixup_plt): Don't add the addend.
(elf_machine_plt_value): New function.
* sysdeps/alpha/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/powerpc/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/i386/dl-machine.h (elf_machine_plt_value): New
function.
* elf/dl-runtime.c (fixup, profile_fixup): Don't add in the
addend, instead let the machine dependent setup decide.
1997-09-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/m68020/bits/string.h: New file.
1997-10-07 04:27 Richard Henderson <rth@cygnus.com>
* Makeconfig (+includes): Add -I$(objpfx).
* stdlib/longlong.h [__sparc__]: Prototype __udiv_qrnnd.
* sysdeps/alpha/setjmp.S: __setjmp is the same as _setjmp. Make
the former a strong symbol and the later a weak alias.
* sysdeps/sparc/sparc32/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S: Likewise.
1997-10-06 21:01 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Make ino_t
64-bits.
* sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h: Make st_ino
member 64-bits as well, to match the kernel.
1997-10-06 19:35 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/sparc/sparc64/sub_n.S: Fix typo.
Patch by Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz>.
1997-10-06 01:09 Zack Weinberg <zack@rabi.phys.columbia.edu>
* time/README: Correct list of files from tzcode package. Add
contact information for tzcode/tzdata maintainers. Correct
spelling of author's name. Compact lists.
1997-10-06 01:48 Ulrich Drepper <drepper@cygnus.com>
* malloc/malloc.h: Remove hook definition without caller argument.
* malloc/malloc.c: Likewise.
* string/tester.c: Correct strsep test.
* string/bits/string2.h: Define __string2_1bptr_p and use it.
Patch by David S. Miller <davem@tanya.rutgers.edu>.
* math/Makefile (routines): Add s_clog10.
* math/libm-test.c: Add test for clog10.
* math/libm.map: Add clog10{,f,l}.
* math/bits/cmathcalls.h [__USE_GNU]: Add clog10.
* sysdeps/libm-ieee754/s_clog10.c: New file.
* sysdeps/libm-ieee754/s_clog10f.c: New file.
* sysdeps/libm-ieee754/s_clog10l.c: New file.
* manual/math.texi: Describe clog10.
* config.h.in: Add USE_REGPARMS and define internal_function based on
this.
* configure.in: Define USE_REGPARMS for ix86 machines.
* gmon/gmon.c: Mark write_hist, write_call_graph and write_bb_counts
as internal functions.
* inet/getnameinfo.c: Likewise for nrl_domainname.
* inet/getnetgrent_r.c: Likewise for __internal_setnetgrent_reuse.
* inet/rcmd.c: Likewise for __icheckhost.
* intl/dcgettext.c: Likewise for category_to_name and
guess_category_value.
* intl/localealias.c: Likewise for read_alias_file.
* io/fts.c: Likewise for fts_alloc, fts_build, fts_lfree,
fts_maxarglen, fts_padjust, fts_palloc, fts_sort, and fts_stat.
* libio/genops.c: Likewise for save_for_backup.
* malloc/malloc.c (chunk_free, chunk_alloc, chunk_realloc, chunk_align,
main_trim, heap_trim): Likewise.
* malloc/mtrace.c (tr_where): Likewise.
* misc/fstab.c (mnt2fs): Likewise.
* misc/getttyent.c (skip, value): Likewise.
* misc/syslog.c (openlog_internal): Likewise.
* misc/tsearch.c (trecurse, tdestroy_internal): Likewise.
* nss/nsswitch.c (nss_lookup_function, nss_parse_file, nss_getline,
nss_parse_service_list, nss_new_service): Likewise.
* posix/wordexp.c (parse_dollars, parse_backtick, eval_expr): Likewise.
* resolv/inet_ntop.c (inet_ntop4, inet_ntop6): Likewise.
* resolv/inet_pton.c (inet_pton4, inet_pton6): Likewise.
* resolv/res_init.c (res_setoptions): Likewise.
* stdio-common/printf_fp.c (group_number): Likewise.
* stdio-common/vfprintf.c (buffered_vfprintf, group_number): Likewise.
* stdlib/fmtmsg.c (internal_addseverity): Likewise.
* sunrpc/auth_des.c (synchronize): Likewise.
* sunrpc/auth_unix.c (marshal_new_auth): Likewise.
* sunrpc/clnt_perr.c (auth_errmsg): Likewise.
* sunrpc/key_call.c (key_call): Likewise.
* sunprc/pmap_rmt.c (getbroadcastnets): Likewise.
* sunrpc/svc_tcp.c (makefd_xprt): Likewise.
* sunrpc/svcauth_des.c (cache_init, cache_spot, cache_ref, invalidate):
Likewise.
* sunrpc/xdr_rec.c (fix_buf_size, skip_input_bytes, flush_out,
set_input_fragment, get_input_bytes): Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (get_proc_path,
phys_pages_info): Likewise.
* sysdeps/unix/sysv/linux/if_index.c (opensock): Likewise.
* sysdeps/unix/sysv/linux/poll.c (__emulate_poll): Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_readv_replacement):
Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_writev_replacement):
Likewise.
* time/strptime.c (strptime_internal): Likewise.
* time/tzfile.c (find_transition, compute_tzname_max): Likewise.
* time/tzset.c (compute_change, tz_compute, tzset_internal): Likewise.
* libc.map: Remove _libio_using_thunks, add _fp_hw and _dl_addr.
* ctype/ctype.h: Pretty print.
* grp/grp.h: Likewise.
* include/libc-symbols.h: Likewise.
* include/limits.h: Likewise.
* include/values.h: Likewise.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* libio/stdio.h: Likewise.
* malloc/malloc.h: Likewise.
* misc/err.h: Likewise.
* misc/regexp.h: Likewise.
* misc/sys/cdefs.h: Likewise.
* misc/sys/file.h: Likewise.
* posix/sys/utsname.h: Likewise.
* posix/sys/wait.h: Likewise.
* pwd/pwd.h: Likewise.
* resolv/netdb.h: Likewise.
* signal/signal.h: Likewise.
* stdlib/stdlib.h: Likewise.
* string/endian.h: Likewise.
* string/memory.h: Likewise.
* sysdeps/mach/hurd/bits/fcntl.h: Likewise.
* sysdeps/mach/hurd/sys/param.h: Likewise.
* sysdeps/unix/sysv/linux/sys/param.h: Likewise.
* termios/termios.h: Likewise.
* wcsmbs/wchar.h: Likewise.
* wctype/wctype.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/wait3.c: Use __WAIT_STATUS in definition.
Implement Large File Support API.
* include/features.h: Add suuport for _LARGEFILE_SOURCE,
_LARGEFILE64_SOURCE, and _FILE_OFFSET_BITS.
* libc.map: Add new functions for LFS.
* dirent/Makefile (routines): Add readdir64 and readdir64_r.
* dirent/dirent.h: Update readdir prototype for LFS and add new
prototypes for above functions.
* io/Makefile (routines): Add xstat64, fxstat64, lxstat64,
statfs64, fstatfs64, lstat64, open64, lseek64, creat64, and ftw64.
* io/creat64.c: New file.
* io/fstat64.c: New file.
* io/lstat64.c: New file.
* io/stat64.c: New file.
* io/ftw64.c: New file.
* io/ftw.c: Rewrite to allow easy definition of ftw64.
* io/ftw.h: Add LFS interface.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* io/sys/statfs.h: Likewise.
* libio/Makefile (routines): Add iofgetpos64, iofopen64, iofsetpos64,
freopen64, fseeko64, and ftello64.
* libcio/fseeko64.c: New file.
* libio/ftello64.c: New file.
* libio/iofgetpos64.c: New file.
* libio/iofopen64.c: New file.
* libio/iofsetpos64.c: New file.
* libio/fileops.c (_IO_file_fopen): Change to use _IO_off64_t.
(_IO_file_attach): Likewise.
(_IO_do_write): Likewise.
(_IO_file_sync): Likewise.
(_IO_file_seek): Likewise.
(_IO_file_seekoff): Likewise. Use _G_stat64.
(_IO_file_fopen64): New function.
(_IO_file_jumps): Initialize showmanyc and imbue.
* libio/genops.c (_IO_default_seekpos): Change to use _IO_fpos64_t.
(_IO_default_seekoff): Likewise.
(_IO_default_seek): Likewise.
(_IO_default_showmanyc, _IO_default_imbue): New functions.
* libio/iofopncook.c (_IO_cookie_seek): Change to use _IO_off64_t.
* libio/iolibio.h: Add prototypes for LFS functions.
* libio/ioseekoff.c: Change to use _IO_fpos64_t.
* libio/ioseekpos.c: Likewise.
* libio/libio.h: Define _IO_fpos64_t and _IO_off64_t.
(_IO_FILE): Move _offset field to end and change type to _IO_off64_t.
(_IO_seekoff, _IO_seekpos): Change prototype.
* libio/libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Change
to use _IO_off64_t.
Change prototypes for function from the *ops.c files.
* libio/stdio.h: Add LFS interface definition.
* libio/strops.c (_IO_str_seekoff): Change to use _IO_fpos64_t.
* posix/Makefile (routines): Add pread64 and pwrite64.
* posix/confstr.c: Handle _CS_LFS* requests.
* posix/getconf.c: Handle LFS* requests.
* sysdeps/generic/confname.h: Add _CS_LFS* constants.
* posix/unistd.h: Document _LFS64_LARGEFILE and _LFS64_STDIO.
Define off_t and off64_t appropriately. Change prototypes of
LFS functions.
* posix/sys/types.h: Add LFS types.
* resources/Makefile (routines): Add getrlimit64 and setlimit64.
* resource/sys/resource.h: Change prototypes of LFS functions.
* stdio-common/Makefile (routines): Add tmpfile64.
* stdio-common/tmpfile64.c: New file.
* sysdeps/generic/_G_config.h: Define _G_fpos64_t and _G_off64_t.
Define _G_OPEN64, _G_LSEEK64, _G_FSTAT64.
* sysdeps/unix/sysv/linux/_G_config.h: Likewise.
* sysdeps/generic/bits/resource.h: Add LFS definitions.
* sysdeps/unix/bsd/sun/sunos4/bits/resource.h: Likewise.
* sysdeps/unix/sysv/linux/bits/resource.h: Likewise.
* sysdeps/generic/statfs.h: Use __fsblkcnt_t for some of the fields.
* sysdeps/unix/sysv/linux/bits/statfs.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
* sysdeps/generic/types.h: Define LFS types.
* sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise.
* sysdeps/generic/sys/mman.h: Add LFS definitions.
* sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
* sysdeps/generic/mach/hurd/bits/fcntl.h: Add flock LFS extensions.
* sysdeps/unix/bsd/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
* sysdeps/generic/mach/hurd/bits/stat.h: Add stat LFS extensions.
* sysdeps/unix/bsd/bits/stat.h: Likewise.
* sysdeps/unix/bsd/osf/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/i386/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/solaris2/bits/stat.h: Likewise.
* sysdeps/posix/open64.c: New file.
* sysdeps/stub/fstatfs64.c: New file.
* sysdeps/stub/fxstat64.c: New file.
* sysdeps/stub/getrlimit64.c: New file.
* sysdeps/stub/lseek64.c: New file.
* sysdeps/stub/lxstat64.c: New file.
* sysdeps/stub/open64.c: New file.
* sysdeps/stub/pread64.c: New file.
* sysdeps/stub/pwrite64.c: New file.
* sysdeps/stub/readdir64.c: New file.
* sysdeps/stub/readdir64_r.c: New file.
* sysdeps/stub/setrlimit64.c: New file.
* sysdeps/stub/statfs64.c: New file.
* sysdeps/stub/xstat64.c: New file.
* sysdeps/unix/sysv/linux/llseek.c: Define as __llseek and make
llseek and lseek64 weak aliases.
* sysdeps/unix/sysv/linux/lseek64.c: New file. Empty.
* sysdeps/unix/sysv/linux/alpha/bits/dirent.h: New file.
* sysdeps/unix/sysv/linux/bits/dirent.h: Add LFS definitions.
* sysdeps/posix/tempname.c: Add extra argument to trigger use of
open64.
* sysdeps/stub/tempname.c: Likewise.
* stdio-common/tempnam.c: Call __stdio_gen_tempname with extra
argument.
* stdio-common/tmpfile.c: Likewise.
* stdio-common/tmpnam.c: Likewise.
* stdio-common/tmpnam_r.c: Likewise.
* libio/libioP.h: Add definition ofr showmanyc and imbue callbacks.
* libio/fileops.c (_IO_file_jumps): Initialize showmanyc and imbue.
* libio/iofopncook.c (_IO_cookie_jumps): Likewise.
* libio/iopopen.c (_IO_proc_jumps): Likewise.
* libio/memstream.c (_IO_mem_jumps): Likewise.
* libio/obprintf.c (_IO_obstack_jumps): Likewise.
* libio/vsnprintf.c (_IO_strn_jumps): Likewise.
* libio/strops.c (_IO_str_jumps): Likewise.
* manual/arith.texi: Add a few words why cabs should be used.
* manual/llio.texi: Describe sync, fsync, fdatasync.
Tell about cleanup handlers & fcntl,lseek,write,read,close,open.
* manual/process.texi: Tell about cleanup handlers & system,waitpid,
wait.
* manual/signal.texi: Likewise for pause.
* manual/terminal.texi: Likewise for tcdrain.
* manual/time.texi: Document nanosleep.
* posix/exevp.c: Don't use nested function.
* stdlib/ucontext.h: New file.
* sysdeps/i386/sys/ucontext.h: New file. SysV/i386 API definitions.
* sunrpc/xcrypt.c (hexval): Make a macro for efficiency.
* sysdeps/i386/setjmp.h: Make `here` label local.
* sysdeps/i386/elf/start.S: Define _fp_hw "variable".
* sysdeps/stub/fstatfs.c: Correct warning.
* sysdeps/stub/fxstat.c: Likewise.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/unix/sysv/i386/i686/time.S: New file.
1997-10-03 20:56 Jason Merrill <jason@yorick.cygnus.com>
* malloc/obstack.h (obstack_empty_p): New macro.
1997-10-04 17:41 Philip Blundell <Philip.Blundell@pobox.com>
* inet/getnameinfo.c (getnameinfo): Remove spurious `#if INET6'.
1997-09-30 Zack Weinberg <zack@rabi.phys.columbia.edu>
* maint.texi: Add copyright terms for libdb (Sleepycat, Harvard).
Document new --with-binutils switch; delete reference to
--with-gnu-as, --with-gnu-ld, --with-gnu-binutils.
Add to description of --without-fp: a kernel FPU emulator
is adequate (from FAQ)
* INSTALL: Regenerated.
1997-09-30 17:29 Richard Henderson <rth@cygnus.com>
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Move
_dl_hwcap declaration to ...
(elf_machine_fixup_plt): ... here.
1997-10-12 06:05:44 +02:00
|
|
|
/* Return the final value of a plt relocation. */
|
|
|
|
static inline Elf64_Addr
|
|
|
|
elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,
|
|
|
|
Elf64_Addr value)
|
|
|
|
{
|
|
|
|
return value + reloc->r_addend;
|
|
|
|
}
|
|
|
|
|
1997-09-27 02:21:42 +02:00
|
|
|
#endif /* !dl_machine_h */
|
|
|
|
|
|
|
|
#ifdef RESOLVE
|
|
|
|
|
1996-06-12 06:51:48 +02:00
|
|
|
/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
|
|
|
|
MAP is the object containing the reloc. */
|
|
|
|
static inline void
|
|
|
|
elf_machine_rela (struct link_map *map,
|
|
|
|
const Elf64_Rela *reloc,
|
1997-02-15 05:31:36 +01:00
|
|
|
const Elf64_Sym *sym,
|
1997-07-29 00:35:20 +02:00
|
|
|
const struct r_found_version *version,
|
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Don't assume reloc_addr is aligned. * sysdeps/alpha/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/cris/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/hppa/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/ia64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/m68k/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/mips/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela_relative, elf_machine_rela): Adjust. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): * sysdeps/sh/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/x86_64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust.
2003-07-31 Alexandre Oliva <aoliva@redhat.com>
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
reloc_addr is aligned.
* sysdeps/alpha/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/cris/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/hppa/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/ia64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/m68k/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/mips/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rela_relative, elf_machine_rela): Adjust.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative):
* sysdeps/sh/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
2003-07-31 08:33:53 +02:00
|
|
|
void *const reloc_addr_arg)
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Don't assume reloc_addr is aligned. * sysdeps/alpha/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/cris/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/hppa/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/ia64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/m68k/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/mips/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela_relative, elf_machine_rela): Adjust. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): * sysdeps/sh/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/x86_64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust.
2003-07-31 Alexandre Oliva <aoliva@redhat.com>
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
reloc_addr is aligned.
* sysdeps/alpha/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/cris/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/hppa/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/ia64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/m68k/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/mips/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rela_relative, elf_machine_rela): Adjust.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative):
* sysdeps/sh/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
2003-07-31 08:33:53 +02:00
|
|
|
Elf64_Addr *const reloc_addr = reloc_addr_arg;
|
2000-05-05 09:15:29 +02:00
|
|
|
unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info);
|
1996-07-16 08:38:54 +02:00
|
|
|
|
2002-02-01 02:33:04 +01:00
|
|
|
#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED
|
1996-07-08 08:18:25 +02:00
|
|
|
/* This is defined in rtld.c, but nowhere in the static libc.a; make the
|
|
|
|
reference weak so static programs can still link. This declaration
|
|
|
|
cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP)
|
|
|
|
because rtld.c contains the common defn for _dl_rtld_map, which is
|
|
|
|
incompatible with a weak decl in the same file. */
|
|
|
|
weak_extern (_dl_rtld_map);
|
|
|
|
#endif
|
1996-06-12 06:51:48 +02:00
|
|
|
|
|
|
|
/* We cannot use a switch here because we cannot locate the switch
|
|
|
|
jump table until we've self-relocated. */
|
|
|
|
|
2001-08-31 01:09:38 +02:00
|
|
|
#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
|
2001-08-24 10:53:35 +02:00
|
|
|
if (__builtin_expect (r_type == R_ALPHA_RELATIVE, 0))
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
2001-08-31 01:09:38 +02:00
|
|
|
# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC
|
1996-07-16 08:38:54 +02:00
|
|
|
/* Already done in dynamic linker. */
|
2002-02-01 02:33:04 +01:00
|
|
|
if (map != &GL(dl_rtld_map))
|
2001-08-31 01:09:38 +02:00
|
|
|
# endif
|
2000-09-29 08:52:39 +02:00
|
|
|
{
|
2002-10-02 22:24:21 +02:00
|
|
|
/* XXX Make some timings. Maybe it's preferable to test for
|
2000-09-29 08:52:39 +02:00
|
|
|
unaligned access and only do it the complex way if necessary. */
|
|
|
|
Elf64_Addr reloc_addr_val;
|
|
|
|
|
|
|
|
/* Load value without causing unaligned trap. */
|
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Don't assume reloc_addr is aligned. * sysdeps/alpha/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/cris/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/hppa/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/ia64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/m68k/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/mips/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela_relative, elf_machine_rela): Adjust. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): * sysdeps/sh/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/x86_64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust.
2003-07-31 Alexandre Oliva <aoliva@redhat.com>
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
reloc_addr is aligned.
* sysdeps/alpha/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/cris/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/hppa/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/ia64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/m68k/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/mips/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rela_relative, elf_machine_rela): Adjust.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative):
* sysdeps/sh/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
2003-07-31 08:33:53 +02:00
|
|
|
memcpy (&reloc_addr_val, reloc_addr_arg, 8);
|
2000-09-29 08:52:39 +02:00
|
|
|
reloc_addr_val += map->l_addr;
|
|
|
|
|
|
|
|
/* Store value without causing unaligned trap. */
|
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Don't assume reloc_addr is aligned. * sysdeps/alpha/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/cris/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/hppa/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/ia64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/m68k/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/mips/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela_relative, elf_machine_rela): Adjust. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): * sysdeps/sh/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/x86_64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust.
2003-07-31 Alexandre Oliva <aoliva@redhat.com>
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
reloc_addr is aligned.
* sysdeps/alpha/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/cris/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/hppa/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/ia64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/m68k/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/mips/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rela_relative, elf_machine_rela): Adjust.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative):
* sysdeps/sh/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
2003-07-31 08:33:53 +02:00
|
|
|
memcpy (reloc_addr_arg, &reloc_addr_val, 8);
|
2000-09-29 08:52:39 +02:00
|
|
|
}
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
else
|
2001-08-31 01:09:38 +02:00
|
|
|
#endif
|
2002-10-02 22:24:21 +02:00
|
|
|
if (__builtin_expect (r_type == R_ALPHA_NONE, 0))
|
|
|
|
return;
|
|
|
|
else
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
2002-11-08 03:20:41 +01:00
|
|
|
Elf64_Addr sym_value;
|
2003-01-12 20:22:32 +01:00
|
|
|
Elf64_Addr sym_raw_value;
|
1996-06-12 06:51:48 +02:00
|
|
|
|
2002-11-08 03:20:41 +01:00
|
|
|
#if defined USE_TLS && !defined RTLD_BOOTSTRAP
|
|
|
|
struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
|
2003-01-12 20:22:32 +01:00
|
|
|
sym_raw_value = sym_value = reloc->r_addend;
|
|
|
|
if (sym)
|
|
|
|
{
|
|
|
|
sym_raw_value += sym->st_value;
|
|
|
|
sym_value = sym_raw_value + sym_map->l_addr;
|
|
|
|
}
|
2002-11-08 03:20:41 +01:00
|
|
|
#else
|
|
|
|
Elf64_Addr loadbase = RESOLVE (&sym, version, r_type);
|
2003-01-12 20:22:32 +01:00
|
|
|
sym_raw_value = sym_value = reloc->r_addend;
|
|
|
|
if (sym)
|
|
|
|
{
|
|
|
|
sym_raw_value += sym->st_value;
|
|
|
|
sym_value = sym_raw_value + loadbase;
|
|
|
|
}
|
2002-11-08 03:20:41 +01:00
|
|
|
#endif
|
1996-06-12 06:51:48 +02:00
|
|
|
|
1997-03-25 03:25:35 +01:00
|
|
|
if (r_type == R_ALPHA_GLOB_DAT)
|
1996-07-08 08:18:25 +02:00
|
|
|
*reloc_addr = sym_value;
|
Update.
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.
2001-12-12 01:21:26 +01:00
|
|
|
#ifdef RESOLVE_CONFLICT_FIND_MAP
|
|
|
|
/* In .gnu.conflict section, R_ALPHA_JMP_SLOT relocations have
|
|
|
|
R_ALPHA_JMP_SLOT in lower 8 bits and the remaining 24 bits
|
|
|
|
are .rela.plt index. */
|
|
|
|
else if ((r_type & 0xff) == R_ALPHA_JMP_SLOT)
|
|
|
|
{
|
|
|
|
/* elf_machine_fixup_plt needs the map reloc_addr points into,
|
|
|
|
while in _dl_resolve_conflicts map is _dl_loaded. */
|
|
|
|
RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr);
|
|
|
|
reloc = ((const Elf64_Rela *) D_PTR (map, l_info[DT_JMPREL]))
|
|
|
|
+ (r_type >> 8);
|
|
|
|
elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
else if (r_type == R_ALPHA_JMP_SLOT)
|
2000-07-18 16:55:31 +02:00
|
|
|
elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value);
|
Update.
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.
2001-12-12 01:21:26 +01:00
|
|
|
#endif
|
2001-02-28 16:24:30 +01:00
|
|
|
#ifndef RTLD_BOOTSTRAP
|
1997-03-25 03:25:35 +01:00
|
|
|
else if (r_type == R_ALPHA_REFQUAD)
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
2000-07-01 07:19:18 +02:00
|
|
|
/* Store value without causing unaligned trap. */
|
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Don't assume reloc_addr is aligned. * sysdeps/alpha/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/cris/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/hppa/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/ia64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/m68k/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/mips/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela_relative, elf_machine_rela): Adjust. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): * sysdeps/sh/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/x86_64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust.
2003-07-31 Alexandre Oliva <aoliva@redhat.com>
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
reloc_addr is aligned.
* sysdeps/alpha/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/cris/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/hppa/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/ia64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/m68k/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/mips/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rela_relative, elf_machine_rela): Adjust.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative):
* sysdeps/sh/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
2003-07-31 08:33:53 +02:00
|
|
|
memcpy (reloc_addr_arg, &sym_value, 8);
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
2001-02-28 16:24:30 +01:00
|
|
|
#endif
|
2002-11-08 03:20:41 +01:00
|
|
|
#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
|
|
|
|
else if (r_type == R_ALPHA_DTPMOD64)
|
|
|
|
{
|
|
|
|
#ifdef RTLD_BOOTSTRAP
|
|
|
|
/* During startup the dynamic linker is always index 1. */
|
|
|
|
*reloc_addr = 1;
|
|
|
|
#else
|
|
|
|
/* Get the information from the link map returned by the
|
|
|
|
resolv function. */
|
|
|
|
if (sym_map != NULL)
|
|
|
|
*reloc_addr = sym_map->l_tls_modid;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
else if (r_type == R_ALPHA_DTPREL64)
|
|
|
|
{
|
|
|
|
#ifndef RTLD_BOOTSTRAP
|
|
|
|
/* During relocation all TLS symbols are defined and used.
|
|
|
|
Therefore the offset is already correct. */
|
2003-01-12 20:22:32 +01:00
|
|
|
*reloc_addr = sym_raw_value;
|
2002-11-08 03:20:41 +01:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
else if (r_type == R_ALPHA_TPREL64)
|
|
|
|
{
|
|
|
|
#ifdef RTLD_BOOTSTRAP
|
2003-02-14 07:11:21 +01:00
|
|
|
*reloc_addr = sym_raw_value + map->l_tls_offset;
|
2002-11-08 03:20:41 +01:00
|
|
|
#else
|
|
|
|
if (sym_map)
|
|
|
|
{
|
|
|
|
CHECK_STATIC_TLS (map, sym_map);
|
2003-02-14 07:11:21 +01:00
|
|
|
*reloc_addr = sym_raw_value + sym_map->l_tls_offset;
|
2002-11-08 03:20:41 +01:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
#endif /* USE_TLS */
|
1996-06-12 06:51:48 +02:00
|
|
|
else
|
1999-07-21 18:58:06 +02:00
|
|
|
_dl_reloc_bad_type (map, r_type, 0);
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-04-06 03:45:15 +02:00
|
|
|
/* Let do-rel.h know that on Alpha if l_addr is 0, all RELATIVE relocs
|
|
|
|
can be skipped. */
|
|
|
|
#define ELF_MACHINE_REL_RELATIVE 1
|
|
|
|
|
2001-08-24 10:53:35 +02:00
|
|
|
static inline void
|
2001-08-24 16:58:03 +02:00
|
|
|
elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
|
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Don't assume reloc_addr is aligned. * sysdeps/alpha/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/cris/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/hppa/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/ia64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/m68k/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/mips/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela_relative, elf_machine_rela): Adjust. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): * sysdeps/sh/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/x86_64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust.
2003-07-31 Alexandre Oliva <aoliva@redhat.com>
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
reloc_addr is aligned.
* sysdeps/alpha/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/cris/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/hppa/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/ia64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/m68k/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/mips/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rela_relative, elf_machine_rela): Adjust.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative):
* sysdeps/sh/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
2003-07-31 08:33:53 +02:00
|
|
|
void *const reloc_addr_arg)
|
2001-08-24 10:53:35 +02:00
|
|
|
{
|
2004-03-05 11:29:47 +01:00
|
|
|
/* XXX Make some timings. Maybe it's preferable to test for
|
2001-08-24 10:53:35 +02:00
|
|
|
unaligned access and only do it the complex way if necessary. */
|
|
|
|
Elf64_Addr reloc_addr_val;
|
|
|
|
|
|
|
|
/* Load value without causing unaligned trap. */
|
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Don't assume reloc_addr is aligned. * sysdeps/alpha/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/cris/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/hppa/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/ia64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/m68k/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/mips/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela_relative, elf_machine_rela): Adjust. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): * sysdeps/sh/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/x86_64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust.
2003-07-31 Alexandre Oliva <aoliva@redhat.com>
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
reloc_addr is aligned.
* sysdeps/alpha/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/cris/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/hppa/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/ia64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/m68k/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/mips/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rela_relative, elf_machine_rela): Adjust.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative):
* sysdeps/sh/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
2003-07-31 08:33:53 +02:00
|
|
|
memcpy (&reloc_addr_val, reloc_addr_arg, 8);
|
2001-08-24 10:53:35 +02:00
|
|
|
reloc_addr_val += l_addr;
|
|
|
|
|
|
|
|
/* Store value without causing unaligned trap. */
|
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Don't assume reloc_addr is aligned. * sysdeps/alpha/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/cris/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/hppa/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela, elf_machine_rel_relative, elf_machine_rela_relative): Adjust. * sysdeps/ia64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/m68k/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/mips/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela_relative, elf_machine_rela): Adjust. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): * sysdeps/sh/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust. * sysdeps/x86_64/dl-machine.h (elf_machine_rela, elf_machine_rela_relative): Adjust.
2003-07-31 Alexandre Oliva <aoliva@redhat.com>
* elf/dynamic-link.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Don't assume
reloc_addr is aligned.
* sysdeps/alpha/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/arm/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/cris/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/hppa/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/i386/dl-machine.h (elf_machine_rel, elf_machine_rela,
elf_machine_rel_relative, elf_machine_rela_relative): Adjust.
* sysdeps/ia64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/m68k/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/mips/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rela_relative, elf_machine_rela): Adjust.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative):
* sysdeps/sh/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela,
elf_machine_rela_relative): Adjust.
2003-07-31 08:33:53 +02:00
|
|
|
memcpy (reloc_addr_arg, &reloc_addr_val, 8);
|
2001-08-24 10:53:35 +02:00
|
|
|
}
|
|
|
|
|
1996-06-12 06:51:48 +02:00
|
|
|
static inline void
|
1999-07-21 18:58:06 +02:00
|
|
|
elf_machine_lazy_rel (struct link_map *map,
|
|
|
|
Elf64_Addr l_addr, const Elf64_Rela *reloc)
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
1998-08-29 00:54:57 +02:00
|
|
|
Elf64_Addr * const reloc_addr = (void *)(l_addr + reloc->r_offset);
|
2000-05-05 09:15:29 +02:00
|
|
|
unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info);
|
1996-06-12 06:51:48 +02:00
|
|
|
|
1997-03-25 03:25:35 +01:00
|
|
|
if (r_type == R_ALPHA_JMP_SLOT)
|
1996-06-12 06:51:48 +02:00
|
|
|
{
|
|
|
|
/* Perform a RELATIVE reloc on the .got entry that transfers
|
|
|
|
to the .plt. */
|
1998-08-29 00:54:57 +02:00
|
|
|
*reloc_addr += l_addr;
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
1997-03-25 03:25:35 +01:00
|
|
|
else if (r_type == R_ALPHA_NONE)
|
1996-07-16 08:38:54 +02:00
|
|
|
return;
|
1996-06-12 06:51:48 +02:00
|
|
|
else
|
1999-07-21 18:58:06 +02:00
|
|
|
_dl_reloc_bad_type (map, r_type, 1);
|
1996-06-12 06:51:48 +02:00
|
|
|
}
|
|
|
|
|
1996-07-16 08:38:54 +02:00
|
|
|
#endif /* RESOLVE */
|