* remote-rdp.c (rdp_init): Take out variable baud rate stuff.

(remote_rdp_detatch): Delete.
	* breakpoint.c (ctype.h): Don't include twice.
This commit is contained in:
Steve Chamberlain 1995-09-30 00:06:55 +00:00
parent 0b0642d6eb
commit b890317e1b
2 changed files with 124 additions and 113 deletions

View File

@ -1,3 +1,19 @@
Fri Sep 29 02:10:05 1995 steve chamberlain <sac@slash.cygnus.com>
* remote-rdp.c (rdp_init): Take out variable baud rate stuff.
(remote_rdp_detatch): Delete.
* breakpoint.c (ctype.h): Don't include twice.
* Makefile.in (remote-rdp.o): Doesn't need remote-rdp.h
* callback.c (os_printf_filtered): fix protos.
* defs.h (puts_filtered, puts_unfiltered
[v|f|]printf_[un]filtered): Make format arg const.
* remote-rdp.c (rdp_init): Attept to sync at different
baudrates.
* utils.c (puts_filtered, puts_unfiltered
[v|f|]printf_[un]filtered): Define prototypes with
const in the right place.
Thu Sep 28 17:43:39 1995 Per Bothner <bothner@kalessin.cygnus.com> Thu Sep 28 17:43:39 1995 Per Bothner <bothner@kalessin.cygnus.com>
* defs.h (enum language): Add language_scm. * defs.h (enum language): Add language_scm.
@ -46,7 +62,7 @@ Thu Sep 28 14:32:11 1995 steve chamberlain <sac@slash.cygnus.com>
(INST_xx): New (INST_xx): New
(FRAME_FIND_SAVED_REGS): Pass the right argument. (FRAME_FIND_SAVED_REGS): Pass the right argument.
(arm_get_next_pc): Declare. (arm_get_next_pc): Declare.
* mswin/prebuilt/*/bfdtarget.h (SELECT_ARCHITECTURES): Need leading &.
Wed Sep 27 10:14:36 1995 Per Bothner <bothner@kalessin.cygnus.com> Wed Sep 27 10:14:36 1995 Per Bothner <bothner@kalessin.cygnus.com>

View File

@ -46,26 +46,32 @@
#else #else
#include <varargs.h> #include <varargs.h>
#endif #endif
#include <ctype.h>
#include <fcntl.h> #include <fcntl.h>
#include "symfile.h" #include "symfile.h"
#include "remote-utils.h" #include "remote-utils.h"
#include "gdb_string.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
extern struct target_ops remote_rdp_ops; extern struct target_ops remote_rdp_ops;
static serial_t io; static serial_t io;
static host_callback *callback = &default_callback; static host_callback *callback = &default_callback;
struct struct
{ {
int step_info; int step_info;
int break_info; int break_info;
int model_info; int model_info;
int target_info; int target_info;
int can_step; int can_step;
char command_line[10]; char command_line[10];
int rdi_level; int rdi_level;
int rdi_stopped_status; int rdi_stopped_status;
} ds; }
ds;
@ -103,8 +109,8 @@ struct
#define RDP_FPU_READWRITE_MASK_FPS (1<<8) #define RDP_FPU_READWRITE_MASK_FPS (1<<8)
#define RDP_SET_BREAK 0xa #define RDP_SET_BREAK 0xa
#define RDP_SET_BREAK_TYPE_PC_EQUAL 0 #define RDP_SET_BREAK_TYPE_PC_EQUAL 0
#define RDP_SET_BREAK_TYPE_GET_HANDLE (0x10) #define RDP_SET_BREAK_TYPE_GET_HANDLE (0x10)
#define RDP_CLEAR_BREAK 0xb #define RDP_CLEAR_BREAK 0xb
@ -153,10 +159,10 @@ static int timeout = 2;
static int static int
remote_rdp_xfer_inferior_memory PARAMS ((CORE_ADDR memaddr, remote_rdp_xfer_inferior_memory PARAMS ((CORE_ADDR memaddr,
char *myaddr, char *myaddr,
int len, int len,
int write, int write,
struct target_ops * target)); struct target_ops * target));
/* Stuff for talking to the serial layer. */ /* Stuff for talking to the serial layer. */
@ -167,7 +173,7 @@ get_byte ()
int c = SERIAL_READCHAR (io, timeout); int c = SERIAL_READCHAR (io, timeout);
if (remote_debug) if (remote_debug)
printf ("[%02x]", c); printf ("[%02x]\n", c);
if (c == SERIAL_TIMEOUT) if (c == SERIAL_TIMEOUT)
{ {
@ -201,13 +207,13 @@ put_byte (val)
char val; char val;
{ {
if (remote_debug) if (remote_debug)
printf("(%02x)", val); printf ("(%02x)\n", val);
SERIAL_WRITE (io, &val, 1); SERIAL_WRITE (io, &val, 1);
} }
static void static void
put_word (val) put_word (val)
long val; int val;
{ {
/* We always send in little endian */ /* We always send in little endian */
unsigned char b[4]; unsigned char b[4];
@ -217,7 +223,7 @@ put_word (val)
b[3] = val >> 24; b[3] = val >> 24;
if (remote_debug) if (remote_debug)
printf("(%04x)", val); printf ("(%04x)", val);
SERIAL_WRITE (io, b, 4); SERIAL_WRITE (io, b, 4);
} }
@ -226,96 +232,95 @@ put_word (val)
/* Stuff for talking to the RDP layer. */ /* Stuff for talking to the RDP layer. */
/* This is a bit more fancy that need be so that it syncs even in nasty cases. */ /* This is a bit more fancy that need be so that it syncs even in nasty cases.
I'be been unable to make it reliably sync up with the change
baudrate open command. It likes to sit and say it's been reset,
with no more action. So I took all that code out. I'd rather sync
reliably at 9600 than wait forever for a possible 19200 connection.
*/
static void static void
rdp_init (int cold) rdp_init (cold, tty)
int cold;
int tty;
{ {
int oloop;
int sync = 0; int sync = 0;
int type = cold ? RDP_OPEN_TYPE_COLD : RDP_OPEN_TYPE_WARM; int type = cold ? RDP_OPEN_TYPE_COLD : RDP_OPEN_TYPE_WARM;
int try; int baudtry = 9600;
int rcount = 0;
int bi;
for (try = 0; !sync && try < 10 ; try++) time_t now = time (0);
time_t stop_time = now + 10; /* Try and sync for 10 seconds, then give up */
while (time (0) < stop_time && !sync)
{ {
int restype; int restype;
QUIT; QUIT;
SERIAL_FLUSH_INPUT (io); SERIAL_FLUSH_INPUT (io);
SERIAL_FLUSH_OUTPUT (io);
if (tty)
printf_unfiltered ("Trying to connect at %d baud.\n", baudtry);
put_byte (RDP_OPEN); put_byte (RDP_OPEN);
if (baud_rate == 19200) put_byte (type | RDP_OPEN_TYPE_RETURN_SEX);
{ put_word (0);
put_byte (type | RDP_OPEN_TYPE_RETURN_SEX | RDP_OPEN_TYPE_BAUDRATE);
put_word (0);
put_word (RDP_OPEN_BAUDRATE_19200);
}
else
{
put_byte (type | RDP_OPEN_TYPE_RETURN_SEX);
put_word (0);
}
restype = SERIAL_READCHAR (io, 1); while (!sync && (restype = SERIAL_READCHAR (io, 1)) > 0)
if (remote_debug)
printf_unfiltered ("[%02x]\n", restype);
if (restype == RDP_RESET)
{ {
put_byte (RDP_RESET); if (remote_debug)
while ((restype = SERIAL_READCHAR (io, 1)) == RDP_RESET) printf_unfiltered ("[%02x]\n", restype);
;
while ((restype = SERIAL_READCHAR (io, 1)) > 0) switch (restype)
{ {
printf_unfiltered ("%c", isgraph(restype) ? restype : ' '); case SERIAL_TIMEOUT:
} break;
while ((restype = SERIAL_READCHAR (io, 1)) > 0) case RDP_RESET:
; while ((restype = SERIAL_READCHAR (io, 1)) == RDP_RESET)
printf_unfiltered("\n"); ;
error("board reset, try again.\n"); while ((restype = SERIAL_READCHAR (io, 1)) > 0)
continue; {
} printf_unfiltered ("%c", isgraph (restype) ? restype : ' ');
}
switch (restype) while ((restype = SERIAL_READCHAR (io, 1)) > 0)
{ ;
case SERIAL_TIMEOUT: if (tty)
break; {
case RDP_RESET: printf_unfiltered ("\nThe board has sent notification that it was reset.\n");
/* Ignore a load of these */ printf_unfiltered ("Waiting for it to settle down...\n");
break; }
default: sleep (3);
break; if (tty)
case RDP_RES_VALUE: printf_unfiltered ("\nTrying again.\n");
{ break;
int resval = SERIAL_READCHAR (io, 1); default:
switch (resval) break;
case RDP_RES_VALUE:
{ {
case SERIAL_TIMEOUT: int resval = SERIAL_READCHAR (io, 1);
break; switch (resval)
case RDP_RES_VALUE_LITTLE_ENDIAN: {
target_byte_order = LITTLE_ENDIAN; case SERIAL_TIMEOUT:
sync =1 ; break;
break; case RDP_RES_VALUE_LITTLE_ENDIAN:
case RDP_RES_VALUE_BIG_ENDIAN: target_byte_order = LITTLE_ENDIAN;
target_byte_order = BIG_ENDIAN; sync = 1;
sync =1 ; break;
break; case RDP_RES_VALUE_BIG_ENDIAN:
default: target_byte_order = BIG_ENDIAN;
break; sync = 1;
break;
default:
break;
}
} }
} }
} }
} }
if (sync) if (!sync)
{
SERIAL_FLUSH_INPUT (io);
SERIAL_SETBAUDRATE (io, baud_rate);
SERIAL_FLUSH_INPUT (io);
}
else
{ {
error ("Couldn't reset the board, try pressing the reset button"); error ("Couldn't reset the board, try pressing the reset button");
} }
@ -495,7 +500,7 @@ rdp_fetch_one_fpu_register (mask, buf)
{ {
/* There are 12 bytes long /* There are 12 bytes long
!! fixme about endianness !! fixme about endianness
*/ */
int dummy; /* I've seen these come back as four words !! */ int dummy; /* I've seen these come back as four words !! */
send_rdp ("bbw-SWWWWZ", RDP_COPRO_READ, FPU_COPRO_NUMBER, mask, buf + 0, buf + 4, buf + 8, &dummy); send_rdp ("bbw-SWWWWZ", RDP_COPRO_READ, FPU_COPRO_NUMBER, mask, buf + 0, buf + 4, buf + 8, &dummy);
} }
@ -552,8 +557,8 @@ rdp_store_one_fpu_register (mask, buf)
} }
#endif #endif
} }
/* Convert between GDB requests and the RDP layer. */ /* Convert between GDB requests and the RDP layer. */
static void static void
@ -787,7 +792,7 @@ exec_swi (swi, args)
} }
static void static void
handle_swi () handle_swi ()
{ {
argsin args[3]; argsin args[3];
@ -871,7 +876,7 @@ rdp_execute_finish ()
res = SERIAL_READCHAR (io, 1); res = SERIAL_READCHAR (io, 1);
while (res == SERIAL_TIMEOUT) while (res == SERIAL_TIMEOUT)
{ {
QUIT ; QUIT;
printf_filtered ("Waiting for target..\n"); printf_filtered ("Waiting for target..\n");
res = SERIAL_READCHAR (io, 1); res = SERIAL_READCHAR (io, 1);
} }
@ -984,9 +989,8 @@ remote_rdp_open (args, from_tty)
if (!args) if (!args)
error_no_arg ("serial port device name"); error_no_arg ("serial port device name");
if (baud_rate != 19200) baud_rate = 9600;
baud_rate = 9600;
target_preopen (from_tty); target_preopen (from_tty);
io = SERIAL_OPEN (args); io = SERIAL_OPEN (args);
@ -996,7 +1000,7 @@ remote_rdp_open (args, from_tty)
SERIAL_RAW (io); SERIAL_RAW (io);
rdp_init (0); rdp_init (1, from_tty);
if (from_tty) if (from_tty)
@ -1031,15 +1035,6 @@ remote_rdp_close (quitting)
io = 0; io = 0;
} }
/* Terminate the open connection to the remote debugger. */
static void
remote_rdp_detach (args, from_tty)
char *args;
int from_tty;
{
pop_target ();
}
/* Resume execution of the target process. STEP says whether to single-step /* Resume execution of the target process. STEP says whether to single-step
or to run free; SIGGNAL is the signal value (e.g. SIGINT) to be given or to run free; SIGGNAL is the signal value (e.g. SIGINT) to be given
@ -1167,8 +1162,8 @@ static struct yn breakinfo[] =
{"watchpoints for half-word writes supported", RDP_INFO_ABOUT_BREAK_HALFWORD_WRITE}, {"watchpoints for half-word writes supported", RDP_INFO_ABOUT_BREAK_HALFWORD_WRITE},
{"watchpoints for word writes supported", RDP_INFO_ABOUT_BREAK_WORD_WRITE}, {"watchpoints for word writes supported", RDP_INFO_ABOUT_BREAK_WORD_WRITE},
{"mask break/watch-points supported", RDP_INFO_ABOUT_BREAK_MASK}, {"mask break/watch-points supported", RDP_INFO_ABOUT_BREAK_MASK},
{"thread-specific breakpoints supported", RDP_INFO_ABOUT_BREAK_THREAD_BREAK}, {"thread-specific breakpoints supported", RDP_INFO_ABOUT_BREAK_THREAD_BREAK},
{"thread-specific watchpoints supported", RDP_INFO_ABOUT_BREAK_THREAD_WATCH}, {"thread-specific watchpoints supported", RDP_INFO_ABOUT_BREAK_THREAD_WATCH},
{"conditional breakpoints supported", RDP_INFO_ABOUT_BREAK_COND}, {"conditional breakpoints supported", RDP_INFO_ABOUT_BREAK_COND},
{0} {0}
}; };
@ -1203,7 +1198,7 @@ struct target_ops remote_rdp_ops =
{ {
"rdp", /* to_shortname */ "rdp", /* to_shortname */
/* to_longname */ /* to_longname */
"Remote Target using the RDProtocol", "Remote Target using the RDProtocol",
/* to_doc */ /* to_doc */
"Use a remote ARM system which uses the ARM Remote Debugging Protocol", "Use a remote ARM system which uses the ARM Remote Debugging Protocol",
remote_rdp_open, /* to_open */ remote_rdp_open, /* to_open */
@ -1215,7 +1210,7 @@ struct target_ops remote_rdp_ops =
remote_rdp_fetch_register, /* to_fetch_registers */ remote_rdp_fetch_register, /* to_fetch_registers */
remote_rdp_store_register, /* to_store_registers */ remote_rdp_store_register, /* to_store_registers */
remote_rdp_prepare_to_store, /* to_prepare_to_store */ remote_rdp_prepare_to_store, /* to_prepare_to_store */
remote_rdp_xfer_inferior_memory, /* to_xfer_memory */ remote_rdp_xfer_inferior_memory, /* to_xfer_memory */
remote_rdp_files_info, /* to_files_info */ remote_rdp_files_info, /* to_files_info */
remote_rdp_insert_breakpoint, /* to_insert_breakpoint */ remote_rdp_insert_breakpoint, /* to_insert_breakpoint */
remote_rdp_remove_breakpoint, /* to_remove_breakpoint */ remote_rdp_remove_breakpoint, /* to_remove_breakpoint */