xref: /qemu/include/gdbstub/user.h (revision b6617e937e9abe6ce449729e2fdebf11014f7e49)
1d96bf49bSAlex Bennée /*
2d96bf49bSAlex Bennée  * gdbstub user-mode only APIs
3d96bf49bSAlex Bennée  *
4d96bf49bSAlex Bennée  * Copyright (c) 2022 Linaro Ltd
5d96bf49bSAlex Bennée  *
6d96bf49bSAlex Bennée  * SPDX-License-Identifier: LGPL-2.0+
7d96bf49bSAlex Bennée  */
8d96bf49bSAlex Bennée 
9d96bf49bSAlex Bennée #ifndef GDBSTUB_USER_H
10d96bf49bSAlex Bennée #define GDBSTUB_USER_H
11d96bf49bSAlex Bennée 
12d96bf49bSAlex Bennée /**
13*b6617e93SGustavo Romero  * gdb_handlesig() - yield control to gdb
14d96bf49bSAlex Bennée  * @cpu: CPU
15d96bf49bSAlex Bennée  * @sig: if non-zero, the signal number which caused us to stop
168b7fcb8eSIlya Leoshkevich  * @reason: stop reason for stop reply packet or NULL
17d96bf49bSAlex Bennée  *
18d96bf49bSAlex Bennée  * This function yields control to gdb, when a user-mode-only target
19d96bf49bSAlex Bennée  * needs to stop execution. If @sig is non-zero, then we will send a
20d96bf49bSAlex Bennée  * stop packet to tell gdb that we have stopped because of this signal.
21d96bf49bSAlex Bennée  *
22d96bf49bSAlex Bennée  * This function will block (handling protocol requests from gdb)
23d96bf49bSAlex Bennée  * until gdb tells us to continue target execution. When it does
24d96bf49bSAlex Bennée  * return, the return value is a signal to deliver to the target,
25d96bf49bSAlex Bennée  * or 0 if no signal should be delivered, ie the signal that caused
26d96bf49bSAlex Bennée  * us to stop should be ignored.
27d96bf49bSAlex Bennée  */
28*b6617e93SGustavo Romero int gdb_handlesig(CPUState *, int, const char *);
29d96bf49bSAlex Bennée 
30d96bf49bSAlex Bennée /**
31d96bf49bSAlex Bennée  * gdb_signalled() - inform remote gdb of sig exit
32d96bf49bSAlex Bennée  * @as: current CPUArchState
33d96bf49bSAlex Bennée  * @sig: signal number
34d96bf49bSAlex Bennée  */
35d96bf49bSAlex Bennée void gdb_signalled(CPUArchState *as, int sig);
36d96bf49bSAlex Bennée 
37d96bf49bSAlex Bennée /**
383d6ed98dSIlya Leoshkevich  * gdbserver_fork_start() - inform gdb of the upcoming fork()
393d6ed98dSIlya Leoshkevich  */
403d6ed98dSIlya Leoshkevich void gdbserver_fork_start(void);
413d6ed98dSIlya Leoshkevich 
423d6ed98dSIlya Leoshkevich /**
436604b057SIlya Leoshkevich  * gdbserver_fork_end() - inform gdb of the completed fork()
44d96bf49bSAlex Bennée  * @cs: CPU
456604b057SIlya Leoshkevich  * @pid: 0 if in child process, -1 if fork failed, child process pid otherwise
46d96bf49bSAlex Bennée  */
476604b057SIlya Leoshkevich void gdbserver_fork_end(CPUState *cs, pid_t pid);
48d96bf49bSAlex Bennée 
490a0d87c9SIlya Leoshkevich /**
500a0d87c9SIlya Leoshkevich  * gdb_syscall_entry() - inform gdb of syscall entry and yield control to it
510a0d87c9SIlya Leoshkevich  * @cs: CPU
520a0d87c9SIlya Leoshkevich  * @num: syscall number
530a0d87c9SIlya Leoshkevich  */
540a0d87c9SIlya Leoshkevich void gdb_syscall_entry(CPUState *cs, int num);
550a0d87c9SIlya Leoshkevich 
560a0d87c9SIlya Leoshkevich /**
570a0d87c9SIlya Leoshkevich  * gdb_syscall_entry() - inform gdb of syscall return and yield control to it
580a0d87c9SIlya Leoshkevich  * @cs: CPU
590a0d87c9SIlya Leoshkevich  * @num: syscall number
600a0d87c9SIlya Leoshkevich  */
610a0d87c9SIlya Leoshkevich void gdb_syscall_return(CPUState *cs, int num);
62d96bf49bSAlex Bennée 
63d96bf49bSAlex Bennée #endif /* GDBSTUB_USER_H */
64