(elf_machine_runtime_setup): DT_PLTGOT entry is already relocated.

(__dl_runtime_resolve): Likewise.
This commit is contained in:
Ulrich Drepper 1999-02-20 18:25:14 +00:00
parent e675032fec
commit 963048adc5

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. MIPS version.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>.
@ -23,7 +23,7 @@
#define ELF_MACHINE_NAME "MIPS"
#define ELF_MACHINE_NO_PLT
#define ELF_MACHINE_NO_PLT
#include <assert.h>
#include <entry.h>
@ -144,8 +144,7 @@ elf_machine_got_rel (struct link_map *map, int lazy)
ElfW(Addr) *got;
ElfW(Sym) *sym;
int i, n;
const char *strtab
= ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
const char *strtab = (const void *) map->l_info[DT_STRTAB]->d_un.d_ptr;
#define RESOLVE_GOTSYM(sym) \
({ \
@ -157,8 +156,7 @@ elf_machine_got_rel (struct link_map *map, int lazy)
(ref)? sym_loadaddr + ref->st_value: 0; \
})
got = (ElfW(Addr) *) ((void *) map->l_addr
+ map->l_info[DT_PLTGOT]->d_un.d_ptr);
got = (ElfW(Addr) *) map->l_info[DT_PLTGOT]->d_un.d_ptr;
/* got[0] is reserved. got[1] is also reserved for the dynamic object
generated by gnu ld. Skip these reserved entries from relocation. */
@ -170,8 +168,7 @@ elf_machine_got_rel (struct link_map *map, int lazy)
/* Handle global got entries. */
got += n;
sym = (ElfW(Sym) *) ((void *) map->l_addr
+ map->l_info[DT_SYMTAB]->d_un.d_ptr);
sym = (ElfW(Sym) *) map->l_info[DT_SYMTAB]->d_un.d_ptr;
sym += map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val;
i = (map->l_info[DT_MIPS (SYMTABNO)]->d_un.d_val
- map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val);
@ -234,8 +231,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
Their initial contents will arrange when called to put an
offset into the .dynsym section in t8, the return address
in t7 and then jump to _GLOBAL_OFFSET_TABLE[0]. */
got = (ElfW(Addr) *) ((void *) l->l_addr
+ l->l_info[DT_PLTGOT]->d_un.d_ptr);
got = (ElfW(Addr) *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
/* This function will get called to fix up the GOT entry indicated by
the register t8, and then jump to the resolved address. */
@ -348,11 +344,10 @@ __dl_runtime_resolve (ElfW(Word) sym_index, \
{ \
struct link_map *l = elf_machine_runtime_link_map (old_gpreg, stub_pc); \
const ElfW(Sym) *const symtab \
= (const ElfW(Sym) *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr); \
const char *strtab \
= (void *) (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr); \
= (const ElfW(Sym) *) l->l_info[DT_SYMTAB]->d_un.d_ptr; \
const char *strtab = (const void *) l->l_info[DT_STRTAB]->d_un.d_ptr; \
const ElfW(Addr) *got \
= (const ElfW(Addr) *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr); \
= (const ElfW(Addr) *) l->l_info[DT_PLTGOT]->d_un.d_ptr; \
const ElfW(Word) local_gotno \
= (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; \
const ElfW(Word) gotsym \