Sanitizers.def revision 321369
1243791Sdim//===--- Sanitizers.def - Runtime sanitizer options -------------*- C++ -*-===//
2243791Sdim//
3243791Sdim//                     The LLVM Compiler Infrastructure
4243791Sdim//
5243791Sdim// This file is distributed under the University of Illinois Open Source
6243791Sdim// License. See LICENSE.TXT for details.
7243791Sdim//
8243791Sdim//===----------------------------------------------------------------------===//
9243791Sdim//
10243791Sdim// This file defines the options for specifying which runtime sanitizers to
11243791Sdim// enable. Users of this file must define the SANITIZER macro to make use of
12243791Sdim// this information. Users of this file can also define the SANITIZER_GROUP
13243791Sdim// macro to get information on options which refer to sets of sanitizers.
14243791Sdim//
15243791Sdim//===----------------------------------------------------------------------===//
16243791Sdim
17243791Sdim#ifndef SANITIZER
18243791Sdim#error "Define SANITIZER prior to including this file!"
19243791Sdim#endif
20243791Sdim
21243791Sdim// SANITIZER(NAME, ID)
22243791Sdim
23243791Sdim// The first value is the name of the sanitizer as a string. The sanitizer can
24243791Sdim// be enabled by specifying -fsanitize=NAME.
25243791Sdim
26243791Sdim// The second value is an identifier which can be used to refer to the
27243791Sdim// sanitizer.
28243791Sdim
29243791Sdim
30243791Sdim// SANITIZER_GROUP(NAME, ID, ALIAS)
31243791Sdim
32243791Sdim// The first two values have the same semantics as the corresponding SANITIZER
33243791Sdim// values. The third value is an expression ORing together the IDs of individual
34243791Sdim// sanitizers in this group.
35243791Sdim
36243791Sdim#ifndef SANITIZER_GROUP
37243791Sdim#define SANITIZER_GROUP(NAME, ID, ALIAS)
38243791Sdim#endif
39243791Sdim
40243791Sdim
41243791Sdim// AddressSanitizer
42243791SdimSANITIZER("address", Address)
43243791Sdim
44288943Sdim// Kernel AddressSanitizer (KASan)
45288943SdimSANITIZER("kernel-address", KernelAddress)
46288943Sdim
47249423Sdim// MemorySanitizer
48249423SdimSANITIZER("memory", Memory)
49249423Sdim
50321369Sdim// libFuzzer
51321369SdimSANITIZER("fuzzer", Fuzzer)
52321369Sdim
53243791Sdim// ThreadSanitizer
54243791SdimSANITIZER("thread", Thread)
55243791Sdim
56261991Sdim// LeakSanitizer
57261991SdimSANITIZER("leak", Leak)
58261991Sdim
59243791Sdim// UndefinedBehaviorSanitizer
60249423SdimSANITIZER("alignment", Alignment)
61261991SdimSANITIZER("array-bounds", ArrayBounds)
62249423SdimSANITIZER("bool", Bool)
63249423SdimSANITIZER("enum", Enum)
64249423SdimSANITIZER("float-cast-overflow", FloatCastOverflow)
65249423SdimSANITIZER("float-divide-by-zero", FloatDivideByZero)
66261991SdimSANITIZER("function", Function)
67249423SdimSANITIZER("integer-divide-by-zero", IntegerDivideByZero)
68280031SdimSANITIZER("nonnull-attribute", NonnullAttribute)
69249423SdimSANITIZER("null", Null)
70321369SdimSANITIZER("nullability-arg", NullabilityArg)
71321369SdimSANITIZER("nullability-assign", NullabilityAssign)
72321369SdimSANITIZER("nullability-return", NullabilityReturn)
73321369SdimSANITIZER_GROUP("nullability", Nullability,
74321369Sdim                NullabilityArg | NullabilityAssign | NullabilityReturn)
75249423SdimSANITIZER("object-size", ObjectSize)
76321369SdimSANITIZER("pointer-overflow", PointerOverflow)
77249423SdimSANITIZER("return", Return)
78280031SdimSANITIZER("returns-nonnull-attribute", ReturnsNonnullAttribute)
79288943SdimSANITIZER("shift-base", ShiftBase)
80288943SdimSANITIZER("shift-exponent", ShiftExponent)
81288943SdimSANITIZER_GROUP("shift", Shift, ShiftBase | ShiftExponent)
82243791SdimSANITIZER("signed-integer-overflow", SignedIntegerOverflow)
83243791SdimSANITIZER("unreachable", Unreachable)
84243791SdimSANITIZER("vla-bound", VLABound)
85243791SdimSANITIZER("vptr", Vptr)
86243791Sdim
87249423Sdim// IntegerSanitizer
88249423SdimSANITIZER("unsigned-integer-overflow", UnsignedIntegerOverflow)
89249423Sdim
90261991Sdim// DataFlowSanitizer
91261991SdimSANITIZER("dataflow", DataFlow)
92261991Sdim
93288943Sdim// Control Flow Integrity
94288943SdimSANITIZER("cfi-cast-strict", CFICastStrict)
95288943SdimSANITIZER("cfi-derived-cast", CFIDerivedCast)
96296417SdimSANITIZER("cfi-icall", CFIICall)
97288943SdimSANITIZER("cfi-unrelated-cast", CFIUnrelatedCast)
98288943SdimSANITIZER("cfi-nvcall", CFINVCall)
99288943SdimSANITIZER("cfi-vcall", CFIVCall)
100288943SdimSANITIZER_GROUP("cfi", CFI,
101296417Sdim                CFIDerivedCast | CFIICall | CFIUnrelatedCast | CFINVCall |
102296417Sdim                CFIVCall)
103288943Sdim
104288943Sdim// Safe Stack
105288943SdimSANITIZER("safe-stack", SafeStack)
106288943Sdim
107249423Sdim// -fsanitize=undefined includes all the sanitizers which have low overhead, no
108249423Sdim// ABI or address space layout implications, and only catch undefined behavior.
109243791SdimSANITIZER_GROUP("undefined", Undefined,
110261991Sdim                Alignment | Bool | ArrayBounds | Enum | FloatCastOverflow |
111280031Sdim                    FloatDivideByZero | IntegerDivideByZero | NonnullAttribute |
112321369Sdim                    Null | ObjectSize | PointerOverflow | Return |
113321369Sdim                    ReturnsNonnullAttribute | Shift | SignedIntegerOverflow |
114321369Sdim                    Unreachable | VLABound | Function | Vptr)
115249423Sdim
116288943Sdim// -fsanitize=undefined-trap is an alias for -fsanitize=undefined.
117288943SdimSANITIZER_GROUP("undefined-trap", UndefinedTrap, Undefined)
118288943Sdim
119249423SdimSANITIZER_GROUP("integer", Integer,
120249423Sdim                SignedIntegerOverflow | UnsignedIntegerOverflow | Shift |
121249423Sdim                IntegerDivideByZero)
122249423Sdim
123261991SdimSANITIZER("local-bounds", LocalBounds)
124261991SdimSANITIZER_GROUP("bounds", Bounds, ArrayBounds | LocalBounds)
125261991Sdim
126309124Sdim// EfficiencySanitizer
127309124SdimSANITIZER("efficiency-cache-frag", EfficiencyCacheFrag)
128309124SdimSANITIZER("efficiency-working-set", EfficiencyWorkingSet)
129309124Sdim// Meta-group only used internally.
130309124SdimSANITIZER_GROUP("efficiency-all", Efficiency,
131309124Sdim                EfficiencyCacheFrag | EfficiencyWorkingSet)
132309124Sdim
133280031Sdim// Magic group, containing all sanitizers. For example, "-fno-sanitize=all"
134280031Sdim// can be used to disable all the sanitizers.
135288943SdimSANITIZER_GROUP("all", All, ~0ULL)
136280031Sdim
137243791Sdim#undef SANITIZER
138243791Sdim#undef SANITIZER_GROUP
139