* remote-mips.c: Remove form feeds (^L) from source.

(mips_initialize): LSI PMON doesn't support 'set regsize' command.
	(pmon_wait): Don't need to exit and re-enter debug mode on LSI
	PMON after a continue; it causes target program misbehavior.
	(mips_fetch_register): Don't fetch unsupported registers; this
	cuts down on wasted serial traffic.
This commit is contained in:
Mark Alexander 1997-02-27 21:45:29 +00:00
parent aeae2146e3
commit 266454ca50
2 changed files with 54 additions and 24 deletions

View File

@ -1,3 +1,12 @@
Thu Feb 27 12:04:24 1997 Mark Alexander <marka@cygnus.com>
* remote-mips.c: Remove form feeds (^L) from source.
(mips_initialize): LSI PMON doesn't support 'set regsize' command.
(pmon_wait): Don't need to exit and re-enter debug mode on LSI
PMON after a continue; it causes target program misbehavior.
(mips_fetch_register): Don't fetch unsupported registers; this
cuts down on wasted serial traffic.
Thu Feb 27 09:38:16 1997 Stu Grossman (grossman@critters.cygnus.com)
* configure.in configure (HPUX/OSF thread support): Enable this

View File

@ -47,7 +47,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
extern void mips_set_processor_type_command PARAMS ((char *, int));
/* Prototypes for local functions. */
static int mips_readchar PARAMS ((int timeout));
@ -152,7 +153,8 @@ static void common_open PARAMS ((struct target_ops *ops, char *name,
extern struct target_ops mips_ops;
extern struct target_ops pmon_ops;
extern struct target_ops ddb_ops;
/* The MIPS remote debugging interface is built on top of a simple
packet protocol. Each packet is organized as follows:
@ -297,7 +299,7 @@ enum mips_monitor_type {
/* PMON monitor being used: */
MON_PMON, /* 3.0.83 [COGENT,EB,FP,NET] Algorithmics Ltd. Nov 9 1995 17:19:50 */
MON_DDB, /* 2.7.473 [DDBVR4300,EL,FP,NET] Risq Modular Systems, Thu Jun 6 09:28:40 PDT 1996 */
MON_LSI, /* 4.2.5 [EB], LSI LOGIC Corp. Wed Dec 6 07:57:45 1995 */
MON_LSI, /* 4.3.12 [EB,FP], LSI LOGIC Corp. Tue Feb 25 13:22:14 1997 */
/* Last and unused value, for sizing vectors, etc. */
MON_LAST
};
@ -1147,7 +1149,8 @@ mips_receive_packet (buff, throw_error, timeout)
return len;
}
/* Optionally send a request to the remote system and optionally wait
for the reply. This implements the remote debugging protocol,
which is built on top of the packet protocol defined above. Each
@ -1432,7 +1435,8 @@ mips_initialize ()
if (mips_monitor != MON_IDT)
{
/* Ensure the correct target state: */
mips_send_command ("set regsize 64\r", -1);
if (mips_monitor != MON_LSI)
mips_send_command ("set regsize 64\r", -1);
mips_send_command ("set hostport tty0\r", -1);
mips_send_command ("set brkcmd \"\"\r", -1);
/* Delete all the current breakpoints: */
@ -1668,6 +1672,7 @@ mips_resume (pid, step, siggnal)
int pid, step;
enum target_signal siggnal;
{
int err;
/* start-sanitize-gm */
#ifndef GENERAL_MAGIC
@ -1678,10 +1683,12 @@ mips_resume (pid, step, siggnal)
#endif /* GENERAL_MAGIC */
/* end-sanitize-gm */
/* LSI PMON requires returns a reply packet "0x1 s 0x0 0x57f" after
a single step, so we wait for that. */
mips_request (step ? 's' : 'c',
(unsigned int) 1,
(unsigned int) siggnal,
(int *) NULL,
mips_monitor == MON_LSI && step ? &err : (int *) NULL,
mips_receive_wait, NULL);
}
@ -1844,7 +1851,7 @@ pmon_wait (pid, status)
seems to be caused by a check on the number of arguments, and the
command length, within the monitor causing it to echo the command
as a bad packet. */
if (mips_monitor != MON_DDB)
if (mips_monitor != MON_DDB && mips_monitor != MON_LSI)
{
mips_exit_debug ();
mips_enter_debug ();
@ -1928,18 +1935,26 @@ mips_fetch_registers (regno)
val = 0;
else
{
/* Unfortunately the PMON version in the Vr4300 board has been
compiled without the 64bit register access commands. This
means we cannot get hold of the full register width. */
if (mips_monitor == MON_DDB)
val = (unsigned)mips_request ('t', (unsigned int) mips_map_regno (regno),
(unsigned int) 0, &err, mips_receive_wait, NULL);
/* If PMON doesn't support this register, don't waste serial
bandwidth trying to read it. */
int pmon_reg = mips_map_regno (regno);
if (regno != 0 && pmon_reg == 0)
val = 0;
else
val = mips_request ('r', (unsigned int) mips_map_regno (regno),
(unsigned int) 0, &err, mips_receive_wait, NULL);
if (err)
mips_error ("Can't read register %d: %s", regno,
safe_strerror (errno));
{
/* Unfortunately the PMON version in the Vr4300 board has been
compiled without the 64bit register access commands. This
means we cannot get hold of the full register width. */
if (mips_monitor == MON_DDB)
val = (unsigned)mips_request ('t', (unsigned int) pmon_reg,
(unsigned int) 0, &err, mips_receive_wait, NULL);
else
val = mips_request ('r', (unsigned int) pmon_reg,
(unsigned int) 0, &err, mips_receive_wait, NULL);
if (err)
mips_error ("Can't read register %d: %s", regno,
safe_strerror (errno));
}
}
{
@ -2235,7 +2250,8 @@ mips_mourn_inferior ()
unpush_target (current_ops);
generic_mourn_inferior ();
}
/* We can write a breakpoint and read the shadow contents in one
operation. */
@ -2540,7 +2556,8 @@ common_breakpoint (cmd, addr, mask, flags)
return 0;
}
static void
send_srec (srec, len, addr)
char *srec;
@ -3212,7 +3229,8 @@ mips_load (file, from_tty)
clear_symtab_users ();
}
/* The target vector. */
struct target_ops mips_ops =
@ -3261,7 +3279,8 @@ HOST:PORT to access a board over a network", /* to_doc */
NULL, /* sections_end */
OPS_MAGIC /* to_magic */
};
/* An alternative target vector: */
struct target_ops pmon_ops =
{
@ -3309,7 +3328,8 @@ colon, HOST:PORT to access a board over a network", /* to_doc */
NULL, /* sections_end */
OPS_MAGIC /* to_magic */
};
/* Another alternative target vector. This is a PMON system, but with
a different monitor prompt, aswell as some other operational
differences: */
@ -3415,7 +3435,8 @@ of the TFTP temporary file, if it differs from the filename seen by the board",
NULL, /* sections_end */
OPS_MAGIC /* to_magic */
};
void
_initialize_remote_mips ()
{