mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
Update.
2000-05-05 Ulrich Drepper <drepper@redhat.com> * elf/dl-load.c (_dl_map_object_from_fd): Little of computation of parameter to mprotect and for variable assignments. 2000-05-03 Jes Sorensen <jes@linuxcare.com> * sysdeps/generic/ldsodefs.h (LOOKUP_VALUE_ADDRESS): Check the validity of map before dereferencing it. * elf/dl-reloc.c (RESOLVE_MAP): Define. 2000-05-02 Jes Sorensen <jes@linuxcare.com> * elf/dl-runtime.c (fixup): Add the value returned in the symbol lookup to the arguments to elf_machine_fixup_plt(). * sysdeps/ia64/dl-machine.h (elf_machine_fixup_plt): Add Link_map of the symbol being resolved to input argument list and make the function return the pointer to the reloc. * sysdeps/alpha/dl-machine.h (elf_machine_fixup_plt): Change return valuie to lookup_t and return the value. * sysdeps/arm/dl-machine.h (elf_machine_fixup_plt): Likewise. * sysdeps/generic/dl-machine.h (elf_machine_fixup_plt): Likewise. * sysdeps/i386/dl-machine.h (elf_machine_fixup_plt): Likewise. * sysdeps/m68k/dl-machine.h (elf_machine_fixup_plt): Likewise. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_fixup_plt): Likewise. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_fixup_plt): Likewise. * sysdeps/powerpc/dl-machine.h (elf_machine_fixup_plt): Likewise. Make it an inline function returning value after calling __elf_machine_fixup_plt(). * elf/dl-sym.c (_dl_vsym): Use DL_SYMBOL_ADDRESS() to obtain the symbol address. * elf/dl-symbol.c (_dl_symbol_value): Use LOOKUP_VALUE_ADDRESS to obtain the symbol address. * sysdeps/generic/ldsodefs.h: Add generic DL_SYMBOL_ADDRESS() macro depending on the definition of ELF_FUNCTION_PTR_IS_SPECIAL. * sysdeps/ia64/dl-machine.h: Add DL_SYMBOL_ADDRESS() macro calling _dl_symbol_address() - this way DL_SYMBOL_ADDRESS() turns into an inline on non ia64. 2000-04-28 Jes Sorensen <jes@linuxcare.com> * elf/dl-runtime.c (fixup): Use the portable macros to get the symbol address of an object. * elf/dl-runtime.c (fixup-profile): Use the portable macros to get the symbol address of an object. * elf/dl-libc.c (struct do_dlsym_args): Change loadbase to a lookup_t. * elf/dl-lookup.c (_dl_lookup_symbol): Likewise. (_dl_lookup_symbol_skip): Likewise. (_dl_lookup_versioned_symbol): Likewise. (_dl_lookup_versioned_symbol_skip): Likewise. 2000-04-27 Jes Sorensen <jes@linuxcare.com> * elf/rtld.c (_dl_start): Get the function pointer return address via _dl_start_address for architectures that need a function pointer descriptor rather than just a pointer (ia64). * sysdeps/generic/dl-lookupcfg.h: New file. * sysdeps/ia64/dl-lookupcfg.h: New file. * sysdeps/ia64/dl-machine.h: New file. * sysdeps/ia64/dl-symaddr.c: New file. * sysdeps/ia64/dl-fptr.c: New file. * elf/elf.h: Add IA-64 specific definitions.
This commit is contained in:
24
elf/rtld.c
24
elf/rtld.c
@@ -160,6 +160,8 @@ _dl_start (void *arg)
|
||||
/* This #define produces dynamic linking inline functions for
|
||||
bootstrap relocation instead of general-purpose relocation. */
|
||||
#define RTLD_BOOTSTRAP
|
||||
#define RESOLVE_MAP(sym, version, flags) \
|
||||
((*(sym))->st_shndx == SHN_UNDEF ? 0 : &bootstrap_map)
|
||||
#define RESOLVE(sym, version, flags) \
|
||||
((*(sym))->st_shndx == SHN_UNDEF ? 0 : bootstrap_map.l_addr)
|
||||
#include "dynamic-link.h"
|
||||
@@ -200,7 +202,15 @@ _dl_start (void *arg)
|
||||
header table in core. Put the rest of _dl_start into a separate
|
||||
function, that way the compiler cannot put accesses to the GOT
|
||||
before ELF_DYNAMIC_RELOCATE. */
|
||||
return _dl_start_final (arg, &bootstrap_map, start_time);
|
||||
{
|
||||
ElfW(Addr) entry = _dl_start_final (arg, &bootstrap_map, start_time);
|
||||
|
||||
#ifndef ELF_MACHINE_START_ADDRESS
|
||||
# define ELF_MACHINE_START_ADDRESS(map, start) (start)
|
||||
#endif
|
||||
|
||||
return ELF_MACHINE_START_ADDRESS (_dl_loaded, entry);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -886,10 +896,16 @@ of this helper program; chances are you did not intend to run this program.\n\
|
||||
for (i = 1; i < _dl_argc; ++i)
|
||||
{
|
||||
const ElfW(Sym) *ref = NULL;
|
||||
ElfW(Addr) loadbase = _dl_lookup_symbol (_dl_argv[i], _dl_loaded,
|
||||
&ref, _dl_loaded->l_scope,
|
||||
ELF_MACHINE_JMP_SLOT);
|
||||
ElfW(Addr) loadbase;
|
||||
lookup_t result;
|
||||
char buf[20], *bp;
|
||||
|
||||
result = _dl_lookup_symbol (_dl_argv[i], _dl_loaded,
|
||||
&ref, _dl_loaded->l_scope,
|
||||
ELF_MACHINE_JMP_SLOT);
|
||||
|
||||
loadbase = LOOKUP_VALUE_ADDRESS (result);
|
||||
|
||||
buf[sizeof buf - 1] = '\0';
|
||||
bp = _itoa_word (ref->st_value, &buf[sizeof buf - 1], 16, 0);
|
||||
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2)
|
||||
|
||||
Reference in New Issue
Block a user