x86, extable: Remove open-coded exception table entries in arch/x86/kernel/entry_32.S

Remove open-coded exception table entries in arch/x86/kernel/entry_32.S,
and replace them with _ASM_EXTABLE() macros; this will allow us to
change the format and type of the exception table entries.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Cc: David Daney <david.daney@cavium.com>
Link: http://lkml.kernel.org/r/CA%2B55aFyijf43qSu3N9nWHEBwaGbb7T2Oq9A=9EyR=Jtyqfq_cQ@mail.gmail.com
This commit is contained in:
H. Peter Anvin 2012-04-20 12:19:50 -07:00
parent 1ce6f86815
commit 6837a54dd6

View File

@ -56,6 +56,7 @@
#include <asm/irq_vectors.h> #include <asm/irq_vectors.h>
#include <asm/cpufeature.h> #include <asm/cpufeature.h>
#include <asm/alternative-asm.h> #include <asm/alternative-asm.h>
#include <asm/asm.h>
/* Avoid __ASSEMBLER__'ifying <linux/audit.h> just for this. */ /* Avoid __ASSEMBLER__'ifying <linux/audit.h> just for this. */
#include <linux/elf-em.h> #include <linux/elf-em.h>
@ -151,10 +152,8 @@
.pushsection .fixup, "ax" .pushsection .fixup, "ax"
99: movl $0, (%esp) 99: movl $0, (%esp)
jmp 98b jmp 98b
.section __ex_table, "a"
.align 4
.long 98b, 99b
.popsection .popsection
_ASM_EXTABLE(98b,99b)
.endm .endm
.macro PTGS_TO_GS .macro PTGS_TO_GS
@ -164,10 +163,8 @@
.pushsection .fixup, "ax" .pushsection .fixup, "ax"
99: movl $0, PT_GS(%esp) 99: movl $0, PT_GS(%esp)
jmp 98b jmp 98b
.section __ex_table, "a"
.align 4
.long 98b, 99b
.popsection .popsection
_ASM_EXTABLE(98b,99b)
.endm .endm
.macro GS_TO_REG reg .macro GS_TO_REG reg
@ -249,12 +246,10 @@
jmp 2b jmp 2b
6: movl $0, (%esp) 6: movl $0, (%esp)
jmp 3b jmp 3b
.section __ex_table, "a"
.align 4
.long 1b, 4b
.long 2b, 5b
.long 3b, 6b
.popsection .popsection
_ASM_EXTABLE(1b,4b)
_ASM_EXTABLE(2b,5b)
_ASM_EXTABLE(3b,6b)
POP_GS_EX POP_GS_EX
.endm .endm
@ -415,10 +410,7 @@ sysenter_past_esp:
jae syscall_fault jae syscall_fault
1: movl (%ebp),%ebp 1: movl (%ebp),%ebp
movl %ebp,PT_EBP(%esp) movl %ebp,PT_EBP(%esp)
.section __ex_table,"a" _ASM_EXTABLE(1b,syscall_fault)
.align 4
.long 1b,syscall_fault
.previous
GET_THREAD_INFO(%ebp) GET_THREAD_INFO(%ebp)
@ -485,10 +477,8 @@ sysexit_audit:
.pushsection .fixup,"ax" .pushsection .fixup,"ax"
2: movl $0,PT_FS(%esp) 2: movl $0,PT_FS(%esp)
jmp 1b jmp 1b
.section __ex_table,"a"
.align 4
.long 1b,2b
.popsection .popsection
_ASM_EXTABLE(1b,2b)
PTGS_TO_GS_EX PTGS_TO_GS_EX
ENDPROC(ia32_sysenter_target) ENDPROC(ia32_sysenter_target)
@ -543,10 +533,7 @@ ENTRY(iret_exc)
pushl $do_iret_error pushl $do_iret_error
jmp error_code jmp error_code
.previous .previous
.section __ex_table,"a" _ASM_EXTABLE(irq_return,iret_exc)
.align 4
.long irq_return,iret_exc
.previous
CFI_RESTORE_STATE CFI_RESTORE_STATE
ldt_ss: ldt_ss:
@ -901,10 +888,7 @@ END(device_not_available)
#ifdef CONFIG_PARAVIRT #ifdef CONFIG_PARAVIRT
ENTRY(native_iret) ENTRY(native_iret)
iret iret
.section __ex_table,"a" _ASM_EXTABLE(native_iret, iret_exc)
.align 4
.long native_iret, iret_exc
.previous
END(native_iret) END(native_iret)
ENTRY(native_irq_enable_sysexit) ENTRY(native_irq_enable_sysexit)
@ -1093,13 +1077,10 @@ ENTRY(xen_failsafe_callback)
movl %eax,16(%esp) movl %eax,16(%esp)
jmp 4b jmp 4b
.previous .previous
.section __ex_table,"a" _ASM_EXTABLE(1b,6b)
.align 4 _ASM_EXTABLE(2b,7b)
.long 1b,6b _ASM_EXTABLE(3b,8b)
.long 2b,7b _ASM_EXTABLE(4b,9b)
.long 3b,8b
.long 4b,9b
.previous
ENDPROC(xen_failsafe_callback) ENDPROC(xen_failsafe_callback)
BUILD_INTERRUPT3(xen_hvm_callback_vector, XEN_HVM_EVTCHN_CALLBACK, BUILD_INTERRUPT3(xen_hvm_callback_vector, XEN_HVM_EVTCHN_CALLBACK,