%include "asm.inc" extern intr_dispatcher global intr_stub_array section .data bits 64 intr_stub_array: dq intr_stub_0 dq intr_stub_1 dq intr_stub_2 dq intr_stub_3 dq intr_stub_4 dq intr_stub_5 dq intr_stub_6 dq intr_stub_7 dq intr_stub_8 dq intr_stub_9 dq intr_stub_10 dq intr_stub_11 dq intr_stub_12 dq intr_stub_13 dq intr_stub_14 dq intr_stub_15 dq intr_stub_16 dq intr_stub_17 dq intr_stub_18 dq intr_stub_19 dq intr_stub_20 dq intr_stub_21 dq intr_stub_22 dq intr_stub_23 dq intr_stub_24 dq intr_stub_25 dq intr_stub_26 dq intr_stub_27 dq intr_stub_28 dq intr_stub_29 dq intr_stub_30 dq intr_stub_31 dq intr_stub_32 dq intr_stub_33 dq intr_stub_34 dq intr_stub_35 dq intr_stub_36 dq intr_stub_37 dq intr_stub_38 dq intr_stub_39 dq intr_stub_40 dq intr_stub_41 dq intr_stub_42 dq intr_stub_43 dq intr_stub_44 dq intr_stub_45 dq intr_stub_46 dq intr_stub_47 dq intr_stub_48 dq intr_stub_49 dq intr_stub_50 dq intr_stub_51 dq intr_stub_52 dq intr_stub_53 dq intr_stub_54 dq intr_stub_55 dq intr_stub_56 dq intr_stub_57 dq intr_stub_58 dq intr_stub_59 dq intr_stub_60 dq intr_stub_61 dq intr_stub_62 dq intr_stub_63 dq intr_stub_64 dq intr_stub_65 dq intr_stub_66 dq intr_stub_67 dq intr_stub_68 dq intr_stub_69 dq intr_stub_70 dq intr_stub_71 dq intr_stub_72 dq intr_stub_73 dq intr_stub_74 dq intr_stub_75 dq intr_stub_76 dq intr_stub_77 dq intr_stub_78 dq intr_stub_79 dq intr_stub_80 dq intr_stub_81 dq intr_stub_82 dq intr_stub_83 dq intr_stub_84 dq intr_stub_85 dq intr_stub_86 dq intr_stub_87 dq intr_stub_88 dq intr_stub_89 dq intr_stub_90 dq intr_stub_91 dq intr_stub_92 dq intr_stub_93 dq intr_stub_94 dq intr_stub_95 dq intr_stub_96 dq intr_stub_97 dq intr_stub_98 dq intr_stub_99 dq intr_stub_100 dq intr_stub_101 dq intr_stub_102 dq intr_stub_103 dq intr_stub_104 dq intr_stub_105 dq intr_stub_106 dq intr_stub_107 dq intr_stub_108 dq intr_stub_109 dq intr_stub_110 dq intr_stub_111 dq intr_stub_112 dq intr_stub_113 dq intr_stub_114 dq intr_stub_115 dq intr_stub_116 dq intr_stub_117 dq intr_stub_118 dq intr_stub_119 dq intr_stub_120 dq intr_stub_121 dq intr_stub_122 dq intr_stub_123 dq intr_stub_124 dq intr_stub_125 dq intr_stub_126 dq intr_stub_127 dq intr_stub_128 dq intr_stub_129 dq intr_stub_130 dq intr_stub_131 dq intr_stub_132 dq intr_stub_133 dq intr_stub_134 dq intr_stub_135 dq intr_stub_136 dq intr_stub_137 dq intr_stub_138 dq intr_stub_139 dq intr_stub_140 dq intr_stub_141 dq intr_stub_142 dq intr_stub_143 dq intr_stub_144 dq intr_stub_145 dq intr_stub_146 dq intr_stub_147 dq intr_stub_148 dq intr_stub_149 dq intr_stub_150 dq intr_stub_151 dq intr_stub_152 dq intr_stub_153 dq intr_stub_154 dq intr_stub_155 dq intr_stub_156 dq intr_stub_157 dq intr_stub_158 dq intr_stub_159 dq intr_stub_160 dq intr_stub_161 dq intr_stub_162 dq intr_stub_163 dq intr_stub_164 dq intr_stub_165 dq intr_stub_166 dq intr_stub_167 dq intr_stub_168 dq intr_stub_169 dq intr_stub_170 dq intr_stub_171 dq intr_stub_172 dq intr_stub_173 dq intr_stub_174 dq intr_stub_175 dq intr_stub_176 dq intr_stub_177 dq intr_stub_178 dq intr_stub_179 dq intr_stub_180 dq intr_stub_181 dq intr_stub_182 dq intr_stub_183 dq intr_stub_184 dq intr_stub_185 dq intr_stub_186 dq intr_stub_187 dq intr_stub_188 dq intr_stub_189 dq intr_stub_190 dq intr_stub_191 dq intr_stub_192 dq intr_stub_193 dq intr_stub_194 dq intr_stub_195 dq intr_stub_196 dq intr_stub_197 dq intr_stub_198 dq intr_stub_199 dq intr_stub_200 dq intr_stub_201 dq intr_stub_202 dq intr_stub_203 dq intr_stub_204 dq intr_stub_205 dq intr_stub_206 dq intr_stub_207 dq intr_stub_208 dq intr_stub_209 dq intr_stub_210 dq intr_stub_211 dq intr_stub_212 dq intr_stub_213 dq intr_stub_214 dq intr_stub_215 dq intr_stub_216 dq intr_stub_217 dq intr_stub_218 dq intr_stub_219 dq intr_stub_220 dq intr_stub_221 dq intr_stub_222 dq intr_stub_223 dq intr_stub_224 dq intr_stub_225 dq intr_stub_226 dq intr_stub_227 dq intr_stub_228 dq intr_stub_229 dq intr_stub_230 dq intr_stub_231 dq intr_stub_232 dq intr_stub_233 dq intr_stub_234 dq intr_stub_235 dq intr_stub_236 dq intr_stub_237 dq intr_stub_238 dq intr_stub_239 dq intr_stub_240 dq intr_stub_241 dq intr_stub_242 dq intr_stub_243 dq intr_stub_244 dq intr_stub_245 dq intr_stub_246 dq intr_stub_247 dq intr_stub_248 dq intr_stub_249 dq intr_stub_250 dq intr_stub_251 dq intr_stub_252 dq intr_stub_253 dq intr_stub_254 dq intr_stub_255 section .text bits 64 %macro decl_err_intr_stub 1 intr_stub_%1: ; save context PUSH_REGS push qword %1 jmp intr_stub %endmacro %macro decl_intr_stub 1 intr_stub_%1: ; push dummy error code to have consistent frame push qword 0 PUSH_REGS push qword %1 jmp intr_stub %endmacro intr_stub: pop rdi mov rsi, rsp call intr_dispatcher ; restore registers POP_REGS ; skip error code add rsp, 8 iretq intr_stub_start: decl_intr_stub 0 decl_intr_stub 1 decl_intr_stub 2 decl_intr_stub 3 decl_intr_stub 4 decl_intr_stub 5 decl_intr_stub 6 decl_intr_stub 7 decl_err_intr_stub 8 decl_intr_stub 9 decl_err_intr_stub 10 decl_err_intr_stub 11 decl_err_intr_stub 12 decl_err_intr_stub 13 decl_err_intr_stub 14 decl_intr_stub 15 decl_intr_stub 16 decl_err_intr_stub 17 decl_intr_stub 18 decl_intr_stub 19 decl_intr_stub 20 decl_intr_stub 21 decl_intr_stub 22 decl_intr_stub 23 decl_intr_stub 24 decl_intr_stub 25 decl_intr_stub 26 decl_intr_stub 27 decl_intr_stub 28 decl_intr_stub 29 decl_intr_stub 30 decl_intr_stub 31 decl_intr_stub 32 decl_intr_stub 33 decl_intr_stub 34 decl_intr_stub 35 decl_intr_stub 36 decl_intr_stub 37 decl_intr_stub 38 decl_intr_stub 39 decl_intr_stub 40 decl_intr_stub 41 decl_intr_stub 42 decl_intr_stub 43 decl_intr_stub 44 decl_intr_stub 45 decl_intr_stub 46 decl_intr_stub 47 decl_intr_stub 48 decl_intr_stub 49 intr_stub_50: ; push dummy error code to have consistent frame push qword 0 PUSH_REGS mov rdi, 50 mov rsi, rsp call intr_dispatcher xchg bx,bx ; now rax hows the next thread's rsp0 mov rsp, rax ; switch stack POP_REGS ; restore registers add rsp, 8 ; skip error code iretq decl_intr_stub 51 decl_intr_stub 52 decl_intr_stub 53 decl_intr_stub 54 decl_intr_stub 55 decl_intr_stub 56 decl_intr_stub 57 decl_intr_stub 58 decl_intr_stub 59 decl_intr_stub 60 decl_intr_stub 61 decl_intr_stub 62 decl_intr_stub 63 decl_intr_stub 64 decl_intr_stub 65 decl_intr_stub 66 decl_intr_stub 67 decl_intr_stub 68 decl_intr_stub 69 decl_intr_stub 70 decl_intr_stub 71 decl_intr_stub 72 decl_intr_stub 73 decl_intr_stub 74 decl_intr_stub 75 decl_intr_stub 76 decl_intr_stub 77 decl_intr_stub 78 decl_intr_stub 79 decl_intr_stub 80 decl_intr_stub 81 decl_intr_stub 82 decl_intr_stub 83 decl_intr_stub 84 decl_intr_stub 85 decl_intr_stub 86 decl_intr_stub 87 decl_intr_stub 88 decl_intr_stub 89 decl_intr_stub 90 decl_intr_stub 91 decl_intr_stub 92 decl_intr_stub 93 decl_intr_stub 94 decl_intr_stub 95 decl_intr_stub 96 decl_intr_stub 97 decl_intr_stub 98 decl_intr_stub 99 decl_intr_stub 100 decl_intr_stub 101 decl_intr_stub 102 decl_intr_stub 103 decl_intr_stub 104 decl_intr_stub 105 decl_intr_stub 106 decl_intr_stub 107 decl_intr_stub 108 decl_intr_stub 109 decl_intr_stub 110 decl_intr_stub 111 decl_intr_stub 112 decl_intr_stub 113 decl_intr_stub 114 decl_intr_stub 115 decl_intr_stub 116 decl_intr_stub 117 decl_intr_stub 118 decl_intr_stub 119 decl_intr_stub 120 decl_intr_stub 121 decl_intr_stub 122 decl_intr_stub 123 decl_intr_stub 124 decl_intr_stub 125 decl_intr_stub 126 decl_intr_stub 127 decl_intr_stub 128 decl_intr_stub 129 decl_intr_stub 130 decl_intr_stub 131 decl_intr_stub 132 decl_intr_stub 133 decl_intr_stub 134 decl_intr_stub 135 decl_intr_stub 136 decl_intr_stub 137 decl_intr_stub 138 decl_intr_stub 139 decl_intr_stub 140 decl_intr_stub 141 decl_intr_stub 142 decl_intr_stub 143 decl_intr_stub 144 decl_intr_stub 145 decl_intr_stub 146 decl_intr_stub 147 decl_intr_stub 148 decl_intr_stub 149 decl_intr_stub 150 decl_intr_stub 151 decl_intr_stub 152 decl_intr_stub 153 decl_intr_stub 154 decl_intr_stub 155 decl_intr_stub 156 decl_intr_stub 157 decl_intr_stub 158 decl_intr_stub 159 decl_intr_stub 160 decl_intr_stub 161 decl_intr_stub 162 decl_intr_stub 163 decl_intr_stub 164 decl_intr_stub 165 decl_intr_stub 166 decl_intr_stub 167 decl_intr_stub 168 decl_intr_stub 169 decl_intr_stub 170 decl_intr_stub 171 decl_intr_stub 172 decl_intr_stub 173 decl_intr_stub 174 decl_intr_stub 175 decl_intr_stub 176 decl_intr_stub 177 decl_intr_stub 178 decl_intr_stub 179 decl_intr_stub 180 decl_intr_stub 181 decl_intr_stub 182 decl_intr_stub 183 decl_intr_stub 184 decl_intr_stub 185 decl_intr_stub 186 decl_intr_stub 187 decl_intr_stub 188 decl_intr_stub 189 decl_intr_stub 190 decl_intr_stub 191 decl_intr_stub 192 decl_intr_stub 193 decl_intr_stub 194 decl_intr_stub 195 decl_intr_stub 196 decl_intr_stub 197 decl_intr_stub 198 decl_intr_stub 199 decl_intr_stub 200 decl_intr_stub 201 decl_intr_stub 202 decl_intr_stub 203 decl_intr_stub 204 decl_intr_stub 205 decl_intr_stub 206 decl_intr_stub 207 decl_intr_stub 208 decl_intr_stub 209 decl_intr_stub 210 decl_intr_stub 211 decl_intr_stub 212 decl_intr_stub 213 decl_intr_stub 214 decl_intr_stub 215 decl_intr_stub 216 decl_intr_stub 217 decl_intr_stub 218 decl_intr_stub 219 decl_intr_stub 220 decl_intr_stub 221 decl_intr_stub 222 decl_intr_stub 223 decl_intr_stub 224 decl_intr_stub 225 decl_intr_stub 226 decl_intr_stub 227 decl_intr_stub 228 decl_intr_stub 229 decl_intr_stub 230 decl_intr_stub 231 decl_intr_stub 232 decl_intr_stub 233 decl_intr_stub 234 decl_intr_stub 235 decl_intr_stub 236 decl_intr_stub 237 decl_intr_stub 238 decl_intr_stub 239 decl_intr_stub 240 decl_intr_stub 241 decl_intr_stub 242 decl_intr_stub 243 decl_intr_stub 244 decl_intr_stub 245 decl_intr_stub 246 decl_intr_stub 247 decl_intr_stub 248 decl_intr_stub 249 decl_intr_stub 250 decl_intr_stub 251 decl_intr_stub 252 decl_intr_stub 253 decl_intr_stub 254 decl_intr_stub 255