OSDN Git Service

Don't allow undefined global symbols to pass.
[uclinux-h8/uClibc.git] / ldso / ldso / sparc / elfinterp.c
index 543489f..89993cd 100644 (file)
@@ -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);