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/m68k/elfinterp.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'ldso/ldso/m68k') diff --git a/ldso/ldso/m68k/elfinterp.c b/ldso/ldso/m68k/elfinterp.c index 6e7ad6c5d..dc5713422 100644 --- a/ldso/ldso/m68k/elfinterp.c +++ b/ldso/ldso/m68k/elfinterp.c @@ -212,11 +212,11 @@ int _dl_parse_relocation_information(struct dyn_elf *rpnt, linking local symbols here, so all bases should be covered. */ if (!symbol_addr - && ELF32_ST_BIND (symtab[symtab_index].st_info) == STB_GLOBAL) + && 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); - goof++; + _dl_dprintf (2, "%s: can't resolve symbol '%s'\n", + _dl_progname, strtab + symtab[symtab_index].st_name); + _dl_exit (1); } } switch (reloc_type) @@ -254,16 +254,9 @@ int _dl_parse_relocation_information(struct dyn_elf *rpnt, + (rpnt->r_addend ? : *reloc_addr)); break; case R_68K_COPY: -#if 0 /* Do this later. */ - _dl_dprintf (2, "Doing copy"); - if (symtab_index) - _dl_dprintf (2, " for symbol %s", - strtab + symtab[symtab_index].st_name); - _dl_dprintf (2, "\n"); - _dl_memcpy ((void *) symtab[symtab_index].st_value, + _dl_memcpy ((void *) reloc_addr, (void *) symbol_addr, symtab[symtab_index].st_size); -#endif break; default: _dl_dprintf (2, "%s: can't handle reloc type ", _dl_progname); @@ -303,7 +296,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 now, remove later */ tpnt = xpnt->dyn; rpnt = (Elf32_Rela *) (rel_addr + tpnt->loadaddr); -- cgit v1.2.3