[uClibc-cvs] uClibc/ldso/ldso/sparc elfinterp.c,1.13,1.14
Erik Andersen
andersen at uclibc.org
Thu Jan 29 12:19:02 UTC 2004
Update of /var/cvs/uClibc/ldso/ldso/sparc
In directory nail:/tmp/cvs-serv13904/ldso/sparc
Modified Files:
elfinterp.c
Log Message:
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.
Index: elfinterp.c
===================================================================
RCS file: /var/cvs/uClibc/ldso/ldso/sparc/elfinterp.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- elfinterp.c 5 Nov 2002 18:21:12 -0000 1.13
+++ elfinterp.c 29 Jan 2004 12:18:58 -0000 1.14
@@ -1,7 +1,7 @@
/* vi: set sw=4 ts=4: */
/* sparc ELF shared library loader suppport
*
- * Copyright (c) 1994-2000 Eric Youngdale, Peter MacDonald,
+ * Copyright (c) 1994-2000 Eric Youngdale, Peter MacDonald,
* David Engel, Hongjiu Lu and Mitch D'Souza
*
* All rights reserved.
@@ -57,7 +57,7 @@
int reloc_type;
Elf32_Rela * this_reloc;
char * strtab;
- Elf32_Sym * symtab;
+ Elf32_Sym * symtab;
Elf32_Rela * rel_addr;
struct elf_resolve * tpnt;
int symtab_index;
@@ -66,7 +66,7 @@
unsigned int instr_addr;
tpnt = (struct elf_resolve *) plt[2];
- rel_addr = (Elf32_Rela *) (tpnt->dynamic_info[DT_JMPREL] +
+ rel_addr = (Elf32_Rela *) (tpnt->dynamic_info[DT_JMPREL] +
tpnt->loadaddr);
/*
@@ -108,7 +108,7 @@
#endif
/* 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",
@@ -123,7 +123,7 @@
{
_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);
}
}
@@ -142,15 +142,17 @@
return (unsigned int) new_addr;
}
-void _dl_parse_lazy_relocation_information(struct elf_resolve * tpnt, int rel_addr,
- int rel_size, int type){
+void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
+ unsigned long rel_addr, unsigned long rel_size, int type)
+{
int i;
char * strtab;
int reloc_type;
int symtab_index;
- Elf32_Sym * symtab;
+ Elf32_Sym * symtab;
Elf32_Rela * rpnt;
unsigned int * reloc_addr;
+ struct elf_resolve * tpnt = rpnt->dyn;
/* Now parse the relocation information */
rpnt = (Elf32_Rela *) (rel_addr + tpnt->loadaddr);
@@ -187,17 +189,19 @@
};
}
-int _dl_parse_relocation_information(struct elf_resolve * tpnt, int rel_addr,
- int rel_size, int type){
+int _dl_parse_relocation_information(struct dyn_elf *rpnt,
+ unsigned long rel_addr, unsigned long rel_size, int type)
+{
int i;
char * strtab;
int reloc_type;
int goof = 0;
- Elf32_Sym * symtab;
+ Elf32_Sym * symtab;
Elf32_Rela * rpnt;
unsigned int * reloc_addr;
unsigned int symbol_addr;
int symtab_index;
+ struct elf_resolve * tpnt = rpnt->dyn;
/* Now parse the relocation information */
rpnt = (Elf32_Rela *) (rel_addr + tpnt->loadaddr);
@@ -215,11 +219,11 @@
if(symtab_index) {
- if(tpnt->libtype == program_interpreter &&
+ if(tpnt->libtype == program_interpreter &&
_dl_symbol(strtab + symtab[symtab_index].st_name))
continue;
- symbol_addr = (unsigned int)
+ symbol_addr = (unsigned int)
_dl_find_hash(strtab + symtab[symtab_index].st_name,
tpnt->symbol_scope,
(reloc_type == R_SPARC_JMP_SLOT ? tpnt : NULL), symbolrel);
@@ -274,7 +278,7 @@
if(symtab_index) _dl_dprintf(2, strtab + symtab[symtab_index].st_name);
_dl_dprintf(2, "\n");
_dl_memcpy((void *) symtab[symtab_index].st_value,
- (void *) symbol_addr,
+ (void *) symbol_addr,
symtab[symtab_index].st_size);
#endif
break;
@@ -302,14 +306,14 @@
/* No, there are cases where the SVr4 linker fails to emit COPY relocs
at all */
-int _dl_parse_copy_information(struct dyn_elf * xpnt, int rel_addr,
- int rel_size, int type)
+int _dl_parse_copy_information(struct dyn_elf *xpnt,
+ unsigned long rel_addr, unsigned long rel_size, int type)
{
int i;
char * strtab;
int reloc_type;
int goof = 0;
- Elf32_Sym * symtab;
+ Elf32_Sym * symtab;
Elf32_Rela * rpnt;
unsigned int * reloc_addr;
unsigned int symbol_addr;
@@ -318,7 +322,7 @@
/* Now parse the relocation information */
tpnt = xpnt->dyn;
-
+
rpnt = (Elf32_Rela *) (rel_addr + tpnt->loadaddr);
symtab = (Elf32_Sym *) (tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr);
@@ -333,11 +337,11 @@
if(!symtab_index && tpnt->libtype == program_interpreter) continue;
if(symtab_index) {
- if(tpnt->libtype == program_interpreter &&
+ if(tpnt->libtype == program_interpreter &&
_dl_symbol(strtab + symtab[symtab_index].st_name))
continue;
- symbol_addr = (unsigned int)
+ symbol_addr = (unsigned int)
_dl_find_hash(strtab + symtab[symtab_index].st_name,
xpnt->next, NULL, copyrel);
if(!symbol_addr) {
@@ -347,8 +351,8 @@
};
};
if (!goof)
- _dl_memcpy((char *) symtab[symtab_index].st_value,
- (char *) symbol_addr,
+ _dl_memcpy((char *) symtab[symtab_index].st_value,
+ (char *) symbol_addr,
symtab[symtab_index].st_size);
};
return goof;
More information about the uClibc-cvs
mailing list