1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 10:42:39 +01:00
llvm-mirror/cmake/modules
Rainer Orth 9f6b5327a4 [cmake] Don't build with -O3 -fPIC on Solaris/sparcv9
Tests on Solaris/sparcv9 currently show about 250 failures when building
with gcc, most of them like the following:

  FAIL: LLVM-Unit :: Support/./SupportTests/TaskQueueTest.UnOrderedFutures (4269 of 67884)
  ******************** TEST 'LLVM-Unit :: Support/./SupportTests/TaskQueueTest.UnOrderedFutures' FAILED ********************
  Note: Google Test filter = TaskQueueTest.UnOrderedFutures
  [==========] Running 1 test from 1 test case.
  [----------] Global test environment set-up.
  [----------] 1 test from TaskQueueTest
  [ RUN      ] TaskQueueTest.UnOrderedFutures
  0  SupportTests        0x0000000100753b20 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 32
  1  SupportTests        0x0000000100752974 llvm::sys::RunSignalHandlers() + 68
  2  SupportTests        0x0000000100752b18 SignalHandler(int) + 372
  3  libc.so.1           0xffffffff7eedc800 __sighndlr + 12
  4  libc.so.1           0xffffffff7eecf23c call_user_handler + 852
  5  libc.so.1           0xffffffff7eecf594 sigacthandler + 84
  6  SupportTests        0x00000001006f8cb8 std:🧵:_State_impl<std:🧵:_Invoker<std::tuple<llvm::ThreadPool::ThreadPool(llvm::ThreadPoolStrategy)::'lambda'()> > >::_M_run() + 512
  7  libstdc++.so.6.0.28 0xfffffffc628117cc execute_native_thread_routine + 16
  8  libc.so.1           0xffffffff7eedc6a0 _lwp_start + 0

Since it's effectively impossible to debug such a `SEGV` in a `Release`
build, I tried a `Debug` build instead, only to find that the failures had
gone away.

Further investigation revealed that most of the issue centers around
`llvm/lib/Support/ThreadPool.cpp`.  That file is built with `-O3 -fPIC` in
a `Release` build.  The failure vanishes if

- compiling without `-fPIC`
- compiling with `-O -fPIC`
- linking with GNU `ld` instead of Solaris `ld`

It has meanwhile been determined that `gcc` doesn't correctly heed some TLS
code sequences.  To make things worse, Solaris `ld` doesn't properly
validate its assumptions against the input, generating wrong code.

`gld` like `gcc` is more liberal here and correctly deals with the code it
gets fed from `gcc`.

There's PR target/96607: GCC feeds SPARC/Solaris linker with unrecognized
TLS sequences <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96607> now.

An attempt to build with `-DLLVM_ENABLE_PIC=Off` initially failed since
neither `libRemarks.so` (D85626 <https://reviews.llvm.org/D85626>) nor
`LLVMPolly.so` (D85627 <https://reviews.llvm.org/D85627>) heed that option.
Even with that fixed, a few codegen failures remain.

Next I tried to build just `ThreadPool.cpp` with `-O -fPIC`.  While that
fixed the vast majority of the failures, 16 `LLVM :: CodeGen/X86` failures
remained.

Given that that solution was both incomplete and fragile, I went for
building the whole tree with `-O -fPIC` for `Release` and `RelWithDebInfo`
builds.

As detailed in Bug 47304, 2-stage builds also show large numbers of
failures when building with `-O3` or `-O2`, which are likewise worked
around by building with `-O` until they are sufficiently analyzed and
fixed.

This way, all failures relative to a `Debug` build go away.

Tested on `sparcv9-sun-solaris2.11`.

Differential Revision: https://reviews.llvm.org/D85630

(cherry picked from commit 15c66b10114d239c96282cf8fc5330186178974b)
2020-08-31 14:41:09 +02:00
..
AddLLVM.cmake [flang] Fix out-of-tree build with missing acc_gen target 2020-07-14 20:50:43 -04:00
AddLLVMDefinitions.cmake
AddOCaml.cmake [llvm] [ocaml] Support linking against dylib 2019-10-11 14:32:43 +00:00
AddSphinxTarget.cmake [llvm] [docs] Do not require recommonmark for manpage build 2020-07-07 20:59:02 +02:00
CheckAtomic.cmake [CMake][NFC] Clean up CheckAtomic.cmake 2020-04-18 12:53:22 +01:00
CheckCompilerVersion.cmake MSVC Buggy version detection: turn pre-processor error into CMake configuration time check 2020-01-31 00:11:55 +00:00
CheckLinkerFlag.cmake [cmake] Make check_linker_flags operate via linker flags 2017-10-31 01:30:46 +00:00
ChooseMSVCCRT.cmake Revert r361826, as it still breaks LLDB. 2019-05-28 15:04:39 +00:00
CMakeLists.txt Fix missing build dependencies on omp_gen 2020-07-02 07:55:20 -06:00
CrossCompile.cmake [CMake] Fix cross-compiling with LLVM as CMake subproject 2020-04-30 16:54:20 +02:00
DetermineGCCCompatible.cmake
FindGRPC.cmake [clangd] Fix remote index build for macOS with Homebrew-installed gRPC and Protobuf 2020-05-11 12:28:07 +02:00
FindLibpfm.cmake [Build][NFC] Split off libpfm detection to a separate module. 2018-04-11 07:39:00 +00:00
FindOCaml.cmake
FindSphinx.cmake
FindZ3.cmake [NFC] Fix Z3 version detection regexp 2020-04-09 13:06:22 +02:00
GenerateVersionFromVCS.cmake [llvm] [cmake] Use current directory in GenerateVersionFromVCS 2019-02-11 09:07:07 +00:00
GetHostTriple.cmake [AIX] Improve 32/64-bit build configuration 2020-02-20 15:41:00 -05:00
HandleLLVMOptions.cmake [cmake] Don't build with -O3 -fPIC on Solaris/sparcv9 2020-08-31 14:41:09 +02:00
HandleLLVMStdlib.cmake Add support in CMake to statically link the C++ standard library. 2019-08-14 19:55:59 +00:00
LLVM-Config.cmake Remove AllTargetsAsmPrinters 2020-01-17 19:04:06 -05:00
LLVMConfig.cmake.in [CMake] Pass bugreport URL to standalone clang build 2020-08-03 15:59:06 +02:00
LLVMConfigVersion.cmake.in
LLVMDistributionSupport.cmake build: extract LLVM distribution target handling 2019-06-14 18:28:57 +00:00
LLVMExternalProjectUtils.cmake [compiler-rt][CMake] Pass down LLVM_LIT_ARGS in runtime build 2020-07-13 14:38:06 +00:00
LLVMInstallSymlink.cmake [cmake] install_symlink should obey DESTDIR unconditionally 2019-08-15 15:36:13 +00:00
LLVMProcessSources.cmake [clangd] Fix remote index build without shared libs mode 2020-04-28 19:16:37 +02:00
TableGen.cmake [CMake] -gen-dag-isel: add -omit-comments if neither Debug nor RelWithDebInfo 2020-05-15 14:03:05 -07:00
TensorFlowCompile.cmake [llvm] Release-mode ML InlineAdvisor 2020-06-24 08:18:42 -07:00
UseLibtool.cmake [CMake] Use libtool for runtimes when building for Apple platform 2019-06-02 02:05:01 +00:00
VersionFromVCS.cmake Make ninja smart console builds more pretty 2020-06-22 06:35:13 -04:00