diff options
Diffstat (limited to 'arch/x86/include/asm/asm.h')
| -rw-r--r-- | arch/x86/include/asm/asm.h | 55 | 
1 files changed, 25 insertions, 30 deletions
| diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h index 3ad3da9a7d97..3a168483bc8e 100644 --- a/arch/x86/include/asm/asm.h +++ b/arch/x86/include/asm/asm.h @@ -6,11 +6,13 @@  # define __ASM_FORM(x, ...)		x,## __VA_ARGS__  # define __ASM_FORM_RAW(x, ...)		x,## __VA_ARGS__  # define __ASM_FORM_COMMA(x, ...)	x,## __VA_ARGS__, +# define __ASM_REGPFX			%  #else  #include <linux/stringify.h>  # define __ASM_FORM(x, ...)		" " __stringify(x,##__VA_ARGS__) " "  # define __ASM_FORM_RAW(x, ...)		    __stringify(x,##__VA_ARGS__)  # define __ASM_FORM_COMMA(x, ...)	" " __stringify(x,##__VA_ARGS__) "," +# define __ASM_REGPFX			%%  #endif  #define _ASM_BYTES(x, ...)	__ASM_FORM(.byte x,##__VA_ARGS__ ;) @@ -49,6 +51,9 @@  #define _ASM_SI		__ASM_REG(si)  #define _ASM_DI		__ASM_REG(di) +/* Adds a (%rip) suffix on 64 bits only; for immediate memory references */ +#define _ASM_RIP(x)	__ASM_SEL_RAW(x, x (__ASM_REGPFX rip)) +  #ifndef __x86_64__  /* 32 bit */ @@ -122,28 +127,19 @@  #ifdef __KERNEL__ +# include <asm/extable_fixup_types.h> +  /* Exception table entry */  #ifdef __ASSEMBLY__ -# define _ASM_EXTABLE_HANDLE(from, to, handler)			\ + +# define _ASM_EXTABLE_TYPE(from, to, type)			\  	.pushsection "__ex_table","a" ;				\  	.balign 4 ;						\  	.long (from) - . ;					\  	.long (to) - . ;					\ -	.long (handler) - . ;					\ +	.long type ;						\  	.popsection -# define _ASM_EXTABLE(from, to)					\ -	_ASM_EXTABLE_HANDLE(from, to, ex_handler_default) - -# define _ASM_EXTABLE_UA(from, to)				\ -	_ASM_EXTABLE_HANDLE(from, to, ex_handler_uaccess) - -# define _ASM_EXTABLE_CPY(from, to)				\ -	_ASM_EXTABLE_HANDLE(from, to, ex_handler_copy) - -# define _ASM_EXTABLE_FAULT(from, to)				\ -	_ASM_EXTABLE_HANDLE(from, to, ex_handler_fault) -  # ifdef CONFIG_KPROBES  #  define _ASM_NOKPROBE(entry)					\  	.pushsection "_kprobe_blacklist","aw" ;			\ @@ -155,27 +151,15 @@  # endif  #else /* ! __ASSEMBLY__ */ -# define _EXPAND_EXTABLE_HANDLE(x) #x -# define _ASM_EXTABLE_HANDLE(from, to, handler)			\ + +# define _ASM_EXTABLE_TYPE(from, to, type)			\  	" .pushsection \"__ex_table\",\"a\"\n"			\  	" .balign 4\n"						\  	" .long (" #from ") - .\n"				\  	" .long (" #to ") - .\n"				\ -	" .long (" _EXPAND_EXTABLE_HANDLE(handler) ") - .\n"	\ +	" .long " __stringify(type) " \n"			\  	" .popsection\n" -# define _ASM_EXTABLE(from, to)					\ -	_ASM_EXTABLE_HANDLE(from, to, ex_handler_default) - -# define _ASM_EXTABLE_UA(from, to)				\ -	_ASM_EXTABLE_HANDLE(from, to, ex_handler_uaccess) - -# define _ASM_EXTABLE_CPY(from, to)				\ -	_ASM_EXTABLE_HANDLE(from, to, ex_handler_copy) - -# define _ASM_EXTABLE_FAULT(from, to)				\ -	_ASM_EXTABLE_HANDLE(from, to, ex_handler_fault) -  /* For C file, we already have NOKPROBE_SYMBOL macro */  /* @@ -188,6 +172,17 @@ register unsigned long current_stack_pointer asm(_ASM_SP);  #define ASM_CALL_CONSTRAINT "+r" (current_stack_pointer)  #endif /* __ASSEMBLY__ */ -#endif /* __KERNEL__ */ +#define _ASM_EXTABLE(from, to)					\ +	_ASM_EXTABLE_TYPE(from, to, EX_TYPE_DEFAULT) +#define _ASM_EXTABLE_UA(from, to)				\ +	_ASM_EXTABLE_TYPE(from, to, EX_TYPE_UACCESS) + +#define _ASM_EXTABLE_CPY(from, to)				\ +	_ASM_EXTABLE_TYPE(from, to, EX_TYPE_COPY) + +#define _ASM_EXTABLE_FAULT(from, to)				\ +	_ASM_EXTABLE_TYPE(from, to, EX_TYPE_FAULT) + +#endif /* __KERNEL__ */  #endif /* _ASM_X86_ASM_H */ |