diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index a0e46ff4e375b6..77771bb70e1a30 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 5cd94e5b27f394..faa012c9c00d8f 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 3377bf7516ebd2..cff7dfbfba8b9a 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 fc2db4d5e8aebb..ac3269ab765c0d 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