/*
* Copyright (c) 2011-2018 Richard Braun.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include
#include
#include
#include
#define CPU_RED_ZONE_SIZE 128
/*
* Macro used to compute an offset, in bytes, between two indexes in a
* low level exception frame. The indexes may be given in any order.
*/
#define CPU_LEF_OFFSET(index1, index2) (((index2) - (index1)) * CPU_WORD_SIZE)
.text
#ifdef __LP64__
/*
* Number of CPU registers on exception.
*
* These are the registers automatically pushed by the CPU when an exception
* is taken, including the error code.
*/
#define CPU_NR_CRE (CPU_EXC_FRAME_SIZE - CPU_EXC_FRAME_ERROR)
/*
* Remaining size when taking an exception.
*
* This is the total size of an exception frame without the registers
* automatically pushed by the CPU and those saved for stack switching.
*/
#define CPU_LEF_EXC_REM CPU_LEF_OFFSET(CPU_EXC_FRAME_ERROR - 2, \
CPU_EXC_FRAME_SIZE)
/*
* RSP offset, from the top of the exception frame.
*/
#define CPU_LEF_RSP CPU_LEF_OFFSET(CPU_EXC_FRAME_SIZE, \
CPU_EXC_FRAME_RSP)
/*
* Offsets where registers used for stack switching are saved when taking
* an exception, from the top of the exception frame.
*/
#define CPU_LEF_EXC_RAX CPU_LEF_OFFSET(CPU_EXC_FRAME_SIZE, \
CPU_EXC_FRAME_ERROR - 2)
#define CPU_LEF_EXC_RBX CPU_LEF_OFFSET(CPU_EXC_FRAME_SIZE, \
CPU_EXC_FRAME_ERROR - 1)
/*
* Size used to store the vector and the error code.
*/
#define CPU_LEF_VEC_ERR CPU_LEF_OFFSET(CPU_EXC_FRAME_VECTOR, \
CPU_EXC_FRAME_ERROR + 1)
.macro cpu_ll_exc_store_registers
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %r11
pushq %r10
pushq %r9
pushq %r8
pushq %rdi
pushq %rsi
pushq %rbp
pushq %rdx
pushq %rcx
pushq %rbx
pushq %rax
.endm
.macro cpu_ll_exc_load_registers
popq %rax
popq %rbx
popq %rcx
popq %rdx
popq %rbp
popq %rsi
popq %rdi
popq %r8
popq %r9
popq %r10
popq %r11
popq %r12
popq %r13
popq %r14
popq %r15
addq $CPU_LEF_VEC_ERR, %rsp /* skip vector and error */
.endm
.macro cpu_ll_exc_push_word source offset buffer
movq -\offset(\source), \buffer
pushq \buffer
.endm
.macro cpu_ll_exc_push source nr_words buffer
.set offset, CPU_WORD_SIZE
.rept \nr_words
cpu_ll_exc_push_word \source offset \buffer
.set offset, offset + CPU_WORD_SIZE
.endr
.endm
/*
* Note that, unlike i386, the CPU aligns the stack frame to 16 bytes,
* and skipping the red zone keeps the stack pointer correctly aligned.
*/
.macro cpu_ll_exc_enter vector
pushq %rbx /* save registers used for */
pushq %rax /* stack switching */
leaq CPU_LEF_EXC_REM(%rsp), %rbx /* point to exception frame top */
movq CPU_LEF_RSP(%rbx), %rsp /* point to thread stack */
subq $CPU_RED_ZONE_SIZE, %rsp /* skip red zone */
cpu_ll_exc_push %rbx, CPU_NR_CRE, %rax /* copy frame start from interrupt
stack to thread stack */
movq CPU_LEF_EXC_RAX(%rbx), %rax /* restore registers used */
movq CPU_LEF_EXC_RBX(%rbx), %rbx /* for stack switching */
pushq $\vector /* complete exception frame */
cpu_ll_exc_store_registers
xorq %rbp, %rbp /* block stack tracing */
movq %rsp, %rbx /* save frame */
.endm
.macro cpu_ll_exc_leave
movq %rbx, %rsp /* restore stack */
call thread_schedule /* schedule threads */
cpu_ll_exc_load_registers
iretq
.endm
.macro cpu_ll_exc_handle vector
cpu_ll_exc_enter \vector
movq %rbx, %rdi
andq $(~(CPU_DATA_ALIGN - 1)), %rsp
call cpu_exc_main
cpu_ll_exc_leave
.endm
.macro cpu_ll_intr_handle vector
cpu_ll_exc_enter \vector
call cpu_get_intr_stack_ptr
movq %rax, %rsp /* switch to interrupt stack */
movq %rbx, %rdi
call cpu_intr_main
cpu_ll_exc_leave
.endm
#else /* __LP64__ */
/*
* Size used to store the segment registers, the vector and the error code.
*/
#define CPU_LEF_SEGS_VEC_ERR CPU_LEF_OFFSET(CPU_EXC_FRAME_DS, \
CPU_EXC_FRAME_ERROR + 1)
.macro cpu_ll_exc_store_registers
pushl %gs
pushl %fs
pushl %es
pushl %ds
pushl %edi
pushl %esi
pushl %ebp
pushl %edx
pushl %ecx
pushl %ebx
pushl %eax
.endm
/* XXX Don't load segment registers for now */
.macro cpu_ll_exc_load_registers
popl %eax
popl %ebx
popl %ecx
popl %edx
popl %ebp
popl %esi
popl %edi
addl $CPU_LEF_SEGS_VEC_ERR, %esp /* skip segment registers,
vector and error */
.endm
.macro cpu_ll_exc_enter vector
pushl $\vector
cpu_ll_exc_store_registers
xorl %ebp, %ebp /* block stack tracing */
movl %esp, %ebx /* save frame */
.endm
.macro cpu_ll_exc_align_stack nr_args
andl $(~(CPU_DATA_ALIGN - 1)), %esp
addl $((\nr_args * CPU_WORD_SIZE) % CPU_DATA_ALIGN), %esp
.endm
.macro cpu_ll_exc_leave
movl %ebx, %esp /* restore stack */
call thread_schedule /* schedule threads */
cpu_ll_exc_load_registers
iretl
.endm
.macro cpu_ll_exc_handle vector
cpu_ll_exc_enter \vector
cpu_ll_exc_align_stack 1
pushl %ebx
call cpu_exc_main
cpu_ll_exc_leave
.endm
.macro cpu_ll_intr_handle vector
cpu_ll_exc_enter \vector
call cpu_get_intr_stack_ptr
movl %eax, %esp /* switch to interrupt stack */
cpu_ll_exc_align_stack 1
pushl %ebx
call cpu_intr_main
cpu_ll_exc_leave
.endm
#endif /* __LP64__ */
#define CPU_LL_EXC_HANDLER(vector, name) \
ASM_ENTRY(name) \
push $0; \
cpu_ll_exc_handle vector; \
ASM_END(name)
#define CPU_LL_EXC_HANDLER_WITH_ERROR(vector, name) \
ASM_ENTRY(name) \
cpu_ll_exc_handle vector; \
ASM_END(name)
#define CPU_LL_INTR_HANDLER(vector, name) \
ASM_ENTRY(name) \
push $0; \
cpu_ll_intr_handle vector; \
ASM_END(name)
/*
* Low level handlers for architectural exceptions.
*/
CPU_LL_EXC_HANDLER(CPU_EXC_DE, cpu_ll_exc_divide_error)
CPU_LL_EXC_HANDLER(CPU_EXC_DB, cpu_ll_exc_debug)
CPU_LL_INTR_HANDLER(CPU_EXC_NMI, cpu_ll_exc_nmi)
CPU_LL_EXC_HANDLER(CPU_EXC_BP, cpu_ll_exc_breakpoint)
CPU_LL_EXC_HANDLER(CPU_EXC_OF, cpu_ll_exc_overflow)
CPU_LL_EXC_HANDLER(CPU_EXC_BR, cpu_ll_exc_bound_range)
CPU_LL_EXC_HANDLER(CPU_EXC_UD, cpu_ll_exc_undefined_opcode)
CPU_LL_EXC_HANDLER(CPU_EXC_NM, cpu_ll_exc_no_math_coprocessor)
CPU_LL_EXC_HANDLER_WITH_ERROR(CPU_EXC_DF, cpu_ll_exc_double_fault)
CPU_LL_EXC_HANDLER_WITH_ERROR(CPU_EXC_TS, cpu_ll_exc_invalid_tss)
CPU_LL_EXC_HANDLER_WITH_ERROR(CPU_EXC_NP, cpu_ll_exc_segment_not_present)
CPU_LL_EXC_HANDLER_WITH_ERROR(CPU_EXC_SS, cpu_ll_exc_stack_segment_fault)
CPU_LL_EXC_HANDLER_WITH_ERROR(CPU_EXC_GP, cpu_ll_exc_general_protection)
CPU_LL_EXC_HANDLER_WITH_ERROR(CPU_EXC_PF, cpu_ll_exc_page_fault)
CPU_LL_EXC_HANDLER(CPU_EXC_MF, cpu_ll_exc_math_fault)
CPU_LL_EXC_HANDLER_WITH_ERROR(CPU_EXC_AC, cpu_ll_exc_alignment_check)
CPU_LL_INTR_HANDLER(CPU_EXC_MC, cpu_ll_exc_machine_check)
CPU_LL_EXC_HANDLER(CPU_EXC_XM, cpu_ll_exc_simd_fp_exception)
/*
* Low level handlers for reserved exceptions.
*
* These exceptions should normally never occur, but have handlers ready just
* in case.
*/
CPU_LL_EXC_HANDLER(9, cpu_ll_exc_9)
CPU_LL_EXC_HANDLER(15, cpu_ll_exc_15)
CPU_LL_EXC_HANDLER(20, cpu_ll_exc_20)
CPU_LL_EXC_HANDLER(21, cpu_ll_exc_21)
CPU_LL_EXC_HANDLER(22, cpu_ll_exc_22)
CPU_LL_EXC_HANDLER(23, cpu_ll_exc_23)
CPU_LL_EXC_HANDLER(24, cpu_ll_exc_24)
CPU_LL_EXC_HANDLER(25, cpu_ll_exc_25)
CPU_LL_EXC_HANDLER(26, cpu_ll_exc_26)
CPU_LL_EXC_HANDLER(27, cpu_ll_exc_27)
CPU_LL_EXC_HANDLER(28, cpu_ll_exc_28)
CPU_LL_EXC_HANDLER(29, cpu_ll_exc_29)
CPU_LL_EXC_HANDLER(30, cpu_ll_exc_30)
CPU_LL_EXC_HANDLER(31, cpu_ll_exc_31)
/* Generic low level interrupt handlers */
CPU_LL_INTR_HANDLER(32, cpu_ll_exc_32)
CPU_LL_INTR_HANDLER(33, cpu_ll_exc_33)
CPU_LL_INTR_HANDLER(34, cpu_ll_exc_34)
CPU_LL_INTR_HANDLER(35, cpu_ll_exc_35)
CPU_LL_INTR_HANDLER(36, cpu_ll_exc_36)
CPU_LL_INTR_HANDLER(37, cpu_ll_exc_37)
CPU_LL_INTR_HANDLER(38, cpu_ll_exc_38)
CPU_LL_INTR_HANDLER(39, cpu_ll_exc_39)
CPU_LL_INTR_HANDLER(40, cpu_ll_exc_40)
CPU_LL_INTR_HANDLER(41, cpu_ll_exc_41)
CPU_LL_INTR_HANDLER(42, cpu_ll_exc_42)
CPU_LL_INTR_HANDLER(43, cpu_ll_exc_43)
CPU_LL_INTR_HANDLER(44, cpu_ll_exc_44)
CPU_LL_INTR_HANDLER(45, cpu_ll_exc_45)
CPU_LL_INTR_HANDLER(46, cpu_ll_exc_46)
CPU_LL_INTR_HANDLER(47, cpu_ll_exc_47)
CPU_LL_INTR_HANDLER(48, cpu_ll_exc_48)
CPU_LL_INTR_HANDLER(49, cpu_ll_exc_49)
CPU_LL_INTR_HANDLER(50, cpu_ll_exc_50)
CPU_LL_INTR_HANDLER(51, cpu_ll_exc_51)
CPU_LL_INTR_HANDLER(52, cpu_ll_exc_52)
CPU_LL_INTR_HANDLER(53, cpu_ll_exc_53)
CPU_LL_INTR_HANDLER(54, cpu_ll_exc_54)
CPU_LL_INTR_HANDLER(55, cpu_ll_exc_55)
CPU_LL_INTR_HANDLER(56, cpu_ll_exc_56)
CPU_LL_INTR_HANDLER(57, cpu_ll_exc_57)
CPU_LL_INTR_HANDLER(58, cpu_ll_exc_58)
CPU_LL_INTR_HANDLER(59, cpu_ll_exc_59)
CPU_LL_INTR_HANDLER(60, cpu_ll_exc_60)
CPU_LL_INTR_HANDLER(61, cpu_ll_exc_61)
CPU_LL_INTR_HANDLER(62, cpu_ll_exc_62)
CPU_LL_INTR_HANDLER(63, cpu_ll_exc_63)
CPU_LL_INTR_HANDLER(64, cpu_ll_exc_64)
CPU_LL_INTR_HANDLER(65, cpu_ll_exc_65)
CPU_LL_INTR_HANDLER(66, cpu_ll_exc_66)
CPU_LL_INTR_HANDLER(67, cpu_ll_exc_67)
CPU_LL_INTR_HANDLER(68, cpu_ll_exc_68)
CPU_LL_INTR_HANDLER(69, cpu_ll_exc_69)
CPU_LL_INTR_HANDLER(70, cpu_ll_exc_70)
CPU_LL_INTR_HANDLER(71, cpu_ll_exc_71)
CPU_LL_INTR_HANDLER(72, cpu_ll_exc_72)
CPU_LL_INTR_HANDLER(73, cpu_ll_exc_73)
CPU_LL_INTR_HANDLER(74, cpu_ll_exc_74)
CPU_LL_INTR_HANDLER(75, cpu_ll_exc_75)
CPU_LL_INTR_HANDLER(76, cpu_ll_exc_76)
CPU_LL_INTR_HANDLER(77, cpu_ll_exc_77)
CPU_LL_INTR_HANDLER(78, cpu_ll_exc_78)
CPU_LL_INTR_HANDLER(79, cpu_ll_exc_79)
CPU_LL_INTR_HANDLER(80, cpu_ll_exc_80)
CPU_LL_INTR_HANDLER(81, cpu_ll_exc_81)
CPU_LL_INTR_HANDLER(82, cpu_ll_exc_82)
CPU_LL_INTR_HANDLER(83, cpu_ll_exc_83)
CPU_LL_INTR_HANDLER(84, cpu_ll_exc_84)
CPU_LL_INTR_HANDLER(85, cpu_ll_exc_85)
CPU_LL_INTR_HANDLER(86, cpu_ll_exc_86)
CPU_LL_INTR_HANDLER(87, cpu_ll_exc_87)
CPU_LL_INTR_HANDLER(88, cpu_ll_exc_88)
CPU_LL_INTR_HANDLER(89, cpu_ll_exc_89)
CPU_LL_INTR_HANDLER(90, cpu_ll_exc_90)
CPU_LL_INTR_HANDLER(91, cpu_ll_exc_91)
CPU_LL_INTR_HANDLER(92, cpu_ll_exc_92)
CPU_LL_INTR_HANDLER(93, cpu_ll_exc_93)
CPU_LL_INTR_HANDLER(94, cpu_ll_exc_94)
CPU_LL_INTR_HANDLER(95, cpu_ll_exc_95)
CPU_LL_INTR_HANDLER(96, cpu_ll_exc_96)
CPU_LL_INTR_HANDLER(97, cpu_ll_exc_97)
CPU_LL_INTR_HANDLER(98, cpu_ll_exc_98)
CPU_LL_INTR_HANDLER(99, cpu_ll_exc_99)
CPU_LL_INTR_HANDLER(100, cpu_ll_exc_100)
CPU_LL_INTR_HANDLER(101, cpu_ll_exc_101)
CPU_LL_INTR_HANDLER(102, cpu_ll_exc_102)
CPU_LL_INTR_HANDLER(103, cpu_ll_exc_103)
CPU_LL_INTR_HANDLER(104, cpu_ll_exc_104)
CPU_LL_INTR_HANDLER(105, cpu_ll_exc_105)
CPU_LL_INTR_HANDLER(106, cpu_ll_exc_106)
CPU_LL_INTR_HANDLER(107, cpu_ll_exc_107)
CPU_LL_INTR_HANDLER(108, cpu_ll_exc_108)
CPU_LL_INTR_HANDLER(109, cpu_ll_exc_109)
CPU_LL_INTR_HANDLER(110, cpu_ll_exc_110)
CPU_LL_INTR_HANDLER(111, cpu_ll_exc_111)
CPU_LL_INTR_HANDLER(112, cpu_ll_exc_112)
CPU_LL_INTR_HANDLER(113, cpu_ll_exc_113)
CPU_LL_INTR_HANDLER(114, cpu_ll_exc_114)
CPU_LL_INTR_HANDLER(115, cpu_ll_exc_115)
CPU_LL_INTR_HANDLER(116, cpu_ll_exc_116)
CPU_LL_INTR_HANDLER(117, cpu_ll_exc_117)
CPU_LL_INTR_HANDLER(118, cpu_ll_exc_118)
CPU_LL_INTR_HANDLER(119, cpu_ll_exc_119)
CPU_LL_INTR_HANDLER(120, cpu_ll_exc_120)
CPU_LL_INTR_HANDLER(121, cpu_ll_exc_121)
CPU_LL_INTR_HANDLER(122, cpu_ll_exc_122)
CPU_LL_INTR_HANDLER(123, cpu_ll_exc_123)
CPU_LL_INTR_HANDLER(124, cpu_ll_exc_124)
CPU_LL_INTR_HANDLER(125, cpu_ll_exc_125)
CPU_LL_INTR_HANDLER(126, cpu_ll_exc_126)
CPU_LL_INTR_HANDLER(127, cpu_ll_exc_127)
CPU_LL_INTR_HANDLER(128, cpu_ll_exc_128)
CPU_LL_INTR_HANDLER(129, cpu_ll_exc_129)
CPU_LL_INTR_HANDLER(130, cpu_ll_exc_130)
CPU_LL_INTR_HANDLER(131, cpu_ll_exc_131)
CPU_LL_INTR_HANDLER(132, cpu_ll_exc_132)
CPU_LL_INTR_HANDLER(133, cpu_ll_exc_133)
CPU_LL_INTR_HANDLER(134, cpu_ll_exc_134)
CPU_LL_INTR_HANDLER(135, cpu_ll_exc_135)
CPU_LL_INTR_HANDLER(136, cpu_ll_exc_136)
CPU_LL_INTR_HANDLER(137, cpu_ll_exc_137)
CPU_LL_INTR_HANDLER(138, cpu_ll_exc_138)
CPU_LL_INTR_HANDLER(139, cpu_ll_exc_139)
CPU_LL_INTR_HANDLER(140, cpu_ll_exc_140)
CPU_LL_INTR_HANDLER(141, cpu_ll_exc_141)
CPU_LL_INTR_HANDLER(142, cpu_ll_exc_142)
CPU_LL_INTR_HANDLER(143, cpu_ll_exc_143)
CPU_LL_INTR_HANDLER(144, cpu_ll_exc_144)
CPU_LL_INTR_HANDLER(145, cpu_ll_exc_145)
CPU_LL_INTR_HANDLER(146, cpu_ll_exc_146)
CPU_LL_INTR_HANDLER(147, cpu_ll_exc_147)
CPU_LL_INTR_HANDLER(148, cpu_ll_exc_148)
CPU_LL_INTR_HANDLER(149, cpu_ll_exc_149)
CPU_LL_INTR_HANDLER(150, cpu_ll_exc_150)
CPU_LL_INTR_HANDLER(151, cpu_ll_exc_151)
CPU_LL_INTR_HANDLER(152, cpu_ll_exc_152)
CPU_LL_INTR_HANDLER(153, cpu_ll_exc_153)
CPU_LL_INTR_HANDLER(154, cpu_ll_exc_154)
CPU_LL_INTR_HANDLER(155, cpu_ll_exc_155)
CPU_LL_INTR_HANDLER(156, cpu_ll_exc_156)
CPU_LL_INTR_HANDLER(157, cpu_ll_exc_157)
CPU_LL_INTR_HANDLER(158, cpu_ll_exc_158)
CPU_LL_INTR_HANDLER(159, cpu_ll_exc_159)
CPU_LL_INTR_HANDLER(160, cpu_ll_exc_160)
CPU_LL_INTR_HANDLER(161, cpu_ll_exc_161)
CPU_LL_INTR_HANDLER(162, cpu_ll_exc_162)
CPU_LL_INTR_HANDLER(163, cpu_ll_exc_163)
CPU_LL_INTR_HANDLER(164, cpu_ll_exc_164)
CPU_LL_INTR_HANDLER(165, cpu_ll_exc_165)
CPU_LL_INTR_HANDLER(166, cpu_ll_exc_166)
CPU_LL_INTR_HANDLER(167, cpu_ll_exc_167)
CPU_LL_INTR_HANDLER(168, cpu_ll_exc_168)
CPU_LL_INTR_HANDLER(169, cpu_ll_exc_169)
CPU_LL_INTR_HANDLER(170, cpu_ll_exc_170)
CPU_LL_INTR_HANDLER(171, cpu_ll_exc_171)
CPU_LL_INTR_HANDLER(172, cpu_ll_exc_172)
CPU_LL_INTR_HANDLER(173, cpu_ll_exc_173)
CPU_LL_INTR_HANDLER(174, cpu_ll_exc_174)
CPU_LL_INTR_HANDLER(175, cpu_ll_exc_175)
CPU_LL_INTR_HANDLER(176, cpu_ll_exc_176)
CPU_LL_INTR_HANDLER(177, cpu_ll_exc_177)
CPU_LL_INTR_HANDLER(178, cpu_ll_exc_178)
CPU_LL_INTR_HANDLER(179, cpu_ll_exc_179)
CPU_LL_INTR_HANDLER(180, cpu_ll_exc_180)
CPU_LL_INTR_HANDLER(181, cpu_ll_exc_181)
CPU_LL_INTR_HANDLER(182, cpu_ll_exc_182)
CPU_LL_INTR_HANDLER(183, cpu_ll_exc_183)
CPU_LL_INTR_HANDLER(184, cpu_ll_exc_184)
CPU_LL_INTR_HANDLER(185, cpu_ll_exc_185)
CPU_LL_INTR_HANDLER(186, cpu_ll_exc_186)
CPU_LL_INTR_HANDLER(187, cpu_ll_exc_187)
CPU_LL_INTR_HANDLER(188, cpu_ll_exc_188)
CPU_LL_INTR_HANDLER(189, cpu_ll_exc_189)
CPU_LL_INTR_HANDLER(190, cpu_ll_exc_190)
CPU_LL_INTR_HANDLER(191, cpu_ll_exc_191)
CPU_LL_INTR_HANDLER(192, cpu_ll_exc_192)
CPU_LL_INTR_HANDLER(193, cpu_ll_exc_193)
CPU_LL_INTR_HANDLER(194, cpu_ll_exc_194)
CPU_LL_INTR_HANDLER(195, cpu_ll_exc_195)
CPU_LL_INTR_HANDLER(196, cpu_ll_exc_196)
CPU_LL_INTR_HANDLER(197, cpu_ll_exc_197)
CPU_LL_INTR_HANDLER(198, cpu_ll_exc_198)
CPU_LL_INTR_HANDLER(199, cpu_ll_exc_199)
CPU_LL_INTR_HANDLER(200, cpu_ll_exc_200)
CPU_LL_INTR_HANDLER(201, cpu_ll_exc_201)
CPU_LL_INTR_HANDLER(202, cpu_ll_exc_202)
CPU_LL_INTR_HANDLER(203, cpu_ll_exc_203)
CPU_LL_INTR_HANDLER(204, cpu_ll_exc_204)
CPU_LL_INTR_HANDLER(205, cpu_ll_exc_205)
CPU_LL_INTR_HANDLER(206, cpu_ll_exc_206)
CPU_LL_INTR_HANDLER(207, cpu_ll_exc_207)
CPU_LL_INTR_HANDLER(208, cpu_ll_exc_208)
CPU_LL_INTR_HANDLER(209, cpu_ll_exc_209)
CPU_LL_INTR_HANDLER(210, cpu_ll_exc_210)
CPU_LL_INTR_HANDLER(211, cpu_ll_exc_211)
CPU_LL_INTR_HANDLER(212, cpu_ll_exc_212)
CPU_LL_INTR_HANDLER(213, cpu_ll_exc_213)
CPU_LL_INTR_HANDLER(214, cpu_ll_exc_214)
CPU_LL_INTR_HANDLER(215, cpu_ll_exc_215)
CPU_LL_INTR_HANDLER(216, cpu_ll_exc_216)
CPU_LL_INTR_HANDLER(217, cpu_ll_exc_217)
CPU_LL_INTR_HANDLER(218, cpu_ll_exc_218)
CPU_LL_INTR_HANDLER(219, cpu_ll_exc_219)
CPU_LL_INTR_HANDLER(220, cpu_ll_exc_220)
CPU_LL_INTR_HANDLER(221, cpu_ll_exc_221)
CPU_LL_INTR_HANDLER(222, cpu_ll_exc_222)
CPU_LL_INTR_HANDLER(223, cpu_ll_exc_223)
CPU_LL_INTR_HANDLER(224, cpu_ll_exc_224)
CPU_LL_INTR_HANDLER(225, cpu_ll_exc_225)
CPU_LL_INTR_HANDLER(226, cpu_ll_exc_226)
CPU_LL_INTR_HANDLER(227, cpu_ll_exc_227)
CPU_LL_INTR_HANDLER(228, cpu_ll_exc_228)
CPU_LL_INTR_HANDLER(229, cpu_ll_exc_229)
CPU_LL_INTR_HANDLER(230, cpu_ll_exc_230)
CPU_LL_INTR_HANDLER(231, cpu_ll_exc_231)
CPU_LL_INTR_HANDLER(232, cpu_ll_exc_232)
CPU_LL_INTR_HANDLER(233, cpu_ll_exc_233)
CPU_LL_INTR_HANDLER(234, cpu_ll_exc_234)
CPU_LL_INTR_HANDLER(235, cpu_ll_exc_235)
CPU_LL_INTR_HANDLER(236, cpu_ll_exc_236)
CPU_LL_INTR_HANDLER(237, cpu_ll_exc_237)
CPU_LL_INTR_HANDLER(238, cpu_ll_exc_238)
CPU_LL_INTR_HANDLER(239, cpu_ll_exc_239)
CPU_LL_INTR_HANDLER(240, cpu_ll_exc_240)
CPU_LL_INTR_HANDLER(241, cpu_ll_exc_241)
CPU_LL_INTR_HANDLER(242, cpu_ll_exc_242)
CPU_LL_INTR_HANDLER(243, cpu_ll_exc_243)
CPU_LL_INTR_HANDLER(244, cpu_ll_exc_244)
CPU_LL_INTR_HANDLER(245, cpu_ll_exc_245)
CPU_LL_INTR_HANDLER(246, cpu_ll_exc_246)
CPU_LL_INTR_HANDLER(247, cpu_ll_exc_247)
CPU_LL_INTR_HANDLER(248, cpu_ll_exc_248)
CPU_LL_INTR_HANDLER(249, cpu_ll_exc_249)
CPU_LL_INTR_HANDLER(250, cpu_ll_exc_250)
CPU_LL_INTR_HANDLER(251, cpu_ll_exc_251)
CPU_LL_INTR_HANDLER(252, cpu_ll_exc_252)
CPU_LL_INTR_HANDLER(253, cpu_ll_exc_253)
CPU_LL_INTR_HANDLER(254, cpu_ll_exc_254)
CPU_LL_INTR_HANDLER(255, cpu_ll_exc_255)
#ifdef __LP64__
#define CPU_LL_EXC_HANDLER_ADDR(name) .quad name
#else /* __LP64__ */
#define CPU_LL_EXC_HANDLER_ADDR(name) .long name
#endif /* __LP64__ */
.section INIT_DATA_SECTION
/* See the C declaration */
ASM_DATA(cpu_ll_exc_handler_addrs)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_divide_error)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_debug)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_nmi)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_breakpoint)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_overflow)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_bound_range)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_undefined_opcode)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_no_math_coprocessor)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_double_fault)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_9)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_invalid_tss)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_segment_not_present)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_stack_segment_fault)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_general_protection)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_page_fault)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_15)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_math_fault)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_alignment_check)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_machine_check)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_simd_fp_exception)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_20)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_21)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_22)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_23)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_24)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_25)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_26)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_27)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_28)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_29)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_30)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_31)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_32)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_33)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_34)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_35)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_36)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_37)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_38)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_39)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_40)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_41)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_42)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_43)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_44)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_45)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_46)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_47)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_48)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_49)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_50)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_51)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_52)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_53)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_54)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_55)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_56)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_57)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_58)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_59)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_60)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_61)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_62)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_63)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_64)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_65)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_66)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_67)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_68)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_69)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_70)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_71)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_72)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_73)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_74)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_75)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_76)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_77)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_78)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_79)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_80)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_81)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_82)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_83)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_84)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_85)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_86)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_87)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_88)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_89)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_90)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_91)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_92)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_93)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_94)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_95)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_96)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_97)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_98)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_99)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_100)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_101)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_102)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_103)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_104)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_105)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_106)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_107)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_108)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_109)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_110)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_111)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_112)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_113)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_114)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_115)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_116)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_117)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_118)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_119)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_120)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_121)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_122)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_123)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_124)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_125)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_126)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_127)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_128)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_129)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_130)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_131)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_132)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_133)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_134)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_135)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_136)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_137)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_138)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_139)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_140)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_141)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_142)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_143)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_144)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_145)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_146)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_147)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_148)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_149)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_150)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_151)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_152)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_153)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_154)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_155)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_156)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_157)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_158)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_159)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_160)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_161)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_162)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_163)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_164)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_165)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_166)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_167)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_168)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_169)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_170)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_171)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_172)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_173)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_174)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_175)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_176)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_177)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_178)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_179)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_180)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_181)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_182)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_183)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_184)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_185)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_186)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_187)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_188)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_189)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_190)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_191)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_192)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_193)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_194)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_195)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_196)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_197)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_198)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_199)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_200)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_201)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_202)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_203)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_204)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_205)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_206)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_207)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_208)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_209)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_210)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_211)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_212)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_213)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_214)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_215)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_216)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_217)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_218)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_219)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_220)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_221)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_222)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_223)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_224)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_225)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_226)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_227)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_228)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_229)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_230)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_231)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_232)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_233)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_234)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_235)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_236)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_237)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_238)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_239)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_240)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_241)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_242)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_243)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_244)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_245)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_246)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_247)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_248)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_249)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_250)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_251)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_252)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_253)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_254)
CPU_LL_EXC_HANDLER_ADDR(cpu_ll_exc_255)
ASM_END(cpu_ll_exc_handler_addrs)
ASM_ENTRY(cpu_load_gdt)
#ifdef __LP64__
lgdt (%rdi)
#else /* __LP64__ */
movl 4(%esp), %eax
lgdt (%eax)
#endif /* __LP64__ */
movl $CPU_GDT_SEL_DATA, %eax
movl %eax, %ds
movl %eax, %es
movl %eax, %ss
/* Alter the stack to reload the code segment using a far return */
#ifdef __LP64__
popq %rax
pushq $CPU_GDT_SEL_CODE
pushq %rax
lretq
#else /* __LP64__ */
popl %eax
pushl $CPU_GDT_SEL_CODE
pushl %eax
lret
#endif /* __LP64__ */
ASM_END(cpu_load_gdt)