[python-greenlet] add support for ppc64

Pádraig Brady pbrady at fedoraproject.org
Thu Oct 11 22:33:41 UTC 2012


commit 5983ad29eb47217e4f18d45b2032fb05b939c560
Author: Pádraig Brady <P at draigBrady.com>
Date:   Thu Oct 11 23:30:45 2012 +0100

    add support for ppc64

 ppc64-support.patch  |  104 ++++++++++++++++++++++++++++++++++++++++++++++++++
 python-greenlet.spec |   13 +++++-
 2 files changed, 114 insertions(+), 3 deletions(-)
---
diff --git a/ppc64-support.patch b/ppc64-support.patch
new file mode 100644
index 0000000..6326228
--- /dev/null
+++ b/ppc64-support.patch
@@ -0,0 +1,104 @@
+Backport from 0.4.0
+
+commit 6f3714499e24b88cc05a02c8692015c5c17c5508
+Author: Michael Ellerman <michael at ellerman.id.au>
+Date:   Wed Apr 18 17:58:00 2012 -0700
+
+    Add ppc64 platform
+    
+    Add 64-bit ppc support with a new platform file and update to the
+    platformselect code.
+    
+    Signed-off-by: Michael Ellerman <michael at ellerman.id.au>
+    Signed-off-by: Nishanth Aravamudan <nacc at us.ibm.com>
+    (cherry picked from commit b17773a7807f85f897413391f59d4a6d65ac9008)
+
+diff --git a/platform/switch_ppc64_linux.h b/platform/switch_ppc64_linux.h
+new file mode 100644
+index 0000000..ded1fda
+--- /dev/null
++++ b/platform/switch_ppc64_linux.h
+@@ -0,0 +1,70 @@
++/*
++ * this is the internal transfer function.
++ *
++ * HISTORY
++ * 09-Mar-12 Michael Ellerman <michael at ellerman.id.au>
++ *      64-bit implementation, copied from 32-bit.
++ * 07-Sep-05 (py-dev mailing list discussion)
++ *      removed 'r31' from the register-saved.  !!!! WARNING !!!!
++ *      It means that this file can no longer be compiled statically!
++ *      It is now only suitable as part of a dynamic library!
++ * 14-Jan-04  Bob Ippolito <bob at redivi.com>
++ *      added cr2-cr4 to the registers to be saved.
++ *      Open questions: Should we save FP registers?
++ *      What about vector registers?
++ *      Differences between darwin and unix?
++ * 24-Nov-02  Christian Tismer  <tismer at tismer.com>
++ *      needed to add another magic constant to insure
++ *      that f in slp_eval_frame(PyFrameObject *f)
++ *      STACK_REFPLUS will probably be 1 in most cases.
++ *      gets included into the saved stack area.
++ * 04-Oct-02  Gustavo Niemeyer <niemeyer at conectiva.com>
++ *      Ported from MacOS version.
++ * 17-Sep-02  Christian Tismer  <tismer at tismer.com>
++ *      after virtualizing stack save/restore, the
++ *      stack size shrunk a bit. Needed to introduce
++ *      an adjustment STACK_MAGIC per platform.
++ * 15-Sep-02  Gerd Woetzel       <gerd.woetzel at GMD.DE>
++ *      slightly changed framework for sparc
++ * 29-Jun-02  Christian Tismer  <tismer at tismer.com>
++ *      Added register 13-29, 31 saves. The same way as
++ *      Armin Rigo did for the x86_unix version.
++ *      This seems to be now fully functional!
++ * 04-Mar-02  Hye-Shik Chang  <perky at fallin.lv>
++ *      Ported from i386.
++ */
++
++#define STACK_REFPLUS 1
++
++#ifdef SLP_EVAL
++
++#define STACK_MAGIC 6
++
++/* !!!!WARNING!!!! need to add "r31" in the next line if this header file
++ * is meant to be compiled non-dynamically!
++ */
++#define REGS_TO_SAVE "r2", "r14", "r15", "r16", "r17", "r18", "r19", "r20", \
++       "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r31", \
++       "cr2", "cr3", "cr4"
++static int
++slp_switch(void)
++{
++    register long *stackref, stsizediff;
++    __asm__ volatile ("" : : : REGS_TO_SAVE);
++    __asm__ ("mr %0, 1" : "=g" (stackref) : );
++    {
++        SLP_SAVE_STATE(stackref, stsizediff);
++        __asm__ volatile (
++            "mr 11, %0\n"
++            "add 1, 1, 11\n"
++            : /* no outputs */
++            : "g" (stsizediff)
++            : "11"
++            );
++        SLP_RESTORE_STATE();
++    }
++    __asm__ volatile ("" : : : REGS_TO_SAVE);
++    return 0;
++}
++
++#endif
+diff --git a/slp_platformselect.h b/slp_platformselect.h
+index 38b7ef4..68982d3 100644
+--- a/slp_platformselect.h
++++ b/slp_platformselect.h
+@@ -8,6 +8,8 @@
+ #include "platform/switch_amd64_unix.h" /* gcc on amd64 */
+ #elif defined(__GNUC__) && defined(__i386__)
+ #include "platform/switch_x86_unix.h" /* gcc on X86 */
++#elif defined(__GNUC__) && defined(__powerpc64__) && defined(__linux__)
++#include "platform/switch_ppc64_linux.h" /* gcc on PowerPC 64-bit */
+ #elif defined(__GNUC__) && defined(__PPC__) && defined(__linux__)
+ #include "platform/switch_ppc_unix.h" /* gcc on PowerPC */
+ #elif defined(__GNUC__) && defined(__ppc__) && defined(__APPLE__)
diff --git a/python-greenlet.spec b/python-greenlet.spec
index 7755f90..9b1aacc 100644
--- a/python-greenlet.spec
+++ b/python-greenlet.spec
@@ -4,7 +4,7 @@
 
 Name:           python-greenlet
 Version:        0.3.1
