msan.h revision c2918bf11fc65b1f9551eee03719e9bdf02eedd5
1//===-- msan.h --------------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file is a part of MemorySanitizer. 11// 12// Private MSan header. 13//===----------------------------------------------------------------------===// 14 15#ifndef MSAN_H 16#define MSAN_H 17 18#include "sanitizer_common/sanitizer_flags.h" 19#include "sanitizer_common/sanitizer_internal_defs.h" 20#include "sanitizer_common/sanitizer_stacktrace.h" 21#include "msan_interface_internal.h" 22#include "msan_flags.h" 23 24#ifndef MSAN_REPLACE_OPERATORS_NEW_AND_DELETE 25# define MSAN_REPLACE_OPERATORS_NEW_AND_DELETE 1 26#endif 27 28#define MEM_TO_SHADOW(mem) (((uptr)mem) & ~0x400000000000ULL) 29#define MEM_TO_ORIGIN(mem) (MEM_TO_SHADOW(mem) + 0x200000000000ULL) 30#define MEM_IS_APP(mem) ((uptr)mem >= 0x600000000000ULL) 31#define MEM_IS_SHADOW(mem) ((uptr)mem >= 0x200000000000ULL && \ 32 (uptr)mem <= 0x400000000000ULL) 33 34struct link_map; // Opaque type returned by dlopen(). 35 36const int kMsanParamTlsSizeInWords = 100; 37const int kMsanRetvalTlsSizeInWords = 100; 38 39namespace __msan { 40extern int msan_inited; 41extern bool msan_init_is_running; 42extern int msan_report_count; 43 44bool ProtectRange(uptr beg, uptr end); 45bool InitShadow(bool prot1, bool prot2, bool map_shadow, bool init_origins); 46char *GetProcSelfMaps(); 47void InitializeInterceptors(); 48 49void *MsanReallocate(StackTrace *stack, void *oldp, uptr size, 50 uptr alignment, bool zeroise); 51void MsanDeallocate(void *ptr); 52void InstallTrapHandler(); 53void InstallAtExitHandler(); 54void ReplaceOperatorsNewAndDelete(); 55 56void EnterSymbolizer(); 57void ExitSymbolizer(); 58bool IsInSymbolizer(); 59 60struct SymbolizerScope { 61 SymbolizerScope() { EnterSymbolizer(); } 62 ~SymbolizerScope() { ExitSymbolizer(); } 63}; 64 65void EnterLoader(); 66void ExitLoader(); 67 68void MsanDie(); 69void PrintWarning(uptr pc, uptr bp); 70void PrintWarningWithOrigin(uptr pc, uptr bp, u32 origin); 71 72void GetStackTrace(StackTrace *stack, uptr max_s, uptr pc, uptr bp, 73 bool fast); 74 75void ReportUMR(StackTrace *stack, u32 origin); 76void ReportExpectedUMRNotFound(StackTrace *stack); 77void ReportAtExitStatistics(); 78 79void UnpoisonMappedDSO(struct link_map *map); 80// Unpoison first n function arguments. 81void UnpoisonParam(uptr n); 82 83#define GET_MALLOC_STACK_TRACE \ 84 StackTrace stack; \ 85 stack.size = 0; \ 86 if (__msan_get_track_origins() && msan_inited) \ 87 GetStackTrace(&stack, common_flags()->malloc_context_size, \ 88 StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), \ 89 common_flags()->fast_unwind_on_malloc) 90 91} // namespace __msan 92 93#endif // MSAN_H 94