diff options
Diffstat (limited to 'sim/common')
-rw-r--r-- | sim/common/ChangeLog | 4 | ||||
-rw-r--r-- | sim/common/sim-syscall.c | 16 |
2 files changed, 18 insertions, 2 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index c32e747..18d37bd 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,5 +1,9 @@ 2021-06-23 Mike Frysinger <vapier@gentoo.org> + * sim-syscall.c (sim_syscall_multi): Handle CB_SYS_kill. + +2021-06-23 Mike Frysinger <vapier@gentoo.org> + * callback.c (os_kill): New function. (default_callback): Add os_kill. * syscall.c (cb_syscall): Handle CB_SYS_kill. 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; |