-Release:        10%{?dist}
+Release:        11%{?dist}
 Summary:        Lightweight in-process concurrent programming
 Group:          Development/Libraries
 License:        MIT
@@ -17,6 +17,9 @@ Patch1:         get-rid-of-ts_origin.patch
 # Apply https://bitbucket.org/ambroff/greenlet/changeset/25bf29f4d3b7
 # to fix the i686 crash in rhbz#746771
 Patch2:         i686-register-fixes.patch
+# Backport https://github.com/python-greenlet/greenlet/commit/b17773a7
+# from greenlet 0.4.0 to support ppc64
+Patch3:         ppc64-support.patch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
@@ -41,6 +44,7 @@ This package contains header files required for C modules development.
 %setup -q -n greenlet-%{version}
 %patch1 -p1 -b .get-rid-of-ts_origin
 %patch2 -p1 -b .i686_register_fixes
+%patch3 -p1 -b .ppc64_support
 
 %build
 CFLAGS="$RPM_OPT_FLAGS" %{__python} setup.py build
@@ -54,9 +58,9 @@ rm -rf %{buildroot}
 rm -rf %{buildroot}
 
 # FIXME!!
-# The checks segfault on ppc64. So this arch
+# The checks segfault on ppc. So this arch
 # is essentially not supported until this is fixed
-%ifnarch ppc ppc64 s390 s390x
+%ifnarch ppc s390 s390x
 %check
 # Run the upstream test suite:
 %{__python} setup.py test
@@ -77,6 +81,9 @@ PYTHONPATH=$(pwd) %{__python} benchmarks/switch.py
 %{_includedir}/python*/greenlet
 
 %changelog
+* Thu Oct 11 2012 Pádraig Brady <P at draigBrady.com> - 0.3.1-11
+- Add support for ppc64
+
 * Sat Jul 21 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.3.1-10
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
 


More information about the scm-commits mailing list