Skip to content

Commit 06a3ec5

Browse files
Merge pull request #6 from SafeMemoryZone/fix/remove-idt-testing
Fix/remove idt testing
2 parents 23da506 + 0d0caf2 commit 06a3ec5

3 files changed

Lines changed: 1 addition & 126 deletions

File tree

include/cpu/idt.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#ifndef IDT_H
22
#define IDT_H
3-
#include <stdbool.h>
43

54
void init_idt();
6-
bool test_exceptions();
75

86
#endif // IDT_H

src/cpu/idt.c

Lines changed: 0 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -144,120 +144,3 @@ void init_idt() {
144144
struct idt_ptr idtr = make_idtr();
145145
load_idt(&idtr);
146146
}
147-
148-
// === DEBUG ===
149-
150-
static int last_vector;
151-
152-
static void testing_exception_handler(struct interrupt_frame* frame) {
153-
last_vector = frame->vector;
154-
}
155-
156-
// Only tests IDT vector #0-#31
157-
bool test_exceptions() {
158-
// Install test exception handler
159-
active_exception_handler = testing_exception_handler;
160-
161-
#define ASSERT_LAST_IDT_VECTOR_NUM(num) \
162-
if (last_vector != num) return false
163-
164-
// For vectors without error codes: use int N directly
165-
#define TRIGGER_INTERRUPT(n) asm volatile("int %0" : : "i"(n))
166-
167-
// For vectors with error codes: int N never pushes an error code, but isr_err stubs
168-
// expect one. We build a fake interrupt frame with a dummy error code on the stack and
169-
// jump directly to the ISR stub
170-
#define _STR(x) #x
171-
#define STR(x) _STR(x)
172-
#define KERNEL_SS 0x10
173-
#define TRIGGER_INTERRUPT_ERR(n) \
174-
asm volatile( \
175-
"movq %%rsp, %%rdx\n\t" \
176-
"pushq $" STR(KERNEL_SS) "\n\t" /* fake SS */ \
177-
"pushq %%rdx\n\t" /* fake RSP */ \
178-
"pushfq\n\t" /* RFLAGS */ \
179-
"pushq $" STR(KERNEL_CS) "\n\t" /* fake CS */ \
180-
"leaq 1f(%%rip), %%rax\n\t" \
181-
"pushq %%rax\n\t" /* fake RIP */ \
182-
"pushq $0\n\t" /* dummy error code */\
183-
"jmp isr_stub_" #n "\n\t" \
184-
"1:\n\t" \
185-
: : : "rax", "rdx", "memory")
186-
187-
TRIGGER_INTERRUPT(0);
188-
ASSERT_LAST_IDT_VECTOR_NUM(0);
189-
TRIGGER_INTERRUPT(1);
190-
ASSERT_LAST_IDT_VECTOR_NUM(1);
191-
TRIGGER_INTERRUPT(2);
192-
ASSERT_LAST_IDT_VECTOR_NUM(2);
193-
TRIGGER_INTERRUPT(3);
194-
ASSERT_LAST_IDT_VECTOR_NUM(3);
195-
TRIGGER_INTERRUPT(4);
196-
ASSERT_LAST_IDT_VECTOR_NUM(4);
197-
TRIGGER_INTERRUPT(5);
198-
ASSERT_LAST_IDT_VECTOR_NUM(5);
199-
TRIGGER_INTERRUPT(6);
200-
ASSERT_LAST_IDT_VECTOR_NUM(6);
201-
TRIGGER_INTERRUPT(7);
202-
ASSERT_LAST_IDT_VECTOR_NUM(7);
203-
TRIGGER_INTERRUPT_ERR(8);
204-
ASSERT_LAST_IDT_VECTOR_NUM(8);
205-
TRIGGER_INTERRUPT(9);
206-
ASSERT_LAST_IDT_VECTOR_NUM(9);
207-
TRIGGER_INTERRUPT_ERR(10);
208-
ASSERT_LAST_IDT_VECTOR_NUM(10);
209-
TRIGGER_INTERRUPT_ERR(11);
210-
ASSERT_LAST_IDT_VECTOR_NUM(11);
211-
TRIGGER_INTERRUPT_ERR(12);
212-
ASSERT_LAST_IDT_VECTOR_NUM(12);
213-
TRIGGER_INTERRUPT_ERR(13);
214-
ASSERT_LAST_IDT_VECTOR_NUM(13);
215-
TRIGGER_INTERRUPT_ERR(14);
216-
ASSERT_LAST_IDT_VECTOR_NUM(14);
217-
TRIGGER_INTERRUPT(15);
218-
ASSERT_LAST_IDT_VECTOR_NUM(15);
219-
TRIGGER_INTERRUPT(16);
220-
ASSERT_LAST_IDT_VECTOR_NUM(16);
221-
TRIGGER_INTERRUPT_ERR(17);
222-
ASSERT_LAST_IDT_VECTOR_NUM(17);
223-
TRIGGER_INTERRUPT(18);
224-
ASSERT_LAST_IDT_VECTOR_NUM(18);
225-
TRIGGER_INTERRUPT(19);
226-
ASSERT_LAST_IDT_VECTOR_NUM(19);
227-
TRIGGER_INTERRUPT(20);
228-
ASSERT_LAST_IDT_VECTOR_NUM(20);
229-
TRIGGER_INTERRUPT_ERR(21);
230-
ASSERT_LAST_IDT_VECTOR_NUM(21);
231-
TRIGGER_INTERRUPT(22);
232-
ASSERT_LAST_IDT_VECTOR_NUM(22);
233-
TRIGGER_INTERRUPT(23);
234-
ASSERT_LAST_IDT_VECTOR_NUM(23);
235-
TRIGGER_INTERRUPT(24);
236-
ASSERT_LAST_IDT_VECTOR_NUM(24);
237-
TRIGGER_INTERRUPT(25);
238-
ASSERT_LAST_IDT_VECTOR_NUM(25);
239-
TRIGGER_INTERRUPT(26);
240-
ASSERT_LAST_IDT_VECTOR_NUM(26);
241-
TRIGGER_INTERRUPT(27);
242-
ASSERT_LAST_IDT_VECTOR_NUM(27);
243-
TRIGGER_INTERRUPT(28);
244-
ASSERT_LAST_IDT_VECTOR_NUM(28);
245-
TRIGGER_INTERRUPT(29);
246-
ASSERT_LAST_IDT_VECTOR_NUM(29);
247-
TRIGGER_INTERRUPT(30);
248-
ASSERT_LAST_IDT_VECTOR_NUM(30);
249-
TRIGGER_INTERRUPT(31);
250-
ASSERT_LAST_IDT_VECTOR_NUM(31);
251-
252-
#undef ASSERT_LAST_IDT_VECTOR_NUM
253-
#undef TRIGGER_INTERRUPT
254-
#undef TRIGGER_INTERRUPT_ERR
255-
#undef _STR
256-
#undef STR
257-
#undef KERNEL_SS
258-
259-
// Remove test exception handler (and install default one)
260-
active_exception_handler = exception_handler;
261-
262-
return true;
263-
}

src/kernel.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,8 @@ void kmain(void) {
2626
log(LL_INFO, "Initilized GDT");
2727
init_idt();
2828
log(LL_INFO, "Initilized IDT");
29-
if (!test_exceptions()) {
30-
log(LL_ERR, "IDT tests failed");
31-
goto stop;
32-
}
33-
log(LL_INFO, "IDT tests passed");
34-
log(LL_INFO, "Kernel initilization success");
29+
log(LL_INFO, "Kernel initilization succeeded");
3530

3631
// Stop execution
37-
stop:
3832
hcf();
3933
}

0 commit comments

Comments
 (0)