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>
|
2000-04-18 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/aix/geteuid.c: Don't try to include <sys/id.h>.
|
* 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,
|
const ElfW(Sym) *sym, const struct r_found_version *version,
|
||||||
ElfW(Addr) *const reloc_addr)
|
ElfW(Addr) *const reloc_addr)
|
||||||
{
|
{
|
||||||
ElfW(Addr) loadbase;
|
#ifndef RTLD_BOOTSTRAP
|
||||||
ElfW(Addr) undo __attribute__ ((unused));
|
/* 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))
|
switch (ELFW(R_TYPE) (reloc->r_info))
|
||||||
{
|
{
|
||||||
case R_MIPS_REL32:
|
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
|
#ifndef RTLD_BOOTSTRAP
|
||||||
/* This is defined in rtld.c, but nowhere in the static libc.a;
|
if (map != &_dl_rtld_map)
|
||||||
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;
|
|
||||||
#endif
|
#endif
|
||||||
loadbase = RESOLVE (&sym, version, R_MIPS_REL32);
|
*reloc_addr += map->l_addr;
|
||||||
*reloc_addr += (sym ? (loadbase + sym->st_value) : 0) - undo;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case R_MIPS_NONE: /* Alright, Wilbur. */
|
case R_MIPS_NONE: /* Alright, Wilbur. */
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user