Add upstream patches for riscv64 architecture support.

These two patches are upstream already.  A third patch is also
upstream, but it is not needed with the older RPM we have, so I didn't
include it.
This commit is contained in:
Richard W.M. Jones 2016-09-23 15:18:17 +01:00
parent 82de465ada
commit f686f71af8
3 changed files with 153 additions and 1 deletions

View File

@ -0,0 +1,95 @@
From d9d47e01146a5d4411691a71916b1030ac7da193 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 9 Aug 2016 18:25:24 +0100
Subject: [PATCH 1/3] RISCV 64-bit (riscv64) support.
Based on Mark Salter's aarch64 support patch (commit 8e1ca16c58).
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
---
installplatform | 6 ++++++
rpmrc.in | 16 ++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/installplatform b/installplatform
index ebade42..12339fc 100755
--- a/installplatform
+++ b/installplatform
@@ -174,6 +174,12 @@ for ARCH in noarch `grep ^arch_canon $RPMRC | cut -d: -f2`; do
CANONARCH=m68k
CANONCOLOR=0
;;
+ riscv64)
+ ISANAME=riscv
+ ISABITS=64
+ CANONARCH=riscv64
+ CANONCOLOR=3
+ ;;
noarch)
CANONARCH=noarch
CANONCOLOR=0
diff --git a/rpmrc.in b/rpmrc.in
index e888b0f..abc08fc 100644
--- a/rpmrc.in
+++ b/rpmrc.in
@@ -99,6 +99,8 @@ optflags: sh4a -O2 -g -mieee
optflags: aarch64 -O2 -g
+optflags: riscv64 -O2 -g
+
#############################################################
# Architecture colors
@@ -147,6 +149,8 @@ archcolor: sh4 1
archcolor: aarch64 2
+archcolor: riscv64 2
+
#############################################################
# Canonical arch names and numbers
@@ -243,6 +247,9 @@ arch_canon: mipsr6el: mipsr6el 20
arch_canon: mips64r6: mips64r6 21
arch_canon: mips64r6el: mips64r6el 21
+arch_canon: riscv: riscv64 22
+arch_canon: riscv64: riscv64 22
+
#############################################################
# Canonical OS names and numbers
@@ -368,6 +375,9 @@ buildarchtranslate: sh4a: sh4
buildarchtranslate: aarch64: aarch64
+buildarchtranslate: riscv: riscv64
+buildarchtranslate: riscv64: riscv64
+
#############################################################
# Architecture compatibility
@@ -473,6 +483,9 @@ arch_compat: sh4a: sh4
arch_compat: aarch64: noarch
+arch_compat: riscv: noarch
+arch_compat: riscv64: noarch
+
os_compat: IRIX64: IRIX
os_compat: solaris2.7: solaris2.3 solaris2.4 solaris2.5 solaris2.6
os_compat: solaris2.6: solaris2.3 solaris2.4 solaris2.5
@@ -506,6 +519,9 @@ buildarch_compat: ia64: noarch
buildarch_compat: aarch64: noarch
+buildarch_compat: riscv: noarch
+buildarch_compat: riscv64: noarch
+
buildarch_compat: athlon: i686
buildarch_compat: geode: i586
buildarch_compat: pentium4: pentium3
--
2.7.4

View File

@ -0,0 +1,52 @@
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

View File

@ -27,7 +27,7 @@
Summary: The RPM package management system
Name: rpm
Version: %{rpmver}
Release: %{?snapver:0.%{snapver}.}46%{?dist}
Release: %{?snapver:0.%{snapver}.}47%{?dist}
Group: System Environment/Base
Url: http://www.rpm.org/
Source0: http://rpm.org/releases/%{srcdir}/%{name}-%{srcver}.tar.bz2
@ -90,6 +90,8 @@ Patch136: rpm-4.13.x-pythondistdeps.py-skip-distribution-metadata-if-ther.patch
Patch137: rpm-4.13.x-pythondistdeps.py-show-warning-if-version-is-not-fou.patch
Patch138: rpm-4.13.x-pythondistdeps.py-skip-.egg-link-files.patch
Patch139: rpm-4.13.x-pythondistdeps.py-add-forgotten-import.patch
Patch140: rpm-4.13.x-RISCV-64-bit-riscv64-support.patch
Patch141: rpm-4.13.x-rpmrc-Convert-uname.machine-riscv-to-riscv32-riscv64.patch
# These are not yet upstream
Patch302: rpm-4.7.1-geode-i686.patch
@ -596,6 +598,9 @@ exit 0
%doc doc/librpm/html/*
%changelog
* Fri Sep 23 2016 Richard W.M. Jones <rjones@redhat.com> - 4.13.0-0.rc1.47
- Backport two upstream patches which add riscv64 architecture support.
* Wed Aug 24 2016 Igor Gnatenko <ignatenko@redhat.com> - 4.13.0-0.rc1.46
- Backport patch for missing import in Python dependency generator