]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-149202: Don't use -fno-omit-frame-pointer on ppc64le (#149485)
authorVictor Stinner <vstinner@python.org>
Thu, 7 May 2026 09:47:08 +0000 (11:47 +0200)
committerGitHub <noreply@github.com>
Thu, 7 May 2026 09:47:08 +0000 (11:47 +0200)
The power ABI specification requires that compilers maintain a back
chain by default, so unwinding already works without a dedicated
frame pointer. Don't use -fno-omit-frame-pointer on ppc64le.

Doc/using/configure.rst
Lib/test/test_frame_pointer_unwind.py
configure
configure.ac

index a0e46ff4e375b6a9d191fc575e76bf9d525fcf72..77771bb70e1a3023d2ba2f1d76be26b6deec5509 100644 (file)
@@ -792,6 +792,8 @@ also be used to improve performance.
    - ``-marm`` and/or ``-mno-thumb`` is added on 32-bit ARM when supported,
    - on s390x platforms, when supported, ``-mbackchain`` is added *instead*.
      of the above frame pointer flags.
+   - on ppc64le platforms, no compiler flags is needed since the power ABI
+     requires that compilers maintain a back chain by default.
 
    Frame pointers enable profilers, debuggers, and system tracing tools
    (``perf``, ``eBPF``, ``dtrace``, ``gdb``) to walk the C call stack
index 5cd94e5b27f394e30a1b1721adc409e9526ad96f..faa012c9c00d8f964c8ea7e339c01d997f74a7b3 100644 (file)
@@ -56,6 +56,12 @@ def _frame_pointers_expected(machine):
             if sys.maxsize < 2**32:
                 return None
             return True
+        if machine == "ppc64le":
+            # The power ABI specification requires that compilers maintain a
+            # back chain by default, so unwinding already works without a
+            # dedicated frame pointer.
+            # https://openpowerfoundation.org/specifications/64bitelfabi/
+            return True
         if machine == "x86_64":
             final_opt = ""
             for opt in cflags.split():
index 3377bf7516ebd21e2556a026fb66a328bb4b7b4a..cff7dfbfba8b9ada5746538bdddd5b7b128a4dc1 100755 (executable)
--- a/configure
+++ b/configure
        ;; #(
   *) :
      ;;
+esac
+      case $host_cpu in #(
+  powerpc64le) :
+
+        frame_pointer_cflags=""
+       ;; #(
+  *) :
+     ;;
 esac
       case $host_cpu in #(
   s390*) :
index fc2db4d5e8aebba74f4f408c58e190a71559c972..ac3269ab765c0dffed1dc45382271c5de8d6da53 100644 (file)
@@ -2557,6 +2557,9 @@ AS_VAR_IF([ac_cv_gcc_compat], [yes], [
           frame_pointer_cflags="$frame_pointer_cflags -mno-thumb"
         ], [], [-Werror])
       ])
+      AS_CASE([$host_cpu], [powerpc64le], [
+        frame_pointer_cflags=""
+      ])
       AS_CASE([$host_cpu], [s390*], [
         AX_CHECK_COMPILE_FLAG([-mbackchain], [
           dnl Do not use no-omit-frame-pointer; see gh-149362