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 <nilay@cs.wisc.edu>
This commit is contained in:
Severin Wischmann ext:(%2C%20Ioannis%20Ilkos%20%3Cioannis.ilkos09%40imperial.ac.uk%3E) 2014-10-20 16:43:48 -05:00
parent 6d4866383f
commit e72736aaf0

View file

@ -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;
}