xref: /aosp_15_r20/external/compiler-rt/lib/ubsan/ubsan_flags.h (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot //===-- ubsan_flags.h -------------------------------------------*- C++ -*-===//
2*7c3d14c8STreehugger Robot //
3*7c3d14c8STreehugger Robot //                     The LLVM Compiler Infrastructure
4*7c3d14c8STreehugger Robot //
5*7c3d14c8STreehugger Robot // This file is distributed under the University of Illinois Open Source
6*7c3d14c8STreehugger Robot // License. See LICENSE.TXT for details.
7*7c3d14c8STreehugger Robot //
8*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
9*7c3d14c8STreehugger Robot //
10*7c3d14c8STreehugger Robot // Runtime flags for UndefinedBehaviorSanitizer.
11*7c3d14c8STreehugger Robot //
12*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
13*7c3d14c8STreehugger Robot #ifndef UBSAN_FLAGS_H
14*7c3d14c8STreehugger Robot #define UBSAN_FLAGS_H
15*7c3d14c8STreehugger Robot 
16*7c3d14c8STreehugger Robot #include "sanitizer_common/sanitizer_internal_defs.h"
17*7c3d14c8STreehugger Robot 
18*7c3d14c8STreehugger Robot namespace __sanitizer {
19*7c3d14c8STreehugger Robot class FlagParser;
20*7c3d14c8STreehugger Robot }
21*7c3d14c8STreehugger Robot 
22*7c3d14c8STreehugger Robot namespace __ubsan {
23*7c3d14c8STreehugger Robot 
24*7c3d14c8STreehugger Robot struct Flags {
25*7c3d14c8STreehugger Robot #define UBSAN_FLAG(Type, Name, DefaultValue, Description) Type Name;
26*7c3d14c8STreehugger Robot #include "ubsan_flags.inc"
27*7c3d14c8STreehugger Robot #undef UBSAN_FLAG
28*7c3d14c8STreehugger Robot 
29*7c3d14c8STreehugger Robot   void SetDefaults();
30*7c3d14c8STreehugger Robot };
31*7c3d14c8STreehugger Robot 
32*7c3d14c8STreehugger Robot extern Flags ubsan_flags;
flags()33*7c3d14c8STreehugger Robot inline Flags *flags() { return &ubsan_flags; }
34*7c3d14c8STreehugger Robot 
35*7c3d14c8STreehugger Robot void InitializeFlags();
36*7c3d14c8STreehugger Robot void RegisterUbsanFlags(FlagParser *parser, Flags *f);
37*7c3d14c8STreehugger Robot 
38*7c3d14c8STreehugger Robot const char *MaybeCallUbsanDefaultOptions();
39*7c3d14c8STreehugger Robot 
40*7c3d14c8STreehugger Robot }  // namespace __ubsan
41*7c3d14c8STreehugger Robot 
42*7c3d14c8STreehugger Robot extern "C" {
43*7c3d14c8STreehugger Robot // Users may provide their own implementation of __ubsan_default_options to
44*7c3d14c8STreehugger Robot // override the default flag values.
45*7c3d14c8STreehugger Robot SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
46*7c3d14c8STreehugger Robot const char *__ubsan_default_options();
47*7c3d14c8STreehugger Robot }  // extern "C"
48*7c3d14c8STreehugger Robot 
49*7c3d14c8STreehugger Robot #endif  // UBSAN_FLAGS_H
50