1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _LIB_UBSAN_H 3#define _LIB_UBSAN_H 4 5enum { 6 type_kind_int = 0, 7 type_kind_float = 1, 8 type_unknown = 0xffff 9}; 10 11struct type_descriptor { 12 u16 type_kind; 13 u16 type_info; 14 char type_name[1]; 15}; 16 17struct 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 28struct overflow_data { 29 struct source_location location; 30 struct type_descriptor *type; 31}; 32 33struct 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 40struct type_mismatch_data_v1 { 41 struct source_location location; 42 struct type_descriptor *type; 43 unsigned char log_alignment; 44 unsigned char type_check_kind; 45}; 46 47struct type_mismatch_data_common { 48 struct source_location *location; 49 struct type_descriptor *type; 50 unsigned long alignment; 51 unsigned char type_check_kind; 52}; 53 54struct nonnull_arg_data { 55 struct source_location location; 56 struct source_location attr_location; 57 int arg_index; 58}; 59 60struct vla_bound_data { 61 struct source_location location; 62 struct type_descriptor *type; 63}; 64 65struct out_of_bounds_data { 66 struct source_location location; 67 struct type_descriptor *array_type; 68 struct type_descriptor *index_type; 69}; 70 71struct shift_out_of_bounds_data { 72 struct source_location location; 73 struct type_descriptor *lhs_type; 74 struct type_descriptor *rhs_type; 75}; 76 77struct unreachable_data { 78 struct source_location location; 79}; 80 81struct invalid_value_data { 82 struct source_location location; 83 struct type_descriptor *type; 84}; 85 86#if defined(CONFIG_ARCH_SUPPORTS_INT128) && defined(__SIZEOF_INT128__) 87typedef __int128 s_max; 88typedef unsigned __int128 u_max; 89#else 90typedef s64 s_max; 91typedef u64 u_max; 92#endif 93 94#endif 95