X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fremote-sds.c;h=fd4e6572b8517a7dae21f96bfdb45b228f7912b7;hb=f096a152b39f7a6c65f2f344a0e2593fd85abdcc;hp=f7fbf00fae1bd52214a5016830258b6bf95675ce;hpb=8edbea78dcc8fbea0c1fca717ad89316e63ca8b4;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/remote-sds.c b/gdb/remote-sds.c index f7fbf00fae..fd4e6572b8 100644 --- a/gdb/remote-sds.c +++ b/gdb/remote-sds.c @@ -1,5 +1,5 @@ /* Remote target communications for serial-line targets using SDS' protocol. - Copyright 1997 Free Software Foundation, Inc. + Copyright 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GDB. @@ -31,13 +31,12 @@ #include "bfd.h" #include "symfile.h" #include "target.h" -#include "gdb_wait.h" #include "gdbcmd.h" #include "objfiles.h" #include "gdb-stabs.h" #include "gdbthread.h" #include "gdbcore.h" -#include "dcache.h" +#include "regcache.h" #ifdef USG #include @@ -56,13 +55,14 @@ static int sds_read_bytes (CORE_ADDR, char *, int); static void sds_files_info (struct target_ops *ignore); -static int sds_xfer_memory (CORE_ADDR, char *, int, int, struct target_ops *); +static int sds_xfer_memory (CORE_ADDR, char *, int, int, + struct mem_attrib *, struct target_ops *); static void sds_prepare_to_store (void); static void sds_fetch_registers (int); -static void sds_resume (int, int, enum target_signal); +static void sds_resume (ptid_t, int, enum target_signal); static int sds_start_remote (PTR); @@ -86,7 +86,7 @@ static int sds_send (unsigned char *, int); static int readchar (int); -static int sds_wait (int, struct target_waitstatus *); +static ptid_t sds_wait (ptid_t, struct target_waitstatus *); static void sds_kill (void); @@ -127,7 +127,7 @@ static int sds_timeout = 2; that sds_open knows that we don't have a file open when the program starts. */ -static serial_t sds_desc = NULL; +static struct serial *sds_desc = NULL; /* This limit comes from the monitor. */ @@ -151,7 +151,7 @@ static void sds_close (int quitting) { if (sds_desc) - SERIAL_CLOSE (sds_desc); + serial_close (sds_desc); sds_desc = NULL; } @@ -160,14 +160,14 @@ sds_close (int quitting) static int sds_start_remote (PTR dummy) { - char c; + int c; unsigned char buf[200]; immediate_quit++; /* Allow user to interrupt it */ /* Ack any packet which the remote side has already sent. */ - SERIAL_WRITE (sds_desc, "{#*\r\n", 5); - SERIAL_WRITE (sds_desc, "{#}\r\n", 5); + serial_write (sds_desc, "{#*\r\n", 5); + serial_write (sds_desc, "{#}\r\n", 5); while ((c = readchar (1)) >= 0) printf_unfiltered ("%c", c); @@ -190,8 +190,6 @@ sds_start_remote (PTR dummy) /* Open a connection to a remote debugger. NAME is the filename used for communication. */ -static DCACHE *sds_dcache; - static void sds_open (char *name, int from_tty) { @@ -203,30 +201,25 @@ device is attached to the remote system (e.g. /dev/ttya)."); unpush_target (&sds_ops); - if (!sds_dcache) - sds_dcache = dcache_init (sds_read_bytes, sds_write_bytes); - else - dcache_invd (sds_dcache); - - sds_desc = SERIAL_OPEN (name); + sds_desc = serial_open (name); if (!sds_desc) perror_with_name (name); if (baud_rate != -1) { - if (SERIAL_SETBAUDRATE (sds_desc, baud_rate)) + if (serial_setbaudrate (sds_desc, baud_rate)) { - SERIAL_CLOSE (sds_desc); + serial_close (sds_desc); perror_with_name (name); } } - SERIAL_RAW (sds_desc); + serial_raw (sds_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 (sds_desc); + serial_flush_input (sds_desc); if (from_tty) { @@ -354,12 +347,10 @@ static enum target_signal last_sent_signal = TARGET_SIGNAL_0; int last_sent_step; static void -sds_resume (int pid, int step, enum target_signal siggnal) +sds_resume (ptid_t ptid, int step, enum target_signal siggnal) { unsigned char buf[PBUFSIZ]; - dcache_invd (sds_dcache); - last_sent_signal = siggnal; last_sent_step = step; @@ -425,8 +416,8 @@ int kill_kludge; STATUS just as `wait' would. Returns "pid" (though it's not clear what, if anything, that means in the case of this target). */ -static int -sds_wait (int pid, struct target_waitstatus *status) +static ptid_t +sds_wait (ptid_t ptid, struct target_waitstatus *status) { unsigned char buf[PBUFSIZ]; int retlen; @@ -442,7 +433,7 @@ sds_wait (int pid, struct target_waitstatus *status) { just_started = 0; status->kind = TARGET_WAITKIND_STOPPED; - return inferior_pid; + return inferior_ptid; } while (1) @@ -466,7 +457,7 @@ sds_wait (int pid, struct target_waitstatus *status) } } got_status: - return inferior_pid; + return inferior_ptid; } static unsigned char sprs[16]; @@ -662,18 +653,22 @@ sds_read_bytes (CORE_ADDR memaddr, char *myaddr, int len) /* Read or write LEN bytes from inferior memory at MEMADDR, transferring to or from debugger address MYADDR. Write to inferior if SHOULD_WRITE is nonzero. Returns length of data written or - read; 0 for error. */ + read; 0 for error. TARGET is unused. */ /* ARGSUSED */ static int -sds_xfer_memory (memaddr, myaddr, len, should_write, target) - CORE_ADDR memaddr; - char *myaddr; - int len; - int should_write; - struct target_ops *target; /* ignored */ +sds_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int should_write, + struct mem_attrib *attrib ATTRIBUTE_UNUSED, + struct target_ops *target ATTRIBUTE_UNUSED) { - return dcache_xfer_memory (sds_dcache, memaddr, myaddr, len, should_write); + int res; + + if (should_write) + res = sds_write_bytes (memaddr, myaddr, len); + else + res = sds_read_bytes (memaddr, myaddr, len); + + return res; } @@ -693,7 +688,7 @@ readchar (int timeout) { int ch; - ch = SERIAL_READCHAR (sds_desc, timeout); + ch = serial_readchar (sds_desc, timeout); if (remote_debug > 1 && ch >= 0) fprintf_unfiltered (gdb_stdlog, "%c(%x)", ch, ch); @@ -752,7 +747,7 @@ putmessage (unsigned char *buf, int len) and giving it a checksum. */ if (len > 170) /* Prosanity check */ - abort (); + internal_error (__FILE__, __LINE__, "failed internal consistency check"); if (remote_debug) { @@ -804,7 +799,7 @@ putmessage (unsigned char *buf, int len) header[0], header[1], header[2]); gdb_flush (gdb_stdlog); } - if (SERIAL_WRITE (sds_desc, buf2, p - buf2)) + if (serial_write (sds_desc, buf2, p - buf2)) perror_with_name ("putmessage: write failed"); return 1; @@ -1006,7 +1001,7 @@ sds_mourn (void) static void sds_create_inferior (char *exec_file, char *args, char **env) { - inferior_pid = 42000; + inferior_ptid = pid_to_ptid (42000); /* Clean up from the last time we were running. */ clear_proceed_status (); @@ -1020,7 +1015,7 @@ sds_load (char *filename, int from_tty) { generic_load (filename, from_tty); - inferior_pid = 0; + inferior_ptid = null_ptid; } /* The SDS monitor has commands for breakpoint insertion, although it