• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 type_mismatch_data_v1 {
40 	struct source_location location;
41 	struct type_descriptor *type;
42 	unsigned char log_alignment;
43 	unsigned char type_check_kind;
44 };
45 
46 struct type_mismatch_data_common {
47 	struct source_location *location;
48 	struct type_descriptor *type;
49 	unsigned long alignment;
50 	unsigned char type_check_kind;
51 };
52 
53 struct nonnull_arg_data {
54 	struct source_location location;
55 	struct source_location attr_location;
56 	int arg_index;
57 };
58 
59 struct nonnull_return_data {
60 	struct source_location location;
61 	struct source_location attr_location;
62 };
63 
64 struct vla_bound_data {
65 	struct source_location location;
66 	struct type_descriptor *type;
67 };
68 
69 struct out_of_bounds_data {
70 	struct source_location location;
71 	struct type_descriptor *array_type;
72 	struct type_descriptor *index_type;
73 };
74 
75 struct shift_out_of_bounds_data {
76 	struct source_location location;
77 	struct type_descriptor *lhs_type;
78 	struct type_descriptor *rhs_type;
79 };
80 
81 struct unreachable_data {
82 	struct source_location location;
83 };
84 
85 struct invalid_value_data {
86 	struct source_location location;
87 	struct type_descriptor *type;
88 };
89 
90 #if defined(CONFIG_ARCH_SUPPORTS_INT128) && defined(__SIZEOF_INT128__)
91 typedef __int128 s_max;
92 typedef unsigned __int128 u_max;
93 #else
94 typedef s64 s_max;
95 typedef u64 u_max;
96 #endif
97 
98 #endif
99