[llvm] [llvm][cmake] Try LLVM libunwind when frame registration is unavailable (PR #112087)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 21 23:20:42 PDT 2024
================
@@ -272,6 +272,13 @@ endif()
check_symbol_exists(__register_frame "${CMAKE_CURRENT_LIST_DIR}/unwind.h" HAVE_REGISTER_FRAME)
check_symbol_exists(__deregister_frame "${CMAKE_CURRENT_LIST_DIR}/unwind.h" HAVE_DEREGISTER_FRAME)
check_symbol_exists(__unw_add_dynamic_fde "${CMAKE_CURRENT_LIST_DIR}/unwind.h" HAVE_UNW_ADD_DYNAMIC_FDE)
+if (NOT (HAVE_REGISTER_FRAME OR HAVE_DEREGISTER_FRAME OR HAVE_UNW_ADD_DYNAMIC_FDE))
+ check_library_exists(unwind __unw_add_dynamic_fde "" HAVE_LLVM_LIBUNWIND)
+ if (HAVE_LLVM_LIBUNWIND)
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "unwind")
+ set(HAVE_UNW_ADD_DYNAMIC_FDE 1)
+ endif ()
+endif ()
----------------
ziyao233 wrote:
I dont think it's a problem. If __register_frame symbols aren't available without linking to external libraries, we're definitely working with compiler-rt & libcxx & libcxxabi, which already require linking to libunwind.
This is also why code with reference to __register_frame successfully builds (but not working correctly) on these systems without explicitly link to libunwind: LLVM requires C++ stdlib, and linking to libcxx implies libunwind.
https://github.com/llvm/llvm-project/pull/112087
More information about the llvm-commits
mailing list