[llvm] [llvm][cmake] Try LLVM libunwind when frame registration is unavailable (PR #112087)

via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 1 13:02:00 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:

> Is this BSD, or some other ELF-based system with libunwind as the default unwinder?

Yes, the problem is found and tested on eweOS[1], a Linux distro built with LLVM toolchain.

[1]: https://os.ewe.moe

https://github.com/llvm/llvm-project/pull/112087


More information about the llvm-commits mailing list