/* * Copyright (c) 2012-2017 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 .text #ifdef __LP64__ .macro TRAP_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 TRAP_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 $16, %rsp /* skip vector and error */ .endm #define TRAP(vector, name) \ ASM_ENTRY(name) \ pushq $0; \ pushq $(vector); \ jmp trap_common; \ ASM_END(name) #define TRAP_ERROR(vector, name) \ ASM_ENTRY(name) \ pushq $(vector); \ jmp trap_common; \ ASM_END(name) ASM_ENTRY(trap_common) TRAP_STORE_REGISTERS movq %rsp, %rbx /* save frame */ movq %rbx, %rdi call trap_get_interrupt_stack testq %rax, %rax /* switch stack ? */ jz 1f movq %rax, %rsp /* switch to interrupt stack TODO conditional move ? */ 1: xorq %rbp, %rbp /* block stack tracing */ movq %rbx, %rdi call trap_main movq %rbx, %rsp /* restore stack */ call thread_schedule /* schedule threads */ TRAP_LOAD_REGISTERS iretq ASM_END(trap_common) #else /* __LP64__ */ .macro TRAP_STORE_REGISTERS pushw %gs pushw %fs pushw %es pushw %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 TRAP_LOAD_REGISTERS popl %eax popl %ebx popl %ecx popl %edx popl %ebp popl %esi popl %edi addl $16, %esp /* skip segment registers, vector and error */ .endm #define TRAP(vector, name) \ ASM_ENTRY(name) \ pushl $0; \ pushl $(vector); \ jmp trap_common; \ ASM_END(name) #define TRAP_ERROR(vector, name) \ ASM_ENTRY(name) \ pushl $(vector); \ jmp trap_common; \ ASM_END(name) ASM_ENTRY(trap_common) TRAP_STORE_REGISTERS movl %esp, %ebx /* save frame */ pushl %ebx call trap_get_interrupt_stack addl $4, %esp testl %eax, %eax /* switch stack ? */ jz 1f movl %eax, %esp /* switch to interrupt stack */ 1: xorl %ebp, %ebp /* block stack tracing */ pushl %ebx call trap_main movl %ebx, %esp /* restore stack */ call thread_schedule /* schedule threads */ TRAP_LOAD_REGISTERS iret ASM_END(trap_common) #endif /* __LP64__ */ /* Architecture defined traps */ TRAP(TRAP_DE, trap_isr_divide_error) TRAP(TRAP_DB, trap_isr_debug) TRAP(TRAP_NMI, trap_isr_nmi) TRAP(TRAP_BP, trap_isr_breakpoint) TRAP(TRAP_OF, trap_isr_overflow) TRAP(TRAP_BR, trap_isr_bound_range) TRAP(TRAP_UD, trap_isr_invalid_opcode) TRAP(TRAP_NM, trap_isr_device_not_available) TRAP_ERROR(TRAP_DF, trap_isr_double_fault) TRAP_ERROR(TRAP_TS, trap_isr_invalid_tss) TRAP_ERROR(TRAP_NP, trap_isr_segment_not_present) TRAP_ERROR(TRAP_SS, trap_isr_stack_segment_fault) TRAP_ERROR(TRAP_GP, trap_isr_general_protection) TRAP_ERROR(TRAP_PF, trap_isr_page_fault) TRAP(TRAP_MF, trap_isr_math_fault) TRAP_ERROR(TRAP_AC, trap_isr_alignment_check) TRAP(TRAP_MC, trap_isr_machine_check) TRAP(TRAP_XM, trap_isr_simd_fp_exception) /* * Handlers for reserved exceptions. * * These exceptions should normally never occur, but have handlers ready just * in case. */ TRAP(9, trap_isr_9) TRAP(15, trap_isr_15) TRAP(20, trap_isr_20) TRAP(21, trap_isr_21) TRAP(22, trap_isr_22) TRAP(23, trap_isr_23) TRAP(24, trap_isr_24) TRAP(25, trap_isr_25) TRAP(26, trap_isr_26) TRAP(27, trap_isr_27) TRAP(28, trap_isr_28) TRAP(29, trap_isr_29) TRAP(31, trap_isr_31) /* Generic trap handlers */ TRAP(30, trap_isr_30) TRAP(32, trap_isr_32) TRAP(33, trap_isr_33) TRAP(34, trap_isr_34) TRAP(35, trap_isr_35) TRAP(36, trap_isr_36) TRAP(37, trap_isr_37) TRAP(38, trap_isr_38) TRAP(39, trap_isr_39) TRAP(40, trap_isr_40) TRAP(41, trap_isr_41) TRAP(42, trap_isr_42) TRAP(43, trap_isr_43) TRAP(44, trap_isr_44) TRAP(45, trap_isr_45) TRAP(46, trap_isr_46) TRAP(47, trap_isr_47) TRAP(48, trap_isr_48) TRAP(49, trap_isr_49) TRAP(50, trap_isr_50) TRAP(51, trap_isr_51) TRAP(52, trap_isr_52) TRAP(53, trap_isr_53) TRAP(54, trap_isr_54) TRAP(55, trap_isr_55) TRAP(56, trap_isr_56) TRAP(57, trap_isr_57) TRAP(58, trap_isr_58) TRAP(59, trap_isr_59) TRAP(60, trap_isr_60) TRAP(61, trap_isr_61) TRAP(62, trap_isr_62) TRAP(63, trap_isr_63) TRAP(64, trap_isr_64) TRAP(65, trap_isr_65) TRAP(66, trap_isr_66) TRAP(67, trap_isr_67) TRAP(68, trap_isr_68) TRAP(69, trap_isr_69) TRAP(70, trap_isr_70) TRAP(71, trap_isr_71) TRAP(72, trap_isr_72) TRAP(73, trap_isr_73) TRAP(74, trap_isr_74) TRAP(75, trap_isr_75) TRAP(76, trap_isr_76) TRAP(77, trap_isr_77) TRAP(78, trap_isr_78) TRAP(79, trap_isr_79) TRAP(80, trap_isr_80) TRAP(81, trap_isr_81) TRAP(82, trap_isr_82) TRAP(83, trap_isr_83) TRAP(84, trap_isr_84) TRAP(85, trap_isr_85) TRAP(86, trap_isr_86) TRAP(87, trap_isr_87) TRAP(88, trap_isr_88) TRAP(89, trap_isr_89) TRAP(90, trap_isr_90) TRAP(91, trap_isr_91) TRAP(92, trap_isr_92) TRAP(93, trap_isr_93) TRAP(94, trap_isr_94) TRAP(95, trap_isr_95) TRAP(96, trap_isr_96) TRAP(97, trap_isr_97) TRAP(98, trap_isr_98) TRAP(99, trap_isr_99) TRAP(100, trap_isr_100) TRAP(101, trap_isr_101) TRAP(102, trap_isr_102) TRAP(103, trap_isr_103) TRAP(104, trap_isr_104) TRAP(105, trap_isr_105) TRAP(106, trap_isr_106) TRAP(107, trap_isr_107) TRAP(108, trap_isr_108) TRAP(109, trap_isr_109) TRAP(110, trap_isr_110) TRAP(111, trap_isr_111) TRAP(112, trap_isr_112) TRAP(113, trap_isr_113) TRAP(114, trap_isr_114) TRAP(115, trap_isr_115) TRAP(116, trap_isr_116) TRAP(117, trap_isr_117) TRAP(118, trap_isr_118) TRAP(119, trap_isr_119) TRAP(120, trap_isr_120) TRAP(121, trap_isr_121) TRAP(122, trap_isr_122) TRAP(123, trap_isr_123) TRAP(124, trap_isr_124) TRAP(125, trap_isr_125) TRAP(126, trap_isr_126) TRAP(127, trap_isr_127) TRAP(128, trap_isr_128) TRAP(129, trap_isr_129) TRAP(130, trap_isr_130) TRAP(131, trap_isr_131) TRAP(132, trap_isr_132) TRAP(133, trap_isr_133) TRAP(134, trap_isr_134) TRAP(135, trap_isr_135) TRAP(136, trap_isr_136) TRAP(137, trap_isr_137) TRAP(138, trap_isr_138) TRAP(139, trap_isr_139) TRAP(140, trap_isr_140) TRAP(141, trap_isr_141) TRAP(142, trap_isr_142) TRAP(143, trap_isr_143) TRAP(144, trap_isr_144) TRAP(145, trap_isr_145) TRAP(146, trap_isr_146) TRAP(147, trap_isr_147) TRAP(148, trap_isr_148) TRAP(149, trap_isr_149) TRAP(150, trap_isr_150) TRAP(151, trap_isr_151) TRAP(152, trap_isr_152) TRAP(153, trap_isr_153) TRAP(154, trap_isr_154) TRAP(155, trap_isr_155) TRAP(156, trap_isr_156) TRAP(157, trap_isr_157) TRAP(158, trap_isr_158) TRAP(159, trap_isr_159) TRAP(160, trap_isr_160) TRAP(161, trap_isr_161) TRAP(162, trap_isr_162) TRAP(163, trap_isr_163) TRAP(164, trap_isr_164) TRAP(165, trap_isr_165) TRAP(166, trap_isr_166) TRAP(167, trap_isr_167) TRAP(168, trap_isr_168) TRAP(169, trap_isr_169) TRAP(170, trap_isr_170) TRAP(171, trap_isr_171) TRAP(172, trap_isr_172) TRAP(173, trap_isr_173) TRAP(174, trap_isr_174) TRAP(175, trap_isr_175) TRAP(176, trap_isr_176) TRAP(177, trap_isr_177) TRAP(178, trap_isr_178) TRAP(179, trap_isr_179) TRAP(180, trap_isr_180) TRAP(181, trap_isr_181) TRAP(182, trap_isr_182) TRAP(183, trap_isr_183) TRAP(184, trap_isr_184) TRAP(185, trap_isr_185) TRAP(186, trap_isr_186) TRAP(187, trap_isr_187) TRAP(188, trap_isr_188) TRAP(189, trap_isr_189) TRAP(190, trap_isr_190) TRAP(191, trap_isr_191) TRAP(192, trap_isr_192) TRAP(193, trap_isr_193) TRAP(194, trap_isr_194) TRAP(195, trap_isr_195) TRAP(196, trap_isr_196) TRAP(197, trap_isr_197) TRAP(198, trap_isr_198) TRAP(199, trap_isr_199) TRAP(200, trap_isr_200) TRAP(201, trap_isr_201) TRAP(202, trap_isr_202) TRAP(203, trap_isr_203) TRAP(204, trap_isr_204) TRAP(205, trap_isr_205) TRAP(206, trap_isr_206) TRAP(207, trap_isr_207) TRAP(208, trap_isr_208) TRAP(209, trap_isr_209) TRAP(210, trap_isr_210) TRAP(211, trap_isr_211) TRAP(212, trap_isr_212) TRAP(213, trap_isr_213) TRAP(214, trap_isr_214) TRAP(215, trap_isr_215) TRAP(216, trap_isr_216) TRAP(217, trap_isr_217) TRAP(218, trap_isr_218) TRAP(219, trap_isr_219) TRAP(220, trap_isr_220) TRAP(221, trap_isr_221) TRAP(222, trap_isr_222) TRAP(223, trap_isr_223) TRAP(224, trap_isr_224) TRAP(225, trap_isr_225) TRAP(226, trap_isr_226) TRAP(227, trap_isr_227) TRAP(228, trap_isr_228) TRAP(229, trap_isr_229) TRAP(230, trap_isr_230) TRAP(231, trap_isr_231) TRAP(232, trap_isr_232) TRAP(233, trap_isr_233) TRAP(234, trap_isr_234) TRAP(235, trap_isr_235) TRAP(236, trap_isr_236) TRAP(237, trap_isr_237) TRAP(238, trap_isr_238) TRAP(239, trap_isr_239) TRAP(240, trap_isr_240) TRAP(241, trap_isr_241) TRAP(242, trap_isr_242) TRAP(243, trap_isr_243) TRAP(244, trap_isr_244) TRAP(245, trap_isr_245) TRAP(246, trap_isr_246) TRAP(247, trap_isr_247) TRAP(248, trap_isr_248) TRAP(249, trap_isr_249) TRAP(250, trap_isr_250) TRAP(251, trap_isr_251) TRAP(252, trap_isr_252) TRAP(253, trap_isr_253) TRAP(254, trap_isr_254) TRAP(255, trap_isr_255) #ifdef __LP64__ #define TRAP_TABLE_ENTRY(name) .quad name #else /* __LP64__ */ #define TRAP_TABLE_ENTRY(name) .long name #endif /* __LP64__ */ .section INIT_DATA_SECTION /* * This table lists all interrupt service routines as installed in the * IDT. */ ASM_DATA(trap_isr_table) TRAP_TABLE_ENTRY(trap_isr_divide_error) TRAP_TABLE_ENTRY(trap_isr_debug) TRAP_TABLE_ENTRY(trap_isr_nmi) TRAP_TABLE_ENTRY(trap_isr_breakpoint) TRAP_TABLE_ENTRY(trap_isr_overflow) TRAP_TABLE_ENTRY(trap_isr_bound_range) TRAP_TABLE_ENTRY(trap_isr_invalid_opcode) TRAP_TABLE_ENTRY(trap_isr_device_not_available) TRAP_TABLE_ENTRY(trap_isr_double_fault) TRAP_TABLE_ENTRY(trap_isr_9) TRAP_TABLE_ENTRY(trap_isr_invalid_tss) TRAP_TABLE_ENTRY(trap_isr_segment_not_present) TRAP_TABLE_ENTRY(trap_isr_stack_segment_fault) TRAP_TABLE_ENTRY(trap_isr_general_protection) TRAP_TABLE_ENTRY(trap_isr_page_fault) TRAP_TABLE_ENTRY(trap_isr_15) TRAP_TABLE_ENTRY(trap_isr_math_fault) TRAP_TABLE_ENTRY(trap_isr_alignment_check) TRAP_TABLE_ENTRY(trap_isr_machine_check) TRAP_TABLE_ENTRY(trap_isr_simd_fp_exception) TRAP_TABLE_ENTRY(trap_isr_20) TRAP_TABLE_ENTRY(trap_isr_21) TRAP_TABLE_ENTRY(trap_isr_22) TRAP_TABLE_ENTRY(trap_isr_23) TRAP_TABLE_ENTRY(trap_isr_24) TRAP_TABLE_ENTRY(trap_isr_25) TRAP_TABLE_ENTRY(trap_isr_26) TRAP_TABLE_ENTRY(trap_isr_27) TRAP_TABLE_ENTRY(trap_isr_28) TRAP_TABLE_ENTRY(trap_isr_29) TRAP_TABLE_ENTRY(trap_isr_30) TRAP_TABLE_ENTRY(trap_isr_31) TRAP_TABLE_ENTRY(trap_isr_32) TRAP_TABLE_ENTRY(trap_isr_33) TRAP_TABLE_ENTRY(trap_isr_34) TRAP_TABLE_ENTRY(trap_isr_35) TRAP_TABLE_ENTRY(trap_isr_36) TRAP_TABLE_ENTRY(trap_isr_37) TRAP_TABLE_ENTRY(trap_isr_38) TRAP_TABLE_ENTRY(trap_isr_39) TRAP_TABLE_ENTRY(trap_isr_40) TRAP_TABLE_ENTRY(trap_isr_41) TRAP_TABLE_ENTRY(trap_isr_42) TRAP_TABLE_ENTRY(trap_isr_43) TRAP_TABLE_ENTRY(trap_isr_44) TRAP_TABLE_ENTRY(trap_isr_45) TRAP_TABLE_ENTRY(trap_isr_46) TRAP_TABLE_ENTRY(trap_isr_47) TRAP_TABLE_ENTRY(trap_isr_48) TRAP_TABLE_ENTRY(trap_isr_49) TRAP_TABLE_ENTRY(trap_isr_50) TRAP_TABLE_ENTRY(trap_isr_51) TRAP_TABLE_ENTRY(trap_isr_52) TRAP_TABLE_ENTRY(trap_isr_53) TRAP_TABLE_ENTRY(trap_isr_54) TRAP_TABLE_ENTRY(trap_isr_55) TRAP_TABLE_ENTRY(trap_isr_56) TRAP_TABLE_ENTRY(trap_isr_57) TRAP_TABLE_ENTRY(trap_isr_58) TRAP_TABLE_ENTRY(trap_isr_59) TRAP_TABLE_ENTRY(trap_isr_60) TRAP_TABLE_ENTRY(trap_isr_61) TRAP_TABLE_ENTRY(trap_isr_62) TRAP_TABLE_ENTRY(trap_isr_63) TRAP_TABLE_ENTRY(trap_isr_64) TRAP_TABLE_ENTRY(trap_isr_65) TRAP_TABLE_ENTRY(trap_isr_66) TRAP_TABLE_ENTRY(trap_isr_67) TRAP_TABLE_ENTRY(trap_isr_68) TRAP_TABLE_ENTRY(trap_isr_69) TRAP_TABLE_ENTRY(trap_isr_70) TRAP_TABLE_ENTRY(trap_isr_71) TRAP_TABLE_ENTRY(trap_isr_72) TRAP_TABLE_ENTRY(trap_isr_73) TRAP_TABLE_ENTRY(trap_isr_74) TRAP_TABLE_ENTRY(trap_isr_75) TRAP_TABLE_ENTRY(trap_isr_76) TRAP_TABLE_ENTRY(trap_isr_77) TRAP_TABLE_ENTRY(trap_isr_78) TRAP_TABLE_ENTRY(trap_isr_79) TRAP_TABLE_ENTRY(trap_isr_80) TRAP_TABLE_ENTRY(trap_isr_81) TRAP_TABLE_ENTRY(trap_isr_82) TRAP_TABLE_ENTRY(trap_isr_83) TRAP_TABLE_ENTRY(trap_isr_84) TRAP_TABLE_ENTRY(trap_isr_85) TRAP_TABLE_ENTRY(trap_isr_86) TRAP_TABLE_ENTRY(trap_isr_87) TRAP_TABLE_ENTRY(trap_isr_88) TRAP_TABLE_ENTRY(trap_isr_89) TRAP_TABLE_ENTRY(trap_isr_90) TRAP_TABLE_ENTRY(trap_isr_91) TRAP_TABLE_ENTRY(trap_isr_92) TRAP_TABLE_ENTRY(trap_isr_93) TRAP_TABLE_ENTRY(trap_isr_94) TRAP_TABLE_ENTRY(trap_isr_95) TRAP_TABLE_ENTRY(trap_isr_96) TRAP_TABLE_ENTRY(trap_isr_97) TRAP_TABLE_ENTRY(trap_isr_98) TRAP_TABLE_ENTRY(trap_isr_99) TRAP_TABLE_ENTRY(trap_isr_100) TRAP_TABLE_ENTRY(trap_isr_101) TRAP_TABLE_ENTRY(trap_isr_102) TRAP_TABLE_ENTRY(trap_isr_103) TRAP_TABLE_ENTRY(trap_isr_104) TRAP_TABLE_ENTRY(trap_isr_105) TRAP_TABLE_ENTRY(trap_isr_106) TRAP_TABLE_ENTRY(trap_isr_107) TRAP_TABLE_ENTRY(trap_isr_108) TRAP_TABLE_ENTRY(trap_isr_109) TRAP_TABLE_ENTRY(trap_isr_110) TRAP_TABLE_ENTRY(trap_isr_111) TRAP_TABLE_ENTRY(trap_isr_112) TRAP_TABLE_ENTRY(trap_isr_113) TRAP_TABLE_ENTRY(trap_isr_114) TRAP_TABLE_ENTRY(trap_isr_115) TRAP_TABLE_ENTRY(trap_isr_116) TRAP_TABLE_ENTRY(trap_isr_117) TRAP_TABLE_ENTRY(trap_isr_118) TRAP_TABLE_ENTRY(trap_isr_119) TRAP_TABLE_ENTRY(trap_isr_120) TRAP_TABLE_ENTRY(trap_isr_121) TRAP_TABLE_ENTRY(trap_isr_122) TRAP_TABLE_ENTRY(trap_isr_123) TRAP_TABLE_ENTRY(trap_isr_124) TRAP_TABLE_ENTRY(trap_isr_125) TRAP_TABLE_ENTRY(trap_isr_126) TRAP_TABLE_ENTRY(trap_isr_127) TRAP_TABLE_ENTRY(trap_isr_128) TRAP_TABLE_ENTRY(trap_isr_129) TRAP_TABLE_ENTRY(trap_isr_130) TRAP_TABLE_ENTRY(trap_isr_131) TRAP_TABLE_ENTRY(trap_isr_132) TRAP_TABLE_ENTRY(trap_isr_133) TRAP_TABLE_ENTRY(trap_isr_134) TRAP_TABLE_ENTRY(trap_isr_135) TRAP_TABLE_ENTRY(trap_isr_136) TRAP_TABLE_ENTRY(trap_isr_137) TRAP_TABLE_ENTRY(trap_isr_138) TRAP_TABLE_ENTRY(trap_isr_139) TRAP_TABLE_ENTRY(trap_isr_140) TRAP_TABLE_ENTRY(trap_isr_141) TRAP_TABLE_ENTRY(trap_isr_142) TRAP_TABLE_ENTRY(trap_isr_143) TRAP_TABLE_ENTRY(trap_isr_144) TRAP_TABLE_ENTRY(trap_isr_145) TRAP_TABLE_ENTRY(trap_isr_146) TRAP_TABLE_ENTRY(trap_isr_147) TRAP_TABLE_ENTRY(trap_isr_148) TRAP_TABLE_ENTRY(trap_isr_149) TRAP_TABLE_ENTRY(trap_isr_150) TRAP_TABLE_ENTRY(trap_isr_151) TRAP_TABLE_ENTRY(trap_isr_152) TRAP_TABLE_ENTRY(trap_isr_153) TRAP_TABLE_ENTRY(trap_isr_154) TRAP_TABLE_ENTRY(trap_isr_155) TRAP_TABLE_ENTRY(trap_isr_156) TRAP_TABLE_ENTRY(trap_isr_157) TRAP_TABLE_ENTRY(trap_isr_158) TRAP_TABLE_ENTRY(trap_isr_159) TRAP_TABLE_ENTRY(trap_isr_160) TRAP_TABLE_ENTRY(trap_isr_161) TRAP_TABLE_ENTRY(trap_isr_162) TRAP_TABLE_ENTRY(trap_isr_163) TRAP_TABLE_ENTRY(trap_isr_164) TRAP_TABLE_ENTRY(trap_isr_165) TRAP_TABLE_ENTRY(trap_isr_166) TRAP_TABLE_ENTRY(trap_isr_167) TRAP_TABLE_ENTRY(trap_isr_168) TRAP_TABLE_ENTRY(trap_isr_169) TRAP_TABLE_ENTRY(trap_isr_170) TRAP_TABLE_ENTRY(trap_isr_171) TRAP_TABLE_ENTRY(trap_isr_172) TRAP_TABLE_ENTRY(trap_isr_173) TRAP_TABLE_ENTRY(trap_isr_174) TRAP_TABLE_ENTRY(trap_isr_175) TRAP_TABLE_ENTRY(trap_isr_176) TRAP_TABLE_ENTRY(trap_isr_177) TRAP_TABLE_ENTRY(trap_isr_178) TRAP_TABLE_ENTRY(trap_isr_179) TRAP_TABLE_ENTRY(trap_isr_180) TRAP_TABLE_ENTRY(trap_isr_181) TRAP_TABLE_ENTRY(trap_isr_182) TRAP_TABLE_ENTRY(trap_isr_183) TRAP_TABLE_ENTRY(trap_isr_184) TRAP_TABLE_ENTRY(trap_isr_185) TRAP_TABLE_ENTRY(trap_isr_186) TRAP_TABLE_ENTRY(trap_isr_187) TRAP_TABLE_ENTRY(trap_isr_188) TRAP_TABLE_ENTRY(trap_isr_189) TRAP_TABLE_ENTRY(trap_isr_190) TRAP_TABLE_ENTRY(trap_isr_191) TRAP_TABLE_ENTRY(trap_isr_192) TRAP_TABLE_ENTRY(trap_isr_193) TRAP_TABLE_ENTRY(trap_isr_194) TRAP_TABLE_ENTRY(trap_isr_195) TRAP_TABLE_ENTRY(trap_isr_196) TRAP_TABLE_ENTRY(trap_isr_197) TRAP_TABLE_ENTRY(trap_isr_198) TRAP_TABLE_ENTRY(trap_isr_199) TRAP_TABLE_ENTRY(trap_isr_200) TRAP_TABLE_ENTRY(trap_isr_201) TRAP_TABLE_ENTRY(trap_isr_202) TRAP_TABLE_ENTRY(trap_isr_203) TRAP_TABLE_ENTRY(trap_isr_204) TRAP_TABLE_ENTRY(trap_isr_205) TRAP_TABLE_ENTRY(trap_isr_206) TRAP_TABLE_ENTRY(trap_isr_207) TRAP_TABLE_ENTRY(trap_isr_208) TRAP_TABLE_ENTRY(trap_isr_209) TRAP_TABLE_ENTRY(trap_isr_210) TRAP_TABLE_ENTRY(trap_isr_211) TRAP_TABLE_ENTRY(trap_isr_212) TRAP_TABLE_ENTRY(trap_isr_213) TRAP_TABLE_ENTRY(trap_isr_214) TRAP_TABLE_ENTRY(trap_isr_215) TRAP_TABLE_ENTRY(trap_isr_216) TRAP_TABLE_ENTRY(trap_isr_217) TRAP_TABLE_ENTRY(trap_isr_218) TRAP_TABLE_ENTRY(trap_isr_219) TRAP_TABLE_ENTRY(trap_isr_220) TRAP_TABLE_ENTRY(trap_isr_221) TRAP_TABLE_ENTRY(trap_isr_222) TRAP_TABLE_ENTRY(trap_isr_223) TRAP_TABLE_ENTRY(trap_isr_224) TRAP_TABLE_ENTRY(trap_isr_225) TRAP_TABLE_ENTRY(trap_isr_226) TRAP_TABLE_ENTRY(trap_isr_227) TRAP_TABLE_ENTRY(trap_isr_228) TRAP_TABLE_ENTRY(trap_isr_229) TRAP_TABLE_ENTRY(trap_isr_230) TRAP_TABLE_ENTRY(trap_isr_231) TRAP_TABLE_ENTRY(trap_isr_232) TRAP_TABLE_ENTRY(trap_isr_233) TRAP_TABLE_ENTRY(trap_isr_234) TRAP_TABLE_ENTRY(trap_isr_235) TRAP_TABLE_ENTRY(trap_isr_236) TRAP_TABLE_ENTRY(trap_isr_237) TRAP_TABLE_ENTRY(trap_isr_238) TRAP_TABLE_ENTRY(trap_isr_239) TRAP_TABLE_ENTRY(trap_isr_240) TRAP_TABLE_ENTRY(trap_isr_241) TRAP_TABLE_ENTRY(trap_isr_242) TRAP_TABLE_ENTRY(trap_isr_243) TRAP_TABLE_ENTRY(trap_isr_244) TRAP_TABLE_ENTRY(trap_isr_245) TRAP_TABLE_ENTRY(trap_isr_246) TRAP_TABLE_ENTRY(trap_isr_247) TRAP_TABLE_ENTRY(trap_isr_248) TRAP_TABLE_ENTRY(trap_isr_249) TRAP_TABLE_ENTRY(trap_isr_250) TRAP_TABLE_ENTRY(trap_isr_251) TRAP_TABLE_ENTRY(trap_isr_252) TRAP_TABLE_ENTRY(trap_isr_253) TRAP_TABLE_ENTRY(trap_isr_254) TRAP_TABLE_ENTRY(trap_isr_255) ASM_END(trap_isr_table)