1//===-- dfsan.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 DataFlowSanitizer. 11// 12// Private DFSan header. 13//===----------------------------------------------------------------------===// 14 15#ifndef DFSAN_H 16#define DFSAN_H 17 18#include "sanitizer_common/sanitizer_internal_defs.h" 19#include "dfsan_platform.h" 20 21// Copy declarations from public sanitizer/dfsan_interface.h header here. 22typedef u16 dfsan_label; 23 24struct dfsan_label_info { 25 dfsan_label l1; 26 dfsan_label l2; 27 const char *desc; 28 void *userdata; 29}; 30 31extern "C" { 32void dfsan_add_label(dfsan_label label, void *addr, uptr size); 33void dfsan_set_label(dfsan_label label, void *addr, uptr size); 34dfsan_label dfsan_read_label(const void *addr, uptr size); 35dfsan_label dfsan_union(dfsan_label l1, dfsan_label l2); 36} // extern "C" 37 38template <typename T> 39void dfsan_set_label(dfsan_label label, T &data) { // NOLINT 40 dfsan_set_label(label, (void *)&data, sizeof(T)); 41} 42 43namespace __dfsan { 44 45void InitializeInterceptors(); 46 47inline dfsan_label *shadow_for(void *ptr) { 48 return (dfsan_label *) ((((uptr) ptr) & ShadowMask()) << 1); 49} 50 51inline const dfsan_label *shadow_for(const void *ptr) { 52 return shadow_for(const_cast<void *>(ptr)); 53} 54 55struct Flags { 56#define DFSAN_FLAG(Type, Name, DefaultValue, Description) Type Name; 57#include "dfsan_flags.inc" 58#undef DFSAN_FLAG 59 60 void SetDefaults(); 61}; 62 63extern Flags flags_data; 64inline Flags &flags() { 65 return flags_data; 66} 67 68} // namespace __dfsan 69 70#endif // DFSAN_H 71