GNU Linux-libre 4.14.251-gnu1
[releases.git] / lib / ubsan.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LIB_UBSAN_H
3 #define _LIB_UBSAN_H
4
5 enum {
6         type_kind_int = 0,
7         type_kind_float = 1,
8         type_unknown = 0xffff
9 };
10
11 struct type_descriptor {
12         u16 type_kind;
13         u16 type_info;
14         char type_name[1];
15 };
16
17 struct source_location {
18         const char *file_name;
19         union {
20                 unsigned long reported;
21                 struct {
22                         u32 line;
23                         u32 column;
24                 };
25         };
26 };
27
28 struct overflow_data {
29         struct source_location location;
30         struct type_descriptor *type;
31 };
32
33 struct type_mismatch_data {
34         struct source_location location;
35         struct type_descriptor *type;
36         unsigned long alignment;
37         unsigned char type_check_kind;
38 };
39
40 struct type_mismatch_data_v1 {
41         struct source_location location;
42         struct type_descriptor *type;
43         unsigned char log_alignment;
44         unsigned char type_check_kind;
45 };
46
47 struct type_mismatch_data_common {
48         struct source_location *location;
49         struct type_descriptor *type;
50         unsigned long alignment;
51         unsigned char type_check_kind;
52 };
53
54 struct nonnull_arg_data {
55         struct source_location location;
56         struct source_location attr_location;
57         int arg_index;
58 };
59
60 struct nonnull_return_data {
61         struct source_location location;
62         struct source_location attr_location;
63 };
64
65 struct vla_bound_data {
66         struct source_location location;
67         struct type_descriptor *type;
68 };
69
70 struct out_of_bounds_data {
71         struct source_location location;
72         struct type_descriptor *array_type;
73         struct type_descriptor *index_type;
74 };
75
76 struct shift_out_of_bounds_data {
77         struct source_location location;
78         struct type_descriptor *lhs_type;
79         struct type_descriptor *rhs_type;
80 };
81
82 struct unreachable_data {
83         struct source_location location;
84 };
85
86 struct invalid_value_data {
87         struct source_location location;
88         struct type_descriptor *type;
89 };
90
91 #if defined(CONFIG_ARCH_SUPPORTS_INT128) && defined(__SIZEOF_INT128__)
92 typedef __int128 s_max;
93 typedef unsigned __int128 u_max;
94 #else
95 typedef s64 s_max;
96 typedef u64 u_max;
97 #endif
98
99 #endif