mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-18 12:16:13 +08:00
2000-04-18 Andreas Jaeger <aj@suse.de>
* sysdeps/mips/dl-machine.h (elf_machine_rel): Fix relocation. 2000-04-18 Andreas Jaeger <aj@suse.de> * sysdeps/mips/dl-machine.h (elf_machine_rel): Fix relocation.
This commit is contained in:
parent
ed7abbd0ad
commit
d1891b3977
@ -1,3 +1,7 @@
|
||||
2000-04-18 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* sysdeps/mips/dl-machine.h (elf_machine_rel): Fix relocation.
|
||||
|
||||
2000-04-18 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/aix/geteuid.c: Don't try to include <sys/id.h>.
|
||||
|
@ -428,40 +428,23 @@ elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
|
||||
const ElfW(Sym) *sym, const struct r_found_version *version,
|
||||
ElfW(Addr) *const reloc_addr)
|
||||
{
|
||||
ElfW(Addr) loadbase;
|
||||
ElfW(Addr) undo __attribute__ ((unused));
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
/* 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
|
||||
|
||||
switch (ELFW(R_TYPE) (reloc->r_info))
|
||||
{
|
||||
case R_MIPS_REL32:
|
||||
{
|
||||
ElfW(Addr) undo = 0;
|
||||
|
||||
if (ELFW(ST_BIND) (sym->st_info) == STB_LOCAL
|
||||
&& (ELFW(ST_TYPE) (sym->st_info) == STT_SECTION
|
||||
|| ELFW(ST_TYPE) (sym->st_info) == STT_NOTYPE))
|
||||
{
|
||||
*reloc_addr += map->l_addr;
|
||||
break;
|
||||
}
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
/* 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);
|
||||
if (map == &_dl_rtld_map)
|
||||
/* Undo the relocation done here during bootstrapping. Now we will
|
||||
relocate it anew, possibly using a binding found in the user
|
||||
program or a loaded library rather than the dynamic linker's
|
||||
built-in definitions used while loading those libraries. */
|
||||
undo = map->l_addr + sym->st_value;
|
||||
if (map != &_dl_rtld_map)
|
||||
#endif
|
||||
loadbase = RESOLVE (&sym, version, R_MIPS_REL32);
|
||||
*reloc_addr += (sym ? (loadbase + sym->st_value) : 0) - undo;
|
||||
}
|
||||
*reloc_addr += map->l_addr;
|
||||
break;
|
||||
case R_MIPS_NONE: /* Alright, Wilbur. */
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user