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 85