aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/common/ChangeLog4
-rw-r--r--sim/common/sim-syscall.c16
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;