From 9c2066b222ac6ca3dd138a6a0676b79e363a11b7 Mon Sep 17 00:00:00 2001 From: Richard W.M. Jones Date: Sep 23 2016 14:30:01 +0000 Subject: 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. --- diff --git a/rpm-4.13.x-RISCV-64-bit-riscv64-support.patch b/rpm-4.13.x-RISCV-64-bit-riscv64-support.patch new file mode 100644 index 0000000..655aa58 --- /dev/null +++ b/rpm-4.13.x-RISCV-64-bit-riscv64-support.patch @@ -0,0 +1,95 @@ +From d9d47e01146a5d4411691a71916b1030ac7da193 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +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 +--- + 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 + diff --git a/rpm-4.13.x-rpmrc-Convert-uname.machine-riscv-to-riscv32-riscv64.patch b/rpm-4.13.x-rpmrc-Convert-uname.machine-riscv-to-riscv32-riscv64.patch new file mode 100644 index 0000000..5bb45bb --- /dev/null +++ b/rpm-4.13.x-rpmrc-Convert-uname.machine-riscv-to-riscv32-riscv64.patch @@ -0,0 +1,52 @@ +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 + diff --git a/rpm.spec b/rpm.spec index da78afd..f987eff 100644 --- a/rpm.spec +++ b/rpm.spec @@ -29,7 +29,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 @@ -92,6 +92,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 @@ -599,6 +601,9 @@ exit 0 %doc doc/librpm/html/* %changelog +* Fri Sep 23 2016 Richard W.M. Jones - 4.13.0-0.rc1.47 +- Backport two upstream patches which add riscv64 architecture support. + * Wed Aug 24 2016 Igor Gnatenko - 4.13.0-0.rc1.46 - Backport patch for missing import in Python dependency generator