From 4a6cfe318094cc8b20e6e3003f417f8ab3563bb1 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 9 May 2002 08:34:43 +0000 Subject: Another mips patch from Steven J. Hill: Uh, this patch fixes a few bugs that I overlooked. Shoot, even BusyBox wouldn't work until these are applied. Erik, plop this into CVS please. Thanks. --- ldso/ldso/mips/dl-sysdep.h | 8 ++++---- ldso/ldso/mips/ld_sysdep.h | 8 ++++---- ldso/ldso/mips/resolve.S | 14 +++++++++----- 3 files changed, 17 insertions(+), 13 deletions(-) (limited to 'ldso/ldso/mips') diff --git a/ldso/ldso/mips/dl-sysdep.h b/ldso/ldso/mips/dl-sysdep.h index f54e812b7..9d48d8f73 100644 --- a/ldso/ldso/mips/dl-sysdep.h +++ b/ldso/ldso/mips/dl-sysdep.h @@ -20,7 +20,7 @@ /* - * Initialization sequence for the application GOT. + * Initialization sequence for the application or library GOT. */ #define INIT_GOT(GOT_BASE,MODULE) \ do { \ @@ -56,12 +56,12 @@ do { \ (unsigned long) MODULE->loadaddr; \ else { \ *GOT_BASE = (unsigned long) _dl_find_hash(strtab + \ - sym->st_name, MODULE->symbol_scope, NULL, 0); \ + 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, 0); \ + sym->st_name, MODULE->symbol_scope, NULL, 1); \ } \ else if (ELF32_ST_TYPE(sym->st_info) == STT_FUNC && \ *GOT_BASE != sym->st_value) \ @@ -72,7 +72,7 @@ do { \ } \ else { \ *GOT_BASE = (unsigned long) _dl_find_hash(strtab + \ - sym->st_name, MODULE->symbol_scope, NULL, 0); \ + sym->st_name, MODULE->symbol_scope, NULL, 1); \ } \ \ ++GOT_BASE; \ diff --git a/ldso/ldso/mips/ld_sysdep.h b/ldso/ldso/mips/ld_sysdep.h index f54e812b7..9d48d8f73 100644 --- a/ldso/ldso/mips/ld_sysdep.h +++ b/ldso/ldso/mips/ld_sysdep.h @@ -20,7 +20,7 @@ /* - * Initialization sequence for the application GOT. + * Initialization sequence for the application or library GOT. */ #define INIT_GOT(GOT_BASE,MODULE) \ do { \ @@ -56,12 +56,12 @@ do { \ (unsigned long) MODULE->loadaddr; \ else { \ *GOT_BASE = (unsigned long) _dl_find_hash(strtab + \ - sym->st_name, MODULE->symbol_scope, NULL, 0); \ + 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, 0); \ + sym->st_name, MODULE->symbol_scope, NULL, 1); \ } \ else if (ELF32_ST_TYPE(sym->st_info) == STT_FUNC && \ *GOT_BASE != sym->st_value) \ @@ -72,7 +72,7 @@ do { \ } \ else { \ *GOT_BASE = (unsigned long) _dl_find_hash(strtab + \ - sym->st_name, MODULE->symbol_scope, NULL, 0); \ + sym->st_name, MODULE->symbol_scope, NULL, 1); \ } \ \ ++GOT_BASE; \ diff --git a/ldso/ldso/mips/resolve.S b/ldso/ldso/mips/resolve.S index b6dda82d7..f1d7cff76 100644 --- a/ldso/ldso/mips/resolve.S +++ b/ldso/ldso/mips/resolve.S @@ -23,18 +23,22 @@ _dl_linux_resolve: addu $25, 8 # t9 ($25) now points at .cpload instruction .cpload $25 # Compute GP .set reorder - subu $29, 32 - .cprestore 28 + subu $29, 40 + .cprestore 32 + sw $15, 36($29) sw $4, 16($29) sw $5, 20($29) - sw $15, 24($29) + sw $6, 24($29) + sw $7, 28($29) move $4, $24 move $5, $3 jal _dl_linux_resolver - lw $31, 24($29) + lw $31, 36($29) lw $4, 16($29) lw $5, 20($29) - addu $29, 32 + lw $6, 24($29) + lw $7, 28($29) + addu $29, 40 move $25, $2 jr $25 .size _dl_linux_resolve,.-_dl_linux_resolve -- cgit v1.2.3