1022c62cbSPaolo Bonzini #ifndef GDBSTUB_H 2022c62cbSPaolo Bonzini #define GDBSTUB_H 3022c62cbSPaolo Bonzini 4956af7daSAkihiko Odaki typedef struct GDBFeature { 5956af7daSAkihiko Odaki const char *xmlname; 6956af7daSAkihiko Odaki const char *xml; 7eb37086fSAkihiko Odaki const char *name; 8eb37086fSAkihiko Odaki const char * const *regs; 96c2313e8SAkihiko Odaki int num_regs; 10956af7daSAkihiko Odaki } GDBFeature; 11956af7daSAkihiko Odaki 12e84f4524SAkihiko Odaki typedef struct GDBFeatureBuilder { 13e84f4524SAkihiko Odaki GDBFeature *feature; 14e84f4524SAkihiko Odaki GPtrArray *xml; 15eb37086fSAkihiko Odaki GPtrArray *regs; 16e84f4524SAkihiko Odaki int base_reg; 17e84f4524SAkihiko Odaki } GDBFeatureBuilder; 18e84f4524SAkihiko Odaki 195ef0317fSAlex Bennée 20022c62cbSPaolo Bonzini /* Get or set a register. Returns the size of the register. */ 2166260159SAkihiko Odaki typedef int (*gdb_get_reg_cb)(CPUState *cpu, GByteArray *buf, int reg); 2266260159SAkihiko Odaki typedef int (*gdb_set_reg_cb)(CPUState *cpu, uint8_t *buf, int reg); 238dd7a4b3SAlex Bennée 248dd7a4b3SAlex Bennée /** 25ee59fa1dSAkihiko Odaki * gdb_init_cpu(): Initialize the CPU for gdbstub. 26ee59fa1dSAkihiko Odaki * @cpu: The CPU to be initialized. 27ee59fa1dSAkihiko Odaki */ 28ee59fa1dSAkihiko Odaki void gdb_init_cpu(CPUState *cpu); 29ee59fa1dSAkihiko Odaki 30ee59fa1dSAkihiko Odaki /** 318dd7a4b3SAlex Bennée * gdb_register_coprocessor() - register a supplemental set of registers 328dd7a4b3SAlex Bennée * @cpu - the CPU associated with registers 338dd7a4b3SAlex Bennée * @get_reg - get function (gdb reading) 348dd7a4b3SAlex Bennée * @set_reg - set function (gdb modifying) 358dd7a4b3SAlex Bennée * @num_regs - number of registers in set 368dd7a4b3SAlex Bennée * @xml - xml name of set 378dd7a4b3SAlex Bennée * @gpos - non-zero to append to "general" register set at @gpos 388dd7a4b3SAlex Bennée */ 3922169d41SAndreas Färber void gdb_register_coprocessor(CPUState *cpu, 40a010bdbeSAlex Bennée gdb_get_reg_cb get_reg, gdb_set_reg_cb set_reg, 41ac1e8671SAkihiko Odaki const GDBFeature *feature, int g_pos); 42022c62cbSPaolo Bonzini 43fcedd920SAlex Bennée /** 44*242da180SSalil Mehta * gdb_unregister_coprocessor_all() - unregisters supplemental set of registers 45*242da180SSalil Mehta * @cpu - the CPU associated with registers 46*242da180SSalil Mehta */ 47*242da180SSalil Mehta void gdb_unregister_coprocessor_all(CPUState *cpu); 48*242da180SSalil Mehta 49*242da180SSalil Mehta /** 50fcedd920SAlex Bennée * gdbserver_start: start the gdb server 51fcedd920SAlex Bennée * @port_or_device: connection spec for gdb 52fcedd920SAlex Bennée * 53fcedd920SAlex Bennée * For CONFIG_USER this is either a tcp port or a path to a fifo. For 54fcedd920SAlex Bennée * system emulation you can use a full chardev spec for your gdbserver 55fcedd920SAlex Bennée * port. 56fcedd920SAlex Bennée */ 57fcedd920SAlex Bennée int gdbserver_start(const char *port_or_device); 58022c62cbSPaolo Bonzini 591218b68eSAkihiko Odaki /** 60e84f4524SAkihiko Odaki * gdb_feature_builder_init() - Initialize GDBFeatureBuilder. 61e84f4524SAkihiko Odaki * @builder: The builder to be initialized. 62e84f4524SAkihiko Odaki * @feature: The feature to be filled. 63e84f4524SAkihiko Odaki * @name: The name of the feature. 64e84f4524SAkihiko Odaki * @xmlname: The name of the XML. 65e84f4524SAkihiko Odaki * @base_reg: The base number of the register ID. 66e84f4524SAkihiko Odaki */ 67e84f4524SAkihiko Odaki void gdb_feature_builder_init(GDBFeatureBuilder *builder, GDBFeature *feature, 68e84f4524SAkihiko Odaki const char *name, const char *xmlname, 69e84f4524SAkihiko Odaki int base_reg); 70e84f4524SAkihiko Odaki 71e84f4524SAkihiko Odaki /** 72e84f4524SAkihiko Odaki * gdb_feature_builder_append_tag() - Append a tag. 73e84f4524SAkihiko Odaki * @builder: The builder. 74e84f4524SAkihiko Odaki * @format: The format of the tag. 75e84f4524SAkihiko Odaki * @...: The values to be formatted. 76e84f4524SAkihiko Odaki */ 77e84f4524SAkihiko Odaki void G_GNUC_PRINTF(2, 3) 78e84f4524SAkihiko Odaki gdb_feature_builder_append_tag(const GDBFeatureBuilder *builder, 79e84f4524SAkihiko Odaki const char *format, ...); 80e84f4524SAkihiko Odaki 81e84f4524SAkihiko Odaki /** 82e84f4524SAkihiko Odaki * gdb_feature_builder_append_reg() - Append a register. 83e84f4524SAkihiko Odaki * @builder: The builder. 84e84f4524SAkihiko Odaki * @name: The register's name; it must be unique within a CPU. 85e84f4524SAkihiko Odaki * @bitsize: The register's size, in bits. 86e84f4524SAkihiko Odaki * @regnum: The offset of the register's number in the feature. 87e84f4524SAkihiko Odaki * @type: The type of the register. 88e84f4524SAkihiko Odaki * @group: The register group to which this register belongs; it can be NULL. 89e84f4524SAkihiko Odaki */ 90e84f4524SAkihiko Odaki void gdb_feature_builder_append_reg(const GDBFeatureBuilder *builder, 91e84f4524SAkihiko Odaki const char *name, 92e84f4524SAkihiko Odaki int bitsize, 93e84f4524SAkihiko Odaki int regnum, 94e84f4524SAkihiko Odaki const char *type, 95e84f4524SAkihiko Odaki const char *group); 96e84f4524SAkihiko Odaki 97e84f4524SAkihiko Odaki /** 98e84f4524SAkihiko Odaki * gdb_feature_builder_end() - End building GDBFeature. 99e84f4524SAkihiko Odaki * @builder: The builder. 100e84f4524SAkihiko Odaki */ 101e84f4524SAkihiko Odaki void gdb_feature_builder_end(const GDBFeatureBuilder *builder); 102e84f4524SAkihiko Odaki 103e84f4524SAkihiko Odaki /** 1041218b68eSAkihiko Odaki * gdb_find_static_feature() - Find a static feature. 1051218b68eSAkihiko Odaki * @xmlname: The name of the XML. 1061218b68eSAkihiko Odaki * 1071218b68eSAkihiko Odaki * Return: The static feature. 1081218b68eSAkihiko Odaki */ 1091218b68eSAkihiko Odaki const GDBFeature *gdb_find_static_feature(const char *xmlname); 1101218b68eSAkihiko Odaki 111c3d0b466SAlex Bennée /** 112c3d0b466SAlex Bennée * gdb_read_register() - Read a register associated with a CPU. 113c3d0b466SAlex Bennée * @cpu: The CPU associated with the register. 114c3d0b466SAlex Bennée * @buf: The buffer that the read register will be appended to. 115c3d0b466SAlex Bennée * @reg: The register's number returned by gdb_find_feature_register(). 116c3d0b466SAlex Bennée * 117c3d0b466SAlex Bennée * Return: The number of read bytes. 118c3d0b466SAlex Bennée */ 119c3d0b466SAlex Bennée int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); 120c3d0b466SAlex Bennée 121c3d0b466SAlex Bennée /** 122c3d0b466SAlex Bennée * typedef GDBRegDesc - a register description from gdbstub 123c3d0b466SAlex Bennée */ 124c3d0b466SAlex Bennée typedef struct { 125c3d0b466SAlex Bennée int gdb_reg; 126c3d0b466SAlex Bennée const char *name; 127c3d0b466SAlex Bennée const char *feature_name; 128c3d0b466SAlex Bennée } GDBRegDesc; 129c3d0b466SAlex Bennée 130c3d0b466SAlex Bennée /** 131c3d0b466SAlex Bennée * gdb_get_register_list() - Return list of all registers for CPU 132c3d0b466SAlex Bennée * @cpu: The CPU being searched 133c3d0b466SAlex Bennée * 134c3d0b466SAlex Bennée * Returns a GArray of GDBRegDesc, caller frees array but not the 135c3d0b466SAlex Bennée * const strings. 136c3d0b466SAlex Bennée */ 137c3d0b466SAlex Bennée GArray *gdb_get_register_list(CPUState *cpu); 138c3d0b466SAlex Bennée 139e52fc5e1SPhilippe Mathieu-Daudé void gdb_set_stop_cpu(CPUState *cpu); 140e52fc5e1SPhilippe Mathieu-Daudé 141956af7daSAkihiko Odaki /* in gdbstub-xml.c, generated by scripts/feature_to_c.py */ 142956af7daSAkihiko Odaki extern const GDBFeature gdb_static_features[]; 143022c62cbSPaolo Bonzini 144b31bf9f8SAlex Bennée #endif /* GDBSTUB_H */ 145