From cf5679397f36710a942fcb83a63c690eb25d72af Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 11 Aug 2016 11:38:18 +0100 Subject: [PATCH 2/3] rpmrc: Convert uname.machine == "riscv" to "riscv32"/"riscv64"/"riscv128". 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 --- 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