[Rpm-maint] [PATCH v3 2/2] rpmrc: Convert uname.machine == "riscv" to "riscv32"/"riscv64"/"riscv128".

Richard W.M. Jones rjones at redhat.com
Sat Aug 20 09:12:48 UTC 2016


On RISC-V, the kernel can return uname.machine == "riscv" (for all bit
sizes).  I say "can" return, because that is the default, but it is
also possible to compile the kernel specially so it returns "riscv64"
etc.

GNU is using "riscv64".

This commit converts the kernel uname machine type "riscv" to a more
suitable value.

This conversion is supposed to be done by the arch_canon table.
However the arch_canon table is not populated until after the
defaultMachine function is called for the first time, making it a bit
useless.  In any case, arch_canon cannot take into account the bit
size of the architecture, but the C code here can.

Signed-off-by: Richard W.M. Jones <rjones at redhat.com>
---
 lib/rpmrc.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/lib/rpmrc.c b/lib/rpmrc.c
index f2e0f48..eb136d8 100644
--- a/lib/rpmrc.c
+++ b/lib/rpmrc.c
@@ -1216,6 +1216,17 @@ static void defaultMachine(rpmrcCtx ctx, const char ** arch, const char ** os)
 	}
 #	endif	/* arm*-linux */
 
+#	if defined(__linux__) && defined(__riscv__)
+	if (rstreq(un.machine, "riscv")) {
+		if (sizeof(long) == 4)
+			strcpy(un.machine, "riscv32");
+		else if (sizeof(long) == 8)
+			strcpy(un.machine, "riscv64");
+		else if (sizeof(long) == 16)
+			strcpy(un.machine, "riscv128");
+	}
+#	endif	/* riscv */
+
 #	if defined(__GNUC__) && defined(__alpha__)
 	{
 	    unsigned long amask, implver;
-- 
2.7.4



More information about the Rpm-maint mailing list