[llvm] [llvm][cmake] Try LLVM libunwind when frame registration is unavailable (PR #112087)
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 1 11:09:22 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 ()
----------------
lhames wrote:
> I dont think it's a problem.
So this _would_ cause all of these tools to explicitly link libunwind? That seems like a significant change.
> 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.
That's surprising to me. I thought libcxx / libcxxabi could be mixed with the gcc unwinder, but I've never actually tried (I'm usually developing on Darwin where libunwind is the system unwinder).
Is it possible to mix libunwind with other (non libcxx) c++ standard libraries?
https://github.com/llvm/llvm-project/pull/112087
More information about the llvm-commits
mailing list