Skip to content

Commit 23aabdd

Browse files
authored
[NFC][sanitizer] Move SymbolizedStackHolder into sanitizer_common (llvm#77152)
And replace most `ClearAll()` uses.
1 parent 9a95b24 commit 23aabdd

File tree

7 files changed

+40
-37
lines changed

7 files changed

+40
-37
lines changed

compiler-rt/lib/asan/asan_suppressions.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,21 +81,20 @@ bool IsStackTraceSuppressed(const StackTrace *stack) {
8181
}
8282

8383
if (suppression_ctx->HasSuppressionType(kInterceptorViaFunction)) {
84-
SymbolizedStack *frames = symbolizer->SymbolizePC(addr);
84+
SymbolizedStackHolder symbolized_stack(symbolizer->SymbolizePC(addr));
85+
const SymbolizedStack *frames = symbolized_stack.get();
8586
CHECK(frames);
86-
for (SymbolizedStack *cur = frames; cur; cur = cur->next) {
87+
for (const SymbolizedStack *cur = frames; cur; cur = cur->next) {
8788
const char *function_name = cur->info.function;
8889
if (!function_name) {
8990
continue;
9091
}
9192
// Match "interceptor_via_fun" suppressions.
9293
if (suppression_ctx->Match(function_name, kInterceptorViaFunction,
9394
&s)) {
94-
frames->ClearAll();
9595
return true;
9696
}
9797
}
98-
frames->ClearAll();
9998
}
10099
}
101100
return false;

compiler-rt/lib/hwasan/hwasan_report.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,12 +292,14 @@ static void PrintStackAllocations(const StackAllocationsRingBuffer *sa,
292292
uptr pc = record & pc_mask;
293293
frame_desc.AppendF(" record_addr:0x%zx record:0x%zx",
294294
reinterpret_cast<uptr>(record_addr), record);
295-
if (SymbolizedStack *frame = Symbolizer::GetOrInit()->SymbolizePC(pc)) {
295+
SymbolizedStackHolder symbolized_stack(
296+
Symbolizer::GetOrInit()->SymbolizePC(pc));
297+
const SymbolizedStack *frame = symbolized_stack.get();
298+
if (frame) {
296299
StackTracePrinter::GetOrInit()->RenderFrame(
297300
&frame_desc, " %F %L", 0, frame->info.address, &frame->info,
298301
common_flags()->symbolize_vs_style,
299302
common_flags()->strip_path_prefix);
300-
frame->ClearAll();
301303
}
302304
Printf("%s\n", frame_desc.data());
303305
frame_desc.clear();

compiler-rt/lib/lsan/lsan_common.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,15 @@ Suppression *LeakSuppressionContext::GetSuppressionForAddr(uptr addr) {
155155
return s;
156156

157157
// Suppress by file or function name.
158-
SymbolizedStack *frames = Symbolizer::GetOrInit()->SymbolizePC(addr);
159-
for (SymbolizedStack *cur = frames; cur; cur = cur->next) {
158+
SymbolizedStackHolder symbolized_stack(
159+
Symbolizer::GetOrInit()->SymbolizePC(addr));
160+
const SymbolizedStack *frames = symbolized_stack.get();
161+
for (const SymbolizedStack *cur = frames; cur; cur = cur->next) {
160162
if (context.Match(cur->info.function, kSuppressionLeak, &s) ||
161163
context.Match(cur->info.file, kSuppressionLeak, &s)) {
162164
break;
163165
}
164166
}
165-
frames->ClearAll();
166167
return s;
167168
}
168169

compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@ class StackTraceTextPrinter {
3333
stack_trace_fmt)) {}
3434

3535
bool ProcessAddressFrames(uptr pc) {
36-
SymbolizedStack *frames = symbolize_
37-
? Symbolizer::GetOrInit()->SymbolizePC(pc)
38-
: SymbolizedStack::New(pc);
36+
SymbolizedStackHolder symbolized_stack(
37+
symbolize_ ? Symbolizer::GetOrInit()->SymbolizePC(pc)
38+
: SymbolizedStack::New(pc));
39+
const SymbolizedStack *frames = symbolized_stack.get();
3940
if (!frames)
4041
return false;
4142

42-
for (SymbolizedStack *cur = frames; cur; cur = cur->next) {
43+
for (const SymbolizedStack *cur = frames; cur; cur = cur->next) {
4344
uptr prev_len = output_->length();
4445
StackTracePrinter::GetOrInit()->RenderFrame(
4546
output_, stack_trace_fmt_, frame_num_++, cur->info.address,
@@ -51,13 +52,12 @@ class StackTraceTextPrinter {
5152

5253
ExtendDedupToken(cur);
5354
}
54-
frames->ClearAll();
5555
return true;
5656
}
5757

5858
private:
5959
// Extend the dedup token by appending a new frame.
60-
void ExtendDedupToken(SymbolizedStack *stack) {
60+
void ExtendDedupToken(const SymbolizedStack *stack) {
6161
if (!dedup_token_)
6262
return;
6363

compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,26 @@ struct SymbolizedStack {
6464
SymbolizedStack();
6565
};
6666

67+
class SymbolizedStackHolder {
68+
SymbolizedStack *Stack;
69+
70+
void clear() {
71+
if (Stack)
72+
Stack->ClearAll();
73+
}
74+
75+
public:
76+
explicit SymbolizedStackHolder(SymbolizedStack *Stack = nullptr)
77+
: Stack(Stack) {}
78+
~SymbolizedStackHolder() { clear(); }
79+
void reset(SymbolizedStack *S = nullptr) {
80+
if (Stack != S)
81+
clear();
82+
Stack = S;
83+
}
84+
const SymbolizedStack *get() const { return Stack; }
85+
};
86+
6787
// For now, DataInfo is used to describe global variable.
6888
struct DataInfo {
6989
// Owns all the string members. Storage for them is

compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,10 @@ void ReportErrorSummary(const char *error_type, const StackTrace *stack,
102102
// Currently, we include the first stack frame into the report summary.
103103
// Maybe sometimes we need to choose another frame (e.g. skip memcpy/etc).
104104
uptr pc = StackTrace::GetPreviousInstructionPc(stack->trace[0]);
105-
SymbolizedStack *frame = Symbolizer::GetOrInit()->SymbolizePC(pc);
105+
SymbolizedStackHolder symbolized_stack(
106+
Symbolizer::GetOrInit()->SymbolizePC(pc));
107+
const SymbolizedStack *frame = symbolized_stack.get();
106108
ReportErrorSummary(error_type, frame->info, alt_tool_name);
107-
frame->ClearAll();
108109
#endif
109110
}
110111

compiler-rt/lib/ubsan/ubsan_diag.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,6 @@
1818

1919
namespace __ubsan {
2020

21-
class SymbolizedStackHolder {
22-
SymbolizedStack *Stack;
23-
24-
void clear() {
25-
if (Stack)
26-
Stack->ClearAll();
27-
}
28-
29-
public:
30-
explicit SymbolizedStackHolder(SymbolizedStack *Stack = nullptr)
31-
: Stack(Stack) {}
32-
~SymbolizedStackHolder() { clear(); }
33-
void reset(SymbolizedStack *S) {
34-
if (Stack != S)
35-
clear();
36-
Stack = S;
37-
}
38-
const SymbolizedStack *get() const { return Stack; }
39-
};
40-
4121
SymbolizedStack *getSymbolizedLocation(uptr PC);
4222

4323
inline SymbolizedStack *getCallerLocation(uptr CallerPC) {

0 commit comments

Comments
 (0)