diff options
Diffstat (limited to 'include/linux/compiler.h')
| -rw-r--r-- | include/linux/compiler.h | 56 | 
1 files changed, 43 insertions, 13 deletions
| diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 681d866efb1e..1921545c6351 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -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 | 
