Sanitizers.def revision 296417
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
50243791Sdim// ThreadSanitizer
51243791SdimSANITIZER("thread", Thread)
52243791Sdim
53261991Sdim// LeakSanitizer
54261991SdimSANITIZER("leak", Leak)
55261991Sdim
56243791Sdim// UndefinedBehaviorSanitizer
57249423SdimSANITIZER("alignment", Alignment)
58261991SdimSANITIZER("array-bounds", ArrayBounds)
59249423SdimSANITIZER("bool", Bool)
60249423SdimSANITIZER("enum", Enum)
61249423SdimSANITIZER("float-cast-overflow", FloatCastOverflow)
62249423SdimSANITIZER("float-divide-by-zero", FloatDivideByZero)
63261991SdimSANITIZER("function", Function)
64249423SdimSANITIZER("integer-divide-by-zero", IntegerDivideByZero)
65280031SdimSANITIZER("nonnull-attribute", NonnullAttribute)
66249423SdimSANITIZER("null", Null)
67249423SdimSANITIZER("object-size", ObjectSize)
68249423SdimSANITIZER("return", Return)
69280031SdimSANITIZER("returns-nonnull-attribute", ReturnsNonnullAttribute)
70288943SdimSANITIZER("shift-base", ShiftBase)
71288943SdimSANITIZER("shift-exponent", ShiftExponent)
72288943SdimSANITIZER_GROUP("shift", Shift, ShiftBase | ShiftExponent)
73243791SdimSANITIZER("signed-integer-overflow", SignedIntegerOverflow)
74243791SdimSANITIZER("unreachable", Unreachable)
75243791SdimSANITIZER("vla-bound", VLABound)
76243791SdimSANITIZER("vptr", Vptr)
77243791Sdim
78249423Sdim// IntegerSanitizer
79249423SdimSANITIZER("unsigned-integer-overflow", UnsignedIntegerOverflow)
80249423Sdim
81261991Sdim// DataFlowSanitizer
82261991SdimSANITIZER("dataflow", DataFlow)
83261991Sdim
84288943Sdim// Control Flow Integrity
85288943SdimSANITIZER("cfi-cast-strict", CFICastStrict)
86288943SdimSANITIZER("cfi-derived-cast", CFIDerivedCast)
87296417SdimSANITIZER("cfi-icall", CFIICall)
88288943SdimSANITIZER("cfi-unrelated-cast", CFIUnrelatedCast)
89288943SdimSANITIZER("cfi-nvcall", CFINVCall)
90288943SdimSANITIZER("cfi-vcall", CFIVCall)
91288943SdimSANITIZER_GROUP("cfi", CFI,
92296417Sdim                CFIDerivedCast | CFIICall | CFIUnrelatedCast | CFINVCall |
93296417Sdim                CFIVCall)
94288943Sdim
95288943Sdim// Safe Stack
96288943SdimSANITIZER("safe-stack", SafeStack)
97288943Sdim
98249423Sdim// -fsanitize=undefined includes all the sanitizers which have low overhead, no
99249423Sdim// ABI or address space layout implications, and only catch undefined behavior.
100243791SdimSANITIZER_GROUP("undefined", Undefined,
101261991Sdim                Alignment | Bool | ArrayBounds | Enum | FloatCastOverflow |
102280031Sdim                    FloatDivideByZero | IntegerDivideByZero | NonnullAttribute |
103280031Sdim                    Null | ObjectSize | Return | ReturnsNonnullAttribute |
104288943Sdim                    Shift | SignedIntegerOverflow | Unreachable | VLABound |
105288943Sdim                    Function | Vptr)
106249423Sdim
107288943Sdim// -fsanitize=undefined-trap is an alias for -fsanitize=undefined.
108288943SdimSANITIZER_GROUP("undefined-trap", UndefinedTrap, Undefined)
109288943Sdim
110249423SdimSANITIZER_GROUP("integer", Integer,
111249423Sdim                SignedIntegerOverflow | UnsignedIntegerOverflow | Shift |
112249423Sdim                IntegerDivideByZero)
113249423Sdim
114261991SdimSANITIZER("local-bounds", LocalBounds)
115261991SdimSANITIZER_GROUP("bounds", Bounds, ArrayBounds | LocalBounds)
116261991Sdim
117280031Sdim// Magic group, containing all sanitizers. For example, "-fno-sanitize=all"
118280031Sdim// can be used to disable all the sanitizers.
119288943SdimSANITIZER_GROUP("all", All, ~0ULL)
120280031Sdim
121243791Sdim#undef SANITIZER
122243791Sdim#undef SANITIZER_GROUP
123