diff options
author | aqua <aqua@iserlohn-fortress.net> | 2022-04-01 11:38:00 +0300 |
---|---|---|
committer | aqua <aqua@iserlohn-fortress.net> | 2022-08-12 10:13:59 +0300 |
commit | a6c1174b3fb598cd59c1668cfc4d4746ab688079 (patch) | |
tree | 85e2c3e37ef0c9602c56873332b98311e655e6e5 /arch/i686/include | |
parent | Initial commit (diff) | |
download | kernel-a6c1174b3fb598cd59c1668cfc4d4746ab688079.tar.xz |
lidt
Diffstat (limited to 'arch/i686/include')
-rw-r--r-- | arch/i686/include/gdt.h | 5 | ||||
-rw-r--r-- | arch/i686/include/idt.h | 18 | ||||
-rw-r--r-- | arch/i686/include/sys/control.h | 9 |
3 files changed, 27 insertions, 5 deletions
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 <stdint.h> + +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)"); +} |