From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Thu, 12 Mar 2026 23:13:13 +0000 (+0100) Subject: [3.14] gh-145801: Use gcc -fprofile-update=atomic for PGO builds (GH-145802) (#145892) X-Git-Tag: v3.14.4~150 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8c0a190dd34c220af007896d66850f5676d524d4;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-145801: Use gcc -fprofile-update=atomic for PGO builds (GH-145802) (#145892) gh-145801: Use gcc -fprofile-update=atomic for PGO builds (GH-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. (cherry picked from commit 08a018ebe0d673e9c352f790d2e4604d69604188) Co-authored-by: Victor Stinner --- 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 000000000000..c5f3982cc541 --- /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 60a88b29b538..3e507be82c04 100755 --- a/configure +++ b/configure @@ -9049,7 +9049,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 ec93a7438172..a1f4a5670957 100644 --- a/configure.ac +++ b/configure.ac @@ -2072,7 +2072,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=""