diff options
Diffstat (limited to 'src/image/elf.c')
-rw-r--r-- | src/image/elf.c | 29 |
1 files changed, 6 insertions, 23 deletions
diff --git a/src/image/elf.c b/src/image/elf.c index 75c976ea..b932ff58 100644 --- a/src/image/elf.c +++ b/src/image/elf.c @@ -21,6 +21,9 @@ * * ELF image format * + * A "pure" ELF image is not a bootable image. There are various + * bootable formats based upon ELF (e.g. Multiboot), which share + * common ELF-related functionality. */ #include <errno.h> @@ -30,23 +33,11 @@ #include <gpxe/image.h> #include <gpxe/elf.h> -struct image_type elf_image_type __image_type ( PROBE_NORMAL ); - typedef Elf32_Ehdr Elf_Ehdr; typedef Elf32_Phdr Elf_Phdr; typedef Elf32_Off Elf_Off; /** - * Execute ELF image - * - * @v image ELF file - * @ret rc Return status code - */ -static int elf_exec ( struct image *image __unused ) { - return -ENOTSUP; -} - -/** * Load ELF segment into memory * * @v image ELF file @@ -112,6 +103,9 @@ int elf_load ( struct image *image ) { unsigned int phnum; int rc; + /* Image type must already have been set by caller */ + assert ( image->type != NULL ); + /* Read ELF header */ copy_from_user ( &ehdr, image->data, 0, sizeof ( ehdr ) ); if ( memcmp ( &ehdr.e_ident[EI_MAG0], ELFMAG, SELFMAG ) != 0 ) { @@ -119,10 +113,6 @@ int elf_load ( struct image *image ) { return -ENOEXEC; } - /* This is an ELF image, valid or otherwise */ - if ( ! image->type ) - image->type = &elf_image_type; - /* Read ELF program headers */ for ( phoff = ehdr.e_phoff , phnum = ehdr.e_phnum ; phnum ; phoff += ehdr.e_phentsize, phnum-- ) { @@ -141,10 +131,3 @@ int elf_load ( struct image *image ) { return 0; } - -/** ELF image type */ -struct image_type elf_image_type __image_type ( PROBE_NORMAL ) = { - .name = "ELF", - .load = elf_load, - .exec = elf_exec, -}; |