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]

Marked as reviewed by erikj (Reviewer).

-------------

PR Review: https://git.openjdk.org/jdk/pull/23949#pullrequestreview-2670834186

Reply via email to