qemu/include/exec/gdbstub.h
<<
>>
Prefs
   1#ifndef GDBSTUB_H
   2#define GDBSTUB_H
   3
   4#define DEFAULT_GDBSTUB_PORT "1234"
   5
   6/* GDB breakpoint/watchpoint types */
   7#define GDB_BREAKPOINT_SW        0
   8#define GDB_BREAKPOINT_HW        1
   9#define GDB_WATCHPOINT_WRITE     2
  10#define GDB_WATCHPOINT_READ      3
  11#define GDB_WATCHPOINT_ACCESS    4
  12
  13#ifdef NEED_CPU_H
  14typedef void (*gdb_syscall_complete_cb)(CPUState *cpu,
  15                                        target_ulong ret, target_ulong err);
  16
  17void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...);
  18int use_gdb_syscalls(void);
  19void gdb_set_stop_cpu(CPUState *cpu);
  20void gdb_exit(CPUArchState *, int);
  21#ifdef CONFIG_USER_ONLY
  22int gdb_queuesig (void);
  23int gdb_handlesig(CPUState *, int);
  24void gdb_signalled(CPUArchState *, int);
  25void gdbserver_fork(CPUArchState *);
  26#endif
  27/* Get or set a register.  Returns the size of the register.  */
  28typedef int (*gdb_reg_cb)(CPUArchState *env, uint8_t *buf, int reg);
  29void gdb_register_coprocessor(CPUState *cpu,
  30                              gdb_reg_cb get_reg, gdb_reg_cb set_reg,
  31                              int num_regs, const char *xml, int g_pos);
  32
  33static inline int cpu_index(CPUState *cpu)
  34{
  35#if defined(CONFIG_USER_ONLY)
  36    return cpu->host_tid;
  37#else
  38    return cpu->cpu_index + 1;
  39#endif
  40}
  41
  42/* The GDB remote protocol transfers values in target byte order.  This means
  43 * we can use the raw memory access routines to access the value buffer.
  44 * Conveniently, these also handle the case where the buffer is mis-aligned.
  45 */
  46
  47static inline int gdb_get_reg8(uint8_t *mem_buf, uint8_t val)
  48{
  49    stb_p(mem_buf, val);
  50    return 1;
  51}
  52
  53static inline int gdb_get_reg16(uint8_t *mem_buf, uint16_t val)
  54{
  55    stw_p(mem_buf, val);
  56    return 2;
  57}
  58
  59static inline int gdb_get_reg32(uint8_t *mem_buf, uint32_t val)
  60{
  61    stl_p(mem_buf, val);
  62    return 4;
  63}
  64
  65static inline int gdb_get_reg64(uint8_t *mem_buf, uint64_t val)
  66{
  67    stq_p(mem_buf, val);
  68    return 8;
  69}
  70
  71#if TARGET_LONG_BITS == 64
  72#define gdb_get_regl(buf, val) gdb_get_reg64(buf, val)
  73#define ldtul_p(addr) ldq_p(addr)
  74#else
  75#define gdb_get_regl(buf, val) gdb_get_reg32(buf, val)
  76#define ldtul_p(addr) ldl_p(addr)
  77#endif
  78
  79#endif
  80
  81#ifdef CONFIG_USER_ONLY
  82int gdbserver_start(int);
  83#else
  84int gdbserver_start(const char *port);
  85#endif
  86
  87/**
  88 * gdb_has_xml:
  89 * This is an ugly hack to cope with both new and old gdb.
  90 * If gdb sends qXfer:features:read then assume we're talking to a newish
  91 * gdb that understands target descriptions.
  92 */
  93extern bool gdb_has_xml;
  94
  95/* in gdbstub-xml.c, generated by scripts/feature_to_c.sh */
  96extern const char *const xml_builtin[][2];
  97
  98#endif
  99