From 9cf7f520c671cdb644fb987facea36ff5e597605 Mon Sep 17 00:00:00 2001 From: Geoffrey Noer Date: Fri, 8 Aug 1997 02:57:35 +0000 Subject: [PATCH] Thu Aug 7 19:40:52 1997 Geoffrey Noer Changes to OCD support to support wiggler box as well as target boxes: * ocd.c: change speed in init command to 0 from 80, add (temporary) logging commands to help debugging, (ocd_open): if "target ocd wiggler lpt" then use special ser-ocd.c serial interface which communicates with Wigglers.dll, otherwise do as we did before (ocd_get_packet): add OCD_LOG_FILE and OCD_SET_CONNECTION to switch of known commands of len 0 * ocd.h: add OCD_LOG_FILE * serial.c (serial_open): do serial_interface_lookup on ocd in the case of ocd * ser-ocd.c: add buffer to contain responses from sending a command to the Wigglers.dll. (ocd_readchar): return curr char from buffer and increment ptr (ocd_write): send buffer to Wigglers.dll, storing response in return buffer and initializing curr location ptr to start of buffer. --- gdb/.Sanitize | 6 +++++- gdb/ChangeLog | 21 +++++++++++++++++++++ gdb/ocd.c | 41 ++++++++++++++++++++++++++++++++++++----- gdb/ocd.h | 1 + gdb/ser-ocd.c | 19 ++++++++++++------- gdb/serial.c | 4 +++- 6 files changed, 78 insertions(+), 14 deletions(-) diff --git a/gdb/.Sanitize b/gdb/.Sanitize index 08d0b238c0..e27a7a49ae 100644 --- a/gdb/.Sanitize +++ b/gdb/.Sanitize @@ -320,6 +320,8 @@ ns32k-tdep.c ns32km3-nat.c objfiles.c objfiles.h +ocd.c +ocd.h op50-rom.c os9kread.c osf-share @@ -328,6 +330,7 @@ parse.c parser-defs.h partial-stab.h ppcbug-rom.c +ppc-bdm.c printcmd.c process_reply.defs procfs.c @@ -359,7 +362,6 @@ remote-vx68.c remote-vx960.c remote-vxmips.c remote-vxsparc.c -remote-wiggler.c remote.c reply_mig_hack.awk rs6000-nat.c @@ -374,6 +376,7 @@ scm-valprint.c ser-e7kpc.c ser-go32.c ser-mac.c +ser-ocd.c ser-tcp.c ser-unix.c serial.c @@ -436,6 +439,7 @@ vax-tdep.c vx-share w65-tdep.c w89k-rom.c +wigglers.def win32-nat.c xcoffread.c xcoffsolib.c diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0ae56b0d3f..561f4350d7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,24 @@ +Thu Aug 7 19:40:52 1997 Geoffrey Noer + + Changes to OCD support to support wiggler box as well as + target boxes: + * ocd.c: change speed in init command to 0 from 80, + add (temporary) logging commands to help debugging, + (ocd_open): if "target ocd wiggler lpt" then use special + ser-ocd.c serial interface which communicates with Wigglers.dll, + otherwise do as we did before + (ocd_get_packet): add OCD_LOG_FILE and OCD_SET_CONNECTION to + switch of known commands of len 0 + * ocd.h: add OCD_LOG_FILE + * serial.c (serial_open): do serial_interface_lookup on ocd + in the case of ocd + * ser-ocd.c: add buffer to contain responses from sending a + command to the Wigglers.dll. + (ocd_readchar): return curr char from buffer and increment ptr + (ocd_write): send buffer to Wigglers.dll, storing response in + return buffer and initializing curr location ptr to start of + buffer. + Thu Aug 7 14:08:23 1997 Martin M. Hunt * configure.in: Change required Tix version to 4.1.8.0 . diff --git a/gdb/ocd.c b/gdb/ocd.c index 41835dcfad..fdcd6476ca 100644 --- a/gdb/ocd.c +++ b/gdb/ocd.c @@ -168,7 +168,7 @@ ocd_start_remote (dummy) p[0], p[1], (p[2] << 16) | p[3]); #if 1 - speed = 80; /* Divide clock by 4000 */ + speed = 0; /* 80; /* Divide clock by 4000 */ buf[0] = OCD_INIT; buf[1] = speed >> 8; @@ -231,6 +231,11 @@ ocd_start_remote (dummy) select_frame (get_current_frame (), 0); print_stack_frame (selected_frame, -1, 1); + buf[0] = OCD_LOG_FILE; + buf[1] = 3; /* close existing WIGGLERS.LOG */ + ocd_put_packet (buf, 2); + p = ocd_get_packet (buf[0], &pktlen, remote_timeout); + return 1; } @@ -246,6 +251,10 @@ ocd_open (name, from_tty, target_type, ops) enum ocd_target_type target_type; struct target_ops *ops; { + unsigned char buf[10], *p; + int status; + int pktlen; + if (name == 0) error ("To open an OCD connection, you need to specify the\n\ device the OCD device is attached to (e.g. /dev/ttya)."); @@ -258,9 +267,28 @@ device the OCD device is attached to (e.g. /dev/ttya)."); ocd_dcache = dcache_init (ocd_read_bytes, ocd_write_bytes); - ocd_desc = SERIAL_OPEN (name); - if (!ocd_desc) - perror_with_name (name); + if (strncmp(name,"wiggler",7) == 0) + { + ocd_desc = SERIAL_OPEN ("ocd"); + if (!ocd_desc) + perror_with_name (name); + + buf[0] = OCD_LOG_FILE; + buf[1] = 1; /* open new or overwrite existing WIGGLERS.LOG */ + ocd_put_packet (buf, 2); + p = ocd_get_packet (buf[0], &pktlen, remote_timeout); + + buf[0] = OCD_SET_CONNECTION; + buf[1] = 0x01; /* atoi (name[11]); */ + ocd_put_packet (buf, 2); + p = ocd_get_packet (buf[0], &pktlen, remote_timeout); + } + else /* not using Wigglers.dll */ + { + ocd_desc = SERIAL_OPEN (name); + if (!ocd_desc) + perror_with_name (name); + } if (baud_rate != -1) { @@ -297,7 +325,8 @@ device the OCD device is attached to (e.g. /dev/ttya)."); In particular, if the user quits, be sure to discard it (we'd be in an inconsistent state otherwise). */ if (!catch_errors (ocd_start_remote, (char *)target_type, - "Couldn't establish connection to remote target\n", RETURN_MASK_ALL)) + "Couldn't establish connection to remote target\n", + RETURN_MASK_ALL)) pop_target(); } @@ -1082,6 +1111,8 @@ ocd_get_packet (cmd, lenp, timeout) case OCD_PROGRAM_FLASH: /* Write flash memory */ case OCD_EXIT_MON: /* Exit the flash programming monitor */ case OCD_ENTER_MON: /* Enter the flash programming monitor */ + case OCD_LOG_FILE: /* Make Wigglers.dll save Wigglers.log */ + case OCD_SET_CONNECTION: /* Set type of connection in Wigglers.dll */ len = 0; break; case OCD_GET_VERSION: /* Get Version */ diff --git a/gdb/ocd.h b/gdb/ocd.h index 1e13f1811e..d38d889f90 100644 --- a/gdb/ocd.h +++ b/gdb/ocd.h @@ -70,6 +70,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define OCD_SET_STATUS 0x0a /* Set status */ #define OCD_SET_CONNECTION 0xf0 /* Set connection (init Wigglers.dll) */ +#define OCD_LOG_FILE 0xf1 /* Cmd to get Wigglers.dll to log cmds */ #define OCD_FLAG_STOP 0x0 /* Stop the target, enter BDM */ #define OCD_FLAG_START 0x01 /* Start the target at PC */ #define OCD_FLAG_RETURN_STATUS 0x04 /* Return async status */ diff --git a/gdb/ser-ocd.c b/gdb/ser-ocd.c index 1b1213ede0..1bded76b95 100644 --- a/gdb/ser-ocd.c +++ b/gdb/ser-ocd.c @@ -54,8 +54,9 @@ ocd_raw (scb) } /* We need a buffer to store responses from the Wigglers.dll */ -char * from_wigglers_buffer; -char * bptr; /* curr spot in buffer */ +#define WIGGLER_BUFF_SIZE 512 +unsigned char from_wiggler_buffer[WIGGLER_BUFF_SIZE]; +unsigned char * wiggler_buffer_ptr; /* curr spot in buffer */ static void ocd_readremote () @@ -67,7 +68,7 @@ ocd_readchar (scb, timeout) serial_t scb; int timeout; { - + return (int) *wiggler_buffer_ptr++; /* return curr char and increment ptr */ } struct ocd_ttystate { @@ -130,12 +131,11 @@ ocd_write (scb, str, len) { char c; - ocd_readremote(); - #ifdef __CYGWIN32__ /* send packet to Wigglers.dll and store response so we can give it to remote-wiggler.c when get_packet is run */ - do_command (str, from_wigglers_buffer); + do_command (str, from_wiggler_buffer); + wiggler_buffer_ptr = from_wiggler_buffer; #endif return 0; @@ -145,7 +145,6 @@ static void ocd_close (scb) serial_t scb; { - ocd_close (0); } static struct serial_ops ocd_ops = @@ -172,3 +171,9 @@ _initialize_ser_ocd_bdm () { serial_add_interface (&ocd_ops); } + + + + + + diff --git a/gdb/serial.c b/gdb/serial.c index 496e308ee1..4bbc22dc43 100644 --- a/gdb/serial.c +++ b/gdb/serial.c @@ -212,7 +212,9 @@ serial_open (name) return scb; } - if (strcmp (name, "pc") == 0) + if (strcmp (name, "ocd") == 0) + ops = serial_interface_lookup ("ocd"); + else if (strcmp (name, "pc") == 0) ops = serial_interface_lookup ("pc"); else if (strchr (name, ':')) ops = serial_interface_lookup ("tcp");