From 488d0c94d1fc1062a0de32524b984bcd1a7d663c Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Fri, 28 May 2021 17:40:13 -0700 Subject: libunwind: Implement unw_backtrace Signed-off-by: Khem Raj (cherry picked from commit d45403baedd7ae7755a02cfe0205000b760167bd) --- ...0033-libunwind-Added-unw_backtrace-method.patch | 55 ++++++++++++++++++++++ recipes-devtools/clang/common.inc | 1 + 2 files changed, 56 insertions(+) create mode 100644 recipes-devtools/clang/clang/0033-libunwind-Added-unw_backtrace-method.patch diff --git a/recipes-devtools/clang/clang/0033-libunwind-Added-unw_backtrace-method.patch b/recipes-devtools/clang/clang/0033-libunwind-Added-unw_backtrace-method.patch new file mode 100644 index 0000000..53f816d --- /dev/null +++ b/recipes-devtools/clang/clang/0033-libunwind-Added-unw_backtrace-method.patch @@ -0,0 +1,55 @@ +From 79195637cf6cde28baa23e41e7b417e98b036913 Mon Sep 17 00:00:00 2001 +From: Maksim Kita +Date: Sun, 23 May 2021 10:27:29 +0000 +Subject: [PATCH] libunwind: Added unw_backtrace method + +Source: https://github.com/ClickHouse-Extras/libunwind/commit/52f0f7861926cbfaef7e6c97d8a6d7ba2a1f6747#diff-a82fc885e2e4facf4b92d26171c13aa4aa5db296f77e1158ba2f8664e3bd1f5c +Upstream-Status: Pending +Signed-off-by: Khem Raj +--- + libunwind/include/libunwind.h | 1 + + libunwind/src/libunwind.cpp | 18 ++++++++++++++++++ + 2 files changed, 19 insertions(+) + +diff --git a/libunwind/include/libunwind.h b/libunwind/include/libunwind.h +index 0feecd7bd6fc..670cfa3ed71d 100644 +--- a/libunwind/include/libunwind.h ++++ b/libunwind/include/libunwind.h +@@ -127,6 +127,7 @@ extern int unw_is_fpreg(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL; + extern int unw_is_signal_frame(unw_cursor_t *) LIBUNWIND_AVAIL; + extern int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *) LIBUNWIND_AVAIL; + //extern int unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*); ++extern int unw_backtrace(void **, int) LIBUNWIND_AVAIL; + + extern unw_addr_space_t unw_local_addr_space; + +diff --git a/libunwind/src/libunwind.cpp b/libunwind/src/libunwind.cpp +index 9b3b92bdff09..986ef62f9231 100644 +--- a/libunwind/src/libunwind.cpp ++++ b/libunwind/src/libunwind.cpp +@@ -289,7 +289,25 @@ void __unw_remove_dynamic_fde(unw_word_t fde) { + #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) + #endif // !defined(__USING_SJLJ_EXCEPTIONS__) + ++int unw_backtrace(void **buffer, int size) { ++ unw_context_t context; ++ unw_cursor_t cursor; ++ if (unw_getcontext(&context) || unw_init_local(&cursor, &context)) { ++ return 0; ++ } ++ ++ unw_word_t ip; ++ int current = 0; ++ while (unw_step(&cursor) > 0) { ++ if (current >= size || unw_get_reg(&cursor, UNW_REG_IP, &ip)) { ++ break; ++ } + ++ buffer[current++] = reinterpret_cast(static_cast(ip)); ++ } ++ ++ return current; ++} + + // Add logging hooks in Debug builds only + #ifndef NDEBUG diff --git a/recipes-devtools/clang/common.inc b/recipes-devtools/clang/common.inc index d68d6f5..7f1a5f3 100644 --- a/recipes-devtools/clang/common.inc +++ b/recipes-devtools/clang/common.inc @@ -42,6 +42,7 @@ SRC_URI = "\ file://0030-clang-Fix-x86-triple-for-non-debian-multiarch-linux-.patch \ file://0031-compiler-rt-Link-scudo-with-SANITIZER_CXX_ABI_LIBRAR.patch \ file://0032-compiler-rt-Link-scudo-standalone-with-libatomic-on-.patch \ + file://0033-libunwind-Added-unw_backtrace-method.patch \ file://0034-CMake-Installable-find-modules-for-terminfo-and-libf.patch \ file://0035-llvm-Do-not-use-standard-search-paths-in-find_librar.patch \ " -- cgit v1.2.3-54-g00ecf