Lines Matching +full:x +full:- +full:origin

1 //===-- msan.cpp ----------------------------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
42 // Function argument shadow. Each argument starts at the next available 8-byte
47 // Function argument origin. Each argument starts at the same offset as the
83 static void ExitSymbolizerOrUnwider() { --is_in_symbolizer_or_unwinder; } in ExitSymbolizerOrUnwider()
104 // ... is not in [-2147483648, 2147483647]; references section '.bss'").
146 RegisterFlag(parser, #Name, Description, &f->Name); in RegisterMsanFlags()
151 FlagHandlerKeepGoing(&f->halt_on_error); in RegisterMsanFlags()
152 parser->RegisterHandler("keep_going", fh_keep_going, in RegisterMsanFlags()
171 f->SetDefaults(); in InitializeFlags()
179 uf->SetDefaults(); in InitializeFlags()
186 // Override from user-specified string. in InitializeFlags()
202 if (common_flags()->help) parser.PrintFlagDescriptions(); in InitializeFlags()
205 if (f->exit_code != -1) { in InitializeFlags()
211 cf.exitcode = f->exit_code; in InitializeFlags()
216 if (f->origin_history_size < 0 || in InitializeFlags()
217 f->origin_history_size > Origin::kMaxDepth) { in InitializeFlags()
219 "Origin history size invalid: %d. Must be 0 (unlimited) or in [1, %d] " in InitializeFlags()
221 f->origin_history_size, Origin::kMaxDepth); in InitializeFlags()
226 if (f->origin_history_per_stack_limit < 0 || in InitializeFlags()
227 f->origin_history_per_stack_limit > kStackDepotMaxUseCount / 2) { in InitializeFlags()
229 "Origin per-stack limit invalid: %d. Must be 0 (unlimited) or in [1, " in InitializeFlags()
231 f->origin_history_per_stack_limit, kStackDepotMaxUseCount / 2); in InitializeFlags()
234 if (f->store_context_size < 1) f->store_context_size = 1; in InitializeFlags()
237 void PrintWarningWithOrigin(uptr pc, uptr bp, u32 origin) { in PrintWarningWithOrigin() argument
240 __msan_origin_tls = origin; in PrintWarningWithOrigin()
250 (__msan_get_track_origins() && Origin::isValidId(origin)) ? origin : 0; in PrintWarningWithOrigin()
253 if (__msan_get_track_origins() && !Origin::isValidId(origin)) { in PrintWarningWithOrigin()
255 " ORIGIN: invalid (%x). Might be a bug in MemorySanitizer origin " in PrintWarningWithOrigin()
257 origin); in PrintWarningWithOrigin()
266 // Implementation must be async-signal-safe.
302 if (t && t->InSignalHandler()) in ChainOrigin()
305 Origin o = Origin::FromRawId(id); in ChainOrigin()
306 stack->tag = StackTrace::TAG_UNKNOWN; in ChainOrigin()
307 Origin chained = Origin::CreateChainedOrigin(o, stack); in ChainOrigin()
314 // '----' in the beginning. When we see descr for the first time we replace
315 // '----' with a uniq id and set the origin to (id | (31-th bit)).
318 static const u32 dash = '-'; in SetAllocaOrigin()
327 id = Origin::CreateStackOrigin(idx).raw_id(); in SetAllocaOrigin()
342 return Unwind(max_depth, pc, bp, context, t ? t->stack_top() : 0, in UnwindImpl()
343 t ? t->stack_bottom() : 0, false); in UnwindImpl()
346 Unwind(max_depth, pc, bp, nullptr, t->stack_top(), t->stack_bottom(), true); in UnwindImpl()
360 if (__msan::flags()->halt_on_error) { \
392 if (__msan::flags()->halt_on_error) { in __msan_warning()
393 if (__msan::flags()->print_stats) in __msan_warning()
403 if (__msan::flags()->print_stats) in __msan_warning_noreturn()
409 void __msan_warning_with_origin(u32 origin) { in __msan_warning_with_origin() argument
411 PrintWarningWithOrigin(pc, bp, origin); in __msan_warning_with_origin()
412 if (__msan::flags()->halt_on_error) { in __msan_warning_with_origin()
413 if (__msan::flags()->print_stats) in __msan_warning_with_origin()
420 void __msan_warning_with_origin_noreturn(u32 origin) { in __msan_warning_with_origin_noreturn() argument
422 PrintWarningWithOrigin(pc, bp, origin); in __msan_warning_with_origin_noreturn()
423 if (__msan::flags()->print_stats) in __msan_warning_with_origin_noreturn()
431 stack->Unwind(StackTrace::GetNextInstructionPc(sig.pc), sig.bp, sig.context, in OnStackUnwind()
432 common_flags()->fast_unwind_on_fatal); in OnStackUnwind()
455 // Install tool-specific callbacks in sanitizer_common. in __msan_init()
458 __sanitizer_set_report_path(common_flags()->log_path); in __msan_init()
481 Printf("FATAL: Make sure to compile with -fPIE and to link with -pie.\n"); in __msan_init()
484 "'set disable-randomization off'.\n"); in __msan_init()
489 Symbolizer::GetOrInit()->AddHooks(EnterSymbolizerOrUnwider, in __msan_init()
492 InitializeCoverage(common_flags()->coverage, common_flags()->coverage_dir); in __msan_init()
500 main_thread->Init(); in __msan_init()
513 flags()->halt_on_error = !keep_going; in __msan_set_keep_going()
528 void __msan_print_shadow(const void *x, uptr size) { in __msan_print_shadow() argument
529 if (!MEM_IS_APP(x)) { in __msan_print_shadow()
530 Printf("Not a valid application address: %p\n", x); in __msan_print_shadow()
534 DescribeMemoryRange(x, size); in __msan_print_shadow()
537 void __msan_dump_shadow(const void *x, uptr size) { in __msan_dump_shadow() argument
538 if (!MEM_IS_APP(x)) { in __msan_dump_shadow()
539 Printf("Not a valid application address: %p\n", x); in __msan_dump_shadow()
543 unsigned char *s = (unsigned char*)MEM_TO_SHADOW(x); in __msan_dump_shadow()
544 Printf("%p[%p] ", (void *)s, x); in __msan_dump_shadow()
546 Printf("%x%x ", s[i] >> 4, s[i] & 0xf); in __msan_dump_shadow()
550 sptr __msan_test_shadow(const void *x, uptr size) { in __msan_test_shadow() argument
551 if (!MEM_IS_APP(x)) return -1; in __msan_test_shadow()
552 unsigned char *s = (unsigned char *)MEM_TO_SHADOW((uptr)x); in __msan_test_shadow()
554 return -1; in __msan_test_shadow()
559 return -1; in __msan_test_shadow()
562 void __msan_check_mem_is_initialized(const void *x, uptr size) { in __msan_check_mem_is_initialized() argument
563 if (!__msan::flags()->report_umrs) return; in __msan_check_mem_is_initialized()
564 sptr offset = __msan_test_shadow(x, size); in __msan_check_mem_is_initialized()
569 ReportUMRInsideAddressRange(__func__, x, size, offset); in __msan_check_mem_is_initialized()
571 __msan_get_origin(((const char *)x) + offset)); in __msan_check_mem_is_initialized()
572 if (__msan::flags()->halt_on_error) { in __msan_check_mem_is_initialized()
579 int old = flags()->poison_in_malloc; in __msan_set_poison_in_malloc()
580 flags()->poison_in_malloc = do_poison; in __msan_set_poison_in_malloc()
600 void __msan_set_origin(const void *a, uptr size, u32 origin) { in __msan_set_origin() argument
601 if (__msan_get_track_origins()) SetOrigin(a, size, origin); in __msan_set_origin()
634 uptr x = (uptr)a; in __msan_get_origin() local
635 uptr aligned = x & ~3ULL; in __msan_get_origin()
641 Origin o = Origin::FromRawId(this_id); in __msan_origin_is_descendant_or_same()
672 void __sanitizer_unaligned_store16(uu16 *p, u16 x) { in __sanitizer_unaligned_store16() argument
680 *p = x; in __sanitizer_unaligned_store16()
682 void __sanitizer_unaligned_store32(uu32 *p, u32 x) { in __sanitizer_unaligned_store32() argument
690 *p = x; in __sanitizer_unaligned_store32()
692 void __sanitizer_unaligned_store64(uu64 *p, u64 x) { in __sanitizer_unaligned_store64() argument
698 *p = x; in __sanitizer_unaligned_store64()
711 t->StartSwitchFiber((uptr)bottom, size); in __msan_start_switch_fiber()
720 t->FinishSwitchFiber((uptr *)bottom_old, (uptr *)size_old); in __msan_finish_switch_fiber()