forked from OSchip/llvm-project
[msan] Add store_context_size= flag.
A new flag to control stack trace size for store event (in track-origins=2 mode) independently of malloc_context_size. llvm-svn: 211896
This commit is contained in:
parent
c237a1a2e3
commit
c935ca8c3c
|
@ -145,6 +145,8 @@ static void ParseFlagsFromString(Flags *f, const char *str) {
|
||||||
ParseFlag(str, &f->wrap_signals, "wrap_signals", "");
|
ParseFlag(str, &f->wrap_signals, "wrap_signals", "");
|
||||||
ParseFlag(str, &f->print_stats, "print_stats", "");
|
ParseFlag(str, &f->print_stats, "print_stats", "");
|
||||||
ParseFlag(str, &f->atexit, "atexit", "");
|
ParseFlag(str, &f->atexit, "atexit", "");
|
||||||
|
ParseFlag(str, &f->store_context_size, "store_context_size", "");
|
||||||
|
if (f->store_context_size < 1) f->store_context_size = 1;
|
||||||
|
|
||||||
// keep_going is an old name for halt_on_error,
|
// keep_going is an old name for halt_on_error,
|
||||||
// and it has inverse meaning.
|
// and it has inverse meaning.
|
||||||
|
@ -177,6 +179,7 @@ static void InitializeFlags(Flags *f, const char *options) {
|
||||||
f->print_stats = false;
|
f->print_stats = false;
|
||||||
f->atexit = false;
|
f->atexit = false;
|
||||||
f->halt_on_error = !&__msan_keep_going;
|
f->halt_on_error = !&__msan_keep_going;
|
||||||
|
f->store_context_size = 20;
|
||||||
|
|
||||||
// Override from user-specified string.
|
// Override from user-specified string.
|
||||||
if (__msan_default_options)
|
if (__msan_default_options)
|
||||||
|
|
|
@ -104,12 +104,12 @@ u32 ChainOrigin(u32 id, StackTrace *stack);
|
||||||
StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), \
|
StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), \
|
||||||
common_flags()->fast_unwind_on_malloc)
|
common_flags()->fast_unwind_on_malloc)
|
||||||
|
|
||||||
#define GET_STORE_STACK_TRACE_PC_BP(pc, bp) \
|
#define GET_STORE_STACK_TRACE_PC_BP(pc, bp) \
|
||||||
StackTrace stack; \
|
StackTrace stack; \
|
||||||
stack.size = 0; \
|
stack.size = 0; \
|
||||||
if (__msan_get_track_origins() > 1 && msan_inited) \
|
if (__msan_get_track_origins() > 1 && msan_inited) \
|
||||||
GetStackTrace(&stack, common_flags()->malloc_context_size, pc, bp, \
|
GetStackTrace(&stack, flags()->store_context_size, pc, bp, \
|
||||||
common_flags()->fast_unwind_on_malloc)
|
common_flags()->fast_unwind_on_malloc)
|
||||||
|
|
||||||
#define GET_FATAL_STACK_TRACE_PC_BP(pc, bp) \
|
#define GET_FATAL_STACK_TRACE_PC_BP(pc, bp) \
|
||||||
StackTrace stack; \
|
StackTrace stack; \
|
||||||
|
|
|
@ -30,6 +30,7 @@ struct Flags {
|
||||||
bool print_stats;
|
bool print_stats;
|
||||||
bool halt_on_error;
|
bool halt_on_error;
|
||||||
bool atexit;
|
bool atexit;
|
||||||
|
int store_context_size; // like malloc_context_size, but for uninit stores
|
||||||
};
|
};
|
||||||
|
|
||||||
Flags *flags();
|
Flags *flags();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// RUN: %clangxx_msan -fsanitize-memory-track-origins=2 -m64 -O3 %s -o %t && \
|
// RUN: %clangxx_msan -fsanitize-memory-track-origins=2 -m64 -O3 %s -o %t && \
|
||||||
// RUN: MSAN_OPTIONS=malloc_context_size=1 not %run %t 2>&1 | FileCheck %s
|
// RUN: MSAN_OPTIONS=store_context_size=1 not %run %t 2>&1 | FileCheck %s
|
||||||
|
|
||||||
// Test that stack trace for the intermediate store is not empty.
|
// Test that stack trace for the intermediate store is not empty.
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
// CHECK: Uninitialized value was stored to memory at
|
// CHECK: Uninitialized value was stored to memory at
|
||||||
// CHECK: #0 {{.*}} in fn_g
|
// CHECK: #0 {{.*}} in fn_g
|
||||||
|
// CHECK-NOT: #1
|
||||||
|
|
||||||
// CHECK: Uninitialized value was created by an allocation of 'z' in the stack frame of function 'main'
|
// CHECK: Uninitialized value was created by an allocation of 'z' in the stack frame of function 'main'
|
||||||
// CHECK: #0 {{.*}} in main
|
// CHECK: #0 {{.*}} in main
|
||||||
|
|
Loading…
Reference in New Issue