projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
2002-09-18 Andrew Cagney <ac131313@redhat.com>
[deliverable/binutils-gdb.git]
/
gdb
/
remote-array.c
diff --git
a/gdb/remote-array.c
b/gdb/remote-array.c
index 498c21820274c72ae046dad0f33df85dcf12b858..ed0c40e44362e161304bd025d1a4d2a8374774d2 100644
(file)
--- a/
gdb/remote-array.c
+++ b/
gdb/remote-array.c
@@
-1,5
+1,8
@@
/* Remote debugging interface for Array Tech RAID controller..
/* Remote debugging interface for Array Tech RAID controller..
- Copyright 90, 91, 92, 93, 94, 1995, 1998 Free Software Foundation, Inc.
+
+ Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+ 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
Contributed by Cygnus Support. Written by Rob Savoye for Cygnus.
This module talks to a debug monitor called 'MONITOR', which
Contributed by Cygnus Support. Written by Rob Savoye for Cygnus.
This module talks to a debug monitor called 'MONITOR', which
@@
-22,15
+25,12
@@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
- */
+ Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "gdbcore.h"
#include "target.h"
#include "defs.h"
#include "gdbcore.h"
#include "target.h"
-#include "gdb_wait.h"
#include <ctype.h>
#include <ctype.h>
-#include <signal.h>
#include <sys/types.h>
#include "gdb_string.h"
#include "command.h"
#include <sys/types.h>
#include "gdb_string.h"
#include "command.h"
@@
-39,35
+39,18
@@
#include "remote-utils.h"
#include "inferior.h"
#include "version.h"
#include "remote-utils.h"
#include "inferior.h"
#include "version.h"
+#include "regcache.h"
extern int baud_rate;
#define ARRAY_PROMPT ">> "
extern int baud_rate;
#define ARRAY_PROMPT ">> "
-#define SWAP_TARGET_AND_HOST(buffer,len) \
- do \
- { \
- if (TARGET_BYTE_ORDER != HOST_BYTE_ORDER) \
- { \
- char tmp; \
- char *p = (char *)(buffer); \
- char *q = ((char *)(buffer)) + len - 1; \
- for (; p < q; p++, q--) \
- { \
- tmp = *q; \
- *q = *p; \
- *p = tmp; \
- } \
- } \
- } \
- while (0)
-
static void debuglogs (int, char *, ...);
static void array_open ();
static void array_close ();
static void array_detach ();
static void array_attach ();
static void debuglogs (int, char *, ...);
static void array_open ();
static void array_close ();
static void array_detach ();
static void array_attach ();
-static void array_resume ();
+static void array_resume (
ptid_t ptid, int step, enum target_signal sig
);
static void array_fetch_register ();
static void array_store_register ();
static void array_fetch_registers ();
static void array_fetch_register ();
static void array_store_register ();
static void array_fetch_registers ();
@@
-79,7
+62,8
@@
static void array_create_inferior ();
static void array_mourn_inferior ();
static void make_gdb_packet ();
static int array_xfer_memory ();
static void array_mourn_inferior ();
static void make_gdb_packet ();
static int array_xfer_memory ();
-static int array_wait ();
+static ptid_t array_wait (ptid_t ptid,
+ struct target_waitstatus *status);
static int array_insert_breakpoint ();
static int array_remove_breakpoint ();
static int tohex ();
static int array_insert_breakpoint ();
static int array_remove_breakpoint ();
static int tohex ();
@@
-107,7
+91,7
@@
static int timeout = 30;
* Descriptor for I/O to remote machine. Initialize it to NULL so that
* array_open knows that we don't have a file open when the program starts.
*/
* Descriptor for I/O to remote machine. Initialize it to NULL so that
* array_open knows that we don't have a file open when the program starts.
*/
-s
erial_t
array_desc = NULL;
+s
truct serial *
array_desc = NULL;
/*
* this array of registers need to match the indexes used by GDB. The
/*
* this array of registers need to match the indexes used by GDB. The
@@
-178,7
+162,6
@@
Specify the serial device it is connected to (e.g. /dev/ttya).";
array_ops.to_thread_alive = 0;
array_ops.to_stop = 0;
array_ops.to_pid_to_exec_file = NULL;
array_ops.to_thread_alive = 0;
array_ops.to_stop = 0;
array_ops.to_pid_to_exec_file = NULL;
- array_ops.to_core_file_to_sym_file = NULL;
array_ops.to_stratum = process_stratum;
array_ops.DONT_USE = 0;
array_ops.to_has_all_memory = 1;
array_ops.to_stratum = process_stratum;
array_ops.DONT_USE = 0;
array_ops.to_has_all_memory = 1;
@@
-209,19
+192,19
@@
printf_monitor (char *pattern,...)
if (strlen (buf) > PBUFSIZ)
error ("printf_monitor(): string too long");
if (strlen (buf) > PBUFSIZ)
error ("printf_monitor(): string too long");
- if (SERIAL_WRITE (array_desc, buf, strlen (buf)))
- fprintf (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
+ if (serial_write (array_desc, buf, strlen (buf)))
+ fprintf_unfiltered (gdb_stderr, "serial_write failed: %s\n",
+ safe_strerror (errno));
}
/*
* write_monitor -- send raw data to monitor.
*/
static void
}
/*
* write_monitor -- send raw data to monitor.
*/
static void
-write_monitor (data, len)
- char data[];
- int len;
+write_monitor (char data[], int len)
{
{
- if (SERIAL_WRITE (array_desc, data, len))
- fprintf (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
+ if (serial_write (array_desc, data, len))
+ fprintf_unfiltered (gdb_stderr, "serial_write failed: %s\n",
+ safe_strerror (errno));
*(data + len + 1) = '\0';
debuglogs (1, "write_monitor(), Sending: \"%s\".", data);
*(data + len + 1) = '\0';
debuglogs (1, "write_monitor(), Sending: \"%s\".", data);
@@
-321,7
+304,7
@@
readchar (int timeout)
{
int c;
{
int c;
- c =
SERIAL_READCHAR
(array_desc, abs (timeout));
+ c =
serial_readchar
(array_desc, abs (timeout));
if (sr_get_debug () > 5)
{
if (sr_get_debug () > 5)
{
@@
-363,7
+346,7
@@
expect (char *string, int discard)
debuglogs (1, "Expecting \"%s\".", string);
debuglogs (1, "Expecting \"%s\".", string);
- immediate_quit
= 1
;
+ immediate_quit
++
;
while (1)
{
c = readchar (timeout);
while (1)
{
c = readchar (timeout);
@@
-373,7
+356,7
@@
expect (char *string, int discard)
{
if (*p == '\0')
{
{
if (*p == '\0')
{
- immediate_quit
= 0
;
+ immediate_quit
--
;
debuglogs (4, "Matched");
return;
}
debuglogs (4, "Matched");
return;
}
@@
-510,22
+493,10
@@
get_hex_word (void)
val = 0;
val = 0;
-#if 0
- if (HOST_BYTE_ORDER == BIG_ENDIAN)
- {
-#endif
- for (i = 0; i < 8; i++)
- val = (val << 4) + get_hex_digit (i == 0);
-#if 0
- }
- else
- {
- for (i = 7; i >= 0; i--)
- val = (val << 4) + get_hex_digit (i == 0);
- }
-#endif
+ for (i = 0; i < 8; i++)
+ val = (val << 4) + get_hex_digit (i == 0);
- debuglogs (4, "get_hex_word() got a 0x%x
for a %s host.", val, (HOST_BYTE_ORDER == BIG_ENDIAN) ? "big endian" : "little endian"
);
+ debuglogs (4, "get_hex_word() got a 0x%x
.", val
);
return val;
}
return val;
}
@@
-592,21
+563,21
@@
array_open (char *args, char *name, int from_tty)
mips_set_processor_type_command ("lsi33k", 0);
strcpy (dev_name, args);
mips_set_processor_type_command ("lsi33k", 0);
strcpy (dev_name, args);
- array_desc =
SERIAL_OPEN
(dev_name);
+ array_desc =
serial_open
(dev_name);
if (array_desc == NULL)
perror_with_name (dev_name);
if (baud_rate != -1)
{
if (array_desc == NULL)
perror_with_name (dev_name);
if (baud_rate != -1)
{
- if (
SERIAL_SETBAUDRATE
(array_desc, baud_rate))
+ if (
serial_setbaudrate
(array_desc, baud_rate))
{
{
-
SERIAL_CLOSE
(array_desc);
+
serial_close
(array_desc);
perror_with_name (name);
}
}
perror_with_name (name);
}
}
-
SERIAL_RAW
(array_desc);
+
serial_raw
(array_desc);
#if defined (LOG_FILE)
log_file = fopen (LOG_FILE, "w");
#if defined (LOG_FILE)
log_file = fopen (LOG_FILE, "w");
@@
-648,7
+619,7
@@
array_open (char *args, char *name, int from_tty)
static void
array_close (int quitting)
{
static void
array_close (int quitting)
{
-
SERIAL_CLOSE
(array_desc);
+
serial_close
(array_desc);
array_desc = NULL;
debuglogs (1, "array_close (quitting=%d)", quitting);
array_desc = NULL;
debuglogs (1, "array_close (quitting=%d)", quitting);
@@
-700,7
+671,7
@@
array_attach (char *args, int from_tty)
* array_resume -- Tell the remote machine to resume.
*/
static void
* array_resume -- Tell the remote machine to resume.
*/
static void
-array_resume (
int p
id, int step, enum target_signal sig)
+array_resume (
ptid_t pt
id, int step, enum target_signal sig)
{
debuglogs (1, "array_resume (step=%d, sig=%d)", step, sig);
{
debuglogs (1, "array_resume (step=%d, sig=%d)", step, sig);
@@
-720,13
+691,13
@@
array_resume (int pid, int step, enum target_signal sig)
* array_wait -- Wait until the remote machine stops, then return,
* storing status in status just as `wait' would.
*/
* array_wait -- Wait until the remote machine stops, then return,
* storing status in status just as `wait' would.
*/
-static
in
t
-array_wait (
int p
id, struct target_waitstatus *status)
+static
ptid_
t
+array_wait (
ptid_t pt
id, struct target_waitstatus *status)
{
int old_timeout = timeout;
int result, i;
char c;
{
int old_timeout = timeout;
int result, i;
char c;
- s
erial_t
tty_desc;
+ s
truct serial *
tty_desc;
serial_ttystate ttystate;
debuglogs (1, "array_wait (), printing extraneous text.");
serial_ttystate ttystate;
debuglogs (1, "array_wait (), printing extraneous text.");
@@
-737,9
+708,9
@@
array_wait (int pid, struct target_waitstatus *status)
timeout = 0; /* Don't time out -- user program is running. */
#if !defined(__GO32__) && !defined(__MSDOS__) && !defined(_WIN32)
timeout = 0; /* Don't time out -- user program is running. */
#if !defined(__GO32__) && !defined(__MSDOS__) && !defined(_WIN32)
- tty_desc =
SERIAL_FDOPEN
(0);
- ttystate =
SERIAL_GET_TTY_STATE
(tty_desc);
-
SERIAL_RAW
(tty_desc);
+ tty_desc =
serial_fdopen
(0);
+ ttystate =
serial_get_tty_state
(tty_desc);
+
serial_raw
(tty_desc);
i = 0;
/* poll on the serial port and the keyboard. */
i = 0;
/* poll on the serial port and the keyboard. */
@@
-763,10
+734,10
@@
array_wait (int pid, struct target_waitstatus *status)
fputc_unfiltered (c, gdb_stdout);
gdb_flush (gdb_stdout);
}
fputc_unfiltered (c, gdb_stdout);
gdb_flush (gdb_stdout);
}
- c =
SERIAL_READCHAR
(tty_desc, timeout);
+ c =
serial_readchar
(tty_desc, timeout);
if (c > 0)
{
if (c > 0)
{
-
SERIAL_WRITE
(array_desc, &c, 1);
+
serial_write
(array_desc, &c, 1);
/* do this so it looks like there's keyboard echo */
if (c == 3) /* exit on Control-C */
break;
/* do this so it looks like there's keyboard echo */
if (c == 3) /* exit on Control-C */
break;
@@
-776,7
+747,7
@@
array_wait (int pid, struct target_waitstatus *status)
#endif
}
}
#endif
}
}
-
SERIAL_SET_TTY_STATE
(tty_desc, ttystate);
+
serial_set_tty_state
(tty_desc, ttystate);
#else
expect_prompt (1);
debuglogs (4, "array_wait(), got the expect_prompt.");
#else
expect_prompt (1);
debuglogs (4, "array_wait(), got the expect_prompt.");
@@
-787,7
+758,7
@@
array_wait (int pid, struct target_waitstatus *status)
timeout = old_timeout;
timeout = old_timeout;
- return
0
;
+ return
inferior_ptid
;
}
/*
}
/*
@@
-797,16
+768,14
@@
array_wait (int pid, struct target_waitstatus *status)
static void
array_fetch_registers (int ignored)
{
static void
array_fetch_registers (int ignored)
{
- int regno, i;
+ char *reg = alloca (MAX_REGISTER_RAW_SIZE);
+ int regno;
char *p;
char *p;
- unsigned char packet[PBUFSIZ];
- char regs[REGISTER_BYTES];
+ char *packet = alloca (PBUFSIZ);
debuglogs (1, "array_fetch_registers (ignored=%d)\n", ignored);
memset (packet, 0, PBUFSIZ);
debuglogs (1, "array_fetch_registers (ignored=%d)\n", ignored);
memset (packet, 0, PBUFSIZ);
- /* Unimplemented registers read as all bits zero. */
- memset (regs, 0, REGISTER_BYTES);
make_gdb_packet (packet, "g");
if (array_send_packet (packet) == 0)
error ("Couldn't transmit packet\n");
make_gdb_packet (packet, "g");
if (array_send_packet (packet) == 0)
error ("Couldn't transmit packet\n");
@@
-818,10
+787,10
@@
array_fetch_registers (int ignored)
{
/* supply register stores in target byte order, so swap here */
/* FIXME: convert from ASCII hex to raw bytes */
{
/* supply register stores in target byte order, so swap here */
/* FIXME: convert from ASCII hex to raw bytes */
- i = ascii2hexword (packet + (regno * 8));
+
LONGEST
i = ascii2hexword (packet + (regno * 8));
debuglogs (5, "Adding register %d = %x\n", regno, i);
debuglogs (5, "Adding register %d = %x\n", regno, i);
-
SWAP_TARGET_AND_HOST (&i, 4
);
- supply_register (regno, (char *) &
i
);
+
store_unsigned_integer (®, REGISTER_RAW_SIZE (regno), i
);
+ supply_register (regno, (char *) &
reg
);
}
}
}
}
@@
-832,7
+801,7
@@
array_fetch_registers (int ignored)
static void
array_fetch_register (int ignored)
{
static void
array_fetch_register (int ignored)
{
- array_fetch_registers ();
+ array_fetch_registers (
0 /* ignored */
);
}
/*
}
/*
@@
-880,7
+849,7
@@
array_store_registers (int ignored)
static void
array_store_register (int ignored)
{
static void
array_store_register (int ignored)
{
- array_store_registers ();
+ array_store_registers (
0 /* ignored */
);
}
/* Get ready to modify the registers array. On machines which store
}
/* Get ready to modify the registers array. On machines which store
@@
-1020,14
+989,15
@@
array_read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len)
return (count);
}
return (count);
}
-/* FIXME-someday! merge these two. */
+/* Transfer LEN bytes between GDB address MYADDR and target address
+ MEMADDR. If WRITE is non-zero, transfer them to the target,
+ otherwise transfer them from the target. TARGET is unused.
+
+ Returns the number of bytes transferred. */
+
static int
static int
-array_xfer_memory (memaddr, myaddr, len, write, target)
- CORE_ADDR memaddr;
- char *myaddr;
- int len;
- int write;
- struct target_ops *target; /* ignored */
+array_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
+ struct mem_attrib *attrib, struct target_ops *target)
{
if (write)
return array_write_inferior_memory (memaddr, myaddr, len);
{
if (write)
return array_write_inferior_memory (memaddr, myaddr, len);
@@
-1085,7
+1055,7
@@
array_insert_breakpoint (CORE_ADDR addr, char *shadow)
}
}
}
}
- fprintf
(
stderr, "Too many breakpoints (> 16) for monitor\n");
+ fprintf
_unfiltered (gdb_
stderr, "Too many breakpoints (> 16) for monitor\n");
return 1;
}
return 1;
}
@@
-1110,8
+1080,9
@@
array_remove_breakpoint (CORE_ADDR addr, char *shadow)
return 0;
}
}
return 0;
}
}
- fprintf (stderr, "Can't find breakpoint associated with 0x%s\n",
- paddr_nz (addr));
+ fprintf_unfiltered (gdb_stderr,
+ "Can't find breakpoint associated with 0x%s\n",
+ paddr_nz (addr));
return 1;
}
return 1;
}
This page took
0.029271 seconds
and
4
git commands to generate.