1 /* 2 * gdbstub internals 3 * 4 * Copyright (c) 2022 Linaro Ltd 5 * 6 * SPDX-License-Identifier: GPL-2.0-or-later 7 */ 8 9 #ifndef GDBSTUB_INTERNALS_H 10 #define GDBSTUB_INTERNALS_H 11 12 #include "exec/cpu-common.h" 13 14 #define MAX_PACKET_LENGTH 4096 15 16 /* 17 * Shared structures and definitions 18 */ 19 20 typedef struct GDBProcess { 21 uint32_t pid; 22 bool attached; 23 24 char target_xml[1024]; 25 } GDBProcess; 26 27 enum 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 37 typedef 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 */ 64 bool gdb_supports_guest_debug(void); 65 int gdb_breakpoint_insert(CPUState *cs, int type, vaddr addr, vaddr len); 66 int gdb_breakpoint_remove(CPUState *cs, int type, vaddr addr, vaddr len); 67 void gdb_breakpoint_remove_all(CPUState *cs); 68 69 #endif /* GDBSTUB_INTERNALS_H */ 70