https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124811
--- Comment #2 from Michael Lloyd ---
I tested with setarch -R (ADDR_NO_RANDOMIZE) and it helps but the issue
persists.
Building quickshell 0.2.1 (as before) with GCC 15.2.0-15, x86_64-linux-gnu,
kernel 6.19.8:
Normal (ASLR enabled): 475/475 .o files diff, 6/6 .gch files diff
setarch x86_64 -R: 475/475 .o files diff, 6/6 .gch files diff
However, disabling ASLR does dramatically reduce the magnitude of the
differences. Total differing bytes across all .o files:
ASLR on:3,219,315 bytes diff
ASLR off: 9,746 bytes diff
The .gch files show the same pattern. For the largest PCH (337 MB):
ASLR on: 96,047,756 bytes diff
ASLR off: 9,869 bytes diff
So, ASLR is responsible for most of the byte differences but disabling
it does not eliminate the non-determinism.
The remaining non-determinism breaks down as:
With ASLR:154/475 .o files still have real diffs
Without ASLR: 101/475 .o files still have real diffs
Of those 101 files in the no-ASLR case:
* 84 files differ in .debug_line_str (and sometimes .rela.debug_info)
* 17 files differ by only 3 bytes in .rodata (Qt rcc resource hash,
likely not a GCC issue)
The .debug_line_str differences are string ordering non-determinism.
The same set of strings (directory paths, filenames) appear in both
builds, but in different order. For example, in common.cpp.o:
Build A: .../build_dir\0.../src/core/common.cpp\0
Build B: .../src/core/common.cpp\0.../build_dir\0
When sorted the string tables are identical.
There appears to be two distinct issues:
1. ASLR leaking into .gch memory dumps (known from mentioned bugs)
2. Non-deterministic ordering of strings in .debug_line_str, which
I would assume is related to GCC's PCH/debug-info handling.