diff options
Diffstat (limited to 'include/linux/compiler-gcc.h')
-rw-r--r-- | include/linux/compiler-gcc.h | 13 |
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"))) |