david/ipxe
Archived
1
0

Force probing of multiboot before ELF.

This commit is contained in:
Michael Brown 2007-01-12 08:10:35 +00:00
parent 475d6d1f7c
commit 6fdc6c81a6
3 changed files with 25 additions and 13 deletions

View 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,

View 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,

View 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
*
* 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.
* Normal image probe priority
*/
#define __default_image_type __table ( struct image_type, image_types, 02 )
#define PROBE_NORMAL 02
/**
* PXE image probe priority
*
* PXE images have no signature checks, so will claim all image files.
* They must therefore be tried last in the probe order list.
*/
#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;