[TySan] Added a 'print_stacktrace' flag for more detailed errors (#121756)
Raised in issue #121697
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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
compiler-rt/test/tysan/print_stacktrace.c
Normal file
22
compiler-rt/test/tysan/print_stacktrace.c
Normal file
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user