llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-compiler-rt-sanitizer Author: Andres Villegas (avillega) <details> <summary>Changes</summary> This PR is part of a stack, #<!-- -->73029 should be merged and reviewed first. Please only review the last commit of this PR. Adds a new Implementation of StackTracePrinter that only emits symbolizer markup. Currently this change only affects Fuchsia OS. Should be NFC. --- Full diff: https://github.com/llvm/llvm-project/pull/73040.diff 3 Files Affected: - (modified) compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp (+6-2) - (modified) compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.h (+4) - (modified) compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_markup.cpp (+23-21) ``````````diff diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp index 69047c2e31eca2a..e0c3943e4a9743e 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp @@ -12,6 +12,7 @@ #include "sanitizer_stacktrace_printer.h" +#include "sanitizer_common.h" #include "sanitizer_file.h" #include "sanitizer_flags.h" #include "sanitizer_fuchsia.h" @@ -25,8 +26,7 @@ StackTracePrinter *StackTracePrinter::GetOrInit() { if (stacktrace_printer) return stacktrace_printer; - stacktrace_printer = - new (GetGlobalLowLevelAllocator()) FormattedStackTracePrinter(); + stacktrace_printer = StackTracePrinter::PlatformInit(); CHECK(stacktrace_printer); return stacktrace_printer; @@ -61,6 +61,10 @@ const char *StackTracePrinter::StripFunctionName(const char *function) { // sanitizer_symbolizer_markup.cpp implements these differently. #if !SANITIZER_SYMBOLIZER_MARKUP +StackTracePrinter *StackTracePrinter::PlatformInit() { + return new (GetGlobalLowLevelAllocator()) FormattedStackTracePrinter(); +} + static const char *DemangleFunctionName(const char *function) { if (!common_flags()->demangle) return function; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.h b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.h index 9cf39013e78bc17..9de09bda0062d45 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.h @@ -46,6 +46,10 @@ class StackTracePrinter { const DataInfo *DI, const char *strip_path_prefix = "") = 0; + private: + // To be called from StackTracePrinter::GetOrInit + static StackTracePrinter *PlatformInit(); + protected: ~StackTracePrinter() {} }; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_markup.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_markup.cpp index 6402cfd7c36e443..ef3866a4bd32ac8 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_markup.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_markup.cpp @@ -76,27 +76,29 @@ bool Symbolizer::SymbolizeData(uptr addr, DataInfo *info) { return true; } -// We ignore the format argument to __sanitizer_symbolize_global. -void FormattedStackTracePrinter::RenderData(InternalScopedString *buffer, - const char *format, - const DataInfo *DI, - const char *strip_path_prefix) { - buffer->AppendF(kFormatData, DI->start); -} - -bool FormattedStackTracePrinter::RenderNeedsSymbolization(const char *format) { - return false; -} - -// We don't support the stack_trace_format flag at all. -void FormattedStackTracePrinter::RenderFrame(InternalScopedString *buffer, - const char *format, int frame_no, - uptr address, - const AddressInfo *info, - bool vs_style, - const char *strip_path_prefix) { - CHECK(!RenderNeedsSymbolization(format)); - buffer->AppendF(kFormatFrame, frame_no, address); +class MarkupStackTracePrinter : public StackTracePrinter { + // We ignore the format argument to __sanitizer_symbolize_global. + void RenderData(InternalScopedString *buffer, const char *format, + const DataInfo *DI, const char *strip_path_prefix) override { + buffer->AppendF(kFormatData, DI->start); + } + + bool RenderNeedsSymbolization(const char *format) override { return false; } + + // We don't support the stack_trace_format flag at all. + void RenderFrame(InternalScopedString *buffer, const char *format, + int frame_no, uptr address, const AddressInfo *info, + bool vs_style, const char *strip_path_prefix) override { + CHECK(!RenderNeedsSymbolization(format)); + buffer->AppendF(kFormatFrame, frame_no, address); + } + + protected: + ~MarkupStackTracePrinter(); +}; + +StackTracePrinter *StackTracePrinter::PlatformInit() { + return new (GetGlobalLowLevelAllocator()) MarkupStackTracePrinter(); } Symbolizer *Symbolizer::PlatformInit() { `````````` </details> https://github.com/llvm/llvm-project/pull/73040 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits