diff options
author | Sunho Kim <ksunhokim123@gmail.com> | 2022-07-31 05:42:16 +0900 |
---|---|---|
committer | Sunho Kim <ksunhokim123@gmail.com> | 2022-07-31 05:42:57 +0900 |
commit | a8f2e24e48fddb3707301c9d24cc50ab778d4fda (patch) | |
tree | 1d043ca17bafdf367b09a82c1406b934bf2ee0f7 /clang/CMakeLists.txt | |
parent | 1d03b2efcd40eb8225a0b10afea86e8a1436681e (diff) |
[clang-repl] Disable building when LLVM_STATIC_LINK_CXX_STDLIB is ON.
We have seen random symbol not found "__cxa_throw" error in fuschia build bots and out-of-tree users. The understanding have been that they are built without exception support, but it turned out that these platforms have LLVM_STATIC_LINK_CXX_STDLIB ON so that they link libstdc++ to llvm statically. The reason why this is problematic for clang-repl is that by default clang-repl tries to find symbols from symbol table of executable and dynamic libraries loaded by current process. It needs to load another libstdc++, but the platform that had LLVM_STATIC_LINK_CXX_STDLIB turned on is usally those with missing or obsolate shared libstdc++ in the first place -- trying to load it again would be destined to fail eventually with a risk to introuduce mixed libstdc++ versions.
A proper solution that doesn't take a workaround is statically link the same libstdc++ by clang-repl side, but this is not possible with old JIT linker runtimedyld. New just-in-time linker JITLink handles this relatively well, but it's not availalbe in majority of platforms. For now, this patch just disables the building of clang-repl when LLVM_STATIC_LINK_CXX_STDLIB is ON and removes the "__cxa_throw" check in exception unittest as well as reverting previous exception check flag patch.
Reviewed By: v.g.vassilev
Differential Revision: https://reviews.llvm.org/D130788
Diffstat (limited to 'clang/CMakeLists.txt')
-rw-r--r-- | clang/CMakeLists.txt | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 480f13e73c9f..82207fae0c01 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -504,6 +504,13 @@ CMAKE_DEPENDENT_OPTION(CLANG_PLUGIN_SUPPORT "Build clang with plugin support" ON "HAVE_CLANG_PLUGIN_SUPPORT" OFF) +# If libstdc++ is statically linked, clang-repl needs to statically link libstdc++ +# itself, which is not possible in many platforms because of current limitations in +# JIT stack. (more platforms need to be supported by JITLink) +if(NOT LLVM_STATIC_LINK_CXX_STDLIB) + set(HAVE_CLANG_REPL_SUPPORT ON) +endif() + option(CLANG_ENABLE_ARCMT "Build ARCMT." ON) option(CLANG_ENABLE_STATIC_ANALYZER "Include static analyzer in clang binary." ON) |