[tables] Incorporate table data type information into table definition
[people/mcb30/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_TRANSPORTS __table ( struct gdb_transport, "gdb_transports" )
49
50 #define __gdb_transport __table_entry ( GDB_TRANSPORTS, 01 )
51
52 /**
53  * Look up GDB transport by name
54  *
55  * @v name Name of transport
56  * @ret GDB transport or NULL
57  */
58 extern struct gdb_transport *find_gdb_transport ( const char *name );
59
60 /**
61  * Break into the debugger using the given transport
62  *
63  * @v trans GDB transport
64  */
65 extern void gdbstub_start ( struct gdb_transport *trans );
66
67 /**
68  * Interrupt handler
69  *
70  * @signo POSIX signal number
71  * @regs CPU register snapshot
72  **/
73 extern void gdbstub_handler ( int signo, gdbreg_t *regs );
74
75 #endif /* _GPXE_GDBSTUB_H */