[coreboot-gerrit] New patch to review for coreboot: e2f21af rmodtool: add support for ARM

Marc Jones (marc.jones@se-eng.com) gerrit at coreboot.org
Mon Oct 27 21:26:45 CET 2014


Marc Jones (marc.jones at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7204

-gerrit

commit e2f21af5446571fd73ea12b7ac8e6e39fdac8e5c
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Thu Mar 20 11:08:02 2014 -0500

    rmodtool: add support for ARM
    
    Add support for creating ARM rmodules. There are 3 expected
    relocations for an ARM rmodule:
    - R_ARM_ABS32
    - R_ARM_THM_PC22
    - R_ARM_THM_JUMP24
    
    R_ARM_ABS32 is the only type that needs to emitted for relocation
    as the other 2 are relative relocations.
    
    BUG=chrome-os-partner:27094
    BRANCH=None
    TEST=Built vbootstub for ARM device.
    
    Original-Change-Id: I0c22d4abca970e82ccd60b33fed700b96e3e52fb
    Original-Signed-off-by: Aaron Durbin <adurbin at chromuim.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/190922
    Original-Reviewed-by: Gabe Black <gabeblack at chromium.org>
    (cherry picked from commit a642102ba7ace5c1829abe7732199eda6646950a)
    Signed-off-by: Marc Jones <marc.jones at se-eng.com>
    
    Change-Id: Ib3b3c90ebb672d8d6a537df896b97dc82c6186cc
---
 util/cbfstool/elf.h     |  1 +
 util/cbfstool/rmodule.c | 26 ++++++++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/util/cbfstool/elf.h b/util/cbfstool/elf.h
index d07bb53..8b56a71 100644
--- a/util/cbfstool/elf.h
+++ b/util/cbfstool/elf.h
@@ -2222,6 +2222,7 @@ typedef Elf32_Addr Elf32_Conflict;
 #define R_ARM_GOTPC		25	/* 32 bit PC relative offset to GOT */
 #define R_ARM_GOT32		26	/* 32 bit GOT entry */
 #define R_ARM_PLT32		27	/* 32 bit PLT address */
+#define R_ARM_THM_JUMP24	30
 #define R_ARM_ALU_PCREL_7_0	32
 #define R_ARM_ALU_PCREL_15_8	33
 #define R_ARM_ALU_PCREL_23_15	34
diff --git a/util/cbfstool/rmodule.c b/util/cbfstool/rmodule.c
index 168d71a..966c364 100644
--- a/util/cbfstool/rmodule.c
+++ b/util/cbfstool/rmodule.c
@@ -82,12 +82,38 @@ static int should_emit_386(struct rmod_context *ctx, Elf64_Rela *rel)
 	return (type == R_386_32);
 }
 
+static int valid_reloc_arm(struct rmod_context *ctx, Elf64_Rela *rel)
+{
+	int type;
+
+	type = ELF64_R_TYPE(rel->r_info);
+
+	/* Only these 3 relocations are expected to be found. */
+	return (type == R_ARM_ABS32 || type == R_ARM_THM_PC22 ||
+                type == R_ARM_THM_JUMP24);
+}
+
+static int should_emit_arm(struct rmod_context *ctx, Elf64_Rela *rel)
+{
+	int type;
+
+	type = ELF64_R_TYPE(rel->r_info);
+
+	/* R_ARM_ABS32 relocations are absolute. Must emit these. */
+	return (type == R_ARM_ABS32);
+}
+
 static struct arch_ops reloc_ops[] = {
 	{
 		.arch = EM_386,
 		.valid_type = valid_reloc_386,
 		.should_emit = should_emit_386,
 	},
+	{
+		.arch = EM_ARM,
+		.valid_type = valid_reloc_arm,
+		.should_emit = should_emit_arm,
+	},
 };
 
 /*



More information about the coreboot-gerrit mailing list