X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fremote-sds.c;h=0bf1c01c82af7c0e6c05f690aba6f27c51988694;hb=b7693d02137c80845e6878f5efea94f7162bd77b;hp=f7c364a21d0634a47b74b1731412e854a06a290b;hpb=e1e9e218c189882084a89fdee655a0a523efbaf8;p=binutils-gdb.git diff --git a/gdb/remote-sds.c b/gdb/remote-sds.c index f7c364a21d0..0bf1c01c82a 100644 --- a/gdb/remote-sds.c +++ b/gdb/remote-sds.c @@ -1,5 +1,7 @@ /* Remote target communications for serial-line targets using SDS' protocol. - Copyright 1997, 2001 Free Software Foundation, Inc. + + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2004 Free Software + Foundation, Inc. This file is part of GDB. @@ -36,10 +38,7 @@ #include "gdb-stabs.h" #include "gdbthread.h" #include "gdbcore.h" - -#ifdef USG -#include -#endif +#include "regcache.h" #include #include "serial.h" @@ -61,9 +60,9 @@ 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); +static int sds_start_remote (void *); static void sds_open (char *, int); @@ -73,8 +72,6 @@ static void sds_store_registers (int); static void sds_mourn (void); -static void sds_create_inferior (char *, char *, char **); - static void sds_load (char *, int); static int getmessage (unsigned char *, int); @@ -85,12 +82,10 @@ 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); -static int tohex (int); - static int fromhex (int); static void sds_detach (char *, int); @@ -126,7 +121,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. */ @@ -145,28 +140,27 @@ static int message_pending; /* Clean up connection to a remote debugger. */ -/* ARGSUSED */ static void sds_close (int quitting) { if (sds_desc) - SERIAL_CLOSE (sds_desc); + serial_close (sds_desc); sds_desc = NULL; } /* Stub for catch_errors. */ static int -sds_start_remote (PTR dummy) +sds_start_remote (void *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); @@ -200,25 +194,25 @@ device is attached to the remote system (e.g. /dev/ttya)."); unpush_target (&sds_ops); - 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) { @@ -276,17 +270,6 @@ fromhex (int a) error ("Reply contains invalid hex digit %d", a); } -/* Convert number NIB to a hex digit. */ - -static int -tohex (int nib) -{ - if (nib < 10) - return '0' + nib; - else - return 'a' + nib - 10; -} - static int tob64 (unsigned char *inbuf, char *outbuf, int len) { @@ -346,7 +329,7 @@ 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]; @@ -402,7 +385,7 @@ interrupt_query (void) Give up (and stop debugging it)? ")) { target_mourn_inferior (); - return_to_top_level (RETURN_QUIT); + throw_exception (RETURN_QUIT); } target_terminal_inferior (); @@ -415,8 +398,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; @@ -432,7 +415,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) @@ -456,7 +439,7 @@ sds_wait (int pid, struct target_waitstatus *status) } } got_status: - return inferior_pid; + return inferior_ptid; } static unsigned char sprs[16]; @@ -464,16 +447,15 @@ static unsigned char sprs[16]; /* Read the remote registers into the block REGS. */ /* Currently we just read all the registers, so we don't use regno. */ -/* ARGSUSED */ static void sds_fetch_registers (int regno) { unsigned char buf[PBUFSIZ]; int i, retlen; - char regs[REGISTER_BYTES]; + char *regs = alloca (deprecated_register_bytes ()); /* Unimplemented registers read as all bits zero. */ - memset (regs, 0, REGISTER_BYTES); + memset (regs, 0, deprecated_register_bytes ()); buf[0] = 18; buf[1] = 1; @@ -496,7 +478,8 @@ sds_fetch_registers (int regno) /* (should warn about reply too short) */ for (i = 0; i < NUM_REGS; i++) - supply_register (i, ®s[REGISTER_BYTE (i)]); + regcache_raw_supply (current_regcache, i, + ®s[DEPRECATED_REGISTER_BYTE (i)]); } /* Prepare to store registers. Since we may send them all, we have to @@ -506,7 +489,7 @@ static void sds_prepare_to_store (void) { /* Make sure the entire registers array is valid. */ - read_register_bytes (0, (char *) NULL, REGISTER_BYTES); + deprecated_read_register_bytes (0, (char *) NULL, deprecated_register_bytes ()); } /* Store register REGNO, or all registers if REGNO == -1, from the contents @@ -525,7 +508,7 @@ sds_store_registers (int regno) *p++ = 0; *p++ = 0; for (i = 0; i < 4 * 6; i++) - *p++ = registers[i + 4 * 32 + 8 * 32]; + *p++ = deprecated_registers[i + 4 * 32 + 8 * 32]; for (i = 0; i < 4 * 1; i++) *p++ = 0; for (i = 0; i < 4 * 4; i++) @@ -540,7 +523,7 @@ sds_store_registers (int regno) *p++ = 0; *p++ = 0; for (i = 0; i < 4 * 32; i++) - *p++ = registers[i]; + *p++ = deprecated_registers[i]; sds_send (buf, p - buf); @@ -654,11 +637,9 @@ sds_read_bytes (CORE_ADDR memaddr, char *myaddr, int len) if SHOULD_WRITE is nonzero. Returns length of data written or read; 0 for error. TARGET is unused. */ -/* ARGSUSED */ static int 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) + struct mem_attrib *attrib, struct target_ops *target) { int res; @@ -687,7 +668,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); @@ -798,7 +779,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; @@ -976,6 +957,7 @@ getmessage (unsigned char *buf, int forever) /* Try the whole thing again. */ retry: /* need to do something here */ + ; } /* We have tried hard enough, and just can't receive the packet. Give up. */ @@ -998,9 +980,9 @@ sds_mourn (void) } static void -sds_create_inferior (char *exec_file, char *args, char **env) +sds_create_inferior (char *exec_file, char *args, char **env, int from_tty) { - inferior_pid = 42000; + inferior_ptid = pid_to_ptid (42000); /* Clean up from the last time we were running. */ clear_proceed_status (); @@ -1014,7 +996,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 @@ -1079,7 +1061,7 @@ Specify the serial device it is connected to (e.g. /dev/ttya)."; sds_ops.to_fetch_registers = sds_fetch_registers; sds_ops.to_store_registers = sds_store_registers; sds_ops.to_prepare_to_store = sds_prepare_to_store; - sds_ops.to_xfer_memory = sds_xfer_memory; + sds_ops.deprecated_xfer_memory = sds_xfer_memory; sds_ops.to_files_info = sds_files_info; sds_ops.to_insert_breakpoint = sds_insert_breakpoint; sds_ops.to_remove_breakpoint = sds_remove_breakpoint; @@ -1133,10 +1115,11 @@ _initialize_remote_sds (void) init_sds_ops (); add_target (&sds_ops); - add_show_from_set (add_set_cmd ("sdstimeout", no_class, - var_integer, (char *) &sds_timeout, - "Set timeout value for sds read.\n", &setlist), - &showlist); + deprecated_add_show_from_set + (add_set_cmd ("sdstimeout", no_class, + var_integer, (char *) &sds_timeout, + "Set timeout value for sds read.\n", &setlist), + &showlist); add_com ("sds", class_obscure, sds_command, "Send a command to the SDS monitor.");