[uClibc-cvs] CVS uClibc/ldso/ldso/sparc

CVS User jocke jocke at codepoet.org
Thu Sep 23 07:00:46 UTC 2004


Update of /var/cvs/uClibc/ldso/ldso/sparc
In directory nail:/tmp/cvs-serv6792/sparc

Modified Files:
	elfinterp.c 
Log Message:
Don't allow undefined global symbols to pass.
Move COPY relocs back to _dl_do_reloc().


--- /var/cvs/uClibc/ldso/ldso/sparc/elfinterp.c	2004/08/25 15:19:00	1.19
+++ /var/cvs/uClibc/ldso/ldso/sparc/elfinterp.c	2004/09/23 07:00:45	1.20
@@ -219,10 +219,10 @@
 		      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 @@
 	((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 @@
   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);



More information about the uClibc-cvs mailing list