.quad do_alignment_check
.quad do_machine_check
.quad do_simd_coprocessor_error
- .rept TRAP_last_reserved + 1 - ((. - exception_table) / 8)
+ .rept TRAP_nr - ((. - exception_table) / 8)
.quad do_reserved_trap /* Architecturally reserved exceptions. */
.endr
+ .size exception_table, . - exception_table
ENTRY(hypercall_table)
.quad do_set_trap_table /* 0 */
entrypoint 1b
/* Reserved exceptions, heading towards do_reserved_trap(). */
- .elseif vec == TRAP_copro_seg || vec == TRAP_spurious_int || (vec > TRAP_simd_error && vec <= TRAP_last_reserved)
+ .elseif vec == TRAP_copro_seg || vec == TRAP_spurious_int || (vec > TRAP_simd_error && vec < TRAP_nr)
1: test $8,%spl /* 64bit exception frames are 16 byte aligned, but the word */
jz 2f /* size is 8 bytes. Check whether the processor gave us an */
#define TRAP_machine_check 18
#define TRAP_simd_error 19
#define TRAP_virtualisation 20
-#define TRAP_last_reserved 31
+#define TRAP_nr 32
/* Set for entry via SYSCALL. Informs return code to use SYSRETQ not IRETQ. */
/* NB. Same as VGCF_in_syscall. No bits in common with any other TRAP_ defn. */
void mcheck_init(struct cpuinfo_x86 *c, bool_t bsp);
+/* Dispatch table for exceptions */
+extern void (* const exception_table[TRAP_nr])(struct cpu_user_regs *regs);
+
#define DECLARE_TRAP_HANDLER(_name) \
void _name(void); \
void do_ ## _name(struct cpu_user_regs *regs)