* monitor.c (monitor_debug): Fix remotedebug buffering.

This commit is contained in:
Dawn Perchik 1996-06-28 10:53:37 +00:00
parent 5fc34cfdfb
commit f7ce02f4b3
2 changed files with 46 additions and 12 deletions

View File

@ -1,3 +1,7 @@
Fri Jun 28 03:47:17 1996 Dawn Perchik <dawn@cygnus.com>
* monitor.c (monitor_debug): Fix remotedebug buffering.
Thu Jun 27 18:24:17 1996 Stan Shebs <shebs@andros.cygnus.com>
* config/i386/cygwin32.mh, config/powerpc/cygwin32.mh

View File

@ -137,7 +137,23 @@ monitor_debug (prefix, string, suffix)
/* print prefix and suffix after each line */
static int new_line=1;
if (new_line==1) { /* print prefix if last char was a newline */
static char *prev_prefix = "";
static char *prev_suffix = "";
/* if the prefix is changing, print the previous suffix, a new line,
and the new prefix */
if (strcmp(prev_prefix, prefix) != 0 && !new_line)
{
fputs_unfiltered (prev_suffix, gdb_stderr);
fputs_unfiltered ("\n", gdb_stderr);
fputs_unfiltered (prefix, gdb_stderr);
}
prev_prefix = prefix;
prev_suffix = suffix;
/* print prefix if last char was a newline*/
if (new_line == 1) {
fputs_unfiltered (prefix, gdb_stderr);
new_line=0;
}
@ -446,7 +462,7 @@ monitor_expect_prompt (buf, buflen)
char *buf;
int buflen;
{
return monitor_expect (PROMPT, buf, buflen);
return monitor_expect (current_monitor->prompt, buf, buflen);
}
/* Get N 32-bit words from remote, each preceded by a space, and put
@ -679,10 +695,10 @@ monitor_resume (pid, step, sig)
{
dcache_flush (remote_dcache);
if (step)
monitor_printf (STEP_CMD);
monitor_printf (current_monitor->step);
else
{
monitor_printf (CONT_CMD);
monitor_printf (current_monitor->cont);
if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
dump_reg_flag = 1;
}
@ -850,7 +866,7 @@ monitor_fetch_register (regno)
char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
int i;
name = REGNAMES (regno);
name = current_monitor->regnames[regno];
if (!name)
{
@ -955,7 +971,7 @@ monitor_store_register (regno)
char *name;
unsigned int val;
name = REGNAMES (regno);
name = current_monitor->regnames[regno];
if (!name)
return;
@ -1351,7 +1367,7 @@ monitor_insert_breakpoint (addr, shadow)
{
breakaddr[i] = addr;
monitor_read_memory (addr, shadow, sizeof (break_insn));
monitor_printf (SET_BREAK_CMD, addr);
monitor_printf (current_monitor->set_break, addr);
monitor_expect_prompt (NULL, 0);
return 0;
}
@ -1376,9 +1392,9 @@ monitor_remove_breakpoint (addr, shadow)
breakaddr[i] = 0;
/* some monitors remove breakpoints based on the address */
if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
monitor_printf (CLR_BREAK_CMD, addr);
monitor_printf (current_monitor->clr_break, addr);
else
monitor_printf (CLR_BREAK_CMD, i);
monitor_printf (current_monitor->clr_break, i);
monitor_expect_prompt (NULL, 0);
return 0;
}
@ -1387,6 +1403,18 @@ monitor_remove_breakpoint (addr, shadow)
return 1;
}
/* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
an S-record. Return non-zero if the ACK is received properly. */
static int
monitor_wait_srec_ack ()
{
/* FIXME: eventually we'll want to be able to handle acknowledgements
of something other than a '+' character. Right now this is only
going to work for EST visionICE. */
return readchar (timeout) == '+';
}
/* monitor_load -- download a file. */
static void
@ -1400,11 +1428,13 @@ monitor_load (file, from_tty)
current_monitor->load_routine (monitor_desc, file, hashmark);
else
{ /* The default is ascii S-records */
monitor_printf (LOAD_CMD); /* tell the monitor to load */
monitor_printf (current_monitor->load);
if (current_monitor->loadresp)
monitor_expect (current_monitor->loadresp, NULL, 0);
load_srec (monitor_desc, file, 32, SREC_ALL, hashmark);
load_srec (monitor_desc, file, 32, SREC_ALL, hashmark,
current_monitor->flags & MO_SREC_ACK ?
monitor_wait_srec_ack : NULL);
monitor_expect_prompt (NULL, 0);
}
@ -1450,7 +1480,7 @@ monitor_command (args, from_tty)
if (monitor_desc == NULL)
error ("monitor target not open.");
p = PROMPT;
p = current_monitor->prompt;
/* Send the command. Note that if no args were supplied, then we're
just sending the monitor a newline, which is sometimes useful. */