xref: /linux-6.15/include/linux/compiler_types.h (revision b8cd5831)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LINUX_COMPILER_TYPES_H
3 #define __LINUX_COMPILER_TYPES_H
4 
5 #ifndef __ASSEMBLY__
6 
7 #ifdef __CHECKER__
8 /* address spaces */
9 # define __kernel	__attribute__((address_space(0)))
10 # define __user		__attribute__((noderef, address_space(__user)))
11 # define __iomem	__attribute__((noderef, address_space(__iomem)))
12 # define __percpu	__attribute__((noderef, address_space(__percpu)))
13 # define __rcu		__attribute__((noderef, address_space(__rcu)))
14 static inline void __chk_user_ptr(const volatile void __user *ptr) { }
15 static inline void __chk_io_ptr(const volatile void __iomem *ptr) { }
16 /* context/locking */
17 # define __must_hold(x)	__attribute__((context(x,1,1)))
18 # define __acquires(x)	__attribute__((context(x,0,1)))
19 # define __releases(x)	__attribute__((context(x,1,0)))
20 # define __acquire(x)	__context__(x,1)
21 # define __release(x)	__context__(x,-1)
22 # define __cond_lock(x,c)	((c) ? ({ __acquire(x); 1; }) : 0)
23 /* other */
24 # define __force	__attribute__((force))
25 # define __nocast	__attribute__((nocast))
26 # define __safe		__attribute__((safe))
27 # define __private	__attribute__((noderef))
28 # define ACCESS_PRIVATE(p, member) (*((typeof((p)->member) __force *) &(p)->member))
29 #else /* __CHECKER__ */
30 /* address spaces */
31 # define __kernel
32 # ifdef STRUCTLEAK_PLUGIN
33 #  define __user	__attribute__((user))
34 # elif defined(CONFIG_DEBUG_INFO_BTF) && defined(CONFIG_PAHOLE_HAS_BTF_TAG) && \
35 	__has_attribute(btf_type_tag)
36 #  define __user	__attribute__((btf_type_tag("user")))
37 # else
38 #  define __user
39 # endif
40 # define __iomem
41 # define __percpu
42 # define __rcu
43 # define __chk_user_ptr(x)	(void)0
44 # define __chk_io_ptr(x)	(void)0
45 /* context/locking */
46 # define __must_hold(x)
47 # define __acquires(x)
48 # define __releases(x)
49 # define __acquire(x)	(void)0
50 # define __release(x)	(void)0
51 # define __cond_lock(x,c) (c)
52 /* other */
53 # define __force
54 # define __nocast
55 # define __safe
56 # define __private
57 # define ACCESS_PRIVATE(p, member) ((p)->member)
58 # define __builtin_warning(x, y...) (1)
59 #endif /* __CHECKER__ */
60 
61 /* Indirect macros required for expanded argument pasting, eg. __LINE__. */
62 #define ___PASTE(a,b) a##b
63 #define __PASTE(a,b) ___PASTE(a,b)
64 
65 #ifdef __KERNEL__
66 
67 /* Attributes */
68 #include <linux/compiler_attributes.h>
69 
70 /* Builtins */
71 
72 /*
73  * __has_builtin is supported on gcc >= 10, clang >= 3 and icc >= 21.
74  * In the meantime, to support gcc < 10, we implement __has_builtin
75  * by hand.
76  */
77 #ifndef __has_builtin
78 #define __has_builtin(x) (0)
79 #endif
80 
81 /* Compiler specific macros. */
82 #ifdef __clang__
83 #include <linux/compiler-clang.h>
84 #elif defined(__INTEL_COMPILER)
85 #include <linux/compiler-intel.h>
86 #elif defined(__GNUC__)
87 /* The above compilers also define __GNUC__, so order is important here. */
88 #include <linux/compiler-gcc.h>
89 #else
90 #error "Unknown compiler"
91 #endif
92 
93 /*
94  * Some architectures need to provide custom definitions of macros provided
95  * by linux/compiler-*.h, and can do so using asm/compiler.h. We include that
96  * conditionally rather than using an asm-generic wrapper in order to avoid
97  * build failures if any C compilation, which will include this file via an
98  * -include argument in c_flags, occurs prior to the asm-generic wrappers being
99  * generated.
100  */
101 #ifdef CONFIG_HAVE_ARCH_COMPILER_H
102 #include <asm/compiler.h>
103 #endif
104 
105 struct ftrace_branch_data {
106 	const char *func;
107 	const char *file;
108 	unsigned line;
109 	union {
110 		struct {
111 			unsigned long correct;
112 			unsigned long incorrect;
113 		};
114 		struct {
115 			unsigned long miss;
116 			unsigned long hit;
117 		};
118 		unsigned long miss_hit[2];
119 	};
120 };
121 
122 struct ftrace_likely_data {
123 	struct ftrace_branch_data	data;
124 	unsigned long			constant;
125 };
126 
127 #if defined(CC_USING_HOTPATCH)
128 #define notrace			__attribute__((hotpatch(0, 0)))
129 #elif defined(CC_USING_PATCHABLE_FUNCTION_ENTRY)
130 #define notrace			__attribute__((patchable_function_entry(0, 0)))
131 #else
132 #define notrace			__attribute__((__no_instrument_function__))
133 #endif
134 
135 /*
136  * it doesn't make sense on ARM (currently the only user of __naked)
137  * to trace naked functions because then mcount is called without
138  * stack and frame pointer being set up and there is no chance to
139  * restore the lr register to the value before mcount was called.
140  */
141 #define __naked			__attribute__((__naked__)) notrace
142 
143 #define __compiler_offsetof(a, b)	__builtin_offsetof(a, b)
144 
145 /*
146  * Prefer gnu_inline, so that extern inline functions do not emit an
147  * externally visible function. This makes extern inline behave as per gnu89
148  * semantics rather than c99. This prevents multiple symbol definition errors
149  * of extern inline functions at link time.
150  * A lot of inline functions can cause havoc with function tracing.
151  */
152 #define inline inline __gnu_inline __inline_maybe_unused notrace
153 
154 /*
155  * gcc provides both __inline__ and __inline as alternate spellings of
156  * the inline keyword, though the latter is undocumented. New kernel
157  * code should only use the inline spelling, but some existing code
158  * uses __inline__. Since we #define inline above, to ensure
159  * __inline__ has the same semantics, we need this #define.
160  *
161  * However, the spelling __inline is strictly reserved for referring
162  * to the bare keyword.
163  */
164 #define __inline__ inline
165 
166 /*
167  * GCC does not warn about unused static inline functions for -Wunused-function.
168  * Suppress the warning in clang as well by using __maybe_unused, but enable it
169  * for W=1 build. This will allow clang to find unused functions. Remove the
170  * __inline_maybe_unused entirely after fixing most of -Wunused-function warnings.
171  */
172 #ifdef KBUILD_EXTRA_WARN1
173 #define __inline_maybe_unused
174 #else
175 #define __inline_maybe_unused __maybe_unused
176 #endif
177 
178 /*
179  * Rather then using noinline to prevent stack consumption, use
180  * noinline_for_stack instead.  For documentation reasons.
181  */
182 #define noinline_for_stack noinline
183 
184 /*
185  * Sanitizer helper attributes: Because using __always_inline and
186  * __no_sanitize_* conflict, provide helper attributes that will either expand
187  * to __no_sanitize_* in compilation units where instrumentation is enabled
188  * (__SANITIZE_*__), or __always_inline in compilation units without
189  * instrumentation (__SANITIZE_*__ undefined).
190  */
191 #ifdef __SANITIZE_ADDRESS__
192 /*
193  * We can't declare function 'inline' because __no_sanitize_address conflicts
194  * with inlining. Attempt to inline it may cause a build failure.
195  *     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
196  * '__maybe_unused' allows us to avoid defined-but-not-used warnings.
197  */
198 # define __no_kasan_or_inline __no_sanitize_address notrace __maybe_unused
199 # define __no_sanitize_or_inline __no_kasan_or_inline
200 #else
201 # define __no_kasan_or_inline __always_inline
202 #endif
203 
204 #ifdef __SANITIZE_THREAD__
205 /*
206  * Clang still emits instrumentation for __tsan_func_{entry,exit}() and builtin
207  * atomics even with __no_sanitize_thread (to avoid false positives in userspace
208  * ThreadSanitizer). The kernel's requirements are stricter and we really do not
209  * want any instrumentation with __no_kcsan.
210  *
211  * Therefore we add __disable_sanitizer_instrumentation where available to
212  * disable all instrumentation. See Kconfig.kcsan where this is mandatory.
213  */
214 # define __no_kcsan __no_sanitize_thread __disable_sanitizer_instrumentation
215 # define __no_sanitize_or_inline __no_kcsan notrace __maybe_unused
216 #else
217 # define __no_kcsan
218 #endif
219 
220 #ifndef __no_sanitize_or_inline
221 #define __no_sanitize_or_inline __always_inline
222 #endif
223 
224 /* Section for code which can't be instrumented at all */
225 #define noinstr								\
226 	noinline notrace __attribute((__section__(".noinstr.text")))	\
227 	__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
228 
229 #endif /* __KERNEL__ */
230 
231 #endif /* __ASSEMBLY__ */
232 
233 /*
234  * The below symbols may be defined for one or more, but not ALL, of the above
235  * compilers. We don't consider that to be an error, so set them to nothing.
236  * For example, some of them are for compiler specific plugins.
237  */
238 #ifndef __latent_entropy
239 # define __latent_entropy
240 #endif
241 
242 #ifndef __randomize_layout
243 # define __randomize_layout __designated_init
244 #endif
245 
246 #ifndef __no_randomize_layout
247 # define __no_randomize_layout
248 #endif
249 
250 #ifndef randomized_struct_fields_start
251 # define randomized_struct_fields_start
252 # define randomized_struct_fields_end
253 #endif
254 
255 #ifndef __noscs
256 # define __noscs
257 #endif
258 
259 #ifndef __nocfi
260 # define __nocfi
261 #endif
262 
263 #ifndef __cficanonical
264 # define __cficanonical
265 #endif
266 
267 /*
268  * Any place that could be marked with the "alloc_size" attribute is also
269  * a place to be marked with the "malloc" attribute. Do this as part of the
270  * __alloc_size macro to avoid redundant attributes and to avoid missing a
271  * __malloc marking.
272  */
273 #ifdef __alloc_size__
274 # define __alloc_size(x, ...)	__alloc_size__(x, ## __VA_ARGS__) __malloc
275 #else
276 # define __alloc_size(x, ...)	__malloc
277 #endif
278 
279 #ifndef asm_volatile_goto
280 #define asm_volatile_goto(x...) asm goto(x)
281 #endif
282 
283 #ifdef CONFIG_CC_HAS_ASM_INLINE
284 #define asm_inline asm __inline
285 #else
286 #define asm_inline asm
287 #endif
288 
289 /* Are two types/vars the same type (ignoring qualifiers)? */
290 #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
291 
292 /*
293  * __unqual_scalar_typeof(x) - Declare an unqualified scalar type, leaving
294  *			       non-scalar types unchanged.
295  */
296 /*
297  * Prefer C11 _Generic for better compile-times and simpler code. Note: 'char'
298  * is not type-compatible with 'signed char', and we define a separate case.
299  */
300 #define __scalar_type_to_expr_cases(type)				\
301 		unsigned type:	(unsigned type)0,			\
302 		signed type:	(signed type)0
303 
304 #define __unqual_scalar_typeof(x) typeof(				\
305 		_Generic((x),						\
306 			 char:	(char)0,				\
307 			 __scalar_type_to_expr_cases(char),		\
308 			 __scalar_type_to_expr_cases(short),		\
309 			 __scalar_type_to_expr_cases(int),		\
310 			 __scalar_type_to_expr_cases(long),		\
311 			 __scalar_type_to_expr_cases(long long),	\
312 			 default: (x)))
313 
314 /* Is this type a native word size -- useful for atomic operations */
315 #define __native_word(t) \
316 	(sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
317 	 sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
318 
319 #ifdef __OPTIMIZE__
320 # define __compiletime_assert(condition, msg, prefix, suffix)		\
321 	do {								\
322 		/*							\
323 		 * __noreturn is needed to give the compiler enough	\
324 		 * information to avoid certain possibly-uninitialized	\
325 		 * warnings (regardless of the build failing).		\
326 		 */							\
327 		__noreturn extern void prefix ## suffix(void)		\
328 			__compiletime_error(msg);			\
329 		if (!(condition))					\
330 			prefix ## suffix();				\
331 	} while (0)
332 #else
333 # define __compiletime_assert(condition, msg, prefix, suffix) do { } while (0)
334 #endif
335 
336 #define _compiletime_assert(condition, msg, prefix, suffix) \
337 	__compiletime_assert(condition, msg, prefix, suffix)
338 
339 /**
340  * compiletime_assert - break build and emit msg if condition is false
341  * @condition: a compile-time constant condition to check
342  * @msg:       a message to emit if condition is false
343  *
344  * In tradition of POSIX assert, this macro will break the build if the
345  * supplied condition is *false*, emitting the supplied error message if the
346  * compiler has support to do so.
347  */
348 #define compiletime_assert(condition, msg) \
349 	_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
350 
351 #define compiletime_assert_atomic_type(t)				\
352 	compiletime_assert(__native_word(t),				\
353 		"Need native word sized stores/loads for atomicity.")
354 
355 /* Helpers for emitting diagnostics in pragmas. */
356 #ifndef __diag
357 #define __diag(string)
358 #endif
359 
360 #ifndef __diag_GCC
361 #define __diag_GCC(version, severity, string)
362 #endif
363 
364 #define __diag_push()	__diag(push)
365 #define __diag_pop()	__diag(pop)
366 
367 #define __diag_ignore(compiler, version, option, comment) \
368 	__diag_ ## compiler(version, ignore, option)
369 #define __diag_warn(compiler, version, option, comment) \
370 	__diag_ ## compiler(version, warn, option)
371 #define __diag_error(compiler, version, option, comment) \
372 	__diag_ ## compiler(version, error, option)
373 
374 #endif /* __LINUX_COMPILER_TYPES_H */
375