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 nonnull_arg_data { 47 struct source_location location; 48 struct source_location attr_location; 49 int arg_index; 50 }; 51 52 struct nonnull_return_data { 53 struct source_location location; 54 struct source_location attr_location; 55 }; 56 57 struct vla_bound_data { 58 struct source_location location; 59 struct type_descriptor *type; 60 }; 61 62 struct out_of_bounds_data { 63 struct source_location location; 64 struct type_descriptor *array_type; 65 struct type_descriptor *index_type; 66 }; 67 68 struct shift_out_of_bounds_data { 69 struct source_location location; 70 struct type_descriptor *lhs_type; 71 struct type_descriptor *rhs_type; 72 }; 73 74 struct unreachable_data { 75 struct source_location location; 76 }; 77 78 struct invalid_value_data { 79 struct source_location location; 80 struct type_descriptor *type; 81 }; 82 83 struct pointer_overflow_data { 84 struct source_location location; 85 }; 86 87 #if defined(CONFIG_ARCH_SUPPORTS_INT128) && defined(__SIZEOF_INT128__) 88 typedef __int128 s_max; 89 typedef unsigned __int128 u_max; 90 #else 91 typedef s64 s_max; 92 typedef u64 u_max; 93 #endif 94 95 #endif 96