diff --git a/src/image/elf.c b/src/image/elf.c index c746caa4..c76c8f5e 100644 --- a/src/image/elf.c +++ b/src/image/elf.c @@ -27,19 +27,12 @@ #include #include #include +#include typedef Elf32_Ehdr Elf_Ehdr; typedef Elf32_Phdr Elf_Phdr; typedef Elf32_Off Elf_Off; -/** An ELF file */ -struct elf { - /** ELF file image */ - userptr_t image; - /** Length of ELF file image */ - size_t len; -}; - /** * Load ELF segment into memory * @@ -126,5 +119,8 @@ int elf_load ( struct elf *elf ) { return rc; } + /* Fill in entry point address */ + elf->entry = ehdr.e_entry; + return 0; } diff --git a/src/include/gpxe/elf.h b/src/include/gpxe/elf.h new file mode 100644 index 00000000..8abbb02e --- /dev/null +++ b/src/include/gpxe/elf.h @@ -0,0 +1,26 @@ +#ifndef _GPXE_ELF_H +#define _GPXE_ELF_H + +/** + * @file + * + * ELF image format + * + */ + +#include + +/** An ELF file */ +struct elf { + /** ELF file image */ + userptr_t image; + /** Length of ELF file image */ + size_t len; + + /** Entry point */ + physaddr_t entry; +}; + +extern int elf_load ( struct elf *elf ); + +#endif /* _GPXE_ELF_H */