summaryrefslogtreecommitdiffstats
path: root/src/image/elf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/image/elf.c')
-rw-r--r--src/image/elf.c29
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,
-};