111
|
1 //===-- ubsan_handlers_cxx.h ------------------------------------*- C++ -*-===//
|
|
2 //
|
|
3 // This file is distributed under the University of Illinois Open Source
|
|
4 // License. See LICENSE.TXT for details.
|
|
5 //
|
|
6 //===----------------------------------------------------------------------===//
|
|
7 //
|
|
8 // Entry points to the runtime library for Clang's undefined behavior sanitizer,
|
|
9 // for C++-specific checks. This code is not linked into C binaries.
|
|
10 //
|
|
11 //===----------------------------------------------------------------------===//
|
|
12 #ifndef UBSAN_HANDLERS_CXX_H
|
|
13 #define UBSAN_HANDLERS_CXX_H
|
|
14
|
|
15 #include "ubsan_value.h"
|
|
16
|
|
17 namespace __ubsan {
|
|
18
|
|
19 struct DynamicTypeCacheMissData {
|
|
20 SourceLocation Loc;
|
|
21 const TypeDescriptor &Type;
|
|
22 void *TypeInfo;
|
|
23 unsigned char TypeCheckKind;
|
|
24 };
|
|
25
|
|
26 /// \brief Handle a runtime type check failure, caused by an incorrect vptr.
|
|
27 /// When this handler is called, all we know is that the type was not in the
|
|
28 /// cache; this does not necessarily imply the existence of a bug.
|
|
29 extern "C" SANITIZER_INTERFACE_ATTRIBUTE
|
|
30 void __ubsan_handle_dynamic_type_cache_miss(
|
|
31 DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
|
|
32 extern "C" SANITIZER_INTERFACE_ATTRIBUTE
|
|
33 void __ubsan_handle_dynamic_type_cache_miss_abort(
|
|
34 DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
|
|
35 }
|
|
36
|
|
37 #endif // UBSAN_HANDLERS_H
|