Files
Operator-system/isr.S

616 lines
9.9 KiB
ArmAsm
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* isr.S Interrupt Service Routine stubs for x86-64.
*
* Provides 256 thin stub functions (isr0 isr255) and a common body
* (isr_common) that saves all general-purpose registers, calls the C
* handler isr_handler(ISRFrame *), restores registers, and returns
* via IRETQ.
*
* Two macros generate the stubs:
* ISR_NOERR pushes a dummy error code (0) for vectors that don't
* ISR_ERR the CPU already pushed an error code
*
* A pointer table (isr_stub_table) is emitted at the end so that
* idt.c can look up the stub address for each vector by index.
*/
.text
.global isr_handler
.global isr_stub_table
/* ----------------------------------------------------------------
* Stub macros
* ---------------------------------------------------------------- */
.macro ISR_NOERR num
.global isr\num
isr\num:
pushq $0
pushq $\num
jmp isr_common
.endm
.macro ISR_ERR num
.global isr\num
isr\num:
pushq $\num
jmp isr_common
.endm
/* ----------------------------------------------------------------
* Common ISR body saves state, calls C handler, restores state
* ---------------------------------------------------------------- */
isr_common:
cld
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
pushq %r8
pushq %r9
pushq %r10
pushq %r11
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rsp, %rdi
call isr_handler
popq %r15
popq %r14
popq %r13
popq %r12
popq %r11
popq %r10
popq %r9
popq %r8
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
addq $16, %rsp
iretq
/* ----------------------------------------------------------------
* Stub instantiation (vectors 0-255)
*
* Vectors 0-31: CPU exceptions (some push error codes)
* Vectors 32-47: legacy 8259 PIC hardware IRQs
* Vectors 48+: available for software / APIC use
* ---------------------------------------------------------------- */
/* CPU exceptions */
ISR_NOERR 0
ISR_NOERR 1
ISR_NOERR 2
ISR_NOERR 3
ISR_NOERR 4
ISR_NOERR 5
ISR_NOERR 6
ISR_NOERR 7
ISR_ERR 8
ISR_NOERR 9
ISR_ERR 10
ISR_ERR 11
ISR_ERR 12
ISR_ERR 13
ISR_ERR 14
ISR_NOERR 15
ISR_NOERR 16
ISR_ERR 17
ISR_NOERR 18
ISR_NOERR 19
ISR_NOERR 20
ISR_NOERR 21
ISR_NOERR 22
ISR_NOERR 23
ISR_NOERR 24
ISR_NOERR 25
ISR_NOERR 26
ISR_NOERR 27
ISR_NOERR 28
ISR_NOERR 29
ISR_ERR 30
ISR_NOERR 31
ISR_NOERR 32
ISR_NOERR 33
ISR_NOERR 34
ISR_NOERR 35
ISR_NOERR 36
ISR_NOERR 37
ISR_NOERR 38
ISR_NOERR 39
ISR_NOERR 40
ISR_NOERR 41
ISR_NOERR 42
ISR_NOERR 43
ISR_NOERR 44
ISR_NOERR 45
ISR_NOERR 46
ISR_NOERR 47
ISR_NOERR 48
ISR_NOERR 49
ISR_NOERR 50
ISR_NOERR 51
ISR_NOERR 52
ISR_NOERR 53
ISR_NOERR 54
ISR_NOERR 55
ISR_NOERR 56
ISR_NOERR 57
ISR_NOERR 58
ISR_NOERR 59
ISR_NOERR 60
ISR_NOERR 61
ISR_NOERR 62
ISR_NOERR 63
ISR_NOERR 64
ISR_NOERR 65
ISR_NOERR 66
ISR_NOERR 67
ISR_NOERR 68
ISR_NOERR 69
ISR_NOERR 70
ISR_NOERR 71
ISR_NOERR 72
ISR_NOERR 73
ISR_NOERR 74
ISR_NOERR 75
ISR_NOERR 76
ISR_NOERR 77
ISR_NOERR 78
ISR_NOERR 79
ISR_NOERR 80
ISR_NOERR 81
ISR_NOERR 82
ISR_NOERR 83
ISR_NOERR 84
ISR_NOERR 85
ISR_NOERR 86
ISR_NOERR 87
ISR_NOERR 88
ISR_NOERR 89
ISR_NOERR 90
ISR_NOERR 91
ISR_NOERR 92
ISR_NOERR 93
ISR_NOERR 94
ISR_NOERR 95
ISR_NOERR 96
ISR_NOERR 97
ISR_NOERR 98
ISR_NOERR 99
ISR_NOERR 100
ISR_NOERR 101
ISR_NOERR 102
ISR_NOERR 103
ISR_NOERR 104
ISR_NOERR 105
ISR_NOERR 106
ISR_NOERR 107
ISR_NOERR 108
ISR_NOERR 109
ISR_NOERR 110
ISR_NOERR 111
ISR_NOERR 112
ISR_NOERR 113
ISR_NOERR 114
ISR_NOERR 115
ISR_NOERR 116
ISR_NOERR 117
ISR_NOERR 118
ISR_NOERR 119
ISR_NOERR 120
ISR_NOERR 121
ISR_NOERR 122
ISR_NOERR 123
ISR_NOERR 124
ISR_NOERR 125
ISR_NOERR 126
ISR_NOERR 127
ISR_NOERR 128
ISR_NOERR 129
ISR_NOERR 130
ISR_NOERR 131
ISR_NOERR 132
ISR_NOERR 133
ISR_NOERR 134
ISR_NOERR 135
ISR_NOERR 136
ISR_NOERR 137
ISR_NOERR 138
ISR_NOERR 139
ISR_NOERR 140
ISR_NOERR 141
ISR_NOERR 142
ISR_NOERR 143
ISR_NOERR 144
ISR_NOERR 145
ISR_NOERR 146
ISR_NOERR 147
ISR_NOERR 148
ISR_NOERR 149
ISR_NOERR 150
ISR_NOERR 151
ISR_NOERR 152
ISR_NOERR 153
ISR_NOERR 154
ISR_NOERR 155
ISR_NOERR 156
ISR_NOERR 157
ISR_NOERR 158
ISR_NOERR 159
ISR_NOERR 160
ISR_NOERR 161
ISR_NOERR 162
ISR_NOERR 163
ISR_NOERR 164
ISR_NOERR 165
ISR_NOERR 166
ISR_NOERR 167
ISR_NOERR 168
ISR_NOERR 169
ISR_NOERR 170
ISR_NOERR 171
ISR_NOERR 172
ISR_NOERR 173
ISR_NOERR 174
ISR_NOERR 175
ISR_NOERR 176
ISR_NOERR 177
ISR_NOERR 178
ISR_NOERR 179
ISR_NOERR 180
ISR_NOERR 181
ISR_NOERR 182
ISR_NOERR 183
ISR_NOERR 184
ISR_NOERR 185
ISR_NOERR 186
ISR_NOERR 187
ISR_NOERR 188
ISR_NOERR 189
ISR_NOERR 190
ISR_NOERR 191
ISR_NOERR 192
ISR_NOERR 193
ISR_NOERR 194
ISR_NOERR 195
ISR_NOERR 196
ISR_NOERR 197
ISR_NOERR 198
ISR_NOERR 199
ISR_NOERR 200
ISR_NOERR 201
ISR_NOERR 202
ISR_NOERR 203
ISR_NOERR 204
ISR_NOERR 205
ISR_NOERR 206
ISR_NOERR 207
ISR_NOERR 208
ISR_NOERR 209
ISR_NOERR 210
ISR_NOERR 211
ISR_NOERR 212
ISR_NOERR 213
ISR_NOERR 214
ISR_NOERR 215
ISR_NOERR 216
ISR_NOERR 217
ISR_NOERR 218
ISR_NOERR 219
ISR_NOERR 220
ISR_NOERR 221
ISR_NOERR 222
ISR_NOERR 223
ISR_NOERR 224
ISR_NOERR 225
ISR_NOERR 226
ISR_NOERR 227
ISR_NOERR 228
ISR_NOERR 229
ISR_NOERR 230
ISR_NOERR 231
ISR_NOERR 232
ISR_NOERR 233
ISR_NOERR 234
ISR_NOERR 235
ISR_NOERR 236
ISR_NOERR 237
ISR_NOERR 238
ISR_NOERR 239
ISR_NOERR 240
ISR_NOERR 241
ISR_NOERR 242
ISR_NOERR 243
ISR_NOERR 244
ISR_NOERR 245
ISR_NOERR 246
ISR_NOERR 247
ISR_NOERR 248
ISR_NOERR 249
ISR_NOERR 250
ISR_NOERR 251
ISR_NOERR 252
ISR_NOERR 253
ISR_NOERR 254
ISR_NOERR 255
/* ----------------------------------------------------------------
* Stub pointer table indexed by vector number (0-255)
* Used by idt_set_gate() in idt.c to populate the IDT.
* ---------------------------------------------------------------- */
isr_stub_table:
.quad isr0
.quad isr1
.quad isr2
.quad isr3
.quad isr4
.quad isr5
.quad isr6
.quad isr7
.quad isr8
.quad isr9
.quad isr10
.quad isr11
.quad isr12
.quad isr13
.quad isr14
.quad isr15
.quad isr16
.quad isr17
.quad isr18
.quad isr19
.quad isr20
.quad isr21
.quad isr22
.quad isr23
.quad isr24
.quad isr25
.quad isr26
.quad isr27
.quad isr28
.quad isr29
.quad isr30
.quad isr31
.quad isr32
.quad isr33
.quad isr34
.quad isr35
.quad isr36
.quad isr37
.quad isr38
.quad isr39
.quad isr40
.quad isr41
.quad isr42
.quad isr43
.quad isr44
.quad isr45
.quad isr46
.quad isr47
.quad isr48
.quad isr49
.quad isr50
.quad isr51
.quad isr52
.quad isr53
.quad isr54
.quad isr55
.quad isr56
.quad isr57
.quad isr58
.quad isr59
.quad isr60
.quad isr61
.quad isr62
.quad isr63
.quad isr64
.quad isr65
.quad isr66
.quad isr67
.quad isr68
.quad isr69
.quad isr70
.quad isr71
.quad isr72
.quad isr73
.quad isr74
.quad isr75
.quad isr76
.quad isr77
.quad isr78
.quad isr79
.quad isr80
.quad isr81
.quad isr82
.quad isr83
.quad isr84
.quad isr85
.quad isr86
.quad isr87
.quad isr88
.quad isr89
.quad isr90
.quad isr91
.quad isr92
.quad isr93
.quad isr94
.quad isr95
.quad isr96
.quad isr97
.quad isr98
.quad isr99
.quad isr100
.quad isr101
.quad isr102
.quad isr103
.quad isr104
.quad isr105
.quad isr106
.quad isr107
.quad isr108
.quad isr109
.quad isr110
.quad isr111
.quad isr112
.quad isr113
.quad isr114
.quad isr115
.quad isr116
.quad isr117
.quad isr118
.quad isr119
.quad isr120
.quad isr121
.quad isr122
.quad isr123
.quad isr124
.quad isr125
.quad isr126
.quad isr127
.quad isr128
.quad isr129
.quad isr130
.quad isr131
.quad isr132
.quad isr133
.quad isr134
.quad isr135
.quad isr136
.quad isr137
.quad isr138
.quad isr139
.quad isr140
.quad isr141
.quad isr142
.quad isr143
.quad isr144
.quad isr145
.quad isr146
.quad isr147
.quad isr148
.quad isr149
.quad isr150
.quad isr151
.quad isr152
.quad isr153
.quad isr154
.quad isr155
.quad isr156
.quad isr157
.quad isr158
.quad isr159
.quad isr160
.quad isr161
.quad isr162
.quad isr163
.quad isr164
.quad isr165
.quad isr166
.quad isr167
.quad isr168
.quad isr169
.quad isr170
.quad isr171
.quad isr172
.quad isr173
.quad isr174
.quad isr175
.quad isr176
.quad isr177
.quad isr178
.quad isr179
.quad isr180
.quad isr181
.quad isr182
.quad isr183
.quad isr184
.quad isr185
.quad isr186
.quad isr187
.quad isr188
.quad isr189
.quad isr190
.quad isr191
.quad isr192
.quad isr193
.quad isr194
.quad isr195
.quad isr196
.quad isr197
.quad isr198
.quad isr199
.quad isr200
.quad isr201
.quad isr202
.quad isr203
.quad isr204
.quad isr205
.quad isr206
.quad isr207
.quad isr208
.quad isr209
.quad isr210
.quad isr211
.quad isr212
.quad isr213
.quad isr214
.quad isr215
.quad isr216
.quad isr217
.quad isr218
.quad isr219
.quad isr220
.quad isr221
.quad isr222
.quad isr223
.quad isr224
.quad isr225
.quad isr226
.quad isr227
.quad isr228
.quad isr229
.quad isr230
.quad isr231
.quad isr232
.quad isr233
.quad isr234
.quad isr235
.quad isr236
.quad isr237
.quad isr238
.quad isr239
.quad isr240
.quad isr241
.quad isr242
.quad isr243
.quad isr244
.quad isr245
.quad isr246
.quad isr247
.quad isr248
.quad isr249
.quad isr250
.quad isr251
.quad isr252
.quad isr253
.quad isr254
.quad isr255
.section .note.GNU-stack,"",@progbits