summaryrefslogtreecommitdiff
path: root/ldso/ldso/mips/dl-sysdep.h
diff options
context:
space:
mode:
author"Steven J. Hill" <sjhill@realitydiluted.com>2002-05-20 18:30:17 +0000
committer"Steven J. Hill" <sjhill@realitydiluted.com>2002-05-20 18:30:17 +0000
commit1e811cd2c026257eb9adc27f0978698cdc226c26 (patch)
tree8aa5b37781d18dbe5698e02638833d6efe41e330 /ldso/ldso/mips/dl-sysdep.h
parent54727a5dc42fdfc0b45e0ff1e943fa20ded72914 (diff)
Fixed MIPS dynamic linker by removing link order dependency bug.
Diffstat (limited to 'ldso/ldso/mips/dl-sysdep.h')
-rw-r--r--ldso/ldso/mips/dl-sysdep.h41
1 files changed, 1 insertions, 40 deletions
diff --git a/ldso/ldso/mips/dl-sysdep.h b/ldso/ldso/mips/dl-sysdep.h
index 9d48d8f73..a669bba67 100644
--- a/ldso/ldso/mips/dl-sysdep.h
+++ b/ldso/ldso/mips/dl-sysdep.h
@@ -20,12 +20,10 @@
/*
- * Initialization sequence for the application or library GOT.
+ * Initialization sequence for the application/library GOT.
*/
#define INIT_GOT(GOT_BASE,MODULE) \
do { \
- Elf32_Sym *sym; \
- char *strtab; \
unsigned long i; \
\
/* Check if this is the dynamic linker itself */ \
@@ -41,43 +39,6 @@ do { \
while (i < MODULE->mips_local_gotno) \
GOT_BASE[i++] += (unsigned long) MODULE->loadaddr; \
\
- /* Handle global GOT entries */ \
- GOT_BASE += MODULE->mips_local_gotno; \
- sym = (Elf32_Sym *) (MODULE->dynamic_info[DT_SYMTAB] + \
- (unsigned long) MODULE->loadaddr) + MODULE->mips_gotsym; \
- strtab = (char *) (MODULE->dynamic_info[DT_STRTAB] + \
- (unsigned long) MODULE->loadaddr); \
- i = MODULE->mips_symtabno - MODULE->mips_gotsym; \
- while (i--) { \
- if (sym->st_shndx == SHN_UNDEF) { \
- if (ELF32_ST_TYPE(sym->st_info) == STT_FUNC && \
- sym->st_value) \
- *GOT_BASE = sym->st_value + \
- (unsigned long) MODULE->loadaddr; \
- else { \
- *GOT_BASE = (unsigned long) _dl_find_hash(strtab + \
- sym->st_name, MODULE->symbol_scope, NULL, 1); \
- } \
- } \
- else if (sym->st_shndx == SHN_COMMON) { \
- *GOT_BASE = (unsigned long) _dl_find_hash(strtab + \
- sym->st_name, MODULE->symbol_scope, NULL, 1); \
- } \
- else if (ELF32_ST_TYPE(sym->st_info) == STT_FUNC && \
- *GOT_BASE != sym->st_value) \
- *GOT_BASE += (unsigned long) MODULE->loadaddr; \
- else if (ELF32_ST_TYPE(sym->st_info) == STT_SECTION) { \
- if (sym->st_other == 0) \
- *GOT_BASE += (unsigned long) MODULE->loadaddr; \
- } \
- else { \
- *GOT_BASE = (unsigned long) _dl_find_hash(strtab + \
- sym->st_name, MODULE->symbol_scope, NULL, 1); \
- } \
- \
- ++GOT_BASE; \
- ++sym; \
- } \
} while (0)