mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-18 08:38:10 +08:00
sim: callback: add a kill interface
This will make it easier to emulate the syscall. If the kill target is the sim itself, don't do anything. This forces the higher layers to make a decision as to how to handle this event: like halting the overall engine process.
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
2021-06-23 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
|
* sim/callback.h (struct host_callback_struct): Add kill.
|
||||||
|
|
||||||
2021-06-22 Mike Frysinger <vapier@gentoo.org>
|
2021-06-22 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* sim/callback.h (struct host_callback_struct): Add getpid.
|
* sim/callback.h (struct host_callback_struct): Add getpid.
|
||||||
|
@ -92,6 +92,7 @@ struct host_callback_struct
|
|||||||
int (*ftruncate) (host_callback *, int, int64_t);
|
int (*ftruncate) (host_callback *, int, int64_t);
|
||||||
int (*truncate) (host_callback *, const char *, int64_t);
|
int (*truncate) (host_callback *, const char *, int64_t);
|
||||||
int (*getpid) (host_callback *);
|
int (*getpid) (host_callback *);
|
||||||
|
int (*kill) (host_callback *, int, int);
|
||||||
int (*pipe) (host_callback *, int *);
|
int (*pipe) (host_callback *, int *);
|
||||||
|
|
||||||
/* Called by the framework when a read call has emptied a pipe buffer. */
|
/* Called by the framework when a read call has emptied a pipe buffer. */
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
2021-06-23 Mike Frysinger <vapier@gentoo.org>
|
2021-06-23 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* Make-common.in (srcdir): Change to abs_srcdir.
|
* Make-common.in (srcdir): Change to abs_srcdir.
|
||||||
|
@ -569,6 +569,16 @@ os_getpid (host_callback *p)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
os_kill (host_callback *p, int pid, int signum)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = kill (pid, signum);
|
||||||
|
p->last_errno = errno;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
os_pipe (host_callback *p, int *filedes)
|
os_pipe (host_callback *p, int *filedes)
|
||||||
{
|
{
|
||||||
@ -752,6 +762,7 @@ host_callback default_callback =
|
|||||||
os_truncate,
|
os_truncate,
|
||||||
|
|
||||||
os_getpid,
|
os_getpid,
|
||||||
|
os_kill,
|
||||||
|
|
||||||
os_pipe,
|
os_pipe,
|
||||||
os_pipe_empty,
|
os_pipe_empty,
|
||||||
|
@ -583,6 +583,24 @@ cb_syscall (host_callback *cb, CB_SYSCALL *sc)
|
|||||||
result = (*cb->getpid) (cb);
|
result = (*cb->getpid) (cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CB_SYS_kill:
|
||||||
|
/* If killing self, leave it to the caller to process so it can send the
|
||||||
|
signal to the engine. */
|
||||||
|
if (sc->arg1 == (*cb->getpid) (cb))
|
||||||
|
{
|
||||||
|
result = -1;
|
||||||
|
errcode = ENOSYS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int signum = cb_target_to_host_signal (cb, sc->arg2);
|
||||||
|
|
||||||
|
result = (*cb->kill) (cb, sc->arg1, signum);
|
||||||
|
cb->last_errno = errno;
|
||||||
|
goto ErrorFinish;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case CB_SYS_time :
|
case CB_SYS_time :
|
||||||
{
|
{
|
||||||
/* FIXME: May wish to change CB_SYS_time to something else.
|
/* FIXME: May wish to change CB_SYS_time to something else.
|
||||||
|
Reference in New Issue
Block a user