|
@@ -99,22 +99,13 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
|
|
|
* unique, to convince GCC not to merge duplicate inline asm statements.
|
|
|
*/
|
|
|
#define annotate_reachable() ({ \
|
|
|
- asm volatile("%c0:\n\t" \
|
|
|
- ".pushsection .discard.reachable\n\t" \
|
|
|
- ".long %c0b - .\n\t" \
|
|
|
- ".popsection\n\t" : : "i" (__COUNTER__)); \
|
|
|
+ asm volatile("ANNOTATE_REACHABLE counter=%c0" \
|
|
|
+ : : "i" (__COUNTER__)); \
|
|
|
})
|
|
|
#define annotate_unreachable() ({ \
|
|
|
- asm volatile("%c0:\n\t" \
|
|
|
- ".pushsection .discard.unreachable\n\t" \
|
|
|
- ".long %c0b - .\n\t" \
|
|
|
- ".popsection\n\t" : : "i" (__COUNTER__)); \
|
|
|
+ asm volatile("ANNOTATE_UNREACHABLE counter=%c0" \
|
|
|
+ : : "i" (__COUNTER__)); \
|
|
|
})
|
|
|
-#define ASM_UNREACHABLE \
|
|
|
- "999:\n\t" \
|
|
|
- ".pushsection .discard.unreachable\n\t" \
|
|
|
- ".long 999b - .\n\t" \
|
|
|
- ".popsection\n\t"
|
|
|
#else
|
|
|
#define annotate_reachable()
|
|
|
#define annotate_unreachable()
|
|
@@ -299,6 +290,45 @@ static inline void *offset_to_ptr(const int *off)
|
|
|
return (void *)((unsigned long)off + *off);
|
|
|
}
|
|
|
|
|
|
+#else /* __ASSEMBLY__ */
|
|
|
+
|
|
|
+#ifdef __KERNEL__
|
|
|
+#ifndef LINKER_SCRIPT
|
|
|
+
|
|
|
+#ifdef CONFIG_STACK_VALIDATION
|
|
|
+.macro ANNOTATE_UNREACHABLE counter:req
|
|
|
+\counter:
|
|
|
+ .pushsection .discard.unreachable
|
|
|
+ .long \counter\()b -.
|
|
|
+ .popsection
|
|
|
+.endm
|
|
|
+
|
|
|
+.macro ANNOTATE_REACHABLE counter:req
|
|
|
+\counter:
|
|
|
+ .pushsection .discard.reachable
|
|
|
+ .long \counter\()b -.
|
|
|
+ .popsection
|
|
|
+.endm
|
|
|
+
|
|
|
+.macro ASM_UNREACHABLE
|
|
|
+999:
|
|
|
+ .pushsection .discard.unreachable
|
|
|
+ .long 999b - .
|
|
|
+ .popsection
|
|
|
+.endm
|
|
|
+#else /* CONFIG_STACK_VALIDATION */
|
|
|
+.macro ANNOTATE_UNREACHABLE counter:req
|
|
|
+.endm
|
|
|
+
|
|
|
+.macro ANNOTATE_REACHABLE counter:req
|
|
|
+.endm
|
|
|
+
|
|
|
+.macro ASM_UNREACHABLE
|
|
|
+.endm
|
|
|
+#endif /* CONFIG_STACK_VALIDATION */
|
|
|
+
|
|
|
+#endif /* LINKER_SCRIPT */
|
|
|
+#endif /* __KERNEL__ */
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
|
|
#ifndef __optimize
|