diff options
author | Aaron Durbin <adurbin@chromium.org> | 2015-10-28 11:26:40 -0500 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2015-10-29 17:00:47 +0100 |
commit | cedcb882c1f0a2b9b61ffed9a646744d3e481e60 (patch) | |
tree | 4e5ed1ba81f210a66a26e7240f4f3d8bf3391fc7 /util/cbfstool/elfparsing.h | |
parent | 8e982eabfacf9cce5bcc011ee2c23ca7ced4b05c (diff) |
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.h | 11 |
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. |