Skip to content

Fix non-determinism in bootstrap gcc #22

Description

@zombiezen

I've been noticing that the binary bootstrap gcc has differed on each build. At first, I thought it might be because of the parallelism, but even with ZB_BUILD_CORES=1, the bootstrap produces differing results. I compared two runs:

Files /opt/zb/store/6ssl5z26zmr9dn2iz4xi17a13ia7qz8y-gcc-4.2.1/lib/libstdc++.a and /opt/zb/store/z3bi28c5p48vszan6ks1sga8vw41zcyz-gcc-4.2.1/lib/libstdc++.a differ
Files /opt/zb/store/6ssl5z26zmr9dn2iz4xi17a13ia7qz8y-gcc-4.2.1/lib/libstdc++.la and /opt/zb/store/z3bi28c5p48vszan6ks1sga8vw41zcyz-gcc-4.2.1/lib/libstdc++.la differ
Files /opt/zb/store/6ssl5z26zmr9dn2iz4xi17a13ia7qz8y-gcc-4.2.1/lib/libsupc++.a and /opt/zb/store/z3bi28c5p48vszan6ks1sga8vw41zcyz-gcc-4.2.1/lib/libsupc++.a differ
Files /opt/zb/store/6ssl5z26zmr9dn2iz4xi17a13ia7qz8y-gcc-4.2.1/lib/libsupc++.la and /opt/zb/store/z3bi28c5p48vszan6ks1sga8vw41zcyz-gcc-4.2.1/lib/libsupc++.la differ
Files /opt/zb/store/6ssl5z26zmr9dn2iz4xi17a13ia7qz8y-gcc-4.2.1/libexec/gcc/x86_64-unknown-linux-musl/4.2.1/cc1 and /opt/zb/store/z3bi28c5p48vszan6ks1sga8vw41zcyz-gcc-4.2.1/libexec/gcc/x86_64-unknown-linux-musl/4.2.1/cc1 differ
Files /opt/zb/store/6ssl5z26zmr9dn2iz4xi17a13ia7qz8y-gcc-4.2.1/libexec/gcc/x86_64-unknown-linux-musl/4.2.1/cc1plus and /opt/zb/store/z3bi28c5p48vszan6ks1sga8vw41zcyz-gcc-4.2.1/libexec/gcc/x86_64-unknown-linux-musl/4.2.1/cc1plus differ

The .la files are a bit of a red herring, since they are self-references.

Difference in cc1:

--- /proc/self/fd/16    2025-05-07 19:23:05.018537811 -0700
+++ /proc/self/fd/23    2025-05-07 19:23:05.018537811 -0700
@@ -286762,7 +286762,7 @@
 00460290: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 004602a0: 635f 6669 6e69 7368 5f6f 6d70 5f61 746f  c_finish_omp_ato
 004602b0: 6d69 6300 0000 0000 0000 0000 0000 0000  mic.............
-004602c0: 54c3 ed4c 6447 9662 9fc6 98c0 c492 9b5a  T..LdG.b.......Z
+004602c0: dd8b 1bbe 63f0 2685 ccae 48ae 53cb 6394  ....c.&...H.S.c.
 004602d0: 2548 7769 6c6c 206e 6576 6572 2062 6520  %Hwill never be 
 004602e0: 6578 6563 7574 6564 002e 2e2f 2e2e 2f73  executed.../../s
 004602f0: 7263 5f67 6363 2f67 6363 2f74 7265 652d  rc_gcc/gcc/tree-

Difference in cc1plus:

--- /proc/self/fd/16    2025-05-07 19:23:51.220552986 -0700
+++ /proc/self/fd/23    2025-05-07 19:23:51.220552986 -0700
@@ -318664,7 +318664,7 @@
 004dcc70: 6573 7469 6d61 7465 5f6e 756d 5f69 6e73  estimate_num_ins
 004dcc80: 6e73 5f31 0063 6f70 795f 626f 6479 5f72  ns_1.copy_body_r
 004dcc90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
