[compiler-rt] [compiler-rt] Add libbacktrace support on Windows (PR #216584)

via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 16 10:36:54 PDT 2026


https://github.com/oltolm created https://github.com/llvm/llvm-project/pull/216584

I have split this PR from https://github.com/llvm/llvm-project/pull/209902. It's one of the patches that enables ASan and UBSan in GCC for Windows.

>From 2c272ebe37360c83803dcc888ef8066db6fc0b59 Mon Sep 17 00:00:00 2001
From: Oleg Tolmatcev <oleg.tolmatcev at gmail.com>
Date: Thu, 30 Jul 2026 19:51:40 +0200
Subject: [PATCH] [compiler-rt] Add libbacktrace support on Windows

Co-authored-by: Hannes Domani <ssbssa at yahoo.de>
---
 .../sanitizer_symbolizer_libbacktrace.cpp        | 16 ++++++++--------
 .../sanitizer_symbolizer_win.cpp                 |  8 ++++++++
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp
index d78dab93487f1..849e5ee475eb5 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp
@@ -19,15 +19,15 @@
 
 #if SANITIZER_LIBBACKTRACE
 # include "backtrace-supported.h"
-# if SANITIZER_POSIX && BACKTRACE_SUPPORTED && !BACKTRACE_USES_MALLOC
-#  include "backtrace.h"
-#  if SANITIZER_CP_DEMANGLE
-#   undef ARRAY_SIZE
-#   include "demangle.h"
+#  if BACKTRACE_SUPPORTED && !BACKTRACE_USES_MALLOC
+#    include "backtrace.h"
+#    if SANITIZER_CP_DEMANGLE
+#      undef ARRAY_SIZE
+#      include "demangle.h"
+#    endif
+#  else
+#    define SANITIZER_LIBBACKTRACE 0
 #  endif
-# else
-#  define SANITIZER_LIBBACKTRACE 0
-# endif
 #endif
 
 namespace __sanitizer {
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cpp
index 1ff8b8f1bab48..af6639d740f49 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cpp
@@ -16,6 +16,7 @@
 
 #  include "sanitizer_dbghelp.h"
 #  include "sanitizer_symbolizer_internal.h"
+#  include "sanitizer_symbolizer_libbacktrace.h"
 
 namespace __sanitizer {
 
@@ -279,6 +280,12 @@ static void ChooseSymbolizerTools(IntrusiveList<SymbolizerTool> *list,
     return;
   }
 
+#  if defined(__GNUC__) && !defined(__clang__)
+  if (SymbolizerTool* tool = LibbacktraceSymbolizer::get(allocator)) {
+    VReport(2, "Using libbacktrace symbolizer.\n");
+    list->push_back(tool);
+  }
+#  else
   // Add llvm-symbolizer.
   const char *user_path = common_flags()->external_symbolizer_path;
 
@@ -301,6 +308,7 @@ static void ChooseSymbolizerTools(IntrusiveList<SymbolizerTool> *list,
   } else {
     VReport(2, "External symbolizer is not present.\n");
   }
+#  endif
 
   // Add the dbghelp based symbolizer.
   list->push_back(new(*allocator) WinSymbolizerTool());



More information about the llvm-commits mailing list