aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/compiler-gcc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/compiler-gcc.h')
-rw-r--r--include/linux/compiler-gcc.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 0444b1336268..8ea159fc489d 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -195,6 +195,17 @@
195#endif 195#endif
196#endif 196#endif
197 197
198#ifdef CONFIG_STACK_VALIDATION
199#define annotate_unreachable() ({ \
200 asm("1:\t\n" \
201 ".pushsection __unreachable, \"a\"\t\n" \
202 ".long 1b\t\n" \
203 ".popsection\t\n"); \
204})
205#else
206#define annotate_unreachable()
207#endif
208
198/* 209/*
199 * Mark a position in code as unreachable. This can be used to 210 * Mark a position in code as unreachable. This can be used to
200 * suppress control flow warnings after asm blocks that transfer 211 * suppress control flow warnings after asm blocks that transfer
@@ -204,7 +215,7 @@
204 * this in the preprocessor, but we can live with this because they're 215 * this in the preprocessor, but we can live with this because they're
205 * unreleased. Really, we need to have autoconf for the kernel. 216 * unreleased. Really, we need to have autoconf for the kernel.
206 */ 217 */
207#define unreachable() __builtin_unreachable() 218#define unreachable() annotate_unreachable(); __builtin_unreachable()
208 219
209/* Mark a function definition as prohibited from being cloned. */ 220/* Mark a function definition as prohibited from being cloned. */
210#define __noclone __attribute__((__noclone__, __optimize__("no-tracer"))) 221#define __noclone __attribute__((__noclone__, __optimize__("no-tracer")))