summaryrefslogtreecommitdiffstats
path: root/util/cbfstool/elfheaders.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2015-10-27 16:21:55 -0500
committerAaron Durbin <adurbin@chromium.org>2015-10-29 17:00:12 +0100
commit4f930c96496250d167bc1a397fa1faa9f20b3168 (patch)
treeb1cc452477cace30dc50b214bf2534cf226f9765 /util/cbfstool/elfheaders.c
parent176250292920d119ca6d17181ef468714951b7e2 (diff)
downloadcoreboot-4f930c96496250d167bc1a397fa1faa9f20b3168.tar.gz
coreboot-4f930c96496250d167bc1a397fa1faa9f20b3168.tar.bz2
coreboot-4f930c96496250d167bc1a397fa1faa9f20b3168.zip
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.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/util/cbfstool/elfheaders.c b/util/cbfstool/elfheaders.c
index 4cf3534a232d..da11bfcb6269 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 {