blob: 32daaf73a35d998206597c83a93d9a2e39dceb34 [file] [log] [blame]
Alex Bennéeae7467b2022-09-29 12:42:24 +01001/*
2 * gdbstub internals
3 *
4 * Copyright (c) 2022 Linaro Ltd
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
Alex Bennée97748552023-03-02 18:57:37 -08009#ifndef GDBSTUB_INTERNALS_H
10#define GDBSTUB_INTERNALS_H
Alex Bennéeae7467b2022-09-29 12:42:24 +010011
Philippe Mathieu-Daudé55b5b8e2022-12-06 16:20:27 +010012#include "exec/cpu-common.h"
13
Alex Bennée9f567872023-03-02 18:57:42 -080014#define MAX_PACKET_LENGTH 4096
15
16/*
17 * Shared structures and definitions
18 */
19
20typedef struct GDBProcess {
21 uint32_t pid;
22 bool attached;
23
24 char target_xml[1024];
25} GDBProcess;
26
27enum RSState {
28 RS_INACTIVE,
29 RS_IDLE,
30 RS_GETLINE,
31 RS_GETLINE_ESC,
32 RS_GETLINE_RLE,
33 RS_CHKSUM1,
34 RS_CHKSUM2,
35};
36
37typedef struct GDBState {
38 bool init; /* have we been initialised? */
39 CPUState *c_cpu; /* current CPU for step/continue ops */
40 CPUState *g_cpu; /* current CPU for other ops */
41 CPUState *query_cpu; /* for q{f|s}ThreadInfo */
42 enum RSState state; /* parsing state */
43 char line_buf[MAX_PACKET_LENGTH];
44 int line_buf_index;
45 int line_sum; /* running checksum */
46 int line_csum; /* checksum at the end of the packet */
47 GByteArray *last_packet;
48 int signal;
49 bool multiprocess;
50 GDBProcess *processes;
51 int process_num;
52 char syscall_buf[256];
53 gdb_syscall_complete_cb current_syscall_cb;
54 GString *str_buf;
55 GByteArray *mem_buf;
56 int sstep_flags;
57 int supported_sstep_flags;
58} GDBState;
59
60/*
61 * Break/Watch point support - there is an implementation for softmmu
62 * and user mode.
63 */
Alex Bennéea48e7d92022-09-29 12:42:25 +010064bool gdb_supports_guest_debug(void);
Philippe Mathieu-Daudé55b5b8e2022-12-06 16:20:27 +010065int gdb_breakpoint_insert(CPUState *cs, int type, vaddr addr, vaddr len);
66int gdb_breakpoint_remove(CPUState *cs, int type, vaddr addr, vaddr len);
Alex Bennéeae7467b2022-09-29 12:42:24 +010067void gdb_breakpoint_remove_all(CPUState *cs);
68
Alex Bennée97748552023-03-02 18:57:37 -080069#endif /* GDBSTUB_INTERNALS_H */