From: Victor Stinner Date: Thu, 7 May 2026 09:47:08 +0000 (+0200) Subject: gh-149202: Don't use -fno-omit-frame-pointer on ppc64le (#149485) X-Git-Tag: v3.15.0b1~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3cfd36ba4f17c19d587427b90ca9378ad009978;p=thirdparty%2FPython%2Fcpython.git gh-149202: Don't use -fno-omit-frame-pointer on ppc64le (#149485) 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. --- diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index a0e46ff4e375..77771bb70e1a 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -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 diff --git a/Lib/test/test_frame_pointer_unwind.py b/Lib/test/test_frame_pointer_unwind.py index 5cd94e5b27f3..faa012c9c00d 100644 --- a/Lib/test/test_frame_pointer_unwind.py +++ b/Lib/test/test_frame_pointer_unwind.py @@ -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(): diff --git a/configure b/configure index 3377bf7516eb..cff7dfbfba8b 100755 --- a/configure +++ b/configure @@ -10435,6 +10435,14 @@ fi ;; #( *) : ;; +esac + case $host_cpu in #( + powerpc64le) : + + frame_pointer_cflags="" + ;; #( + *) : + ;; esac case $host_cpu in #( s390*) : diff --git a/configure.ac b/configure.ac index fc2db4d5e8ae..ac3269ab765c 100644 --- a/configure.ac +++ b/configure.ac @@ -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