]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/sanitizer.def
re PR sanitizer/55439 (ThreadSanitizer: handle atomic operations)
[thirdparty/gcc.git] / gcc / sanitizer.def
1 /* This file contains the definitions and documentation for the
2 Address Sanitizer and Thread Sanitizer builtins used in the GNU compiler.
3 Copyright (C) 2012 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 /* Before including this file, you should define a macro:
22
23 DEF_SANITIZER_BUILTIN (ENUM, NAME, TYPE, ATTRS)
24
25 See builtins.def for details.
26 The builtins are created by the C-family of FEs in c-family/c-common.c,
27 for other FEs by asan.c. */
28
29 /* Address Sanitizer */
30 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_INIT, "__asan_init",
31 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
32 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD1, "__asan_report_load1",
33 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
34 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD2, "__asan_report_load2",
35 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
36 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD4, "__asan_report_load4",
37 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
38 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD8, "__asan_report_load8",
39 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
40 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD16, "__asan_report_load16",
41 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
42 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE1, "__asan_report_store1",
43 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
44 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE2, "__asan_report_store2",
45 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
46 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE4, "__asan_report_store4",
47 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
48 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE8, "__asan_report_store8",
49 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
50 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE16, "__asan_report_store16",
51 BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
52 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REGISTER_GLOBALS,
53 "__asan_register_globals",
54 BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
55 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_UNREGISTER_GLOBALS,
56 "__asan_unregister_globals",
57 BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
58
59 /* Thread Sanitizer */
60 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_INIT, "__tsan_init",
61 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
62 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_FUNC_ENTRY, "__tsan_func_entry",
63 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
64 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_FUNC_EXIT, "__tsan_func_exit",
65 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
66 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_VPTR_UPDATE, "__tsan_vptr_update",
67 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
68 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ1, "__tsan_read1",
69 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
70 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ2, "__tsan_read2",
71 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
72 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ4, "__tsan_read4",
73 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
74 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ8, "__tsan_read8",
75 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
76 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ16, "__tsan_read16",
77 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
78 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE1, "__tsan_write1",
79 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
80 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE2, "__tsan_write2",
81 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
82 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE4, "__tsan_write4",
83 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
84 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE8, "__tsan_write8",
85 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
86 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE16, "__tsan_write16",
87 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
88
89 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_LOAD,
90 "__tsan_atomic8_load",
91 BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
92 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_LOAD,
93 "__tsan_atomic16_load",
94 BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
95 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_LOAD,
96 "__tsan_atomic32_load",
97 BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
98 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_LOAD,
99 "__tsan_atomic64_load",
100 BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
101 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_LOAD,
102 "__tsan_atomic128_load",
103 BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
104
105 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_STORE,
106 "__tsan_atomic8_store",
107 BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
108 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_STORE,
109 "__tsan_atomic16_store",
110 BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
111 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_STORE,
112 "__tsan_atomic32_store",
113 BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
114 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_STORE,
115 "__tsan_atomic64_store",
116 BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
117 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_STORE,
118 "__tsan_atomic128_store",
119 BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
120
121 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_EXCHANGE,
122 "__tsan_atomic8_exchange",
123 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
124 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_EXCHANGE,
125 "__tsan_atomic16_exchange",
126 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
127 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_EXCHANGE,
128 "__tsan_atomic32_exchange",
129 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
130 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_EXCHANGE,
131 "__tsan_atomic64_exchange",
132 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
133 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_EXCHANGE,
134 "__tsan_atomic128_exchange",
135 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
136
137 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_ADD,
138 "__tsan_atomic8_fetch_add",
139 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
140 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_ADD,
141 "__tsan_atomic16_fetch_add",
142 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
143 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_ADD,
144 "__tsan_atomic32_fetch_add",
145 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
146 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_ADD,
147 "__tsan_atomic64_fetch_add",
148 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
149 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_ADD,
150 "__tsan_atomic128_fetch_add",
151 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
152
153 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_SUB,
154 "__tsan_atomic8_fetch_sub",
155 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
156 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_SUB,
157 "__tsan_atomic16_fetch_sub",
158 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
159 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_SUB,
160 "__tsan_atomic32_fetch_sub",
161 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
162 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_SUB,
163 "__tsan_atomic64_fetch_sub",
164 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
165 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_SUB,
166 "__tsan_atomic128_fetch_sub",
167 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
168
169 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_AND,
170 "__tsan_atomic8_fetch_and",
171 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
172 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_AND,
173 "__tsan_atomic16_fetch_and",
174 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
175 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_AND,
176 "__tsan_atomic32_fetch_and",
177 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
178 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_AND,
179 "__tsan_atomic64_fetch_and",
180 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
181 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_AND,
182 "__tsan_atomic128_fetch_and",
183 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
184
185 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_OR,
186 "__tsan_atomic8_fetch_or",
187 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
188 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_OR,
189 "__tsan_atomic16_fetch_or",
190 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
191 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_OR,
192 "__tsan_atomic32_fetch_or",
193 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
194 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_OR,
195 "__tsan_atomic64_fetch_or",
196 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
197 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_OR,
198 "__tsan_atomic128_fetch_or",
199 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
200
201 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_XOR,
202 "__tsan_atomic8_fetch_xor",
203 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
204 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_XOR,
205 "__tsan_atomic16_fetch_xor",
206 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
207 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_XOR,
208 "__tsan_atomic32_fetch_xor",
209 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
210 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_XOR,
211 "__tsan_atomic64_fetch_xor",
212 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
213 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_XOR,
214 "__tsan_atomic128_fetch_xor",
215 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
216
217 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_NAND,
218 "__tsan_atomic8_fetch_nand",
219 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
220 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_NAND,
221 "__tsan_atomic16_fetch_nand",
222 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
223 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_NAND,
224 "__tsan_atomic32_fetch_nand",
225 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
226 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_NAND,
227 "__tsan_atomic64_fetch_nand",
228 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
229 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_NAND,
230 "__tsan_atomic128_fetch_nand",
231 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
232
233 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_COMPARE_EXCHANGE_STRONG,
234 "__tsan_atomic8_compare_exchange_strong",
235 BT_FN_BOOL_VPTR_PTR_I1_INT_INT,
236 ATTR_NOTHROW_LEAF_LIST)
237 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_COMPARE_EXCHANGE_STRONG,
238 "__tsan_atomic16_compare_exchange_strong",
239 BT_FN_BOOL_VPTR_PTR_I2_INT_INT,
240 ATTR_NOTHROW_LEAF_LIST)
241 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_COMPARE_EXCHANGE_STRONG,
242 "__tsan_atomic32_compare_exchange_strong",
243 BT_FN_BOOL_VPTR_PTR_I4_INT_INT,
244 ATTR_NOTHROW_LEAF_LIST)
245 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_COMPARE_EXCHANGE_STRONG,
246 "__tsan_atomic64_compare_exchange_strong",
247 BT_FN_BOOL_VPTR_PTR_I8_INT_INT,
248 ATTR_NOTHROW_LEAF_LIST)
249 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_COMPARE_EXCHANGE_STRONG,
250 "__tsan_atomic128_compare_exchange_strong",
251 BT_FN_BOOL_VPTR_PTR_I16_INT_INT,
252 ATTR_NOTHROW_LEAF_LIST)
253
254 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_COMPARE_EXCHANGE_WEAK,
255 "__tsan_atomic8_compare_exchange_weak",
256 BT_FN_BOOL_VPTR_PTR_I1_INT_INT,
257 ATTR_NOTHROW_LEAF_LIST)
258 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_COMPARE_EXCHANGE_WEAK,
259 "__tsan_atomic16_compare_exchange_weak",
260 BT_FN_BOOL_VPTR_PTR_I2_INT_INT,
261 ATTR_NOTHROW_LEAF_LIST)
262 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_COMPARE_EXCHANGE_WEAK,
263 "__tsan_atomic32_compare_exchange_weak",
264 BT_FN_BOOL_VPTR_PTR_I4_INT_INT,
265 ATTR_NOTHROW_LEAF_LIST)
266 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_COMPARE_EXCHANGE_WEAK,
267 "__tsan_atomic64_compare_exchange_weak",
268 BT_FN_BOOL_VPTR_PTR_I8_INT_INT,
269 ATTR_NOTHROW_LEAF_LIST)
270 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_COMPARE_EXCHANGE_WEAK,
271 "__tsan_atomic128_compare_exchange_weak",
272 BT_FN_BOOL_VPTR_PTR_I16_INT_INT,
273 ATTR_NOTHROW_LEAF_LIST)
274
275 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC_THREAD_FENCE,
276 "__tsan_atomic_thread_fence",
277 BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
278 DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC_SIGNAL_FENCE,
279 "__tsan_atomic_signal_fence",
280 BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)