From 5773efa18db22812debf766e8125fd112621e4a2 Mon Sep 17 00:00:00 2001 From: Terraneo Federico <fede.tft@miosix.org> Date: Sat, 11 Jan 2025 15:48:57 +0100 Subject: [PATCH] Improve process fault logic --- miosix/kernel/process.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/miosix/kernel/process.cpp b/miosix/kernel/process.cpp index 5389cc1c..b179e545 100644 --- a/miosix/kernel/process.cpp +++ b/miosix/kernel/process.cpp @@ -299,16 +299,17 @@ void *Process::start(void *) unsigned int entry=proc->program.getEntryPoint(); Thread::setupUserspaceContext(entry,proc->argc,proc->argvSp,proc->envp, proc->image.getProcessBasePointer(),proc->image.getMainStackSize()); - SvcResult svcResult=Resume; + SvcResult svcResult; do { SyscallParameters sp=Thread::switchToUserspace(); bool fault=proc->fault.faultHappened(); - //Handle svc only if no fault occurred - if(fault==false) svcResult=proc->handleSvc(sp); + if(fault) svcResult=Segfault; + else svcResult=proc->handleSvc(sp); //Handle svc only if no fault if(Thread::testTerminate() || svcResult==Exit) running=false; - if(fault || svcResult==Segfault) + //Segfault either because fault==true or handleSvc returned Segfault + if(svcResult==Segfault) { running=false; proc->exitCode=SIGSEGV; //Segfault -- GitLab