diff --git a/miosix/kernel/process.cpp b/miosix/kernel/process.cpp index 5389cc1c21d3d61e5a6a00f78e32dcc644321953..b179e5453207e5c21943a6ffd31f5e9752e5b4ea 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