blob: 92050d99e48e3c9a04840f847385228ad25f81a4 [file] [log] [blame]
Richard Smitheda8bd02012-10-25 02:07:02 +00001//===-- 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
19namespace __ubsan {
20
21struct DynamicTypeCacheMissData {
22 SourceLocation Loc;
23 const TypeDescriptor &Type;
24 void *TypeInfo;
25 unsigned char TypeCheckKind;
26};
27
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080028struct CFIBadTypeData {
29 SourceLocation Loc;
30 const TypeDescriptor &Type;
31 unsigned char TypeCheckKind;
32};
33
Richard Smitheda8bd02012-10-25 02:07:02 +000034/// \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.
Will Dietza4411092013-01-10 17:01:13 +000037extern "C" SANITIZER_INTERFACE_ATTRIBUTE
38void __ubsan_handle_dynamic_type_cache_miss(
Richard Smitheda8bd02012-10-25 02:07:02 +000039 DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
Will Dietza4411092013-01-10 17:01:13 +000040extern "C" SANITIZER_INTERFACE_ATTRIBUTE
41void __ubsan_handle_dynamic_type_cache_miss_abort(
Will Dietza82a5d32012-12-02 19:47:29 +000042 DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
Richard Smitheda8bd02012-10-25 02:07:02 +000043
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080044/// \brief Handle a control flow integrity check failure by printing a
45/// diagnostic.
46extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
47__ubsan_handle_cfi_bad_type(CFIBadTypeData *Data, ValueHandle Vtable);
48extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
49__ubsan_handle_cfi_bad_type_abort(CFIBadTypeData *Data, ValueHandle Vtable);
50
Richard Smitheda8bd02012-10-25 02:07:02 +000051}
52
53#endif // UBSAN_HANDLERS_H