You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Android NDK includes a CLANG_VENDOR string that provides some extra details of the compiler. As of r26, this also includes some options used to (as far as I can tell) compile the compiler itself--including +/- things like bolt and lto--rather than features that modify the compiler.
The result is that identically-functioning copies of the compiler compiled for differing host operating systems are now getting different vendor strings even though they function identically, making it more difficult to obtain bit-for-bit reproductions using the Android NDK compiler stack.
Is there a reason why the compiler version string needs to be annotated with this information? I'd have thought that it would only be interesting to annotate things which would result in a different behavior, but these are just options used to affect the performance of the compiler itself...
(FWIW, I am passing -fno-ident, but for some reason if you compile a .s file--as is done by OpenSSL--it passes -dwarf-debug-producer to -cc1as with the full clang version, and I can't figure out any way to disable this from ending up in the .debug_info section without fully disabling -g.)
For example, all of the differences between my Linux and macOS (host; same target) builds of the same code differ by nothing other than these embedded flags.
Description
The Android NDK includes a CLANG_VENDOR string that provides some extra details of the compiler. As of r26, this also includes some options used to (as far as I can tell) compile the compiler itself--including +/- things like bolt and lto--rather than features that modify the compiler.
https://android.googlesource.com/toolchain/llvm_android/+/31a1d3747b77b10185c0adf03ae6036b474719c7/do_build.py#1123
The result is that identically-functioning copies of the compiler compiled for differing host operating systems are now getting different vendor strings even though they function identically, making it more difficult to obtain bit-for-bit reproductions using the Android NDK compiler stack.
Is there a reason why the compiler version string needs to be annotated with this information? I'd have thought that it would only be interesting to annotate things which would result in a different behavior, but these are just options used to affect the performance of the compiler itself...
(FWIW, I am passing -fno-ident, but for some reason if you compile a .s file--as is done by OpenSSL--it passes -dwarf-debug-producer to -cc1as with the full clang version, and I can't figure out any way to disable this from ending up in the .debug_info section without fully disabling -g.)
Upstream bug
No response
Commit to cherry-pick
No response
Affected versions
r27
Canary version
No response
Host OS
Linux, Mac
Host OS version
Debian sid, macOS 14.4.1
Affected ABIs
arm64-v8a, x86_64
The text was updated successfully, but these errors were encountered: