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