[GDB] Add watch and rwatch hardware watchpoints
[people/andreif/gpxe.git] / src / include / gpxe / gdbstub.h
1 #ifndef _GPXE_GDBSTUB_H
2 #define _GPXE_GDBSTUB_H
3
4 /** @file
5  *
6  * GDB remote debugging
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/tables.h>
12 #include <gdbmach.h>
13
14 /**
15  * A transport mechanism for the GDB protocol
16  *
17  */
18 struct gdb_transport {
19         /** Transport name */
20         const char *name;
21         /**
22          * Set up the transport given a list of arguments
23          *
24          * @v argc Number of arguments
25          * @v argv Argument list
26          * @ret Return status code
27          *
28          * Note that arguments start at argv[0].
29          */
30         int ( * init ) ( int argc, char **argv );
31         /**
32          * Perform a blocking read
33          *
34          * @v buf Buffer
35          * @v len Size of buffer
36          * @ret Number of bytes read into buffer
37          */
38         size_t ( * recv ) ( char *buf, size_t len );
39         /**
40          * Write, may block
41          *
42          * @v buf Buffer
43          * @v len Size of buffer
44          */
45         void ( * send ) ( const char *buf, size_t len );
46 };
47
48 #define __gdb_transport __table ( struct gdb_transport, gdb_transports, 01 )
49
50 /**
51  * Look up GDB transport by name
52  *
53  * @v name Name of transport
54  * @ret GDB transport or NULL
55  */
56 extern struct gdb_transport *find_gdb_transport ( const char *name );
57
58 /**
59  * Break into the debugger using the given transport
60  *
61  * @v trans GDB transport
62  */
63 extern void gdbstub_start ( struct gdb_transport *trans );
64
65 /**
66  * Interrupt handler
67  *
68  * @signo POSIX signal number
69  * @regs CPU register snapshot
70  **/
71 extern void gdbstub_handler ( int signo, gdbreg_t *regs );
72
73 #endif /* _GPXE_GDBSTUB_H */