summaryrefslogtreecommitdiff
path: root/util/cbfstool/elfparsing.h
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2015-10-28 11:26:40 -0500
committerAaron Durbin <adurbin@chromium.org>2015-10-29 17:00:47 +0100
commitcedcb882c1f0a2b9b61ffed9a646744d3e481e60 (patch)
tree4e5ed1ba81f210a66a26e7240f4f3d8bf3391fc7 /util/cbfstool/elfparsing.h
parent8e982eabfacf9cce5bcc011ee2c23ca7ced4b05c (diff)
downloadcoreboot-cedcb882c1f0a2b9b61ffed9a646744d3e481e60.tar.xz
cbfstool: add ELF symbol, relocation, and string table support
In order to convert rmodules back into ELF files one needs to add in the relocations so they can be converted back to rmodules. Because of that requirement symbol tables need to be present because the relocations reference the symbols. Additionally, symbol tables reference a string table for the symbol names. Provide the necessary support for adding all of those things to an ELF writer. TEST=Extracted rmodule from a cbfs and compared with the source ELF file. Confirmed relocations and code sizes are correct. Change-Id: I07e87a30b3371ddedabcfc682046e3db8c956ff2 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/12221 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'util/cbfstool/elfparsing.h')
-rw-r--r--util/cbfstool/elfparsing.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/util/cbfstool/elfparsing.h b/util/cbfstool/elfparsing.h
index fa1c277acc..9024b6d60e 100644
--- a/util/cbfstool/elfparsing.h
+++ b/util/cbfstool/elfparsing.h
@@ -109,6 +109,17 @@ void elf_writer_destroy(struct elf_writer *ew);
int elf_writer_add_section(struct elf_writer *ew, const Elf64_Shdr *shdr,
struct buffer *contents, const char *name);
+/* Add an absolute symbol to the ELF file returning < 0 on error, index of
+ * symbol otherwise. */
+int elf_writer_add_symbol(struct elf_writer *ew, const char *name,
+ const char *section_name,
+ Elf64_Addr value, Elf64_Word size,
+ int binding, int type);
+
+/* Add an absolute relocation referencing the provided symbol name. Returns < 0
+ * on error, 0 on success. */
+int elf_writer_add_rel(struct elf_writer *ew, const char *sym, Elf64_Addr addr);
+
/*
* Serialize the ELF file to the output buffer. Return < 0 on error,
* 0 on success.