1#ifndef _LIB_UBSAN_H 2#define _LIB_UBSAN_H 3 4enum { 5 type_kind_int = 0, 6 type_kind_float = 1, 7 type_unknown = 0xffff 8}; 9 10struct type_descriptor { 11 u16 type_kind; 12 u16 type_info; 13 char type_name[1]; 14}; 15 16struct 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 27struct overflow_data { 28 struct source_location location; 29 struct type_descriptor *type; 30}; 31 32struct 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 39struct nonnull_arg_data { 40 struct source_location location; 41 struct source_location attr_location; 42 int arg_index; 43}; 44 45struct nonnull_return_data { 46 struct source_location location; 47 struct source_location attr_location; 48}; 49 50struct vla_bound_data { 51 struct source_location location; 52 struct type_descriptor *type; 53}; 54 55struct out_of_bounds_data { 56 struct source_location location; 57 struct type_descriptor *array_type; 58 struct type_descriptor *index_type; 59}; 60 61struct shift_out_of_bounds_data { 62 struct source_location location; 63 struct type_descriptor *lhs_type; 64 struct type_descriptor *rhs_type; 65}; 66 67struct unreachable_data { 68 struct source_location location; 69}; 70 71struct 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__) 77typedef __int128 s_max; 78typedef unsigned __int128 u_max; 79#else 80typedef s64 s_max; 81typedef u64 u_max; 82#endif 83 84#endif 85