kill app on pagefault

This commit is contained in:
2026-02-22 02:25:49 +01:00
parent b9637ce86a
commit 20345264aa
3 changed files with 8 additions and 1 deletions

View File

@@ -46,13 +46,17 @@ static void printContext(const InterruptContext *context) {
kernelpanic("General protection fault!"); kernelpanic("General protection fault!");
} }
#include "syscall/skeleton.h"
[[gnu::interrupt]] static void handle_page_fault(InterruptContext *context, [[gnu::interrupt]] static void handle_page_fault(InterruptContext *context,
uint64_t error) { uint64_t error) {
DBG << "Page fault encountered at linear address " << hex DBG << "Page fault encountered at linear address " << hex
<< Core::CR<2>::read() << endl << Core::CR<2>::read() << endl
<< PageFaultError(error) << endl; << PageFaultError(error) << endl;
printContext(context); printContext(context);
kernelpanic("Page fault!");
Syscall::Skeleton::exit(Guard::enter().vault());
//kernelpanic("Page fault!");
} }
/*! \brief Assembly interrupt handler for the keyboard. /*! \brief Assembly interrupt handler for the keyboard.

View File

@@ -92,6 +92,8 @@ extern "C" int main() {
g.vault().scheduler.ready(new Thread(false, (void*)appstart, (appsize/4096)+1)); //TODO fix edgecase on size=4096 g.vault().scheduler.ready(new Thread(false, (void*)appstart, (appsize/4096)+1)); //TODO fix edgecase on size=4096
offset += 1+(appsize/4096); offset += 1+(appsize/4096);
} }
g.vault().scheduler.ready(new Thread(false, (void*)0x4001000, 1));
//for(void* p=Multiboot::getModule(0)->getStartAddress(); p<Multiboot::getModule(0)->getEndAddress(); p=(void*)((uintptr_t)p+4096)){ //for(void* p=Multiboot::getModule(0)->getStartAddress(); p<Multiboot::getModule(0)->getEndAddress(); p=(void*)((uintptr_t)p+4096)){
// DBG << "module at: " << hex << p << endl; // DBG << "module at: " << hex << p << endl;
// g.vault().scheduler.ready(new Thread(false, p)); // g.vault().scheduler.ready(new Thread(false, p));

View File

@@ -14,6 +14,7 @@ extern "C" void main() {
for (unsigned i = 1;; ++i) { for (unsigned i = 1;; ++i) {
write(1, text, sizeof(text)); write(1, text, sizeof(text));
void* ptr= map(512); void* ptr= map(512);
//sprintf(&buf, "ptr address: %x \n" , ptr); //sprintf(&buf, "ptr address: %x \n" , ptr);
//unmap(ptr, 512); //unmap(ptr, 512);