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

Richard W.M. Jones rjones at redhat.com
Thu Aug 11 11:16:38 UTC 2016


On RISC-V, the kernel returns uname.machine == "riscv" (for all bit
sizes).  GNU is using "riscv64".  Convert the kernel uname machine
type 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.
---
 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