1 //===-- dfsan.h -------------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is a part of DataFlowSanitizer.
12 // Private DFSan header.
13 //===----------------------------------------------------------------------===//
18 #include "sanitizer_common/sanitizer_internal_defs.h"
20 // Copy declarations from public sanitizer/dfsan_interface.h header here.
21 typedef u16 dfsan_label
;
23 struct dfsan_label_info
{
31 void dfsan_set_label(dfsan_label label
, void *addr
, uptr size
);
32 dfsan_label
dfsan_read_label(const void *addr
, uptr size
);
33 dfsan_label
dfsan_union(dfsan_label l1
, dfsan_label l2
);
37 void dfsan_set_label(dfsan_label label
, T
&data
) { // NOLINT
38 dfsan_set_label(label
, (void *)&data
, sizeof(T
));
43 void InitializeInterceptors();
45 inline dfsan_label
*shadow_for(void *ptr
) {
46 return (dfsan_label
*) ((((uptr
) ptr
) & ~0x700000000000) << 1);
49 inline const dfsan_label
*shadow_for(const void *ptr
) {
50 return shadow_for(const_cast<void *>(ptr
));
54 // Whether to warn on unimplemented functions.
55 bool warn_unimplemented
;
56 // Whether to warn on non-zero labels.
57 bool warn_nonzero_labels
;
58 // Whether to propagate labels only when there is an obvious data dependency
59 // (e.g., when comparing strings, ignore the fact that the output of the
60 // comparison might be data-dependent on the content of the strings). This
61 // applies only to the custom functions defined in 'custom.c'.
62 bool strict_data_dependencies
;
65 extern Flags flags_data
;
66 inline Flags
&flags() {
70 } // namespace __dfsan