Force probing of multiboot before ELF.
authorMichael Brown <mcb30@etherboot.org>
Fri, 12 Jan 2007 08:10:35 +0000 (08:10 +0000)
committerMichael Brown <mcb30@etherboot.org>
Fri, 12 Jan 2007 08:10:35 +0000 (08:10 +0000)
src/arch/i386/image/multiboot.c
src/image/elf.c
src/include/gpxe/image.h

index cdf81e6..746b8a5 100644 (file)
@@ -33,7 +33,7 @@
 #include <gpxe/memmap.h>
 #include <gpxe/elf.h>
 
-struct image_type multiboot_image_type __image_type;
+struct image_type multiboot_image_type __image_type ( PROBE_MULTIBOOT );
 
 /** Multiboot flags that we support */
 #define MB_SUPPORTED_FLAGS ( MB_FLAG_PGALIGN | MB_FLAG_MEMMAP | \
@@ -320,7 +320,7 @@ int multiboot_load ( struct image *image ) {
 }
 
 /** Multiboot image type */
-struct image_type multiboot_image_type __image_type = {
+struct image_type multiboot_image_type __image_type ( PROBE_MULTIBOOT ) = {
        .name = "Multiboot",
        .load = multiboot_load,
        .exec = multiboot_exec,
index 869be3f..167ef2b 100644 (file)
@@ -30,7 +30,7 @@
 #include <gpxe/image.h>
 #include <gpxe/elf.h>
 
-struct image_type elf_image_type __image_type;
+struct image_type elf_image_type __image_type ( PROBE_NORMAL );
 
 typedef Elf32_Ehdr     Elf_Ehdr;
 typedef Elf32_Phdr     Elf_Phdr;
@@ -143,7 +143,7 @@ int elf_load ( struct image *image ) {
 }
 
 /** ELF image type */
-struct image_type elf_image_type __image_type = {
+struct image_type elf_image_type __image_type ( PROBE_NORMAL ) = {
        .name = "ELF",
        .load = elf_load,
        .exec = elf_exec,
index 5367735..c91468c 100644 (file)
@@ -79,18 +79,30 @@ struct image_type {
        int ( * exec ) ( struct image *image );
 };
 
-/** An executable or loadable image type */
-#define __image_type __table ( struct image_type, image_types, 01 )
+/**
+ * Multiboot image probe priority
+ *
+ * Multiboot images are also valid executables in another format
+ * (e.g. ELF), so we must perform the multiboot probe first.
+ */
+#define PROBE_MULTIBOOT        01
 
 /**
- * An unverifiable executable or loadable image type
+ * Normal image probe priority
+ */
+#define PROBE_NORMAL 02
+
+/**
+ * PXE image probe priority
  *
- * This should be used to mark image types for which there are no
- * signature or other checks that can be used to verify the validity
- * of the image (such as PXE images).  These will then be tried last
- * in the list of image types.
+ * PXE images have no signature checks, so will claim all image files.
+ * They must therefore be tried last in the probe order list.
  */
-#define __default_image_type __table ( struct image_type, image_types, 02 )
+#define PROBE_PXE 03
+
+/** An executable or loadable image type */
+#define __image_type( probe_order ) \
+        __table ( struct image_type, image_types, probe_order )
 
 extern struct list_head images;