summaryrefslogtreecommitdiff
path: root/ldso/ldso/sparc/elfinterp.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldso/ldso/sparc/elfinterp.c')
-rw-r--r--ldso/ldso/sparc/elfinterp.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/ldso/ldso/sparc/elfinterp.c b/ldso/ldso/sparc/elfinterp.c
index 543489fc1..89993cd84 100644
--- a/ldso/ldso/sparc/elfinterp.c
+++ b/ldso/ldso/sparc/elfinterp.c
@@ -219,10 +219,10 @@ int _dl_parse_relocation_information(struct dyn_elf *rpnt,
tpnt->symbol_scope, elf_machine_type_class(reloc_type));
if(!symbol_addr &&
- ELF32_ST_BIND(symtab [symtab_index].st_info) == STB_GLOBAL) {
- _dl_dprintf(2, "%s: can't resolve symbol '%s'\n",
- _dl_progname, strtab + symtab[symtab_index].st_name);
- goof++;
+ ELF32_ST_BIND(symtab [symtab_index].st_info) != STB_WEAK) {
+ _dl_dprintf (2, "%s: can't resolve symbol '%s'\n",
+ _dl_progname, strtab + symtab[symtab_index].st_name);
+ _dl_exit (1);
};
};
switch(reloc_type){
@@ -263,14 +263,7 @@ int _dl_parse_relocation_information(struct dyn_elf *rpnt,
((symbol_addr - (unsigned int) reloc_addr) >> 2);
break;
case R_SPARC_COPY:
-#if 0 /* This one is done 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,
- (void *) symbol_addr,
- symtab[symtab_index].st_size);
-#endif
+ _dl_memcpy((void *) reloc_addr, (void *) symbol_addr, symtab[symtab_index].st_size);
break;
default:
_dl_dprintf(2, "%s: can't handle reloc type ", _dl_progname);
@@ -310,7 +303,7 @@ int _dl_parse_copy_information(struct dyn_elf *xpnt,
struct elf_resolve *tpnt;
int symtab_index;
/* Now parse the relocation information */
-
+ return 0; /* disable for now, remove later */
tpnt = xpnt->dyn;
rpnt = (Elf32_Rela *) (rel_addr + tpnt->loadaddr);