-004dcca0: 11b6 3c5d ed58 abfc bad8 5481 512a 2b7a  ..<].X....T.Q*+z
+004dcca0: 7363 c36c f4d8 8aa4 dd9f a936 049c 9f7a  sc.l.......6...z
 004dccb0: 2548 7769 6c6c 206e 6576 6572 2062 6520  %Hwill never be 
 004dccc0: 6578 6563 7574 6564 002e 2e2f 2e2e 2f73  executed.../../s
 004dccd0: 7263 5f67 6363 2f67 6363 2f74 7265 652d  rc_gcc/gcc/tree-

The differences in the .a files are more extensive, but seem not reference-related. libsupc++.a is a smaller difference, so included here:

--- /proc/self/fd/16    2025-05-07 19:25:18.568187440 -0700
+++ /proc/self/fd/23    2025-05-07 19:25:18.568187440 -0700
@@ -1379,7 +1379,7 @@
 00005620: 2e5f 7372 635f 6763 635f 6c69 6273 7464  ._src_gcc_libstd
 00005630: 635f 5f5f 7633 5f6c 6962 7375 7063 5f5f  c___v3_libsupc__
 00005640: 5f65 685f 616c 6c6f 632e 6363 5f30 3030  _eh_alloc.cc_000
-00005650: 3030 3030 305f 3135 3032 4339 3638 3135  00000_1502C96815
+00005650: 3030 3030 305f 4139 4230 3437 4536 3135  00000_A9B047E615
 00005660: 656d 6572 6765 6e63 795f 6d75 7465 7845  emergency_mutexE
 00005670: 005f 5a34 315f 5f73 7461 7469 635f 696e  ._Z41__static_in
 00005680: 6974 6961 6c69 7a61 7469 6f6e 5f61 6e64  itialization_and
@@ -1673,7 +1673,7 @@
 00006880: 5f2e 2e5f 7372 635f 6763 635f 6c69 6273  _.._src_gcc_libs
 00006890: 7464 635f 5f5f 7633 5f6c 6962 7375 7063  tdc___v3_libsupc
 000068a0: 5f5f 5f65 685f 616c 6c6f 632e 6363 5f30  ___eh_alloc.cc_0
-000068b0: 3030 3030 3030 305f 3135 3032 4339 3638  0000000_1502C968
+000068b0: 3030 3030 3030 305f 4139 4230 3437 4536  0000000_A9B047E6
 000068c0: 3135 656d 6572 6765 6e63 795f 6d75 7465  15emergency_mute
 000068d0: 7845 002e 7265 6c61 2e74 6578 742e 5f5a  xE..rela.text._Z
 000068e0: 4e39 5f5f 676e 755f 6378 7837 5f5f 6d75  N9__gnu_cxx7__mu
@@ -1691,7 +1691,7 @@
 000069a0: 7372 635f 6763 635f 6c69 6273 7464 635f  src_gcc_libstdc_
 000069b0: 5f5f 7633 5f6c 6962 7375 7063 5f5f 5f65  __v3_libsupc___e
 000069c0: 685f 616c 6c6f 632e 6363 5f30 3030 3030  h_alloc.cc_00000
-000069d0: 3030 305f 3135 3032 4339 3638 3135 656d  000_1502C96815em
+000069d0: 3030 305f 4139 4230 3437 4536 3135 656d  000_A9B047E615em
 000069e0: 6572 6765 6e63 795f 6d75 7465 7845 002e  ergency_mutexE..
 000069f0: 6273 732e 656d 6572 6765 6e63 795f 6275  bss.emergency_bu
 00006a00: 6666 6572 002e 6273 732e 656d 6572 6765  ffer..bss.emerge
@@ -3121,14 +3121,14 @@
 0000c300: 5f2e 2e5f 2e2e 5f73 7263 5f67 6363 5f6c  _.._.._src_gcc_l
 0000c310: 6962 7374 6463 5f5f 5f76 335f 6c69 6273  ibstdc___v3_libs
 0000c320: 7570 635f 5f5f 6568 5f67 6c6f 6261 6c73  upc___eh_globals
