mirror of https://github.com/ipxe/ipxe.git
78 lines
1.5 KiB
C
78 lines
1.5 KiB
C
#ifndef _IPXE_GDBSTUB_H
|
|
#define _IPXE_GDBSTUB_H
|
|
|
|
/** @file
|
|
*
|
|
* GDB remote debugging
|
|
*
|
|
*/
|
|
|
|
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|
|
|
#include <stdint.h>
|
|
#include <ipxe/tables.h>
|
|
#include <gdbmach.h>
|
|
|
|
/**
|
|
* A transport mechanism for the GDB protocol
|
|
*
|
|
*/
|
|
struct gdb_transport {
|
|
/** Transport name */
|
|
const char *name;
|
|
/**
|
|
* Set up the transport given a list of arguments
|
|
*
|
|
* @v argc Number of arguments
|
|
* @v argv Argument list
|
|
* @ret Return status code
|
|
*
|
|
* Note that arguments start at argv[0].
|
|
*/
|
|
int ( * init ) ( int argc, char **argv );
|
|
/**
|
|
* Perform a blocking read
|
|
*
|
|
* @v buf Buffer
|
|
* @v len Size of buffer
|
|
* @ret Number of bytes read into buffer
|
|
*/
|
|
size_t ( * recv ) ( char *buf, size_t len );
|
|
/**
|
|
* Write, may block
|
|
*
|
|
* @v buf Buffer
|
|
* @v len Size of buffer
|
|
*/
|
|
void ( * send ) ( const char *buf, size_t len );
|
|
};
|
|
|
|
#define GDB_TRANSPORTS __table ( struct gdb_transport, "gdb_transports" )
|
|
|
|
#define __gdb_transport __table_entry ( GDB_TRANSPORTS, 01 )
|
|
|
|
/**
|
|
* Look up GDB transport by name
|
|
*
|
|
* @v name Name of transport
|
|
* @ret GDB transport or NULL
|
|
*/
|
|
extern struct gdb_transport *find_gdb_transport ( const char *name );
|
|
|
|
/**
|
|
* Break into the debugger using the given transport
|
|
*
|
|
* @v trans GDB transport
|
|
*/
|
|
extern void gdbstub_start ( struct gdb_transport *trans );
|
|
|
|
/**
|
|
* Interrupt handler
|
|
*
|
|
* @signo POSIX signal number
|
|
* @regs CPU register snapshot
|
|
**/
|
|
extern void gdbstub_handler ( int signo, gdbreg_t *regs );
|
|
|
|
#endif /* _IPXE_GDBSTUB_H */
|