-
Notifications
You must be signed in to change notification settings - Fork 38.6k
depends: make osx output deterministic #9891
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
4cbbe5b to
9e4d842
Compare
ld64 is threaded, and uses a worker for each CPU to parse input files. But there's a bug in the parser causing dependencies to be calculated differently based on which files have already been parsed. As a result, builders with more CPUs are more likely to see non-determinism. This looks to have been fixed in a newer version of ld64, so just disable threading for now. There's no noticible slowdown.
|
@theuni Brilliant investigation! Thank you! For more info, the unpacked code is available at https://github.com/froydnj/ld64/blob/master/src/ld/InputFiles.cpp#L716 utACK 9e4d842 |
|
Wow, this is a really sneaky bug. Thanks for catching it. utACK 9e4d842 |
9e4d842 depends: make osx output deterministic (Cory Fields) Tree-SHA512: 997a671832a28e600bc3c9cd1340c6c1fa08f050d7cf676a5d51b38f08161ac418621520459a9a53dd87102c13fb69cb2e58ec3cc00f738e204eb787d6f0cad6
ld64 is threaded, and uses a worker for each CPU to parse input files. But there's a bug in the parser causing dependencies to be calculated differently based on which files have already been parsed. As a result, builders with more CPUs are more likely to see non-determinism. This looks to have been fixed in a newer version of ld64, so just disable threading for now. There's no noticible slowdown. Github-Pull: #9891 Rebased-From: 9e4d842
|
Post merge ACK. Tested by running 50 gitian builds with this patch applied and the hashes of each build match. |
9e4d842 depends: make osx output deterministic (Cory Fields) Tree-SHA512: 997a671832a28e600bc3c9cd1340c6c1fa08f050d7cf676a5d51b38f08161ac418621520459a9a53dd87102c13fb69cb2e58ec3cc00f738e204eb787d6f0cad6
9e4d842 depends: make osx output deterministic (Cory Fields) Tree-SHA512: 997a671832a28e600bc3c9cd1340c6c1fa08f050d7cf676a5d51b38f08161ac418621520459a9a53dd87102c13fb69cb2e58ec3cc00f738e204eb787d6f0cad6
Enable macOS cross-compilation Includes code cherry-picked from the following upstream PRs: - bitcoin/bitcoin#7809 - The `native_cctools` fix. - bitcoin/bitcoin#8210 - The macOS toolchain bump. - bitcoin/bitcoin#9891 - bitcoin/bitcoin#15581 - The `tar` change. - bitcoin/bitcoin#16049 - The `native_cctools` change. Build instructions: - Fetch `MacOSX10.11.sdk` from e.g. https://github.com/phracker/MacOSX-SDKs/releases - Extract it into `depends/SDKs` (creating that folder first) - `HOST=x86_64-apple-darwin11 ./zcutil/build.sh`
ld64 is threaded, and uses a worker for each CPU to parse input files. But
there's a bug in the parser causing dependencies to be calculated differently
based on which files have already been parsed.
As a result, builders with more CPUs are more likely to see non-determinism.
This looks to have been fixed in a newer version of ld64, so just disable
threading for now. There's no noticible slowdown.