From a6c1174b3fb598cd59c1668cfc4d4746ab688079 Mon Sep 17 00:00:00 2001 From: aqua Date: Fri, 1 Apr 2022 11:38:00 +0300 Subject: lidt --- arch/i686/include/gdt.h | 5 ----- arch/i686/include/idt.h | 18 ++++++++++++++++++ arch/i686/include/sys/control.h | 9 +++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 arch/i686/include/idt.h create mode 100644 arch/i686/include/sys/control.h (limited to 'arch/i686/include') diff --git a/arch/i686/include/gdt.h b/arch/i686/include/gdt.h index 6badf84..9148c3d 100644 --- a/arch/i686/include/gdt.h +++ b/arch/i686/include/gdt.h @@ -47,11 +47,6 @@ _Static_assert(sizeof(struct SegmentDescriptor_t) == 8); void SegmentDescriptor(struct SegmentDescriptor_t *self, unsigned base, unsigned limit, uint8_t access); -struct __attribute__((packed)) Pointer { - uint16_t limit; - uint32_t base; -}; - void gdt_install(); enum SegmentIndex { diff --git a/arch/i686/include/idt.h b/arch/i686/include/idt.h new file mode 100644 index 0000000..22dc6de --- /dev/null +++ b/arch/i686/include/idt.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +struct interrupt_frame { + uint32_t ip; + uint32_t cs; + uint32_t flags; + uint32_t sp; + uint32_t ss; +}; + +void abort_handler(struct interrupt_frame *frame); +void interrupt_handler(struct interrupt_frame *frame); +void interrupt_handler_e(struct interrupt_frame *frame, uint32_t error); +void syscall_handler(struct interrupt_frame *frame); + +void idt_install(); diff --git a/arch/i686/include/sys/control.h b/arch/i686/include/sys/control.h new file mode 100644 index 0000000..a40a67f --- /dev/null +++ b/arch/i686/include/sys/control.h @@ -0,0 +1,9 @@ +#pragma once + +static void +abort() +{ + asm volatile(R"(cli +h: hlt +jmp h)"); +} -- cgit v1.2.1