From 2f98f5953811a515ccc20f5a69cb96d6ad2c27f1 Mon Sep 17 00:00:00 2001 From: Nathan Giddings Date: Sat, 18 Jul 2020 18:55:26 -0500 Subject: [PATCH] Added stub syscall handler --- src/interrupts/x86/interrupts.cpp | 4 ++++ src/interrupts/x86/inthandlers.cpp | 13 ++++++++++--- src/interrupts/x86/inthandlers.hpp | 3 +++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/interrupts/x86/interrupts.cpp b/src/interrupts/x86/interrupts.cpp index 971e6a8..9e5c964 100644 --- a/src/interrupts/x86/interrupts.cpp +++ b/src/interrupts/x86/interrupts.cpp @@ -1,8 +1,12 @@ #include "../interrupts.hpp" #include "idt.hpp" +#include "inthandlers.hpp" kernel::Interrupts::Interrupts() { + idt[0] = InterruptDescriptor((void*) &divisionByZero, InterruptDescriptor::INT32, 0); + idt[8] = InterruptDescriptor((void*) &doubleFaultHandler, InterruptDescriptor::INT32, 0); + idt[0x80] = InterruptDescriptor((void*) &syscallHandler, InterruptDescriptor::INT32, 0); // Load interrupt handlers // Configure PIC _lidt(); diff --git a/src/interrupts/x86/inthandlers.cpp b/src/interrupts/x86/inthandlers.cpp index 59ce3ad..6519620 100644 --- a/src/interrupts/x86/inthandlers.cpp +++ b/src/interrupts/x86/inthandlers.cpp @@ -13,20 +13,27 @@ __attribute__ ((interrupt)) void gpFaultHandler(void* frame, unsigned int error) { *display = 'a'; - asm("hlt"); + display += 2; } __attribute__ ((interrupt)) void pageFaultHandler(void* frame, unsigned int error) { *display = '0'; - //asm("hlt"); + display += 2; } __attribute__ ((interrupt)) void doubleFaultHandler(void* frame, unsigned int error) { *display = '#'; - //asm("hlt"); + asm("hlt"); +} + +__attribute__ ((interrupt)) +void syscallHandler(void* frame) +{ + *display = 'z'; + display += 2; } diff --git a/src/interrupts/x86/inthandlers.hpp b/src/interrupts/x86/inthandlers.hpp index 10f085b..bf92c56 100644 --- a/src/interrupts/x86/inthandlers.hpp +++ b/src/interrupts/x86/inthandlers.hpp @@ -13,4 +13,7 @@ void pageFaultHandler(void* frame, unsigned int error); __attribute__ ((interrupt)) void doubleFaultHandler(void* frame, unsigned int error); +__attribute__ ((interrupt)) +void syscallHandler(void* frame); + #endif