]> git.ipfire.org Git - thirdparty/kernel/stable.git/blob - lib/ubsan.h
Linux 4.20.17
[thirdparty/kernel/stable.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 vla_bound_data {
61 struct source_location location;
62 struct type_descriptor *type;
63 };
64
65 struct out_of_bounds_data {
66 struct source_location location;
67 struct type_descriptor *array_type;
68 struct type_descriptor *index_type;
69 };
70
71 struct shift_out_of_bounds_data {
72 struct source_location location;
73 struct type_descriptor *lhs_type;
74 struct type_descriptor *rhs_type;
75 };
76
77 struct unreachable_data {
78 struct source_location location;
79 };
80
81 struct invalid_value_data {
82 struct source_location location;
83 struct type_descriptor *type;
84 };
85
86 #if defined(CONFIG_ARCH_SUPPORTS_INT128) && defined(__SIZEOF_INT128__)
87 typedef __int128 s_max;
88 typedef unsigned __int128 u_max;
89 #else
90 typedef s64 s_max;
91 typedef u64 u_max;
92 #endif
93
94 #endif