53 lines
1.6 KiB
Diff
53 lines
1.6 KiB
Diff
|
From cf5679397f36710a942fcb83a63c690eb25d72af Mon Sep 17 00:00:00 2001
|
||
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||
|
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 <rjones@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
|
||
|
|