Make ``target d10v'' and ``target remote'' equivalent.
authorAndrew Cagney <cagney@redhat.com>
Mon, 16 Feb 1998 09:17:07 +0000 (09:17 +0000)
committerAndrew Cagney <cagney@redhat.com>
Mon, 16 Feb 1998 09:17:07 +0000 (09:17 +0000)
Hack remote.c so that xfer_memory calls a memory translate function.

gdb/ChangeLog
gdb/config/d10v/tm-d10v.h
gdb/remote-d10v.c

index 5cdb1e91a905fa1cade5e4f15ec116b0d6f7671c..c59ba9d3dee4fc7088c72840ea35a4e1d14cb7f3 100644 (file)
@@ -1,3 +1,26 @@
+Mon Feb 16 14:05:54 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-d10v.c (remote_d10v_open): Call push_remote_target
+       instead of open_remote_target.
+
+       * remote.c (remote_xfer_memory): Use REMOTE_TRANSLATE_XFER_ADDRESS
+       to translate addr/size when defined.
+       (open_remote_target): Delete.
+       
+       * target.h (open_remote_target): Delete.
+       
+       * config/d10v/tm-d10v.h (REMOTE_TRANSLATE_XFER_ADDRESS): Define.
+       
+Mon Feb 16 14:05:54 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * config/d10v/tm-d10v.h (USE_STRUCT_CONVENTION): Define. True when
+       sizeof type > 1.
+
+Mon Feb 16 14:05:54 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * config/d10v/tm-d10v.h (USE_STRUCT_CONVENTION): Define. True when
+       sizeof type > 1.
+
 Sun Feb 15 16:10:50 1998  Ron Unrau   <runrau@cygnus.com>
 
        * parse.c (write_dollar_variable): call new function 
index 67136c942cb02f7b07dd9568675bd399537ca4b1..93c634c1621bbda9984019dbd9c4992b6c072d85 100644 (file)
@@ -178,6 +178,17 @@ extern CORE_ADDR d10v_skip_prologue ();
 
 #define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
      (extract_address ((REGBUF) + REGISTER_BYTE (ARG1_REGNUM), REGISTER_RAW_SIZE (ARG1_REGNUM)) | DMEM_START)
+
+/* Should we use EXTRACT_STRUCT_VALUE_ADDRESS instead of
+   EXTRACT_RETURN_VALUE?  GCC_P is true if compiled with gcc
+   and TYPE is the type (which is known to be struct, union or array).
+
+   The d10v returns anything less than 8 bytes in size in
+   registers. */
+
+#define USE_STRUCT_CONVENTION(gcc_p, type) \
+   (TYPE_LENGTH (type) > 1)
+
 \f
 
 /* Define other aspects of the stack frame. 
@@ -314,3 +325,13 @@ CORE_ADDR d10v_read_fp PARAMS ((void));
 #define TARGET_PTR_BIT (4 * TARGET_CHAR_BIT)
 #define TARGET_DOUBLE_BIT (4 * TARGET_CHAR_BIT)
 #define TARGET_LONG_DOUBLE_BIT (8 * TARGET_CHAR_BIT)
+
+\f
+/* For the d10v when talking to the remote d10v board, GDB addresses
+   need to be translated into a format that the d10v rom monitor
+   understands. */
+
+int remote_d10v_translate_xfer_address PARAMS ((CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr));
+#define REMOTE_TRANSLATE_XFER_ADDRESS(GDB_ADDR, GDB_LEN, REM_ADDR, REM_LEN) \
+(REM_LEN) = remote_d10v_translate_xfer_address ((GDB_ADDR), (GDB_LEN), &(REM_ADDR))
+
index abdacd4efcc66a55e99e5f00a646db8ce3a249d7..d529b2180f6a59d9d980ac8197f569e715741203 100644 (file)
@@ -44,40 +44,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Prototypes for local functions */
 
-static int remote_d10v_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr,
-                                           int len, int should_write,
-                                           struct target_ops *target));
-
 static void remote_d10v_open PARAMS ((char *name, int from_tty));
 
-static void remote_d10v_mourn PARAMS ((void));
-
-static void initialize_remote_d10v_ops PARAMS ((int copy_remote));
-
 /* Define the target subroutine names */
