mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 20:26:06 +00:00

In a `runtimes` build on Solaris/amd64, there are two failues: ``` AddressSanitizer-Unit :: ./Asan-i386-calls-Dynamic-Test/failed_to_discover_tests_from_gtest AddressSanitizer-Unit :: ./Asan-i386-inline-Dynamic-Test/failed_to_discover_tests_from_gtest ``` This happens when `lit` enumerates the tests with `--gtest_list_tests --gtest_filter=-*DISABLED_*`. The error is twofold: - The `LD_LIBRARY_PATH*` variables point at the 64-bit directory (`lib/clang/19/lib/x86_64-pc-solaris2.11`) for a 32-bit test: ``` ld.so.1: Asan-i386-calls-Dynamic-Test: fatal: /var/llvm/local-amd64-release-stage2-A-flang-clang18-runtimes/tools/clang/stage2-bins/./lib/../lib/clang/19/lib/x86_64-pc-solaris2.11/libclang_rt.asan.so: wrong ELF class: ELFCLASS64 ``` - While the tests are linked with `-Wl,-rpath`, that path always is the 64-bit directory again. Accordingly, the fix consists of two parts: - The code in `compiler-rt/test/asan/Unit/lit.site.cfg.py.in` to adjust the `LD_LIBRARY_PATH*` variables is guarded by a `config.target_arch != config.host_arch` condition. This is wrong in two ways: - The adjustment is always needed independent of the host arch. This is what `compiler-rt/test/lit.common.cfg.py` already does. - Besides, `config.host_arch` is ultimately set from `CMAKE_HOST_SYSTEM_PROCESSOR`. On Linux/x86_64, this is `x86_64` (`uname -m`) while on Solaris/amd64 it's `i386` (`uname -p`), explaining why the transformation is skipped on Solaris, but not on Linux. - Besides, `RPATH` needs to be set to the correct subdirectory, so instead of using the default arch in `compiler-rt/CMakeLists.txt`, this patch moves the code to a function which takes the test's arch into account. Tested on `amd64-pc-solaris2.11` and `x86_64-pc-linux-gnu`.