diff options
author | Aaron Durbin <adurbin@chromium.org> | 2015-10-27 16:21:55 -0500 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2015-10-29 17:00:12 +0100 |
commit | 4f930c96496250d167bc1a397fa1faa9f20b3168 (patch) | |
tree | b1cc452477cace30dc50b214bf2534cf226f9765 /util/cbfstool/elfheaders.c | |
parent | 176250292920d119ca6d17181ef468714951b7e2 (diff) |
cbfstool: add ELF header initialization helper
In order for one to extract ELF files from cbfs it's
helpful to have common code which creates a default
executable ELF header for the provided constraints.
BUG=None
TEST=With follow up patch am able to extract out romstage
as an ELF file.
Change-Id: Ib8f2456f41b79c6c0430861e33e8b909725013f1
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/12218
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'util/cbfstool/elfheaders.c')
-rw-r--r-- | util/cbfstool/elfheaders.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/util/cbfstool/elfheaders.c b/util/cbfstool/elfheaders.c index 4cf3534a23..da11bfcb62 100644 --- a/util/cbfstool/elfheaders.c +++ b/util/cbfstool/elfheaders.c @@ -635,6 +635,30 @@ elf_headers(const struct buffer *pinput, * +------------------+ */ +void elf_init_eheader(Elf64_Ehdr *ehdr, int machine, int nbits, int endian) +{ + memset(ehdr, 0, sizeof(*ehdr)); + ehdr->e_ident[EI_MAG0] = ELFMAG0; + ehdr->e_ident[EI_MAG1] = ELFMAG1; + ehdr->e_ident[EI_MAG2] = ELFMAG2; + ehdr->e_ident[EI_MAG3] = ELFMAG3; + ehdr->e_ident[EI_CLASS] = nbits; + ehdr->e_ident[EI_DATA] = endian; + ehdr->e_ident[EI_VERSION] = EV_CURRENT; + ehdr->e_type = ET_EXEC; + ehdr->e_machine = machine; + ehdr->e_version = EV_CURRENT; + if (nbits == ELFCLASS64) { + ehdr->e_ehsize = sizeof(Elf64_Ehdr); + ehdr->e_phentsize = sizeof(Elf64_Phdr); + ehdr->e_shentsize = sizeof(Elf64_Shdr); + } else { + ehdr->e_ehsize = sizeof(Elf32_Ehdr); + ehdr->e_phentsize = sizeof(Elf32_Phdr); + ehdr->e_shentsize = sizeof(Elf32_Shdr); + } +} + /* Arbitray maximum number of sections. */ #define MAX_SECTIONS 16 struct elf_writer_section { |