diff options
Diffstat (limited to 'ldso/ldso/sparc/elfinterp.c')
-rw-r--r-- | ldso/ldso/sparc/elfinterp.c | 19 |
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); |