(elf_machine_runtime_setup): DT_PLTGOT entry is already relocated.

This commit is contained in:
Ulrich Drepper 1999-02-20 18:22:38 +00:00
parent 3aa76df334
commit e675032fec
3 changed files with 5 additions and 7 deletions

View File

@ -98,7 +98,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
/* The GOT entries for the functions in the PLT have not been /* The GOT entries for the functions in the PLT have not been
filled in yet. Their initial contents are directed to the filled in yet. Their initial contents are directed to the
PLT which arranges for the dynamic linker to be called. */ PLT which arranges for the dynamic linker to be called. */
plt = l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr; plt = l->l_info[DT_PLTGOT]->d_un.d_ptr;
/* This function will be called to perform the relocation. */ /* This function will be called to perform the relocation. */
if (!profile) if (!profile)

View File

@ -80,7 +80,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
to push an offset into the .rela.plt section, push to push an offset into the .rela.plt section, push
_GLOBAL_OFFSET_TABLE_[1], and then jump to _GLOBAL_OFFSET_TABLE_[1], and then jump to
_GLOBAL_OFFSET_TABLE_[2]. */ _GLOBAL_OFFSET_TABLE_[2]. */
got = (Elf32_Addr *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr); got = (Elf32_Addr *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
got[1] = (Elf32_Addr) l; /* Identify this shared object. */ got[1] = (Elf32_Addr) l; /* Identify this shared object. */
/* The got[2] entry contains the address of a function which gets /* The got[2] entry contains the address of a function which gets

View File

@ -156,8 +156,7 @@ elf_machine_got_rel (struct link_map *map, int lazy)
(ref)? sym_loadaddr + ref->st_value: 0; \ (ref)? sym_loadaddr + ref->st_value: 0; \
}) })
got = (ElfW(Addr) *) ((void *) map->l_addr got = (ElfW(Addr) *) map->l_info[DT_PLTGOT]->d_un.d_ptr;
+ map->l_info[DT_PLTGOT]->d_un.d_ptr);
/* got[0] is reserved. got[1] is also reserved for the dynamic object /* got[0] is reserved. got[1] is also reserved for the dynamic object
generated by gnu ld. Skip these reserved entries from relocation. */ generated by gnu ld. Skip these reserved entries from relocation. */
@ -232,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 Their initial contents will arrange when called to put an
offset into the .dynsym section in t8, the return address offset into the .dynsym section in t8, the return address
in t7 and then jump to _GLOBAL_OFFSET_TABLE[0]. */ in t7 and then jump to _GLOBAL_OFFSET_TABLE[0]. */
got = (ElfW(Addr) *) ((void *) l->l_addr got = (ElfW(Addr) *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
+ l->l_info[DT_PLTGOT]->d_un.d_ptr);
/* This function will get called to fix up the GOT entry indicated by /* This function will get called to fix up the GOT entry indicated by
the register t8, and then jump to the resolved address. */ the register t8, and then jump to the resolved address. */
@ -350,7 +348,7 @@ __dl_runtime_resolve (ElfW(Word) sym_index, \
const char *strtab \ const char *strtab \
= (const void *) l->l_info[DT_STRTAB]->d_un.d_ptr; \ = (const void *) l->l_info[DT_STRTAB]->d_un.d_ptr; \
const ElfW(Addr) *got \ 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) local_gotno \
= (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; \ = (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; \
const ElfW(Word) gotsym \ const ElfW(Word) gotsym \