|
@@ -128,6 +128,22 @@
|
|
|
#define __always_unused __attribute__((unused))
|
|
|
#define __mode(x) __attribute__((mode(x)))
|
|
|
|
|
|
+#ifdef CONFIG_STACK_VALIDATION
|
|
|
+#define annotate_unreachable() ({ \
|
|
|
+ asm("%c0:\n\t" \
|
|
|
+ ".pushsection .discard.unreachable\n\t" \
|
|
|
+ ".long %c0b - .\n\t" \
|
|
|
+ ".popsection\n\t" : : "i" (__LINE__)); \
|
|
|
+})
|
|
|
+#define ASM_UNREACHABLE \
|
|
|
+ "999:\n\t" \
|
|
|
+ ".pushsection .discard.unreachable\n\t" \
|
|
|
+ ".long 999b - .\n\t" \
|
|
|
+ ".popsection\n\t"
|
|
|
+#else
|
|
|
+#define annotate_unreachable()
|
|
|
+#endif
|
|
|
+
|
|
|
/* gcc version specific checks */
|
|
|
|
|
|
#if GCC_VERSION < 30200
|
|
@@ -201,22 +217,6 @@
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
-#ifdef CONFIG_STACK_VALIDATION
|
|
|
-#define annotate_unreachable() ({ \
|
|
|
- asm("%c0:\n\t" \
|
|
|
- ".pushsection .discard.unreachable\n\t" \
|
|
|
- ".long %c0b - .\n\t" \
|
|
|
- ".popsection\n\t" : : "i" (__LINE__)); \
|
|
|
-})
|
|
|
-#define ASM_UNREACHABLE \
|
|
|
- "999:\n\t" \
|
|
|
- ".pushsection .discard.unreachable\n\t" \
|
|
|
- ".long 999b - .\n\t" \
|
|
|
- ".popsection\n\t"
|
|
|
-#else
|
|
|
-#define annotate_unreachable()
|
|
|
-#endif
|
|
|
-
|
|
|
/*
|
|
|
* Mark a position in code as unreachable. This can be used to
|
|
|
* suppress control flow warnings after asm blocks that transfer
|