Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Force probing of multiboot before ELF.
  • Loading branch information
Michael Brown committed Jan 12, 2007
1 parent 475d6d1 commit 6fdc6c8
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 12 deletions.
4 changes: 2 additions & 2 deletions src/arch/i386/image/multiboot.c
Expand Up @@ -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 | \
Expand Down Expand Up @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions src/image/elf.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down
28 changes: 20 additions & 8 deletions src/include/gpxe/image.h
Expand Up @@ -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;

Expand Down

0 comments on commit 6fdc6c8

Please sign in to comment.