9c2066
From cf5679397f36710a942fcb83a63c690eb25d72af Mon Sep 17 00:00:00 2001
9c2066
From: "Richard W.M. Jones" <rjones@redhat.com>
9c2066
Date: Thu, 11 Aug 2016 11:38:18 +0100
9c2066
Subject: [PATCH 2/3] rpmrc: Convert uname.machine == "riscv" to
9c2066
 "riscv32"/"riscv64"/"riscv128".
9c2066
9c2066
On RISC-V, the kernel can return uname.machine == "riscv" (for all bit
9c2066
sizes).  I say "can" return, because that is the default, but it is
9c2066
also possible to compile the kernel specially so it returns "riscv64"
9c2066
etc.
9c2066
9c2066
GNU is using "riscv64".
9c2066
9c2066
This commit converts the kernel uname machine type "riscv" to a more
9c2066
suitable value.
9c2066
9c2066
This conversion is supposed to be done by the arch_canon table.
9c2066
However the arch_canon table is not populated until after the
9c2066
defaultMachine function is called for the first time, making it a bit
9c2066
useless.  In any case, arch_canon cannot take into account the bit
9c2066
size of the architecture, but the C code here can.
9c2066
9c2066
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
9c2066
---
9c2066
 lib/rpmrc.c | 11 +++++++++++
9c2066
 1 file changed, 11 insertions(+)
9c2066
9c2066
diff --git a/lib/rpmrc.c b/lib/rpmrc.c
9c2066
index f2e0f48..eb136d8 100644
9c2066
--- a/lib/rpmrc.c
9c2066
+++ b/lib/rpmrc.c
9c2066
@@ -1216,6 +1216,17 @@ static void defaultMachine(rpmrcCtx ctx, const char ** arch, const char ** os)
9c2066
 	}
9c2066
 #	endif	/* arm*-linux */
9c2066
 
9c2066
+#	if defined(__linux__) && defined(__riscv__)
9c2066
+	if (rstreq(un.machine, "riscv")) {
9c2066
+		if (sizeof(long) == 4)
9c2066
+			strcpy(un.machine, "riscv32");
9c2066
+		else if (sizeof(long) == 8)
9c2066
+			strcpy(un.machine, "riscv64");
9c2066
+		else if (sizeof(long) == 16)
9c2066
+			strcpy(un.machine, "riscv128");
9c2066
+	}
9c2066
+#	endif	/* riscv */
9c2066
+
9c2066
 #	if defined(__GNUC__) && defined(__alpha__)
9c2066
 	{
9c2066
 	    unsigned long amask, implver;
9c2066
-- 
9c2066
2.7.4
9c2066