From: Severin Wischmann ext:(%2C%20Ioannis%20Ilkos%20%3Cioannis.ilkos09%40imperial.ac.uk%3E) Date: Mon, 20 Oct 2014 21:43:48 +0000 (-0500) Subject: x86: syscall: implementation of exit_group X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e72736aaf0508dd545ae9949c31ed91ba41d761b;p=gem5.git x86: syscall: implementation of exit_group On exit_group syscall, we used to exit the simulator. But now we will only halt the execution of threads that belong to the group. Committed by: Nilay Vaish --- diff --git a/src/sim/syscall_emul.cc b/src/sim/syscall_emul.cc index 13ea784e5..d8df891dd 100644 --- a/src/sim/syscall_emul.cc +++ b/src/sim/syscall_emul.cc @@ -135,11 +135,17 @@ SyscallReturn exitGroupFunc(SyscallDesc *desc, int callnum, LiveProcess *process, ThreadContext *tc) { - // really should just halt all thread contexts belonging to this - // process in case there's another process running... - int index = 0; - exitSimLoop("target called exit()", - process->getSyscallArg(tc, index) & 0xff); + // halt all threads belonging to this process + for (auto i: process->contextIds) { + process->system->getThreadContext(i)->halt(); + } + + if (!process->system->numRunningContexts()) { + // all threads belonged to this process... exit simulator + int index = 0; + exitSimLoop("target called exit()", + process->getSyscallArg(tc, index) & 0xff); + } return 1; }