From ea64c4b3c6fbf77577b7019182bc93cabe21fdd5 Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund Date: Thu, 23 Sep 2004 07:00:45 +0000 Subject: Don't allow undefined global symbols to pass. Move COPY relocs back to _dl_do_reloc(). --- ldso/ldso/sparc/elfinterp.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'ldso/ldso/sparc') 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); -- cgit v1.2.3