diff options
Diffstat (limited to 'include/linux/compiler-gcc.h')
-rw-r--r-- | include/linux/compiler-gcc.h | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 179375b2d862..17cbe3cffc0e 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
@@ -128,6 +128,22 @@ | |||
128 | #define __always_unused __attribute__((unused)) | 128 | #define __always_unused __attribute__((unused)) |
129 | #define __mode(x) __attribute__((mode(x))) | 129 | #define __mode(x) __attribute__((mode(x))) |
130 | 130 | ||
131 | #ifdef CONFIG_STACK_VALIDATION | ||
132 | #define annotate_unreachable() ({ \ | ||
133 | asm("%c0:\n\t" \ | ||
134 | ".pushsection .discard.unreachable\n\t" \ | ||
135 | ".long %c0b - .\n\t" \ | ||
136 | ".popsection\n\t" : : "i" (__LINE__)); \ | ||
137 | }) | ||
138 | #define ASM_UNREACHABLE \ | ||
139 | "999:\n\t" \ | ||
140 | ".pushsection .discard.unreachable\n\t" \ | ||
141 | ".long 999b - .\n\t" \ | ||
142 | ".popsection\n\t" | ||
143 | #else | ||
144 | #define annotate_unreachable() | ||
145 | #endif | ||
146 | |||
131 | /* gcc version specific checks */ | 147 | /* gcc version specific checks */ |
132 | 148 | ||
133 | #if GCC_VERSION < 30200 | 149 | #if GCC_VERSION < 30200 |
@@ -201,22 +217,6 @@ | |||
201 | #endif | 217 | #endif |
202 | #endif | 218 | #endif |
203 | 219 | ||
204 | #ifdef CONFIG_STACK_VALIDATION | ||
205 | #define annotate_unreachable() ({ \ | ||
206 | asm("%c0:\n\t" \ | ||
207 | ".pushsection .discard.unreachable\n\t" \ | ||
208 | ".long %c0b - .\n\t" \ | ||
209 | ".popsection\n\t" : : "i" (__LINE__)); \ | ||
210 | }) | ||
211 | #define ASM_UNREACHABLE \ | ||
212 | "999:\n\t" \ | ||
213 | ".pushsection .discard.unreachable\n\t" \ | ||
214 | ".long 999b - .\n\t" \ | ||
215 | ".popsection\n\t" | ||
216 | #else | ||
217 | #define annotate_unreachable() | ||
218 | #endif | ||
219 | |||
220 | /* | 220 | /* |
221 | * Mark a position in code as unreachable. This can be used to | 221 | * Mark a position in code as unreachable. This can be used to |
222 | * suppress control flow warnings after asm blocks that transfer | 222 | * suppress control flow warnings after asm blocks that transfer |