Skip to content

Fix non-determinism in bootstrap gcc #22

@zombiezen

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