Skip to content

Commit

Permalink
[TySan] Added a 'print_stacktrace' flag for more detailed errors (llv…
Browse files Browse the repository at this point in the history
…m#121756)

Raised in issue llvm#121697
  • Loading branch information
gbMattN authored and shenhanc78 committed Jan 8, 2025
1 parent 9d06651 commit 5f1bd29
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
6 changes: 5 additions & 1 deletion compiler-rt/lib/tysan/tysan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,10 +197,14 @@ static void reportError(void *Addr, int Size, tysan_type_descriptor *TD,
Printf("\n");

if (pc) {
uptr top = 0;
uptr bottom = 0;
if (flags().print_stacktrace)
GetThreadStackTopAndBottom(false, &top, &bottom);

bool request_fast = StackTrace::WillUseFastUnwind(true);
BufferedStackTrace ST;
ST.Unwind(kStackTraceMax, pc, bp, 0, 0, 0, request_fast);
ST.Unwind(kStackTraceMax, pc, bp, 0, top, bottom, request_fast);
ST.Print();
} else {
Printf("\n");
Expand Down
3 changes: 3 additions & 0 deletions compiler-rt/lib/tysan/tysan_flags.inc
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@

// TYSAN_FLAG(Type, Name, DefaultValue, Description)
// See COMMON_FLAG in sanitizer_flags.inc for more details.

TYSAN_FLAG(bool, print_stacktrace, false,
"Include full stacktrace into an error report")
22 changes: 22 additions & 0 deletions compiler-rt/test/tysan/print_stacktrace.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// RUN: %clang_tysan -O0 %s -o %t && %run %t >%t.out 2>&1
// RUN: FileCheck --check-prefixes=CHECK,CHECK-SHORT %s < %t.out

// RUN: %env_tysan_opts=print_stacktrace=1 %run %t >%t.out 2>&1
// RUN: FileCheck --check-prefixes=CHECK,CHECK-LONG %s < %t.out

float *P;
void zero_array() {
int i;
for (i = 0; i < 1; ++i)
P[i] = 0.0f;
// CHECK: ERROR: TypeSanitizer: type-aliasing-violation
// CHECK: WRITE of size 4 at {{.*}} with type float accesses an existing object of type p1 float
// CHECK: {{#0 0x.* in zero_array .*print_stacktrace.c:}}[[@LINE-3]]
// CHECK-SHORT-NOT: {{#1 0x.* in main .*print_stacktrace.c}}
// CHECK-LONG-NEXT: {{#1 0x.* in main .*print_stacktrace.c}}
}

int main() {
P = (float *)&P;
zero_array();
}

0 comments on commit 5f1bd29

Please sign in to comment.