Blame view

lib/ubsan.h 1.85 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  /* SPDX-License-Identifier: GPL-2.0 */
c6d308534   Andrey Ryabinin   UBSAN: run-time u...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  #ifndef _LIB_UBSAN_H
  #define _LIB_UBSAN_H
  
  enum {
  	type_kind_int = 0,
  	type_kind_float = 1,
  	type_unknown = 0xffff
  };
  
  struct type_descriptor {
  	u16 type_kind;
  	u16 type_info;
  	char type_name[1];
  };
  
  struct source_location {
  	const char *file_name;
  	union {
  		unsigned long reported;
  		struct {
  			u32 line;
  			u32 column;
  		};
  	};
  };
  
  struct overflow_data {
  	struct source_location location;
  	struct type_descriptor *type;
  };
  
  struct type_mismatch_data {
  	struct source_location location;
  	struct type_descriptor *type;
2617e62c2   Andrey Ryabinin   lib/ubsan: add ty...
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  	unsigned long alignment;
  	unsigned char type_check_kind;
  };
  
  struct type_mismatch_data_v1 {
  	struct source_location location;
  	struct type_descriptor *type;
  	unsigned char log_alignment;
  	unsigned char type_check_kind;
  };
  
  struct type_mismatch_data_common {
  	struct source_location *location;
  	struct type_descriptor *type;
c6d308534   Andrey Ryabinin   UBSAN: run-time u...
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  	unsigned long alignment;
  	unsigned char type_check_kind;
  };
  
  struct nonnull_arg_data {
  	struct source_location location;
  	struct source_location attr_location;
  	int arg_index;
  };
  
  struct nonnull_return_data {
  	struct source_location location;
  	struct source_location attr_location;
  };
  
  struct vla_bound_data {
  	struct source_location location;
  	struct type_descriptor *type;
  };
  
  struct out_of_bounds_data {
  	struct source_location location;
  	struct type_descriptor *array_type;
  	struct type_descriptor *index_type;
  };
  
  struct shift_out_of_bounds_data {
  	struct source_location location;
  	struct type_descriptor *lhs_type;
  	struct type_descriptor *rhs_type;
  };
  
  struct unreachable_data {
  	struct source_location location;
  };
  
  struct invalid_value_data {
  	struct source_location location;
  	struct type_descriptor *type;
  };
  
  #if defined(CONFIG_ARCH_SUPPORTS_INT128) && defined(__SIZEOF_INT128__)
  typedef __int128 s_max;
  typedef unsigned __int128 u_max;
  #else
  typedef s64 s_max;
  typedef u64 u_max;
  #endif
  
  #endif