You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

gdbstub.h 1.5KB

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