Skip to content

Commit 968c344

Browse files
committed
IDT: Add default values for selector and dpl
- Accept default values to make callers of IDTEntry() pass less arguments in the common case
1 parent f9e4f00 commit 968c344

File tree

2 files changed

+39
-38
lines changed

2 files changed

+39
-38
lines changed

kernel/init/GDT.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
*
1212
*/
1313

14+
let CODE_SEG: UInt16 = 8
15+
1416
private var gdt = theGDT()
1517
private var gdtInfo = dt_info(limit: UInt16(strideof(theGDT) - 1), base: &gdt)
1618

kernel/traps/IDT.swift

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ private let idtSize = NR_INTERRUPTS * sizeof(idt_entry)
2020
private var idtInfo = dt_info(limit: UInt16(idtSize - 1), base: &idt)
2121

2222

23-
2423
enum GateType: UInt8 {
2524
// Ignore the 16bit types
2625
case TASK_GATE = 5
@@ -29,7 +28,7 @@ enum GateType: UInt8 {
2928
}
3029

3130
// Helper method to construct an IDT entry
32-
private func IDTEntry(address: UInt, selector: UInt16, gateType: GateType, dpl: UInt8) -> idt_entry {
31+
private func IDTEntry(address: UInt, selector: UInt16 = CODE_SEG, gateType: GateType, dpl: UInt8 = 0) -> idt_entry {
3332

3433
let level = (dpl & 3) << 5
3534
let flags: UInt8 = 128 | level | gateType.rawValue // 128 = Present Bit set
@@ -59,26 +58,26 @@ public func setupIDT() {
5958
sidt(&currentIdtInfo)
6059
printIDT("Current", currentIdtInfo)
6160

62-
idt.0 = IDTEntry(address: divide_by_zero_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
63-
idt.1 = IDTEntry(address: debug_exception_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
64-
idt.2 = IDTEntry(address: nmi_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
65-
idt.3 = IDTEntry(address: single_step_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
66-
idt.4 = IDTEntry(address: overflow_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
67-
idt.5 = IDTEntry(address: bounds_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
68-
idt.6 = IDTEntry(address: invalid_opcode_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
69-
idt.7 = IDTEntry(address: unused_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
70-
idt.8 = IDTEntry(address: double_fault_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
71-
idt.9 = IDTEntry(address: unused_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
72-
idt.10 = IDTEntry(address: invalid_tss_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
73-
idt.11 = IDTEntry(address: seg_not_present_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
74-
idt.12 = IDTEntry(address: stack_fault_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
75-
idt.13 = IDTEntry(address: gpf_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
76-
idt.14 = IDTEntry(address: page_fault_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
77-
idt.15 = IDTEntry(address: unused_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
78-
idt.16 = IDTEntry(address: fpu_fault_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
79-
idt.17 = IDTEntry(address: alignment_exception_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
80-
idt.18 = IDTEntry(address: mce_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
81-
idt.19 = IDTEntry(address: simd_exception_stub_addr(), selector: 0x8, gateType: .TRAP_GATE, dpl: 0)
61+
idt.0 = IDTEntry(address: divide_by_zero_stub_addr(), gateType: .TRAP_GATE)
62+
idt.1 = IDTEntry(address: debug_exception_stub_addr(), gateType: .TRAP_GATE)
63+
idt.2 = IDTEntry(address: nmi_stub_addr(), gateType: .TRAP_GATE)
64+
idt.3 = IDTEntry(address: single_step_stub_addr(), gateType: .TRAP_GATE)
65+
idt.4 = IDTEntry(address: overflow_stub_addr(), gateType: .TRAP_GATE)
66+
idt.5 = IDTEntry(address: bounds_stub_addr(), gateType: .TRAP_GATE)
67+
idt.6 = IDTEntry(address: invalid_opcode_stub_addr(), gateType: .TRAP_GATE)
68+
idt.7 = IDTEntry(address: unused_stub_addr(), gateType: .TRAP_GATE)
69+
idt.8 = IDTEntry(address: double_fault_stub_addr(), gateType: .TRAP_GATE)
70+
idt.9 = IDTEntry(address: unused_stub_addr(), gateType: .TRAP_GATE)
71+
idt.10 = IDTEntry(address: invalid_tss_stub_addr(), gateType: .TRAP_GATE)
72+
idt.11 = IDTEntry(address: seg_not_present_stub_addr(), gateType: .TRAP_GATE)
73+
idt.12 = IDTEntry(address: stack_fault_stub_addr(), gateType: .TRAP_GATE)
74+
idt.13 = IDTEntry(address: gpf_stub_addr(), gateType: .TRAP_GATE)
75+
idt.14 = IDTEntry(address: page_fault_stub_addr(), gateType: .TRAP_GATE)
76+
idt.15 = IDTEntry(address: unused_stub_addr(), gateType: .TRAP_GATE)
77+
idt.16 = IDTEntry(address: fpu_fault_stub_addr(), gateType: .TRAP_GATE)
78+
idt.17 = IDTEntry(address: alignment_exception_stub_addr(), gateType: .TRAP_GATE)
79+
idt.18 = IDTEntry(address: mce_stub_addr(), gateType: .TRAP_GATE)
80+
idt.19 = IDTEntry(address: simd_exception_stub_addr(), gateType: .TRAP_GATE)
8281

8382
trap_dispatch_table.0 = divideByZeroException
8483
trap_dispatch_table.1 = debugException
@@ -102,22 +101,22 @@ public func setupIDT() {
102101
trap_dispatch_table.19 = simdException
103102
lidt(&idtInfo)
104103

105-
idt.32 = IDTEntry(address: irq00_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
106-
idt.33 = IDTEntry(address: irq01_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
107-
idt.34 = IDTEntry(address: irq02_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
108-
idt.35 = IDTEntry(address: irq03_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
109-
idt.36 = IDTEntry(address: irq04_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
110-
idt.37 = IDTEntry(address: irq05_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
111-
idt.38 = IDTEntry(address: irq06_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
112-
idt.39 = IDTEntry(address: irq07_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
113-
idt.40 = IDTEntry(address: irq08_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
114-
idt.41 = IDTEntry(address: irq09_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
115-
idt.42 = IDTEntry(address: irq10_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
116-
idt.43 = IDTEntry(address: irq11_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
117-
idt.44 = IDTEntry(address: irq12_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
118-
idt.45 = IDTEntry(address: irq13_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
119-
idt.46 = IDTEntry(address: irq14_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
120-
idt.47 = IDTEntry(address: irq15_stub_addr(), selector: 0x8, gateType: .INTR_GATE, dpl: 0)
104+
idt.32 = IDTEntry(address: irq00_stub_addr(), gateType: .INTR_GATE)
105+
idt.33 = IDTEntry(address: irq01_stub_addr(), gateType: .INTR_GATE)
106+
idt.34 = IDTEntry(address: irq02_stub_addr(), gateType: .INTR_GATE)
107+
idt.35 = IDTEntry(address: irq03_stub_addr(), gateType: .INTR_GATE)
108+
idt.36 = IDTEntry(address: irq04_stub_addr(), gateType: .INTR_GATE)
109+
idt.37 = IDTEntry(address: irq05_stub_addr(), gateType: .INTR_GATE)
110+
idt.38 = IDTEntry(address: irq06_stub_addr(), gateType: .INTR_GATE)
111+
idt.39 = IDTEntry(address: irq07_stub_addr(), gateType: .INTR_GATE)
112+
idt.40 = IDTEntry(address: irq08_stub_addr(), gateType: .INTR_GATE)
113+
idt.41 = IDTEntry(address: irq09_stub_addr(), gateType: .INTR_GATE)
114+
idt.42 = IDTEntry(address: irq10_stub_addr(), gateType: .INTR_GATE)
115+
idt.43 = IDTEntry(address: irq11_stub_addr(), gateType: .INTR_GATE)
116+
idt.44 = IDTEntry(address: irq12_stub_addr(), gateType: .INTR_GATE)
117+
idt.45 = IDTEntry(address: irq13_stub_addr(), gateType: .INTR_GATE)
118+
idt.46 = IDTEntry(address: irq14_stub_addr(), gateType: .INTR_GATE)
119+
idt.47 = IDTEntry(address: irq15_stub_addr(), gateType: .INTR_GATE)
121120

122121
initIRQs()
123122

0 commit comments

Comments
 (0)