Skip to content

Commit

Permalink
[饾榾饾椊饾椏] initial version
Browse files Browse the repository at this point in the history
Created using spr 1.3.4
  • Loading branch information
avillega committed Nov 21, 2023
2 parents f48c4d8 + 161f92a commit 1aae915
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 51 deletions.
25 changes: 15 additions & 10 deletions compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -25,15 +26,13 @@ StackTracePrinter *StackTracePrinter::GetOrInit() {
if (stacktrace_printer)
return stacktrace_printer;

stacktrace_printer =
new (GetGlobalLowLevelAllocator()) FormattedStackTracePrinter();
stacktrace_printer = StackTracePrinter::PlatformInit();

CHECK(stacktrace_printer);
return stacktrace_printer;
}

const char *FormattedStackTracePrinter::StripFunctionName(
const char *function) {
const char *StackTracePrinter::StripFunctionName(const char *function) {
if (!common_flags()->demangle)
return function;
if (!function)
Expand Down Expand Up @@ -62,6 +61,10 @@ const char *FormattedStackTracePrinter::StripFunctionName(
// 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;
Expand Down Expand Up @@ -324,9 +327,10 @@ void FormattedStackTracePrinter::RenderData(InternalScopedString *buffer,

#endif // !SANITIZER_SYMBOLIZER_MARKUP

void FormattedStackTracePrinter::RenderSourceLocation(
InternalScopedString *buffer, const char *file, int line, int column,
bool vs_style, const char *strip_path_prefix) {
void StackTracePrinter::RenderSourceLocation(InternalScopedString *buffer,
const char *file, int line,
int column, bool vs_style,
const char *strip_path_prefix) {
if (vs_style && line > 0) {
buffer->AppendF("%s(%d", StripPathPrefix(file, strip_path_prefix), line);
if (column > 0)
Expand All @@ -343,9 +347,10 @@ void FormattedStackTracePrinter::RenderSourceLocation(
}
}

void FormattedStackTracePrinter::RenderModuleLocation(
InternalScopedString *buffer, const char *module, uptr offset,
ModuleArch arch, const char *strip_path_prefix) {
void StackTracePrinter::RenderModuleLocation(InternalScopedString *buffer,
const char *module, uptr offset,
ModuleArch arch,
const char *strip_path_prefix) {
buffer->AppendF("(%s", StripPathPrefix(module, strip_path_prefix));
if (arch != kModuleArchUnknown) {
buffer->AppendF(":%s", ModuleArchToString(arch));
Expand Down
32 changes: 12 additions & 20 deletions compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ class StackTracePrinter {
public:
static StackTracePrinter *GetOrInit();

virtual const char *StripFunctionName(const char *function) = 0;
// Strip interceptor prefixes from function name.
const char *StripFunctionName(const char *function);

virtual void RenderFrame(InternalScopedString *buffer, const char *format,
int frame_no, uptr address, const AddressInfo *info,
Expand All @@ -34,28 +35,27 @@ class StackTracePrinter {

virtual bool RenderNeedsSymbolization(const char *format) = 0;

virtual void RenderSourceLocation(InternalScopedString *buffer,
const char *file, int line, int column,
bool vs_style,
const char *strip_path_prefix) = 0;
void RenderSourceLocation(InternalScopedString *buffer, const char *file,
int line, int column, bool vs_style,
const char *strip_path_prefix);

virtual void RenderModuleLocation(InternalScopedString *buffer,
const char *module, uptr offset,
ModuleArch arch,
const char *strip_path_prefix) = 0;
void RenderModuleLocation(InternalScopedString *buffer, const char *module,
uptr offset, ModuleArch arch,
const char *strip_path_prefix);
virtual void RenderData(InternalScopedString *buffer, const char *format,
const DataInfo *DI,
const char *strip_path_prefix = "") = 0;

private:
// To be called from StackTracePrinter::GetOrInit
static StackTracePrinter *PlatformInit();

protected:
~StackTracePrinter() {}
};

class FormattedStackTracePrinter : public StackTracePrinter {
public:
// Strip interceptor prefixes from function name.
const char *StripFunctionName(const char *function) override;

// Render the contents of "info" structure, which represents the contents of
// stack frame "frame_no" and appends it to the "buffer". "format" is a
// string with placeholders, which is copied to the output with
Expand Down Expand Up @@ -90,14 +90,6 @@ class FormattedStackTracePrinter : public StackTracePrinter {

bool RenderNeedsSymbolization(const char *format) override;

void RenderSourceLocation(InternalScopedString *buffer, const char *file,
int line, int column, bool vs_style,
const char *strip_path_prefix) override;

void RenderModuleLocation(InternalScopedString *buffer, const char *module,
uptr offset, ModuleArch arch,
const char *strip_path_prefix) override;

// Same as RenderFrame, but for data section (global variables).
// Accepts %s, %l from above.
// Also accepts:
Expand Down
44 changes: 23 additions & 21 deletions compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_markup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down

0 comments on commit 1aae915

Please sign in to comment.