I will investigate next week, and have a look at whether ASLR is turned off in our build system. But if it was on, I would expect more than a single .o file to be different.
At this point in time, by disabling libcilkrts, and one other option, I can't remember which right now, I can get gcc building reproducibly. With regards to the libcilkrts library, there is only a single .o file that is being generated that differs each time. When running it through objdump, the differences always seem to pop up in the same function if I am not mistaken, and the actual assembly generated differs. Normally from the very beginning of the register initialisation. On 31 December 2015 at 12:17, Andrew Haley <a...@redhat.com> wrote: > On 30/12/15 15:33, Georg-Johann Lay wrote: > >> Some parts of the compiler use the address of objects to compute >> hashes, but I don't remember which part(s) actually do this. That >> technique can lead to different code for different runs of the >> compiler even on the same system. This is hard to reproduce as it >> depends on how the OS is supplying memory, and it might depend on >> the "history" of the machine and the actual OS. > > ... and many Linux kernels deliberately randomize memory layout to > provide some protection from buffer overflow attacks. > > Andrew.