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

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


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

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/sh64/elfinterp.c	2004/08/25 15:19:00	1.6
+++ /var/cvs/uClibc/ldso/ldso/sh64/elfinterp.c	2004/09/23 07:00:43	1.7
@@ -315,13 +315,10 @@
 		 */
 		stb = ELF32_ST_BIND(symtab[symtab_index].st_info);
 
-		if (stb == STB_GLOBAL && !symbol_addr) {
-#ifdef __SUPPORT_LD_DEBUG__
-			_dl_dprintf(2, "\tglobal symbol '%s' "
-				    "already defined in '%s'\n",
-				    symname, tpnt->libname);
-#endif
-			return 0;
+		if (stb != STB_WEAK && !symbol_addr) {
+			_dl_dprintf (2, "%s: can't resolve symbol '%s'\n",
+				     _dl_progname, strtab + symtab[symtab_index].st_name);
+			_dl_exit (1);
 		}
 	}
 
@@ -333,7 +330,8 @@
 	case R_SH_NONE:
 		break;
 	case R_SH_COPY:
-		/* handled later on */
+		_dl_memcpy((char *)reloc_addr,
+			   (char *)symbol_addr, symtab[symtab_index].st_size);
 		break;
 	case R_SH_DIR32:
 	case R_SH_GLOB_DAT:
@@ -464,7 +462,7 @@
 	unsigned long symbol_addr;
 	char *symname;
 	int goof = 0;
-
+	return 0; /* disable now, remove later */
 	reloc_addr = (unsigned long *)(intptr_t)
 		(tpnt->loadaddr + (unsigned long)rpnt->r_offset);
 	reloc_type = ELF32_R_TYPE(rpnt->r_info);



More information about the uClibc-cvs mailing list