kill app on pagefault
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user