@@ -69,8 +69,6 @@ THREADLOCAL u64 __msan_va_arg_overflow_size_tls;
69
69
SANITIZER_INTERFACE_ATTRIBUTE
70
70
THREADLOCAL u32 __msan_origin_tls;
71
71
72
- static THREADLOCAL int is_in_symbolizer;
73
-
74
72
extern " C" SANITIZER_WEAK_ATTRIBUTE const int __msan_track_origins;
75
73
76
74
int __msan_get_track_origins () {
@@ -81,15 +79,19 @@ extern "C" SANITIZER_WEAK_ATTRIBUTE const int __msan_keep_going;
81
79
82
80
namespace __msan {
83
81
84
- void EnterSymbolizer () { ++is_in_symbolizer; }
85
- void ExitSymbolizer () { --is_in_symbolizer; }
86
- bool IsInSymbolizer () { return is_in_symbolizer; }
82
+ static THREADLOCAL int is_in_symbolizer_or_unwinder;
83
+ static void EnterSymbolizerOrUnwider () { ++is_in_symbolizer_or_unwinder; }
84
+ static void ExitSymbolizerOrUnwider () { --is_in_symbolizer_or_unwinder; }
85
+ bool IsInSymbolizerOrUnwider () { return is_in_symbolizer_or_unwinder; }
86
+
87
+ struct UnwinderScope {
88
+ UnwinderScope () { EnterSymbolizerOrUnwider (); }
89
+ ~UnwinderScope () { ExitSymbolizerOrUnwider (); }
90
+ };
87
91
88
92
static Flags msan_flags;
89
93
90
- Flags *flags () {
91
- return &msan_flags;
92
- }
94
+ Flags *flags () { return &msan_flags; }
93
95
94
96
int msan_inited = 0 ;
95
97
bool msan_init_is_running;
@@ -301,15 +303,15 @@ u32 ChainOrigin(u32 id, StackTrace *stack) {
301
303
return chained.raw_id ();
302
304
}
303
305
304
- } // namespace __msan
306
+ } // namespace __msan
305
307
306
308
void __sanitizer::BufferedStackTrace::UnwindImpl (
307
309
uptr pc, uptr bp, void *context, bool request_fast, u32 max_depth) {
308
310
using namespace __msan ;
309
311
MsanThread *t = GetCurrentThread ();
310
312
if (!t || !StackTrace::WillUseFastUnwind (request_fast)) {
311
313
// Block reports from our interceptors during _Unwind_Backtrace.
312
- SymbolizerScope sym_scope;
314
+ UnwinderScope sym_scope;
313
315
return Unwind (max_depth, pc, bp, context, t ? t->stack_top () : 0 ,
314
316
t ? t->stack_bottom () : 0 , false );
315
317
}
@@ -462,7 +464,8 @@ void __msan_init() {
462
464
Die ();
463
465
}
464
466
465
- Symbolizer::GetOrInit ()->AddHooks (EnterSymbolizer, ExitSymbolizer);
467
+ Symbolizer::GetOrInit ()->AddHooks (EnterSymbolizerOrUnwider,
468
+ ExitSymbolizerOrUnwider);
466
469
467
470
InitializeCoverage (common_flags ()->coverage , common_flags ()->coverage_dir );
468
471
0 commit comments