summaryrefslogtreecommitdiff
path: root/util/cbfstool
diff options
context:
space:
mode:
Diffstat (limited to 'util/cbfstool')
-rw-r--r--util/cbfstool/cbfs.h1
-rw-r--r--util/cbfstool/common.c1
-rw-r--r--util/cbfstool/elf.h44
-rw-r--r--util/cbfstool/elfheaders.c1
4 files changed, 47 insertions, 0 deletions
diff --git a/util/cbfstool/cbfs.h b/util/cbfstool/cbfs.h
index 348a4da371..9af801c903 100644
--- a/util/cbfstool/cbfs.h
+++ b/util/cbfstool/cbfs.h
@@ -53,6 +53,7 @@ struct cbfs_header {
#define CBFS_ARCHITECTURE_X86 0x00000001
#define CBFS_ARCHITECTURE_ARM 0x00000010
#define CBFS_ARCHITECTURE_AARCH64 0x0000aa64
+#define CBFS_ARCHITECTURE_RISCV 0xc001d0de
#define CBFS_FILE_MAGIC "LARCHIVE"
diff --git a/util/cbfstool/common.c b/util/cbfstool/common.c
index 7347fcbaca..d990ddd226 100644
--- a/util/cbfstool/common.c
+++ b/util/cbfstool/common.c
@@ -132,6 +132,7 @@ static struct {
} arch_names[] = {
{ CBFS_ARCHITECTURE_AARCH64, "arm64" },
{ CBFS_ARCHITECTURE_ARM, "arm" },
+ { CBFS_ARCHITECTURE_RISCV, "riscv" },
{ CBFS_ARCHITECTURE_X86, "x86" },
{ CBFS_ARCHITECTURE_UNKNOWN, "unknown" }
};
diff --git a/util/cbfstool/elf.h b/util/cbfstool/elf.h
index 0795815a34..d07bb53599 100644
--- a/util/cbfstool/elf.h
+++ b/util/cbfstool/elf.h
@@ -2688,4 +2688,48 @@ typedef Elf32_Addr Elf32_Conflict;
#define R_M32R_NUM 256 /* Keep this the last entry. */
+/* RISC-V relocation types */
+#define R_RISCV_NONE 0
+#define R_RISCV_32 2
+#define R_RISCV_REL32 3
+#define R_RISCV_JAL 4
+#define R_RISCV_HI20 5
+#define R_RISCV_LO12_I 6
+#define R_RISCV_LO12_S 7
+#define R_RISCV_PCREL_LO12_I 8
+#define R_RISCV_PCREL_LO12_S 9
+#define R_RISCV_BRANCH 10
+#define R_RISCV_CALL 11
+#define R_RISCV_PCREL_HI20 12
+#define R_RISCV_CALL_PLT 13
+#define R_RISCV_64 18
+#define R_RISCV_GOT_HI20 22
+#define R_RISCV_GOT_LO12 23
+#define R_RISCV_COPY 24
+#define R_RISCV_JUMP_SLOT 25
+/* TLS relocations */
+#define R_RISCV_TPREL_HI20 30
+#define R_RISCV_TPREL_LO12_I 31
+#define R_RISCV_TPREL_LO12_S 32
+#define R_RISCV_TLS_DTPMOD32 38
+#define R_RISCV_TLS_DTPREL32 39
+#define R_RISCV_TLS_DTPMOD64 40
+#define R_RISCV_TLS_DTPREL64 41
+#define R_RISCV_TLS_GD 42
+#define R_RISCV_TLS_DTPREL_HI16 44
+#define R_RISCV_TLS_DTPREL_LO16 45
+#define R_RISCV_TLS_GOTTPREL 46
+#define R_RISCV_TLS_TPREL32 47
+#define R_RISCV_TLS_TPREL64 48
+#define R_RISCV_TLS_GOT_HI20 51
+#define R_RISCV_TLS_GOT_LO12 52
+#define R_RISCV_TLS_GD_HI20 53
+#define R_RISCV_TLS_GD_LO12 54
+#define R_RISCV_GLOB_DAT 57
+#define R_RISCV_ADD32 58
+#define R_RISCV_ADD64 59
+#define R_RISCV_SUB32 60
+#define R_RISCV_SUB64 61
+
+#define EM_RISCV 0xF3
#endif /* elf.h */
diff --git a/util/cbfstool/elfheaders.c b/util/cbfstool/elfheaders.c
index 4c0de89090..634e76a136 100644
--- a/util/cbfstool/elfheaders.c
+++ b/util/cbfstool/elfheaders.c
@@ -611,6 +611,7 @@ elf_headers(const struct buffer *pinput,
// The tool may work in architecture-independent way.
if (arch != CBFS_ARCHITECTURE_UNKNOWN &&
!((ehdr->e_machine == EM_ARM) && (arch == CBFS_ARCHITECTURE_ARM)) &&
+ !((ehdr->e_machine == EM_RISCV) && (arch == CBFS_ARCHITECTURE_RISCV)) &&
!((ehdr->e_machine == EM_386) && (arch == CBFS_ARCHITECTURE_X86))) {
ERROR("The stage file has the wrong architecture\n");
return -1;