diff options
Diffstat (limited to 'sim/common/sim-syscall.c')
-rw-r--r-- | sim/common/sim-syscall.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sim/common/sim-syscall.c b/sim/common/sim-syscall.c index be3ff8f..f24d761 100644 --- a/sim/common/sim-syscall.c +++ b/sim/common/sim-syscall.c @@ -97,8 +97,20 @@ sim_syscall_multi (SIM_CPU *cpu, int func, long arg1, long arg2, long arg3, TRACE_SYSCALL (cpu, "%s[%i](%#lx, %#lx, %#lx) = %li", syscall, func, arg1, arg2, arg3, sc.result); - if (cb_target_to_host_syscall (cb, func) == CB_SYS_exit) - sim_engine_halt (sd, cpu, NULL, sim_pc_get (cpu), sim_exited, arg1); + /* Handle syscalls that affect engine behavior. */ + switch (cb_target_to_host_syscall (cb, func)) + { + case CB_SYS_exit: + sim_engine_halt (sd, cpu, NULL, sim_pc_get (cpu), sim_exited, arg1); + break; + + case CB_SYS_kill: + /* TODO: Need to translate target signal to sim signal, but the sim + doesn't yet have such a mapping layer. */ + if (arg1 == (*cb->getpid) (cb)) + sim_engine_halt (sd, cpu, NULL, sim_pc_get (cpu), sim_signalled, arg2); + break; + } *result = sc.result; *result2 = sc.result2; |