diff options
Diffstat (limited to 'gdb/remote-pa.c')
-rw-r--r-- | gdb/remote-pa.c | 137 |
1 files changed, 95 insertions, 42 deletions
diff --git a/gdb/remote-pa.c b/gdb/remote-pa.c index 340b346..91988f8 100644 --- a/gdb/remote-pa.c +++ b/gdb/remote-pa.c @@ -147,7 +147,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "gdbcmd.h" #include "objfiles.h" #include "gdb-stabs.h" - +#include "remote-utils.h" #include "dcache.h" #ifdef USG @@ -205,7 +205,8 @@ remote_send PARAMS ((char *buf)); static int readchar PARAMS ((int timeout)); -static int remote_wait PARAMS ((int pid, struct target_waitstatus *status)); +static int +remote_wait PARAMS ((int pid, struct target_waitstatus *status)); static int tohex PARAMS ((int nib)); @@ -225,6 +226,9 @@ remote_interrupt_twice PARAMS ((int signo)); static void interrupt_query PARAMS ((void)); +static void +hppro_load PARAMS ((char *name, int from_tty)); + extern struct target_ops remote_ops; /* Forward decl */ /* This was 5 seconds, which is a long time to sit and wait. @@ -240,7 +244,7 @@ int icache; /* Descriptor for I/O to remote machine. Initialize it to NULL so that remote_open knows that we don't have a file open when the program starts. */ -serial_t remote_hppro_desc = NULL; +extern serial_t remote_desc; /* Having this larger than 400 causes us to be incompatible with m68k-stub.c and i386-stub.c. Normally, no one would notice because it only matters @@ -266,6 +270,20 @@ serial_t remote_hppro_desc = NULL; doesn't support 'P', the only consequence is some unnecessary traffic. */ static int stub_supports_P = 1; +/* sets the download protocol, choices are srec, generic, boot */ +char *loadtype; +static char *loadtype_str; +static void set_loadtype_command +PARAMS ((char *, int, struct cmd_list_element *)); + +static void +hppro_load (file, from_tty) + char *file; + int from_tty; +{ + puts ("Loading... HA!"); +} + /* Clean up connection to a remote debugger. */ @@ -274,9 +292,9 @@ static void remote_close (quitting) int quitting; { - if (remote_hppro_desc) - SERIAL_CLOSE (remote_hppro_desc); - remote_hppro_desc = NULL; + if (remote_desc) + SERIAL_CLOSE (remote_desc); + remote_desc = NULL; } /* Query the remote side for the text, data and bss offsets. */ @@ -336,19 +354,62 @@ get_offsets () objfile_relocate (symfile_objfile, offs); } -/* Stub for catch_errors. */ +#define INBUFSIZE 10 +void +boot_board() +{ + char c; + char buf[INBUFSIZE]; + char *ptr; + + /* See if we can connect to the boot ROM command line */ + ptr = buf; + while (1) { + SERIAL_WRITE (remote_desc, "\r\n", 2); + c = readchar (2); + if ((sr_get_debug() > 2) && (isascii(c))) + putchar (c); + if (c == SERIAL_TIMEOUT) { + if (sr_get_debug()) + puts_filtered ("Timed out.\n"); + break; + } + if (c == '&') { + if (sr_get_debug() > 2) + puts ("Got ACK from stub"); + break; + } + if (c == '>') { + if (sr_get_debug() > 2) + puts ("Got prompt from ROM monitor"); + break; + } + } + +} + +/* Stub for catch_errors. */ static int remote_start_remote (dummy) char *dummy; { + int timeout; + immediate_quit = 1; /* Allow user to interrupt it */ /* Ack any packet which the remote side has already sent. */ - SERIAL_WRITE (remote_hppro_desc, "+", 1); + if (sr_get_debug()) + puts ("Trying a '+' to ACK the target."); + + SERIAL_WRITE (remote_desc, "+", 1); + +#if 0 + boot_board(); get_offsets (); /* Get text, data & bss offsets */ +#endif putpkt ("?"); /* initiate a query from remote machine */ immediate_quit = 0; @@ -379,24 +440,24 @@ device is attached to the remote system (e.g. /dev/ttya)."); remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes); - remote_hppro_desc = SERIAL_OPEN (name); - if (!remote_hppro_desc) + remote_desc = SERIAL_OPEN (name); + if (!remote_desc) perror_with_name (name); if (baud_rate != -1) { - if (SERIAL_SETBAUDRATE (remote_hppro_desc, baud_rate)) + if (SERIAL_SETBAUDRATE (remote_desc, baud_rate)) { - SERIAL_CLOSE (remote_hppro_desc); + SERIAL_CLOSE (remote_desc); perror_with_name (name); } } - SERIAL_RAW (remote_hppro_desc); + SERIAL_RAW (remote_desc); /* If there is something sitting in the buffer we might take it as a response to a command, which would be bad. */ - SERIAL_FLUSH_INPUT (remote_hppro_desc); + SERIAL_FLUSH_INPUT (remote_desc); if (from_tty) { @@ -489,8 +550,7 @@ remote_resume (pid, step, siggnal) target_terminal_ours_for_output (); printf_filtered ("Can't send signals to a remote system. %s not sent.\n", - target_signal_to_name (siggnal)); - target_terminal_inferior (); + target_signal_to_name (siggnal)); target_terminal_inferior (); } dcache_flush (remote_dcache); @@ -513,7 +573,7 @@ remote_interrupt (signo) if (remote_debug) printf_unfiltered ("remote_interrupt called\n"); - SERIAL_WRITE (remote_hppro_desc, "\003", 1); /* Send a ^C */ + SERIAL_WRITE (remote_desc, "\003", 1); /* Send a ^C */ } static void (*ofunc)(); @@ -1063,7 +1123,7 @@ readchar (timeout) { int ch; - ch = SERIAL_READCHAR (remote_hppro_desc, timeout); + ch = SERIAL_READCHAR (remote_desc, timeout); switch (ch) { @@ -1096,7 +1156,6 @@ remote_send (buf) /* Send a packet to the remote machine, with error checking. The data of the packet is in BUF. */ - static void putpkt (buf) char *buf; @@ -1138,7 +1197,7 @@ putpkt (buf) printf_unfiltered ("Sending packet: %s...", buf2); gdb_flush(gdb_stdout); } - if (SERIAL_WRITE (remote_hppro_desc, buf2, p - buf2)) + if (SERIAL_WRITE (remote_desc, buf2, p - buf2)) perror_with_name ("putpkt: write failed"); /* read until either a timeout occurs (-2) or '+' is read */ @@ -1165,7 +1224,7 @@ putpkt (buf) { case '+': if (remote_debug) - printf_unfiltered("Ack\n"); + printf_unfiltered("Got Ack\n"); return; case SERIAL_TIMEOUT: break; /* Retransmit buffer */ @@ -1347,19 +1406,19 @@ getpkt (buf, forever) { if (remote_debug) fprintf_unfiltered (gdb_stderr, "Packet received: %s\n", buf); - SERIAL_WRITE (remote_hppro_desc, "+", 1); + SERIAL_WRITE (remote_desc, "+", 1); return; } /* Try the whole thing again. */ retry: - SERIAL_WRITE (remote_hppro_desc, "-", 1); + SERIAL_WRITE (remote_desc, "-", 1); } /* We have tried hard enough, and just can't receive the packet. Give up. */ printf_unfiltered ("Ignoring packet error, continuing...\n"); - SERIAL_WRITE (remote_hppro_desc, "+", 1); + SERIAL_WRITE (remote_desc, "+", 1); } static void @@ -1430,9 +1489,10 @@ remote_remove_breakpoint (addr, contents_cache) struct target_ops remote_hppro_ops = { "hppro", /* to_shortname */ - "Remote serial target in gdb-specific protocol", /* to_longname */ + "Remote serial target for HP-PRO targets", /* to_longname */ "Use a remote computer via a serial line, using a gdb-specific protocol.\n\ -Specify the serial device it is connected to (e.g. /dev/ttya). or telnet port", /* to_doc */ +This is for targets that supports the HP-PRO standard.\n\ +Specify the serial device it is connected to (e.g. /dev/ttya) or telnet port.", /* to_doc */ remote_open, /* to_open */ remote_close, /* to_close */ NULL, /* to_attach */ @@ -1454,7 +1514,7 @@ Specify the serial device it is connected to (e.g. /dev/ttya). or telnet port", NULL, /* to_terminal_ours */ NULL, /* to_terminal_info */ remote_kill, /* to_kill */ - generic_load, /* to_load */ + hppro_load, /* to_load */ NULL, /* to_lookup_symbol */ NULL, /* to_create_inferior */ remote_mourn, /* to_mourn_inferior */ @@ -1472,12 +1532,6 @@ Specify the serial device it is connected to (e.g. /dev/ttya). or telnet port", OPS_MAGIC /* to_magic */ }; -/* sets the download protocol, choices are srec, generic, boot */ -char *loadtype; -static char *loadtype_str; -static void set_loadtype_command - PARAMS ((char *, int, struct cmd_list_element *)); - void _initialize_remote_hppro () { @@ -1489,20 +1543,19 @@ _initialize_remote_hppro () "Set the type of the remote load protocol.\n", &setlist); c->function.sfunc = set_loadtype_command; add_show_from_set (c, &showlist); - c->var = "generic"; - if (getenv ("LOADTYPE")) - c->var = savestring (getenv ("LOADTYPE"), strlen ("LOADTYPE")); + loadtype_str = savestring ("generic", 8); + + /* this adds a command to boot the board */ + add_com ("boot", class_support, boot_board, + "Boot the damn target board.\n"); } static void -set_loadtype_command (newtype, from_tty, c) - char *newtype; +set_loadtype_command (ignore, from_tty, c) + char *ignore; int from_tty; struct cmd_list_element *c; { - loadtype_str = savestring (newtype, strlen (newtype)); + loadtype_str = savestring (*(char **) c->var, strlen (*(char **) c->var)); } - - - |