-0000c330: 2e63 635f 3030 3030 3030 3030 5f45 4431  .cc_00000000_ED1
-0000c340: 3530 3230 3431 3067 6574 5f67 6c6f 6261  5020410get_globa
+0000c330: 2e63 635f 3030 3030 3030 3030 5f34 4336  .cc_00000000_4C6
+0000c340: 3646 3834 3031 3067 6574 5f67 6c6f 6261  6F84010get_globa
 0000c350: 6c45 7600 5f5a 5a4e 3835 5f47 4c4f 4241  lEv._ZZN85_GLOBA
 0000c360: 4c5f 5f4e 5f2e 2e5f 2e2e 5f2e 2e5f 2e2e  L__N_.._.._.._..
 0000c370: 5f73 7263 5f67 6363 5f6c 6962 7374 6463  _src_gcc_libstdc
 0000c380: 5f5f 5f76 335f 6c69 6273 7570 635f 5f5f  ___v3_libsupc___
 0000c390: 6568 5f67 6c6f 6261 6c73 2e63 635f 3030  eh_globals.cc_00
-0000c3a0: 3030 3030 3030 5f45 4431 3530 3230 3431  000000_ED1502041
+0000c3a0: 3030 3030 3030 5f34 4336 3646 3834 3031  000000_4C66F8401
 0000c3b0: 3067 6574 5f67 6c6f 6261 6c45 7645 3667  0get_globalEvE6g
 0000c3c0: 6c6f 6261 6c00 5f47 4c4f 4241 4c5f 4f46  lobal._GLOBAL_OF
 0000c3d0: 4653 4554 5f54 4142 4c45 5f00 5f5f 6778  FSET_TABLE_.__gx
@@ -3154,8 +3154,8 @@
 0000c510: 2e5f 2e2e 5f73 7263 5f67 6363 5f6c 6962  ._.._src_gcc_lib
 0000c520: 7374 6463 5f5f 5f76 335f 6c69 6273 7570  stdc___v3_libsup
 0000c530: 635f 5f5f 6568 5f67 6c6f 6261 6c73 2e63  c___eh_globals.c
-0000c540: 635f 3030 3030 3030 3030 5f45 4431 3530  c_00000000_ED150
-0000c550: 3230 3431 3067 6574 5f67 6c6f 6261 6c45  20410get_globalE
+0000c540: 635f 3030 3030 3030 3030 5f34 4336 3646  c_00000000_4C66F
+0000c550: 3834 3031 3067 6574 5f67 6c6f 6261 6c45  84010get_globalE
 0000c560: 7600 2e72 656c 612e 7465 7874 2e5f 5f63  v..rela.text.__c
 0000c570: 7861 5f67 6574 5f67 6c6f 6261 6c73 5f66  xa_get_globals_f
 0000c580: 6173 7400 2e72 656c 612e 7465 7874 2e5f  ast..rela.text._
@@ -3165,8 +3165,8 @@
 0000c5c0: 5f2e 2e5f 7372 635f 6763 635f 6c69 6273  _.._src_gcc_libs
 0000c5d0: 7464 635f 5f5f 7633 5f6c 6962 7375 7063  tdc___v3_libsupc
 0000c5e0: 5f5f 5f65 685f 676c 6f62 616c 732e 6363  ___eh_globals.cc
-0000c5f0: 5f30 3030 3030 3030 305f 4544 3135 3032  _00000000_ED1502
-0000c600: 3034 3130 6765 745f 676c 6f62 616c 4576  0410get_globalEv
+0000c5f0: 5f30 3030 3030 3030 305f 3443 3636 4638  _00000000_4C66F8
+0000c600: 3430 3130 6765 745f 676c 6f62 616c 4576  4010get_globalEv
 0000c610: 4536 676c 6f62 616c 002e 7265 6c61 2e65  E6global..rela.e
 0000c620: 685f 6672 616d 6500 2e63 6f6d 6d65 6e74  h_frame..comment
 0000c630: 002e 6e6f 7465 2e47 4e55 2d73 7461 636b  ..note.GNU-stack