-
-struct target_ops remote_d10v_ops;
-extern struct target_ops remote_ops;
-extern struct target_ops extended_remote_ops;
-struct target_ops *inherited_ops = &extended_remote_ops;
-
-void
-init_remote_d10v_ops (copy_remote)
-     int copy_remote;
-{
-  printf_filtered ("Opening d10v ...\n");
-  if (copy_remote)
-    memcpy (&remote_d10v_ops, inherited_ops, sizeof remote_d10v_ops);
-  remote_d10v_ops.to_shortname = "d10v";
-  remote_d10v_ops.to_longname = "Remote d10v serial target in gdb-specific protocol";
-  remote_d10v_ops.to_doc = "Use a remote d10v via a serial line, using a gdb-specific protocol.\n\
-Specify the serial device it is connected to (e.g. /dev/ttya).";
-  remote_d10v_ops.to_open = remote_d10v_open;
-  remote_d10v_ops.to_xfer_memory = remote_d10v_xfer_memory;
-  remote_d10v_ops.to_mourn_inferior = remote_d10v_mourn;
-  remote_d10v_ops.to_magic = OPS_MAGIC;
-}
-
+static struct target_ops remote_d10v_ops;
 
 /* Open a connection to a remote debugger.
    NAME is the filename used for communication.  */
@@ -87,38 +57,19 @@ remote_d10v_open (name, from_tty)
      char *name;
      int from_tty;
 {
-  init_remote_d10v_ops (1);
-  open_remote_target (name, from_tty, &remote_d10v_ops,
-                     inherited_ops == &extended_remote_ops);
+  pop_target ();
+  push_remote_target (name, from_tty);
 }
 
 
-/* Worker function for remote_mourn.  */
-static void
-remote_d10v_mourn ()
-{
-  if (inherited_ops == &remote_ops)
-    {
-      unpush_target (&remote_d10v_ops);
-      generic_mourn_inferior ();
-    }
-  /* see remote.c:extended_remote_mourn() for why an extended remote
-     target doesn't mourn */
-}
-
-
-/* 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.  */
-
-/* ARGSUSED */
-static int
-remote_d10v_xfer_memory(memaddr, myaddr, nr_bytes, write_p, target)
+/* Translate a GDB virtual ADDR/LEN into a format the remote target
+   understands.  Returns number of bytes that can be transfered
+   starting at taddr, ZERO if no bytes can be transfered. */
+int
+remote_d10v_translate_xfer_address (memaddr, nr_bytes, taddr)
      CORE_ADDR memaddr;
-     char *myaddr;
      int nr_bytes;
-     int write_p;
-     struct target_ops *target;                        /* ignored */
+     CORE_ADDR *taddr;
 {
   CORE_ADDR phys;
   CORE_ADDR seg;
@@ -259,21 +210,19 @@ remote_d10v_xfer_memory(memaddr, myaddr, nr_bytes, write_p, target)
       }
 
 
-  printf_unfiltered ("%s-xfer: 0x%08lx -> 0x%08lx imap0=%04x imap1=%04x, dmap=%04x, %s->%s, %d bytes\n",
-                    (write_p ? "wr" : "rd"),
-                    (long) memaddr,
-                    (long) phys,
-                    (int) imap0, (int) imap1, (int) dmap,
-                    from, to,
-                    (int) nr_bytes);
-
-  return inherited_ops->to_xfer_memory (phys, myaddr, nr_bytes, write_p, target);
+  *taddr = phys;
+  return nr_bytes;
 }
 
 
 void
 _initialize_remote_d10v ()
 {
-  init_remote_d10v_ops (0);
+  remote_d10v_ops.to_shortname = "d10v";
+  remote_d10v_ops.to_longname = "Remote d10v serial target in gdb-specific protocol";
+  remote_d10v_ops.to_doc = "Use a remote d10v via a serial line, using a gdb-specific protocol.\n\
+Specify the serial device it is connected to (e.g. /dev/ttya).";
+  remote_d10v_ops.to_open = remote_d10v_open;
+
   add_target (&remote_d10v_ops);
 }