summaryrefslogtreecommitdiffstats
path: root/util/cbfstool/rmodule.c
diff options
context:
space:
mode:
authorPatrick Rudolph <siro@das-labor.org>2018-11-26 15:54:21 +0100
committerPatrick Georgi <pgeorgi@google.com>2018-12-19 06:05:52 +0000
commit565bebe0b3c506b978ad5c9a66cb67ebe0ac6329 (patch)
treef149dad8f48c43e5d4c27bbd711473df46d52f3f /util/cbfstool/rmodule.c
parentf7fdc3a5ab21333aa08d58681795ddf65df170eb (diff)
downloadcoreboot-565bebe0b3c506b978ad5c9a66cb67ebe0ac6329.tar.gz
coreboot-565bebe0b3c506b978ad5c9a66cb67ebe0ac6329.tar.bz2
coreboot-565bebe0b3c506b978ad5c9a66cb67ebe0ac6329.zip
util/cbfstool: Support AMD64 rmodules
Add support for 64bit rmodule, as required for relocatable ramstage on x86_64. Change-Id: I7fbb3b4c0f76ce82c090b5f16f67a728b6bf94a5 Signed-off-by: Patrick Rudolph <siro@das-labor.org> Reviewed-on: https://review.coreboot.org/c/29874 Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'util/cbfstool/rmodule.c')
-rw-r--r--util/cbfstool/rmodule.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/util/cbfstool/rmodule.c b/util/cbfstool/rmodule.c
index ff8f1cdef2ef..f270e3ec8feb 100644
--- a/util/cbfstool/rmodule.c
+++ b/util/cbfstool/rmodule.c
@@ -44,6 +44,33 @@ static int should_emit_386(Elf64_Rela *rel)
return (type == R_386_32);
}
+static int valid_reloc_amd64(Elf64_Rela *rel)
+{
+ int type;
+
+ type = ELF64_R_TYPE(rel->r_info);
+
+ /* Only these 5 relocations are expected to be found. */
+ return (type == R_AMD64_64 ||
+ type == R_AMD64_PC64 ||
+ type == R_AMD64_32S ||
+ type == R_AMD64_32 ||
+ type == R_AMD64_PC32);
+}
+
+static int should_emit_amd64(Elf64_Rela *rel)
+{
+ int type;
+
+ type = ELF64_R_TYPE(rel->r_info);
+
+ /* Only emit absolute relocations */
+ return (type == R_AMD64_64 ||
+ type == R_AMD64_PC64 ||
+ type == R_AMD64_32S ||
+ type == R_AMD64_32);
+}
+
static int valid_reloc_arm(Elf64_Rela *rel)
{
int type;
@@ -101,6 +128,11 @@ static const struct arch_ops reloc_ops[] = {
.should_emit = should_emit_386,
},
{
+ .arch = EM_X86_64,
+ .valid_type = valid_reloc_amd64,
+ .should_emit = should_emit_amd64,
+ },
+ {
.arch = EM_ARM,
.valid_type = valid_reloc_arm,
.should_emit = should_emit_arm,