svn commit: r188440 - head/sys/kern

Attilio Rao attilio at FreeBSD.org
Tue Feb 10 07:50:20 PST 2009


Author: attilio
Date: Tue Feb 10 15:50:19 2009
New Revision: 188440
URL: http://svn.freebsd.org/changeset/base/188440

Log:
  Scanning all the formats for binary translation of modules loading can
  result in errors for a format loading but subsequent correct recognizing
  for another format.
  
  File format loading functions should avoid printing any additional
  informations but just returning appropriate (and different between each
  other) error condition, characterizing different informations.
  Additively, the linker should handle appropriately different format
  loading errors.
  
  While a general mechanism is desired, fix a simple and common case on
  amd64: file type is not recognized for link elf and confuses the linker.
  Printout an error if all the registered linker classes can't recognize
  and load the module.
  
  Reviewed by:	jhb
  Sponsored by:	Sandvine Incorporated

Modified:
  head/sys/kern/kern_linker.c
  head/sys/kern/link_elf.c
  head/sys/kern/link_elf_obj.c

Modified: head/sys/kern/kern_linker.c
==============================================================================
--- head/sys/kern/kern_linker.c	Tue Feb 10 15:11:26 2009	(r188439)
+++ head/sys/kern/kern_linker.c	Tue Feb 10 15:50:19 2009	(r188440)
@@ -425,6 +425,14 @@ linker_load_file(const char *filename, l
 	 * the module was not found.
 	 */
 	if (foundfile) {
+
+		/*
+		 * If the file type has not been recognized by the last try
+		 * printout a message before to fail.
+		 */
+		if (error == ENOSYS)
+			printf("linker_load_file: Unsupported file type\n");
+
 		/*
 		 * Format not recognized or otherwise unloadable.
 		 * When loading a module that is statically built into

Modified: head/sys/kern/link_elf.c
==============================================================================
--- head/sys/kern/link_elf.c	Tue Feb 10 15:11:26 2009	(r188439)
+++ head/sys/kern/link_elf.c	Tue Feb 10 15:50:19 2009	(r188440)
@@ -638,8 +638,7 @@ link_elf_load_file(linker_class_t cls, c
 	goto out;
     }
     if (hdr->e_type != ET_EXEC && hdr->e_type != ET_DYN) {
-	link_elf_error(filename, "Unsupported file type");
-	error = ENOEXEC;
+	error = ENOSYS;
 	goto out;
     }
     if (hdr->e_machine != ELF_TARG_MACH) {
@@ -694,8 +693,7 @@ link_elf_load_file(linker_class_t cls, c
 	    break;
 
 	case PT_INTERP:
-	    link_elf_error(filename, "Unsupported file type");
-	    error = ENOEXEC;
+	    error = ENOSYS;
 	    goto out;
 	}
 

Modified: head/sys/kern/link_elf_obj.c
==============================================================================
--- head/sys/kern/link_elf_obj.c	Tue Feb 10 15:11:26 2009	(r188439)
+++ head/sys/kern/link_elf_obj.c	Tue Feb 10 15:50:19 2009	(r188440)
@@ -474,8 +474,7 @@ link_elf_load_file(linker_class_t cls, c
 		goto out;
 	}
 	if (hdr->e_type != ET_REL) {
-		link_elf_error(filename, "Unsupported file type");
-		error = ENOEXEC;
+		error = ENOSYS;
 		goto out;
 	}
 	if (hdr->e_machine != ELF_TARG_MACH) {


More information about the svn-src-all mailing list