From 875a6e83f49ae0833d9ef45ee23da87f66c5aa3c Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 29 Jan 2004 12:18:58 +0000 Subject: Modify interfaces for _dl_parse_relocation_information() _dl_parse_lazy_relocation_information() and _dl_parse_copy_information() so they are all consistant, allowing for future consolidation. Trim some trailing whitespace as well. --- ldso/ldso/arm/elfinterp.c | 68 +++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 34 deletions(-) (limited to 'ldso/ldso/arm') diff --git a/ldso/ldso/arm/elfinterp.c b/ldso/ldso/arm/elfinterp.c index 6c908a671..4af05354d 100644 --- a/ldso/ldso/arm/elfinterp.c +++ b/ldso/ldso/arm/elfinterp.c @@ -1,7 +1,7 @@ /* vi: set sw=4 ts=4: */ /* ARM ELF shared library loader suppport * - * Copyright (C) 2001-2002, Erik Andersen + * Copyright (C) 2001-2004 Erik Andersen * * All rights reserved. * @@ -47,9 +47,9 @@ static const char *_dl_reltypes_tab[] = static const char * _dl_reltypes(int type) { - static char buf[22]; + static char buf[22]; const char *str; - + if (type >= (sizeof (_dl_reltypes_tab)/sizeof(_dl_reltypes_tab[0])) || NULL == (str = _dl_reltypes_tab[type])) { @@ -58,7 +58,7 @@ _dl_reltypes(int type) return str; } -static +static void debug_sym(Elf32_Sym *symtab,char *strtab,int symtab_index) { if(_dl_debug_symbols) @@ -83,7 +83,7 @@ static void debug_reloc(Elf32_Sym *symtab,char *strtab, ELF_RELOC *rpnt) const char *sym; symtab_index = ELF32_R_SYM(rpnt->r_info); sym = symtab_index ? strtab + symtab[symtab_index].st_name : "sym=0x0"; - + #ifdef ELF_USES_RELOCA _dl_dprintf(_dl_debug_file, "\n%s\toffset=%x\taddend=%x %s", _dl_reltypes(ELF32_R_TYPE(rpnt->r_info)), @@ -136,21 +136,21 @@ unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) if (reloc_type != R_ARM_JUMP_SLOT) { - _dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n", + _dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n", _dl_progname); _dl_exit(1); }; /* Address of jump instruction to fix up */ - instr_addr = ((unsigned long) this_reloc->r_offset + + instr_addr = ((unsigned long) this_reloc->r_offset + (unsigned long) tpnt->loadaddr); got_addr = (char **) instr_addr; /* Get the address of the GOT entry */ - new_addr = _dl_find_hash(strtab + symtab[symtab_index].st_name, + new_addr = _dl_find_hash(strtab + symtab[symtab_index].st_name, tpnt->symbol_scope, tpnt, resolver); if (!new_addr) { - _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", + _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", _dl_progname, strtab + symtab[symtab_index].st_name); _dl_exit(1); }; @@ -161,7 +161,7 @@ unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) { _dl_dprintf(_dl_debug_file, "\nresolve function: %s", strtab + symtab[symtab_index].st_name); - if(_dl_debug_detail) _dl_dprintf(_dl_debug_file, + if(_dl_debug_detail) _dl_dprintf(_dl_debug_file, "\tpatch %x ==> %x @ %x", *got_addr, new_addr, got_addr); } } @@ -197,9 +197,9 @@ _dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, for (i = 0; i < rel_size; i++, rpnt++) { int res; - + symtab_index = ELF32_R_SYM(rpnt->r_info); - + /* When the dynamic linker bootstrapped itself, it resolved some symbols. Make sure we do not do them again */ if (!symtab_index && tpnt->libtype == program_interpreter) @@ -218,10 +218,10 @@ _dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, if (res==0) continue; _dl_dprintf(2, "\n%s: ",_dl_progname); - + if (symtab_index) _dl_dprintf(2, "symbol '%s': ", strtab + symtab[symtab_index].st_name); - + if (res <0) { int reloc_type = ELF32_R_TYPE(rpnt->r_info); @@ -229,7 +229,7 @@ _dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, _dl_dprintf(2, "can't handle reloc type %s\n ", _dl_reltypes(reloc_type)); #else _dl_dprintf(2, "can't handle reloc type %x\n", reloc_type); -#endif +#endif _dl_exit(-res); } else if (res >0) @@ -282,7 +282,7 @@ _dl_do_reloc (struct elf_resolve *tpnt,struct dyn_elf *scope, if (symtab_index) { - symbol_addr = (unsigned long) _dl_find_hash(strtab + symtab[symtab_index].st_name, + symbol_addr = (unsigned long) _dl_find_hash(strtab + symtab[symtab_index].st_name, scope, (reloc_type == R_ARM_JUMP_SLOT ? tpnt : NULL), symbolrel); /* @@ -322,7 +322,7 @@ _dl_do_reloc (struct elf_resolve *tpnt,struct dyn_elf *scope, topbits = newvalue & 0xfe000000; if (topbits != 0xfe000000 && topbits != 0x00000000) { - _dl_dprintf(2,"symbol '%s': R_ARM_PC24 relocation out of range.", + _dl_dprintf(2,"symbol '%s': R_ARM_PC24 relocation out of range.", symtab[symtab_index].st_name); _dl_exit(1); } @@ -339,13 +339,13 @@ _dl_do_reloc (struct elf_resolve *tpnt,struct dyn_elf *scope, case R_ARM_RELATIVE: *reloc_addr += (unsigned long) tpnt->loadaddr; break; - case R_ARM_COPY: -#if 0 + case R_ARM_COPY: +#if 0 /* Do this later */ _dl_dprintf(2, "Doing copy for symbol "); if (symtab_index) _dl_dprintf(2, strtab + symtab[symtab_index].st_name); _dl_dprintf(2, "\n"); - _dl_memcpy((void *) symtab[symtab_index].st_value, + _dl_memcpy((void *) symtab[symtab_index].st_value, (void *) symbol_addr, symtab[symtab_index].st_size); #endif break; @@ -404,7 +404,7 @@ _dl_do_lazy_reloc (struct elf_resolve *tpnt, struct dyn_elf *scope, /* No, there are cases where the SVr4 linker fails to emit COPY relocs at all */ static int -_dl_do_copy (struct elf_resolve *tpnt, struct dyn_elf *scope, +_dl_do_copy_reloc (struct elf_resolve *tpnt, struct dyn_elf *scope, ELF_RELOC *rpnt, Elf32_Sym *symtab, char *strtab) { int reloc_type; @@ -412,18 +412,18 @@ _dl_do_copy (struct elf_resolve *tpnt, struct dyn_elf *scope, unsigned long *reloc_addr; unsigned long symbol_addr; int goof = 0; - + reloc_addr = (unsigned long *) (tpnt->loadaddr + (unsigned long) rpnt->r_offset); reloc_type = ELF32_R_TYPE(rpnt->r_info); - if (reloc_type != R_ARM_COPY) + if (reloc_type != R_ARM_COPY) return 0; symtab_index = ELF32_R_SYM(rpnt->r_info); symbol_addr = 0; - + if (symtab_index) { - symbol_addr = (unsigned long) _dl_find_hash(strtab + - symtab[symtab_index].st_name, scope, + symbol_addr = (unsigned long) _dl_find_hash(strtab + + symtab[symtab_index].st_name, scope, NULL, copyrel); if (!symbol_addr) goof++; } @@ -435,28 +435,28 @@ _dl_do_copy (struct elf_resolve *tpnt, struct dyn_elf *scope, symtab[symtab_index].st_size, symbol_addr, symtab[symtab_index].st_value); #endif - _dl_memcpy((char *) symtab[symtab_index].st_value, + _dl_memcpy((char *) symtab[symtab_index].st_value, (char *) symbol_addr, symtab[symtab_index].st_size); } return goof; } -void _dl_parse_lazy_relocation_information(struct elf_resolve *tpnt, +void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, unsigned long rel_addr, unsigned long rel_size, int type) { - (void)_dl_parse(tpnt, NULL, rel_addr, rel_size, _dl_do_lazy_reloc); + (void)_dl_parse(rpnt->dyn, NULL, rel_addr, rel_size, _dl_do_lazy_reloc); } -int _dl_parse_relocation_information(struct elf_resolve *tpnt, +int _dl_parse_relocation_information(struct dyn_elf *rpnt, unsigned long rel_addr, unsigned long rel_size, int type) { - return _dl_parse(tpnt, tpnt->symbol_scope, rel_addr, rel_size, _dl_do_reloc); + return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, _dl_do_reloc); } -int _dl_parse_copy_information(struct dyn_elf *xpnt, unsigned long rel_addr, - unsigned long rel_size, int type) +int _dl_parse_copy_information(struct dyn_elf *rpnt, + unsigned long rel_addr, unsigned long rel_size, int type) { - return _dl_parse(xpnt->dyn, xpnt->next, rel_addr, rel_size, _dl_do_copy); + return _dl_parse(rpnt->dyn, rpnt->next, rel_addr, rel_size, _dl_do_copy_reloc); } -- cgit v1.2.3