• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- ubsan_handlers_cxx.h ------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Entry points to the runtime library for Clang's undefined behavior sanitizer,
11 // for C++-specific checks. This code is not linked into C binaries.
12 //
13 //===----------------------------------------------------------------------===//
14 #ifndef UBSAN_HANDLERS_CXX_H
15 #define UBSAN_HANDLERS_CXX_H
16 
17 #include "ubsan_value.h"
18 
19 namespace __ubsan {
20 
21 struct DynamicTypeCacheMissData {
22   SourceLocation Loc;
23   const TypeDescriptor &Type;
24   void *TypeInfo;
25   unsigned char TypeCheckKind;
26 };
27 
28 struct CFIBadTypeData {
29   SourceLocation Loc;
30   const TypeDescriptor &Type;
31   unsigned char TypeCheckKind;
32 };
33 
34 /// \brief Handle a runtime type check failure, caused by an incorrect vptr.
35 /// When this handler is called, all we know is that the type was not in the
36 /// cache; this does not necessarily imply the existence of a bug.
37 extern "C" SANITIZER_INTERFACE_ATTRIBUTE
38 void __ubsan_handle_dynamic_type_cache_miss(
39   DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
40 extern "C" SANITIZER_INTERFACE_ATTRIBUTE
41 void __ubsan_handle_dynamic_type_cache_miss_abort(
42   DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
43 
44 /// \brief Handle a control flow integrity check failure by printing a
45 /// diagnostic.
46 extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
47 __ubsan_handle_cfi_bad_type(CFIBadTypeData *Data, ValueHandle Vtable);
48 extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
49 __ubsan_handle_cfi_bad_type_abort(CFIBadTypeData *Data, ValueHandle Vtable);
50 
51 }
52 
53 #endif // UBSAN_HANDLERS_H
54