https://github.com/python/cpython/commit/08a018ebe0d673e9c352f790d2e4604d69604188
commit: 08a018ebe0d673e9c352f790d2e4604d69604188
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2026-03-12T23:48:51+01:00
summary:
gh-145801: Use gcc -fprofile-update=atomic for PGO builds (#145802)
When Python build is optimized with GCC using PGO, use
-fprofile-update=atomic option to use atomic operations when updating
profile information. This option reduces the risk of gcov Data Files
(.gcda) corruption which can cause random GCC crashes.
files:
A Misc/NEWS.d/next/Build/2026-03-11-11-58-42.gh-issue-145801.iCXa3v.rst
M configure
M configure.ac
diff --git
a/Misc/NEWS.d/next/Build/2026-03-11-11-58-42.gh-issue-145801.iCXa3v.rst
b/Misc/NEWS.d/next/Build/2026-03-11-11-58-42.gh-issue-145801.iCXa3v.rst
new file mode 100644
index 00000000000000..c5f3982cc5416c
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2026-03-11-11-58-42.gh-issue-145801.iCXa3v.rst
@@ -0,0 +1,4 @@
+When Python build is optimized with GCC using PGO, use
+``-fprofile-update=atomic`` option to use atomic operations when updating
+profile information. This option reduces the risk of gcov Data Files (.gcda)
+corruption which can cause random GCC crashes. Patch by Victor Stinner.
diff --git a/configure b/configure
index a3eeef373bf7fb..23f24d51c79e1a 100755
--- a/configure
+++ b/configure
@@ -9083,7 +9083,47 @@ case "$ac_cv_cc_name" in
fi
;;
gcc)
- PGO_PROF_GEN_FLAG="-fprofile-generate"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler
accepts -fprofile-update=atomic" >&5
+printf %s "checking whether C compiler accepts -fprofile-update=atomic... "
>&6; }
+if test ${ax_cv_check_cflags___fprofile_update_atomic+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e)
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS -fprofile-update=atomic"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ax_cv_check_cflags___fprofile_update_atomic=yes
+else case e in #(
+ e) ax_cv_check_cflags___fprofile_update_atomic=no ;;
+esac
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
$ax_cv_check_cflags___fprofile_update_atomic" >&5
+printf "%s\n" "$ax_cv_check_cflags___fprofile_update_atomic" >&6; }
+if test "x$ax_cv_check_cflags___fprofile_update_atomic" = xyes
+then :
+ PGO_PROF_GEN_FLAG="-fprofile-generate -fprofile-update=atomic"
+else case e in #(
+ e) PGO_PROF_GEN_FLAG="-fprofile-generate" ;;
+esac
+fi
+
PGO_PROF_USE_FLAG="-fprofile-use -fprofile-correction"
LLVM_PROF_MERGER="true"
LLVM_PROF_FILE=""
diff --git a/configure.ac b/configure.ac
index 75e81761f95e38..635fce3f2e6fad 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2084,7 +2084,10 @@ case "$ac_cv_cc_name" in
fi
;;
gcc)
- PGO_PROF_GEN_FLAG="-fprofile-generate"
+ AX_CHECK_COMPILE_FLAG(
+ [-fprofile-update=atomic],
+ [PGO_PROF_GEN_FLAG="-fprofile-generate -fprofile-update=atomic"],
+ [PGO_PROF_GEN_FLAG="-fprofile-generate"])
PGO_PROF_USE_FLAG="-fprofile-use -fprofile-correction"
LLVM_PROF_MERGER="true"
LLVM_PROF_FILE=""
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]