[python3] ppc --with-tsc fixes

dmalcolm dmalcolm at fedoraproject.org
Tue Aug 23 20:49:40 UTC 2011


commit ceb359a69b285160f7997c0b77de1dfd3567e80e
Author: David Malcolm <dmalcolm at redhat.com>
Date:   Tue Aug 23 16:48:59 2011 -0400

    ppc --with-tsc fixes
    
    re-enable and fix the --with-tsc option on ppc64, and rework it on
    32-bit ppc to avoid aliasing violations (patch 129; rhbz#698726)

 python-2.7.2-tsc-on-ppc.patch |   58 +++++++++++++++++++++++++++++++++++++++++
 python3.spec                  |   14 ++++++++-
 2 files changed, 70 insertions(+), 2 deletions(-)
---
diff --git a/python-2.7.2-tsc-on-ppc.patch b/python-2.7.2-tsc-on-ppc.patch
new file mode 100644
index 0000000..447c6e3
--- /dev/null
+++ b/python-2.7.2-tsc-on-ppc.patch
@@ -0,0 +1,58 @@
+diff -up Python-2.7.2/Python/ceval.c.tsc-on-ppc Python-2.7.2/Python/ceval.c
+--- Python-2.7.2/Python/ceval.c.tsc-on-ppc	2011-08-23 14:59:48.051300849 -0400
++++ Python-2.7.2/Python/ceval.c	2011-08-23 15:33:25.412162902 -0400
+@@ -37,24 +37,42 @@ typedef unsigned long long uint64;
+ */
+ #if defined(__ppc__) || defined (__powerpc__)
+ 
+-#define READ_TIMESTAMP(var) ppc_getcounter(&var)
++#if defined( __powerpc64__) || defined(__LP64__)
++/* 64-bit PowerPC */
++#define READ_TIMESTAMP(var) ppc64_getcounter(&var)
++static void
++ppc64_getcounter(uint64 *v)
++{
++    /* On 64-bit PowerPC we can read the 64-bit timebase directly into a
++       64-bit register */
++    uint64 timebase;
++#ifdef _ARCH_PWR4
++    asm volatile ("mfspr %0,268" : "=r" (timebase));
++#else
++    asm volatile ("mftb %0" : "=r" (timebase));
++#endif
++    *v = timebase;
++}
++
++#else
++/* 32-bit PowerPC */
++#define READ_TIMESTAMP(var) ppc32_getcounter(&var)
+ 
+ static void
+-ppc_getcounter(uint64 *v)
++ppc32_getcounter(uint64 *v)
+ {
+-    register unsigned long tbu, tb, tbu2;
++    union { long long ll; long ii[2]; } u;
++    long tmp;
+ 
+   loop:
+-    asm volatile ("mftbu %0" : "=r" (tbu) );
+-    asm volatile ("mftb  %0" : "=r" (tb)  );
+-    asm volatile ("mftbu %0" : "=r" (tbu2));
+-    if (__builtin_expect(tbu != tbu2, 0)) goto loop;
+-
+-    /* The slightly peculiar way of writing the next lines is
+-       compiled better by GCC than any other way I tried. */
+-    ((long*)(v))[0] = tbu;
+-    ((long*)(v))[1] = tb;
++    asm volatile ("mftbu %0" : "=r" (u.ii[0]) );
++    asm volatile ("mftb  %0" : "=r" (u.ii[1]) );
++    asm volatile ("mftbu %0" : "=r" (tmp));
++    if (__builtin_expect(u.ii[0] != tmp, 0)) goto loop;
++
++    *v = u.ll;
+ }
++#endif /* powerpc 32/64 bit */
+ 
+ #elif defined(__i386__)
+ 
diff --git a/python3.spec b/python3.spec
index ac30460..7e8d2d1 100644
--- a/python3.spec
+++ b/python3.spec
@@ -118,7 +118,7 @@
 Summary: Version 3 of the Python programming language aka Python 3000
 Name: python3
 Version: %{pybasever}.1
-Release: 4%{?dist}
+Release: 5%{?dist}
 License: Python
 Group: Development/Languages
 
@@ -266,6 +266,11 @@ Patch128: python-3.2b2-test_sys-COUNT_ALLOCS.patch
 # Not yet sent upstream
 Patch129: python-3.2.1-fix-test-subprocess-with-nonreadable-path-dir.patch
 
+# Fix the --with-tsc option on ppc64, and rework it on 32-bit ppc to avoid
+# aliasing violations (rhbz#698726)
+# Not yet sent upstream
+Patch130: python-2.7.2-tsc-on-ppc.patch
+
 # This is the generated patch to "configure"; see the description of
 #   %{regenerate_autotooling_patch}
 # above:
@@ -424,6 +429,7 @@ rm -r Modules/zlib || exit 1
 %patch127 -p1
 %patch128 -p1
 %patch129 -p1
+%patch130 -p1 -b .tsc-on-ppc
 
 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there
 # are many differences between 2.6 and the Python 3 library.
@@ -536,7 +542,7 @@ BuildPython() {
 BuildPython debug \
   python-debug \
   python%{pybasever}-debug \
-%ifarch %{ix86} x86_64 ppc
+%ifarch %{ix86} x86_64 ppc ppc64
   "--with-pydebug --with-tsc --with-count-allocs --with-call-profile" \
 %else
   "--with-pydebug --with-count-allocs --with-call-profile" \
@@ -1290,6 +1296,10 @@ rm -fr %{buildroot}
 # ======================================================
 
 %changelog
+* Tue Aug 23 2011 David Malcolm <dmalcolm at redhat.com> - 3.2.1-5
+- re-enable and fix the --with-tsc option on ppc64, and rework it on 32-bit
+ppc to avoid aliasing violations (patch 130; rhbz#698726)
+
 * Tue Aug 23 2011 David Malcolm <dmalcolm at redhat.com> - 3.2.1-4
 - don't use --with-tsc on ppc64 debug builds (rhbz#698726)
 


More information about the scm-commits mailing list