From 22a9e5bbdf43e1086d80341480d0601ee9c6f898 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 30 Apr 2001 21:28:56 +0000 Subject: Sanitize the calling of _dl_linux_resolver so it can be read by mere mortals, and so it says what it means. Ick this stuff was nasty. -Erik --- ldso/ldso/i386/dl-sysdep.h | 3 ++- ldso/ldso/i386/elfinterp.c | 8 +------- ldso/ldso/i386/ld_sysdep.h | 3 ++- ldso/ldso/i386/resolve.S | 7 +++---- ldso/ldso/i386/sysdep.h | 3 ++- 5 files changed, 10 insertions(+), 14 deletions(-) (limited to 'ldso') diff --git a/ldso/ldso/i386/dl-sysdep.h b/ldso/ldso/i386/dl-sysdep.h index 2011049b1..64d4b7a46 100644 --- a/ldso/ldso/i386/dl-sysdep.h +++ b/ldso/ldso/i386/dl-sysdep.h @@ -75,6 +75,7 @@ /* Used for error messages */ #define ELF_TARGET "386" -extern unsigned int _dl_linux_resolver(int dummy, int i); +struct elf_resolve; +extern unsigned int _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); #define do_rem(result, n, base) result = (n % base) diff --git a/ldso/ldso/i386/elfinterp.c b/ldso/ldso/i386/elfinterp.c index 01149c69b..359018a51 100644 --- a/ldso/ldso/i386/elfinterp.c +++ b/ldso/ldso/i386/elfinterp.c @@ -53,23 +53,17 @@ extern char *_dl_progname; extern int _dl_linux_resolve(void); -unsigned int _dl_linux_resolver(int dummy, int i) +unsigned int _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry) { - unsigned int * sp; - int reloc_entry; int reloc_type; struct elf32_rel * this_reloc; char * strtab; struct elf32_sym * symtab; struct elf32_rel * rel_addr; - struct elf_resolve * tpnt; int symtab_index; char * new_addr; char ** got_addr; unsigned int instr_addr; - sp = &i; - reloc_entry = sp[1]; - tpnt = (struct elf_resolve *) sp[0]; rel_addr = (struct elf32_rel *) (tpnt->dynamic_info[DT_JMPREL] + tpnt->loadaddr); diff --git a/ldso/ldso/i386/ld_sysdep.h b/ldso/ldso/i386/ld_sysdep.h index 2011049b1..64d4b7a46 100644 --- a/ldso/ldso/i386/ld_sysdep.h +++ b/ldso/ldso/i386/ld_sysdep.h @@ -75,6 +75,7 @@ /* Used for error messages */ #define ELF_TARGET "386" -extern unsigned int _dl_linux_resolver(int dummy, int i); +struct elf_resolve; +extern unsigned int _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); #define do_rem(result, n, base) result = (n % base) diff --git a/ldso/ldso/i386/resolve.S b/ldso/ldso/i386/resolve.S index 8ae2efa70..4abf243f4 100644 --- a/ldso/ldso/i386/resolve.S +++ b/ldso/ldso/i386/resolve.S @@ -13,8 +13,7 @@ _dl_linux_resolve: lea 0x20(%esp),%eax /* eax = tpnt and reloc_entry params */ pushl 4(%eax) /* push copy of reloc_entry param */ pushl (%eax) /* push copy of tpnt param */ - pushl %eax /* _dl_linux_resolver expects a dummy - * param - this could be removed */ + #ifdef __PIC__ call .L24 .L24: @@ -25,9 +24,9 @@ _dl_linux_resolve: #else call _dl_linux_resolver #endif - movl %eax,0x2C(%esp) /* store func addr over original + movl %eax,0x28(%esp) /* store func addr over original * tpnt param */ - addl $0xC,%esp /* remove copy parameters */ + addl $0x8,%esp /* remove copy parameters */ popa /* restore regs */ ret $4 /* jump to func removing original * reloc_entry param from stack */ diff --git a/ldso/ldso/i386/sysdep.h b/ldso/ldso/i386/sysdep.h index 2011049b1..64d4b7a46 100644 --- a/ldso/ldso/i386/sysdep.h +++ b/ldso/ldso/i386/sysdep.h @@ -75,6 +75,7 @@ /* Used for error messages */ #define ELF_TARGET "386" -extern unsigned int _dl_linux_resolver(int dummy, int i); +struct elf_resolve; +extern unsigned int _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); #define do_rem(result, n, base) result = (n % base) -- cgit v1.2.3