2003-05-20 Theodore A. Roth * src/gdb.h: Add irq_raise method to struct GdbComm. * src/gdbserver.c: Catch signals >= 96 and translate into irq triggers. * src/main.c: Set irq_raise method to avr_core_irq_raise. Index: src/gdb.h =================================================================== RCS file: /cvsroot/simulavr/simulavr/src/gdb.h,v retrieving revision 1.10 diff -u -r1.10 gdb.h --- src/gdb.h 4 Mar 2003 21:54:31 -0000 1.10 +++ src/gdb.h 20 May 2003 18:27:48 -0000 @@ -60,6 +60,8 @@ typedef void (*CommFuncIORegFetch) (void *user_data, int addr, byte *val, char *reg_name, size_t reg_name_size); +typedef void (*CommFuncIrqRaise) (void *user_data, int irq); + /* This structure allows the target to supply handler functions to the gdb interact for performing various tasks. */ @@ -95,6 +97,8 @@ CommFuncReset reset; CommFuncIORegFetch io_fetch; + + CommFuncIrqRaise irq_raise; }; extern void gdb_interact( GdbComm_T *comm, int port, int debug_on ); Index: src/gdbserver.c =================================================================== RCS file: /cvsroot/simulavr/simulavr/src/gdbserver.c,v retrieving revision 1.38 diff -u -r1.38 gdbserver.c --- src/gdbserver.c 4 Mar 2003 21:54:31 -0000 1.38 +++ src/gdbserver.c 20 May 2003 18:27:48 -0000 @@ -1017,6 +1017,17 @@ comm->reset( comm->user_data ); gdb_send_reply( fd, "S05" ); return; + default: + /* Gdb user issuing the 'signal ' command where signum is + >= 96 is interpreted as a request to trigger an interrupt + vector. The vector to trigger is signo-96. */ + if (signo >= 96) + { + if (comm->irq_raise) + { + comm->irq_raise( comm->user_data, signo-96 ); + } + } } /* Modify pkt to look like what gdb_continue() expects and send it to Index: src/main.c =================================================================== RCS file: /cvsroot/simulavr/simulavr/src/main.c,v retrieving revision 1.29 diff -u -r1.29 main.c --- src/main.c 4 Mar 2003 21:54:32 -0000 1.29 +++ src/main.c 20 May 2003 18:27:48 -0000 @@ -110,6 +110,8 @@ (CommFuncReset)avr_core_reset, /* reset */ (CommFuncIORegFetch)avr_core_io_fetch, /* io_fetch */ + + (CommFuncIrqRaise)avr_core_irq_raise, /* irq_raise */ }}; /*