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