Merge branches 'amba', 'fixes', 'misc' and 'tauros2' into for-next
[platform/kernel/linux-rpi.git] / lib / ubsan.h
1 #ifndef _LIB_UBSAN_H
2 #define _LIB_UBSAN_H
3
4 enum {
5         type_kind_int = 0,
6         type_kind_float = 1,
7         type_unknown = 0xffff
8 };
9
10 struct type_descriptor {
11         u16 type_kind;
12         u16 type_info;
13         char type_name[1];
14 };
15
16 struct source_location {
17         const char *file_name;
18         union {
19                 unsigned long reported;
20                 struct {
21                         u32 line;
22                         u32 column;
23                 };
24         };
25 };
26
27 struct overflow_data {
28         struct source_location location;
29         struct type_descriptor *type;
30 };
31
32 struct type_mismatch_data {
33         struct source_location location;
34         struct type_descriptor *type;
35         unsigned long alignment;
36         unsigned char type_check_kind;
37 };
38
39 struct nonnull_arg_data {
40         struct source_location location;
41         struct source_location attr_location;
42         int arg_index;
43 };
44
45 struct nonnull_return_data {
46         struct source_location location;
47         struct source_location attr_location;
48 };
49
50 struct vla_bound_data {
51         struct source_location location;
52         struct type_descriptor *type;
53 };
54
55 struct out_of_bounds_data {
56         struct source_location location;
57         struct type_descriptor *array_type;
58         struct type_descriptor *index_type;
59 };
60
61 struct shift_out_of_bounds_data {
62         struct source_location location;
63         struct type_descriptor *lhs_type;
64         struct type_descriptor *rhs_type;
65 };
66
67 struct unreachable_data {
68         struct source_location location;
69 };
70
71 struct invalid_value_data {
72         struct source_location location;
73         struct type_descriptor *type;
74 };
75
76 #if defined(CONFIG_ARCH_SUPPORTS_INT128) && defined(__SIZEOF_INT128__)
77 typedef __int128 s_max;
78 typedef unsigned __int128 u_max;
79 #else
80 typedef s64 s_max;
81 typedef u64 u_max;
82 #endif
83
84 #endif