From aba154ad01fc0e1e1274f2582b1493e78daa2559 Mon Sep 17 00:00:00 2001 From: Fabian Imhof Date: Sat, 29 Mar 2025 14:47:04 +0000 Subject: fix gdt segments, improve idt and trial&error for triple fault --- .../src/interrupt_handling/generic_interrupt_handler.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp (limited to 'arch/x86_64/src/interrupt_handling') diff --git a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp new file mode 100644 index 0000000..68b4568 --- /dev/null +++ b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp @@ -0,0 +1,14 @@ +#include "arch/interrupt_handling/generic_interrupt_handler.hpp" + +#include "arch/video/vga/text.hpp" + +namespace teachos::arch::interrupt_handling +{ + + [[gnu::interrupt]] + auto generic_interrupt_handler(interrupt_frame * frame) -> void + { + (void)frame; + video::vga::text::write("An Interrupt occurred.", video::vga::text::common_attributes::green_on_black); + } +} // namespace teachos::arch::interrupt_handling \ No newline at end of file -- cgit v1.2.3 From abe7bd7480c8f4e1e30b9f0f3b98966222817f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matteo=20Gm=C3=BCr?= Date: Mon, 31 Mar 2025 10:38:53 +0000 Subject: Clean up global descriptor table initalization --- arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/x86_64/src/interrupt_handling') diff --git a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp index 68b4568..2f599e5 100644 --- a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp +++ b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp @@ -11,4 +11,4 @@ namespace teachos::arch::interrupt_handling (void)frame; video::vga::text::write("An Interrupt occurred.", video::vga::text::common_attributes::green_on_black); } -} // namespace teachos::arch::interrupt_handling \ No newline at end of file +} // namespace teachos::arch::interrupt_handling -- cgit v1.2.3 From fc4a2306b803ccfc27f1bdc4a831176a5278a9d5 Mon Sep 17 00:00:00 2001 From: Fabian Imhof Date: Wed, 2 Apr 2025 09:57:54 +0000 Subject: fix interrupt handler and idt --- arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/x86_64/src/interrupt_handling') diff --git a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp index 2f599e5..4392b04 100644 --- a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp +++ b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp @@ -5,7 +5,7 @@ namespace teachos::arch::interrupt_handling { - [[gnu::interrupt]] + [[gnu::interrupt]] [[gnu::section(".interrupt_text")]] auto generic_interrupt_handler(interrupt_frame * frame) -> void { (void)frame; -- cgit v1.2.3 From 576a7a95b2462ec4938de9fe344657ca04b2ba34 Mon Sep 17 00:00:00 2001 From: Fabian Imhof Date: Thu, 17 Apr 2025 14:14:49 +0000 Subject: add syscall interrupt handler --- arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'arch/x86_64/src/interrupt_handling') diff --git a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp index 4392b04..6075770 100644 --- a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp +++ b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp @@ -11,4 +11,11 @@ namespace teachos::arch::interrupt_handling (void)frame; video::vga::text::write("An Interrupt occurred.", video::vga::text::common_attributes::green_on_black); } + + [[gnu::interrupt]] [[gnu::section(".interrupt_text")]] + auto syscall_interrupt_handler(interrupt_frame * frame) -> void + { + (void)frame; + video::vga::text::write("A SYSCALL interrupt occurred.", video::vga::text::common_attributes::green_on_black); + } } // namespace teachos::arch::interrupt_handling -- cgit v1.2.3 From 0986058bb9ca5b4afd7c578c815dc3a4c08808a9 Mon Sep 17 00:00:00 2001 From: Fabian Imhof Date: Mon, 21 Apr 2025 08:18:41 +0000 Subject: WIP syscall --- .../generic_interrupt_handler.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'arch/x86_64/src/interrupt_handling') diff --git a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp index 6075770..7afd87d 100644 --- a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp +++ b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp @@ -15,7 +15,27 @@ namespace teachos::arch::interrupt_handling [[gnu::interrupt]] [[gnu::section(".interrupt_text")]] auto syscall_interrupt_handler(interrupt_frame * frame) -> void { + // RDI, RSI, RDX, RCX, R8, R9 + // RDI -> SYSCALL number + // Others are arguments + + // TODO: The registers are not available here. We need to set them up on the stack + // and access them via argument. + + uint64_t syscall_number{}; + asm volatile("mov %%rdi, %0" : "=r"(syscall_number)); + + // Handle system call based on the number + switch (syscall_number) + { + case 1: + video::vga::text::write("SYSCALL 1.", video::vga::text::common_attributes::green_on_black); + break; + default: + // Handle unknown syscall + break; + } + (void)frame; - video::vga::text::write("A SYSCALL interrupt occurred.", video::vga::text::common_attributes::green_on_black); } } // namespace teachos::arch::interrupt_handling -- cgit v1.2.3 From 5f149faeb9d41bb56733075b0e56908b3731d38d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matteo=20Gm=C3=BCr?= Date: Sun, 27 Apr 2025 09:32:59 +0000 Subject: Move gnu function attributes to header file --- arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp | 3 --- 1 file changed, 3 deletions(-) (limited to 'arch/x86_64/src/interrupt_handling') diff --git a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp index 7afd87d..60fb50c 100644 --- a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp +++ b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp @@ -4,15 +4,12 @@ namespace teachos::arch::interrupt_handling { - - [[gnu::interrupt]] [[gnu::section(".interrupt_text")]] auto generic_interrupt_handler(interrupt_frame * frame) -> void { (void)frame; video::vga::text::write("An Interrupt occurred.", video::vga::text::common_attributes::green_on_black); } - [[gnu::interrupt]] [[gnu::section(".interrupt_text")]] auto syscall_interrupt_handler(interrupt_frame * frame) -> void { // RDI, RSI, RDX, RCX, R8, R9 -- cgit v1.2.3 From 5a8c9d2f2e4a3d2810f81c35070c6ef0926cfdd1 Mon Sep 17 00:00:00 2001 From: Fabian Imhof Date: Sat, 3 May 2025 09:45:45 +0000 Subject: write wrapper function for syscall --- .../generic_interrupt_handler.cpp | 26 ---------------------- 1 file changed, 26 deletions(-) (limited to 'arch/x86_64/src/interrupt_handling') diff --git a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp index 60fb50c..8e2c62d 100644 --- a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp +++ b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp @@ -9,30 +9,4 @@ namespace teachos::arch::interrupt_handling (void)frame; video::vga::text::write("An Interrupt occurred.", video::vga::text::common_attributes::green_on_black); } - - auto syscall_interrupt_handler(interrupt_frame * frame) -> void - { - // RDI, RSI, RDX, RCX, R8, R9 - // RDI -> SYSCALL number - // Others are arguments - - // TODO: The registers are not available here. We need to set them up on the stack - // and access them via argument. - - uint64_t syscall_number{}; - asm volatile("mov %%rdi, %0" : "=r"(syscall_number)); - - // Handle system call based on the number - switch (syscall_number) - { - case 1: - video::vga::text::write("SYSCALL 1.", video::vga::text::common_attributes::green_on_black); - break; - default: - // Handle unknown syscall - break; - } - - (void)frame; - } } // namespace teachos::arch::interrupt_handling -- cgit v1.2.3 From c9f46f3773e7943ce114af888a44f50061c2ac1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matteo=20Gm=C3=BCr?= Date: Tue, 6 May 2025 13:40:42 +0000 Subject: Remove user Mode Access to VGA / Heap and Kernel Methods. --- arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'arch/x86_64/src/interrupt_handling') diff --git a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp index 8e2c62d..9d061a8 100644 --- a/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp +++ b/arch/x86_64/src/interrupt_handling/generic_interrupt_handler.cpp @@ -8,5 +8,6 @@ namespace teachos::arch::interrupt_handling { (void)frame; video::vga::text::write("An Interrupt occurred.", video::vga::text::common_attributes::green_on_black); + video::vga::text::newline(); } } // namespace teachos::arch::interrupt_handling -- cgit v1.2.3