@@ -5004,33 +5004,33 @@
 000138b0: 2e2e 5f2e 2e5f 7372 635f 6763 635f 6c69  .._.._src_gcc_li
 000138c0: 6273 7464 635f 5f5f 7633 5f6c 6962 7375  bstdc___v3_libsu
 000138d0: 7063 5f5f 5f67 7561 7264 2e63 635f 3030  pc___guard.cc_00
-000138e0: 3030 3030 3030 5f33 4445 3338 3042 4131  000000_3DE380BA1
+000138e0: 3030 3030 3030 5f38 3735 4643 3734 3231  000000_875FC7421
 000138f0: 3667 6574 5f73 7461 7469 635f 6d75 7465  6get_static_mute
 00013900: 7845 7600 5f5a 4e38 305f 474c 4f42 414c  xEv._ZN80_GLOBAL
 00013910: 5f5f 4e5f 2e2e 5f2e 2e5f 2e2e 5f2e 2e5f  __N_.._.._.._.._
 00013920: 7372 635f 6763 635f 6c69 6273 7464 635f  src_gcc_libstdc_
 00013930: 5f5f 7633 5f6c 6962 7375 7063 5f5f 5f67  __v3_libsupc___g
 00013940: 7561 7264 2e63 635f 3030 3030 3030 3030  uard.cc_00000000
-00013950: 5f33 4445 3338 3042 4134 696e 6974 4576  _3DE380BA4initEv
+00013950: 5f38 3735 4643 3734 3234 696e 6974 4576  _875FC7424initEv
 00013960: 005f 5a5a 4e38 305f 474c 4f42 414c 5f5f  ._ZZN80_GLOBAL__
 00013970: 4e5f 2e2e 5f2e 2e5f 2e2e 5f2e 2e5f 7372  N_.._.._.._.._sr
 00013980: 635f 6763 635f 6c69 6273 7464 635f 5f5f  c_gcc_libstdc___
 00013990: 7633 5f6c 6962 7375 7063 5f5f 5f67 7561  v3_libsupc___gua
-000139a0: 7264 2e63 635f 3030 3030 3030 3030 5f33  rd.cc_00000000_3
-000139b0: 4445 3338 3042 4131 3667 6574 5f73 7461  DE380BA16get_sta
+000139a0: 7264 2e63 635f 3030 3030 3030 3030 5f38  rd.cc_00000000_8
+000139b0: 3735 4643 3734 3231 3667 6574 5f73 7461  75FC74216get_sta
 000139c0: 7469 635f 6d75 7465 7845 7645 346f 6e63  tic_mutexEvE4onc
 000139d0: 6500 5f5a 4e38 305f 474c 4f42 414c 5f5f  e._ZN80_GLOBAL__
 000139e0: 4e5f 2e2e 5f2e 2e5f 2e2e 5f2e 2e5f 7372  N_.._.._.._.._sr
 000139f0: 635f 6763 635f 6c69 6273 7464 635f 5f5f  c_gcc_libstdc___
 00013a00: 7633 5f6c 6962 7375 7063 5f5f 5f67 7561  v3_libsupc___gua
-00013a10: 7264 2e63 635f 3030 3030 3030 3030 5f33  rd.cc_00000000_3
-00013a20: 4445 3338 3042 4131 3273 7461 7469 635f  DE380BA12static_
+00013a10: 7264 2e63 635f 3030 3030 3030 3030 5f38  rd.cc_00000000_8
+00013a20: 3735 4643 3734 3231 3273 7461 7469 635f  75FC74212static_
 00013a30: 6d75 7465 7845 005f 5a4e 3830 5f47 4c4f  mutexE._ZN80_GLO
 00013a40: 4241 4c5f 5f4e 5f2e 2e5f 2e2e 5f2e 2e5f  BAL__N_.._.._.._
 00013a50: 2e2e 5f73 7263 5f67 6363 5f6c 6962 7374  .._src_gcc_libst
 00013a60: 6463 5f5f 5f76 335f 6c69 6273 7570 635f  dc___v3_libsupc_
 00013a70: 5f5f 6775 6172 642e 6363 5f30 3030 3030  __guard.cc_00000
