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