summaryrefslogtreecommitdiff
path: root/ldso/ldso/m68k
diff options
context:
space:
mode:
authorJoakim Tjernlund <joakim.tjernlund@transmode.se>2004-09-23 07:00:45 +0000
committerJoakim Tjernlund <joakim.tjernlund@transmode.se>2004-09-23 07:00:45 +0000
commitea64c4b3c6fbf77577b7019182bc93cabe21fdd5 (patch)
treef78beaaff3a65188212a70a4dc35f28b9208306f /ldso/ldso/m68k
parent6dfefd64985e6a6872aebf0c53a5f2c9da5b0da9 (diff)
Don't allow undefined global symbols to pass.
Move COPY relocs back to _dl_do_reloc().
Diffstat (limited to 'ldso/ldso/m68k')
-rw-r--r--ldso/ldso/m68k/elfinterp.c19
1 files changed, 6 insertions, 13 deletions
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);