On Fri, 7 Mar 2025 20:46:32 GMT, Mikael Vidstedt <mik...@openjdk.org> wrote:
> Background (from JBS): > > Recent versions of Xcode, most likely starting with Xcode 15, do not produce > deterministic binaries/libraries out of the box. In particular, the UUID data > in the LC_UUID load command is not stable. > > After spending some significant time trying to understand why, it turns out > that the linker has started including the last modified time stamp of the > object files in the (debug?) data and that time stamp data is included in the > computed UUID "hash". So even if the rest of the data is the same between two > builds, the build time (or, more accurately, the time when the object file > gets written to the file system) now affects the UUID and therefore the data > of the resulting .dylib files. > > It seems (unconfirmed) like this may be an artifact of Xcode 15 using a new > linker ("ld-prime") which may or may not be why the behavior has changed. > > After spending even more time trying to understand what to do about it I > noticed this in the ld man page: > > -reproducible > By default output content will be deterministic, but small > changes in input files such as a compilation time might affect certain data > structures in the linked binary. This option instructs ld to create a > reproducible output binary by ignoring certain input properties or using > alternative algorithms. > > And, adding that flag (-Wl,-reproducible to clang) does indeed seem to solve > the issue. > > Testing: > > * Manual verification with both Xcode14.3.1 and Xcode 15.4 > * tier1,builds-tier[2-5] Thank you for the reviews! ------------- PR Comment: https://git.openjdk.org/jdk/pull/23949#issuecomment-2711171142