aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mips/mips64
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>1999-11-23 16:10:26 +0000
committerAndreas Jaeger <aj@suse.de>1999-11-23 16:10:26 +0000
commit4228b9368f3e9fd66248e4a40f733e0ea6fe59b1 (patch)
treef2feeddde86b3ecba0131b634f9a0aea82146bf9 /sysdeps/mips/mips64
parentfd96475e575f3109a7d29eaf2dd120e6e888f91a (diff)
downloadglibc-4228b9368f3e9fd66248e4a40f733e0ea6fe59b1.zip
glibc-4228b9368f3e9fd66248e4a40f733e0ea6fe59b1.tar.gz
glibc-4228b9368f3e9fd66248e4a40f733e0ea6fe59b1.tar.bz2
(elf_machine_dynamic): New function.
(elf_machine_got): Removed, not needed anymore. (ELF_MACHINE_RELOC_NOPLT): Removed. (ELF_MACHINE_JMP_SLOT): Added. (_RTLD_PROLOGUE): We use gcc, no need to check for __STDC__. (_RTLD_EPILOGUE): Likewise. (RESOLVE_GOTSYM): Use R_MIPS_REL32. (ELF_MACHINE_RUNTIME_TRAMPOLINE): Likewise.
Diffstat (limited to 'sysdeps/mips/mips64')
-rw-r--r--sysdeps/mips/mips64/dl-machine.h36
1 files changed, 15 insertions, 21 deletions
diff --git a/sysdeps/mips/mips64/dl-machine.h b/sysdeps/mips/mips64/dl-machine.h
index f200fcd..3dc97eb 100644
--- a/sysdeps/mips/mips64/dl-machine.h
+++ b/sysdeps/mips/mips64/dl-machine.h
@@ -32,25 +32,19 @@
#endif
#ifndef _RTLD_PROLOGUE
-#ifdef __STDC__
-#define _RTLD_PROLOGUE(entry) "\n\t.globl " #entry \
+# define _RTLD_PROLOGUE(entry) "\n\t.globl " #entry \
"\n\t.ent " #entry \
"\n\t" #entry ":\n\t"
-#else
-#define _RTLD_PROLOGUE(entry) "\n\t.globl entry\n\t.ent entry\n\t entry:\n\t"
-#endif
#endif
#ifndef _RTLD_EPILOGUE
-#ifdef __STDC__
-#define _RTLD_EPILOGUE(entry) "\t.end " #entry "\n"
-#else
-#define _RTLD_EPILOGUE(entry) "\t.end entry\n"
-#endif
+# define _RTLD_EPILOGUE(entry) "\t.end " #entry "\n"
#endif
-/* I have no idea what I am doing. */
-#define ELF_MACHINE_RELOC_NOPLT -1
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.
+ This makes no sense on MIPS but we have to define this to R_MIPS_REL32
+ to avoid the asserts in dl-lookup.c from blowing. */
+#define ELF_MACHINE_JMP_SLOT R_MIPS_REL32
#define elf_machine_lookup_noplt_p(type) (1)
#define elf_machine_lookup_noexec_p(type) (0)
@@ -104,15 +98,15 @@ elf_mips_got_from_gpreg (ElfW(Addr) gpreg)
return (ElfW(Addr) *) (gpreg - 0x7ff0);
}
-/* Return the run-time address of the _GLOBAL_OFFSET_TABLE_.
- Must be inlined in a function which uses global data. */
-static inline ElfW(Addr) *
-elf_machine_got (void)
+/* Return the link-time address of _DYNAMIC. Conveniently, this is the
+ first element of the GOT. This must be inlined in a function which
+ uses global data. */
+static inline ElfW(Addr)
+elf_machine_dynamic (void)
{
- ElfW(Addr) gp;
+ register ElfW(Addr) gp __asm__ ("$28");
- __asm__ __volatile__("move %0, $28\n\t" : "=r" (gp));
- return elf_mips_got_from_gpreg (gp);
+ return *elf_mips_got_from_gpreg (gp);
}
@@ -151,7 +145,7 @@ elf_machine_got_rel (struct link_map *map, int lazy)
ElfW(Addr) sym_loadaddr; \
sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, \
map->l_scope, \
- map->l_name, ELF_MACHINE_RELOC_NOPLT);\
+ map->l_name, R_MIPS_REL32);\
(ref)? sym_loadaddr + ref->st_value: 0; \
})
@@ -360,7 +354,7 @@ __dl_runtime_resolve (ElfW(Word) sym_index, \
\
loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer, \
l->l_scope, l->l_name, \
- ELF_MACHINE_RELOC_NOPLT); \
+ R_MIPS_REL32); \
\
/* Apply the relocation with that value. */ \
funcaddr = loadbase + definer->st_value; \