-00013a80: 3030 305f 3344 4533 3830 4241 3130 6661  000_3DE380BA10fa
+00013a80: 3030 305f 3837 3546 4337 3432 3130 6661  000_875FC74210fa
 00013a90: 6b65 5f6d 7574 6578 4500 5f5a 4e53 7439  ke_mutexE._ZNSt9
 00013aa0: 6578 6365 7074 696f 6e43 3245 7600 5f5a  exceptionC2Ev._Z
 00013ab0: 5456 5374 3965 7863 6570 7469 6f6e 005f  TVSt9exception._
@@ -5390,7 +5390,7 @@
 000150d0: 2e5f 7372 635f 6763 635f 6c69 6273 7464  ._src_gcc_libstd
 000150e0: 635f 5f5f 7633 5f6c 6962 7375 7063 5f5f  c___v3_libsupc__
 000150f0: 5f67 7561 7264 2e63 635f 3030 3030 3030  _guard.cc_000000
-00015100: 3030 5f33 4445 3338 3042 4131 3667 6574  00_3DE380BA16get
+00015100: 3030 5f38 3735 4643 3734 3231 3667 6574  00_875FC74216get
 00015110: 5f73 7461 7469 635f 6d75 7465 7845 7600  _static_mutexEv.
 00015120: 2e72 656c 612e 7465 7874 2e5f 5a4e 395f  .rela.text._ZN9_
 00015130: 5f67 6e75 5f63 7878 3137 5f5f 7265 6375  _gnu_cxx17__recu
@@ -5403,8 +5403,8 @@
 000151a0: 5f2e 2e5f 2e2e 5f2e 2e5f 7372 635f 6763  _.._.._.._src_gc
 000151b0: 635f 6c69 6273 7464 635f 5f5f 7633 5f6c  c_libstdc___v3_l
 000151c0: 6962 7375 7063 5f5f 5f67 7561 7264 2e63  ibsupc___guard.c
-000151d0: 635f 3030 3030 3030 3030 5f33 4445 3338  c_00000000_3DE38
-000151e0: 3042 4134 696e 6974 4576 002e 6763 635f  0BA4initEv..gcc_
+000151d0: 635f 3030 3030 3030 3030 5f38 3735 4643  c_00000000_875FC
+000151e0: 3734 3234 696e 6974 4576 002e 6763 635f  7424initEv..gcc_
 000151f0: 6578 6365 7074 5f74 6162 6c65 002e 7265  except_table..re
 00015200: 6c61 2e74 6578 742e 5f5a 4e39 5f5f 676e  la.text._ZN9__gn
 00015210: 755f 6378 7831 375f 5f72 6563 7572 7369  u_cxx17__recursi
@@ -5419,8 +5419,8 @@
 000152a0: 4e5f 2e2e 5f2e 2e5f 2e2e 5f2e 2e5f 7372  N_.._.._.._.._sr
 000152b0: 635f 6763 635f 6c69 6273 7464 635f 5f5f  c_gcc_libstdc___
 000152c0: 7633 5f6c 6962 7375 7063 5f5f 5f67 7561  v3_libsupc___gua
-000152d0: 7264 2e63 635f 3030 3030 3030 3030 5f33  rd.cc_00000000_3
-000152e0: 4445 3338 3042 4131 3066 616b 655f 6d75  DE380BA10fake_mu
+000152d0: 7264 2e63 635f 3030 3030 3030 3030 5f38  rd.cc_00000000_8
+000152e0: 3735 4643 3734 3231 3066 616b 655f 6d75  75FC74210fake_mu
 000152f0: 7465 7845 002e 7265 6c61 2e72 6f64 6174  texE..rela.rodat
 00015300: 612e 5f5a 5456 4e39 5f5f 676e 755f 6378  a._ZTVN9__gnu_cx
 00015310: 7832 3072 6563 7572 7369 7665 5f69 6e69  x20recursive_ini
@@ -5435,8 +5435,8 @@
 000153a0: 5f2e 2e5f 2e2e 5f2e 2e5f 2e2e 5f73 7263  _.._.._.._.._src
 000153b0: 5f67 6363 5f6c 6962 7374 6463 5f5f 5f76  _gcc_libstdc___v
 000153c0: 335f 6c69 6273 7570 635f 5f5f 6775 6172  3_libsupc___guar
