diff options
author | Eric Andersen <andersen@codepoet.org> | 2002-05-09 08:34:43 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2002-05-09 08:34:43 +0000 |
commit | 4a6cfe318094cc8b20e6e3003f417f8ab3563bb1 (patch) | |
tree | bcf21ad706140908f57c92ec07157f32e1c959c7 /ldso/ldso/mips | |
parent | 3942feca80e3b0f55f0f27004e05316d03d1dbe4 (diff) |
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.
Diffstat (limited to 'ldso/ldso/mips')
-rw-r--r-- | ldso/ldso/mips/dl-sysdep.h | 8 | ||||
-rw-r--r-- | ldso/ldso/mips/ld_sysdep.h | 8 | ||||
-rw-r--r-- | ldso/ldso/mips/resolve.S | 14 |
3 files changed, 17 insertions, 13 deletions
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 |