* 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) Thu Feb 27 09:38:16 1997 Stu Grossman (grossman@critters.cygnus.com)
* configure.in configure (HPUX/OSF thread support): Enable this * 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)); extern void mips_set_processor_type_command PARAMS ((char *, int));
/* Prototypes for local functions. */ /* Prototypes for local functions. */
static int mips_readchar PARAMS ((int timeout)); 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 mips_ops;
extern struct target_ops pmon_ops; extern struct target_ops pmon_ops;
extern struct target_ops ddb_ops; extern struct target_ops ddb_ops;
/* The MIPS remote debugging interface is built on top of a simple /* The MIPS remote debugging interface is built on top of a simple
packet protocol. Each packet is organized as follows: packet protocol. Each packet is organized as follows:
@ -297,7 +299,7 @@ enum mips_monitor_type {
/* PMON monitor being used: */ /* PMON monitor being used: */
MON_PMON, /* 3.0.83 [COGENT,EB,FP,NET] Algorithmics Ltd. Nov 9 1995 17:19:50 */ 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_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. */ /* Last and unused value, for sizing vectors, etc. */
MON_LAST MON_LAST
}; };
@ -1147,7 +1149,8 @@ mips_receive_packet (buff, throw_error, timeout)
return len; return len;
} }
/* Optionally send a request to the remote system and optionally wait /* Optionally send a request to the remote system and optionally wait
for the reply. This implements the remote debugging protocol, for the reply. This implements the remote debugging protocol,
which is built on top of the packet protocol defined above. Each which is built on top of the packet protocol defined above. Each
@ -1432,7 +1435,8 @@ mips_initialize ()
if (mips_monitor != MON_IDT) if (mips_monitor != MON_IDT)
{ {
/* Ensure the correct target state: */ /* 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 hostport tty0\r", -1);
mips_send_command ("set brkcmd \"\"\r", -1); mips_send_command ("set brkcmd \"\"\r", -1);
/* Delete all the current breakpoints: */ /* Delete all the current breakpoints: */
@ -1668,6 +1672,7 @@ mips_resume (pid, step, siggnal)
int pid, step; int pid, step;
enum target_signal siggnal; enum target_signal siggnal;
{ {
int err;
/* start-sanitize-gm */ /* start-sanitize-gm */
#ifndef GENERAL_MAGIC #ifndef GENERAL_MAGIC
@ -1678,10 +1683,12 @@ mips_resume (pid, step, siggnal)
#endif /* GENERAL_MAGIC */ #endif /* GENERAL_MAGIC */
/* end-sanitize-gm */ /* 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', mips_request (step ? 's' : 'c',
(unsigned int) 1, (unsigned int) 1,
(unsigned int) siggnal, (unsigned int) siggnal,
(int *) NULL, mips_monitor == MON_LSI && step ? &err : (int *) NULL,
mips_receive_wait, 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 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 command length, within the monitor causing it to echo the command
as a bad packet. */ as a bad packet. */
if (mips_monitor != MON_DDB) if (mips_monitor != MON_DDB && mips_monitor != MON_LSI)
{ {
mips_exit_debug (); mips_exit_debug ();
mips_enter_debug (); mips_enter_debug ();
@ -1928,18 +1935,26 @@ mips_fetch_registers (regno)
val = 0; val = 0;
else else
{ {
/* Unfortunately the PMON version in the Vr4300 board has been /* If PMON doesn't support this register, don't waste serial
compiled without the 64bit register access commands. This bandwidth trying to read it. */
means we cannot get hold of the full register width. */ int pmon_reg = mips_map_regno (regno);
if (mips_monitor == MON_DDB) if (regno != 0 && pmon_reg == 0)
val = (unsigned)mips_request ('t', (unsigned int) mips_map_regno (regno), val = 0;
(unsigned int) 0, &err, mips_receive_wait, NULL);
else else
val = mips_request ('r', (unsigned int) mips_map_regno (regno), {
(unsigned int) 0, &err, mips_receive_wait, NULL); /* Unfortunately the PMON version in the Vr4300 board has been
if (err) compiled without the 64bit register access commands. This
mips_error ("Can't read register %d: %s", regno, means we cannot get hold of the full register width. */
safe_strerror (errno)); 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); unpush_target (current_ops);
generic_mourn_inferior (); generic_mourn_inferior ();
} }
/* We can write a breakpoint and read the shadow contents in one /* We can write a breakpoint and read the shadow contents in one
operation. */ operation. */
@ -2540,7 +2556,8 @@ common_breakpoint (cmd, addr, mask, flags)
return 0; return 0;
} }
static void static void
send_srec (srec, len, addr) send_srec (srec, len, addr)
char *srec; char *srec;
@ -3212,7 +3229,8 @@ mips_load (file, from_tty)
clear_symtab_users (); clear_symtab_users ();
} }
/* The target vector. */ /* The target vector. */
struct target_ops mips_ops = struct target_ops mips_ops =
@ -3261,7 +3279,8 @@ HOST:PORT to access a board over a network", /* to_doc */
NULL, /* sections_end */ NULL, /* sections_end */
OPS_MAGIC /* to_magic */ OPS_MAGIC /* to_magic */
}; };
/* An alternative target vector: */ /* An alternative target vector: */
struct target_ops pmon_ops = struct target_ops pmon_ops =
{ {
@ -3309,7 +3328,8 @@ colon, HOST:PORT to access a board over a network", /* to_doc */
NULL, /* sections_end */ NULL, /* sections_end */
OPS_MAGIC /* to_magic */ OPS_MAGIC /* to_magic */
}; };
/* Another alternative target vector. This is a PMON system, but with /* Another alternative target vector. This is a PMON system, but with
a different monitor prompt, aswell as some other operational a different monitor prompt, aswell as some other operational
differences: */ differences: */
@ -3415,7 +3435,8 @@ of the TFTP temporary file, if it differs from the filename seen by the board",
NULL, /* sections_end */ NULL, /* sections_end */
OPS_MAGIC /* to_magic */ OPS_MAGIC /* to_magic */
}; };
void void
_initialize_remote_mips () _initialize_remote_mips ()
{ {