-000153d0: 642e 6363 5f30 3030 3030 3030 305f 3344  d.cc_00000000_3D
-000153e0: 4533 3830 4241 3132 7374 6174 6963 5f6d  E380BA12static_m
+000153d0: 642e 6363 5f30 3030 3030 3030 305f 3837  d.cc_00000000_87
+000153e0: 3546 4337 3432 3132 7374 6174 6963 5f6d  5FC74212static_m
 000153f0: 7574 6578 4500 2e72 656c 612e 726f 6461  utexE..rela.roda
 00015400: 7461 2e5f 5a54 494e 395f 5f67 6e75 5f63  ta._ZTIN9__gnu_c
 00015410: 7878 3236 5f5f 636f 6e63 7572 7265 6e63  xx26__concurrenc
@@ -5453,7 +5453,7 @@
 000154c0: 5f73 7263 5f67 6363 5f6c 6962 7374 6463  _src_gcc_libstdc
 000154d0: 5f5f 5f76 335f 6c69 6273 7570 635f 5f5f  ___v3_libsupc___
 000154e0: 6775 6172 642e 6363 5f30 3030 3030 3030  guard.cc_0000000
-000154f0: 305f 3344 4533 3830 4241 3136 6765 745f  0_3DE380BA16get_
+000154f0: 305f 3837 3546 4337 3432 3136 6765 745f  0_875FC74216get_
 00015500: 7374 6174 6963 5f6d 7574 6578 4576 4534  static_mutexEvE4
 00015510: 6f6e 6365 002e 7265 6c61 2e72 6f64 6174  once..rela.rodat
 00015520: 612e 5f5a 5449 4e39 5f5f 676e 755f 6378  a._ZTIN9__gnu_cx
@@ -12475,8 +12475,8 @@
 00030ba0: 2e5f 2e2e 5f2e 2e5f 2e2e 5f73 7263 5f67  ._.._.._.._src_g
 00030bb0: 6363 5f6c 6962 7374 6463 5f5f 5f76 335f  cc_libstdc___v3_
 00030bc0: 6c69 6273 7570 635f 5f5f 7665 632e 6363  libsupc___vec.cc
-00030bd0: 5f30 3030 3030 3030 305f 4139 3233 3039  _00000000_A92309
-00030be0: 4445 3137 756e 6361 7463 685f 6578 6365  DE17uncatch_exce
+00030bd0: 5f30 3030 3030 3030 305f 3433 4535 4645  _00000000_43E5FE
+00030be0: 3637 3137 756e 6361 7463 685f 6578 6365  6717uncatch_exce
 00030bf0: 7074 696f 6e43 3145 7600 5f5f 6378 615f  ptionC1Ev.__cxa_
 00030c00: 6765 745f 676c 6f62 616c 735f 6661 7374  get_globals_fast
 00030c10: 005f 5f67 7878 5f70 6572 736f 6e61 6c69  .__gxx_personali
@@ -12634,7 +12634,7 @@
 00031590: 2e2e 5f2e 2e5f 2e2e 5f73 7263 5f67 6363  .._.._.._src_gcc
 000315a0: 5f6c 6962 7374 6463 5f5f 5f76 335f 6c69  _libstdc___v3_li
 000315b0: 6273 7570 635f 5f5f 7665 632e 6363 5f30  bsupc___vec.cc_0
-000315c0: 3030 3030 3030 305f 4139 3233 3039 4445  0000000_A92309DE
+000315c0: 3030 3030 3030 305f 3433 4535 4645 3637  0000000_43E5FE67
 000315d0: 3137 756e 6361 7463 685f 6578 6365 7074  17uncatch_except
 000315e0: 696f 6e43 3145 7600 2e72 656c 612e 7465  ionC1Ev..rela.te
 000315f0: 7874 2e5f 5f63 7861 5f76 6563 5f63 6c65  xt.__cxa_vec_cle

(The libstdc++.a diff is similar but is 10x larger.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    • Status
      Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions