gdb/
[deliverable/binutils-gdb.git] / gdb / remote-e7000.c
index 46fb54b1e8a54476d295b5078b18214a26de4ed4..c1575ca08aae2f8e736ad81b794c14dda51ed356 100644 (file)
@@ -1,6 +1,8 @@
-/* Remote debugging interface for Hitachi E7000 ICE, for GDB
-   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-   Free Software Foundation, Inc.
+/* Remote debugging interface for Renesas E7000 ICE, for GDB
+
+   Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+   2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+
    Contributed by Cygnus Support. 
 
    Written by Steve Chamberlain for Cygnus Support.
 
    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.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
-/* The E7000 is an in-circuit emulator for the Hitachi H8/300-H and
-   Hitachi-SH processor.  It has serial port and a lan port.  
+/* The E7000 is an in-circuit emulator for the Renesas H8/300-H and
+   Renesas-SH processor.  It has serial port and a lan port.  
 
    The monitor command set makes it difficult to load large ammounts of
    data over the lan without using ftp - so try not to issue load
@@ -41,6 +43,7 @@
 #include "value.h"
 #include "command.h"
 #include "gdb_string.h"
+#include "exceptions.h"
 #include "gdbcmd.h"
 #include <sys/types.h>
 #include "serial.h"
@@ -86,8 +89,6 @@
 #define SR_REGNUM      -1
 #endif
 
-extern void notice_quit (void);
-
 extern void report_transfer_performance (unsigned long, time_t, time_t);
 
 extern char *sh_processor_type;
@@ -117,7 +118,7 @@ static void expect_prompt (void);
 static int e7000_parse_device (char *args, char *dev_name, int baudrate);
 /* Variables. */
 
-static serial_t e7000_desc;
+static struct serial *e7000_desc;
 
 /* Allow user to chose between using hardware breakpoints or memory. */
 static int use_hard_breakpoints = 0;   /* use sw breakpoints by default */
@@ -151,13 +152,13 @@ static void
 puts_e7000debug (char *buf)
 {
   if (!e7000_desc)
-    error ("Use \"target e7000 ...\" first.");
+    error (_("Use \"target e7000 ...\" first."));
 
   if (remote_debug)
     printf_unfiltered ("Sending %s\n", buf);
 
-  if (SERIAL_WRITE (e7000_desc, buf, strlen (buf)))
-    fprintf_unfiltered (gdb_stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
+  if (serial_write (e7000_desc, buf, strlen (buf)))
+    fprintf_unfiltered (gdb_stderr, "serial_write failed: %s\n", safe_strerror (errno));
 
   /* And expect to see it echoed, unless using the pc interface */
 #if 0
@@ -172,13 +173,13 @@ putchar_e7000 (int x)
   char b[1];
 
   b[0] = x;
-  SERIAL_WRITE (e7000_desc, b, 1);
+  serial_write (e7000_desc, b, 1);
 }
 
 static void
 write_e7000 (char *s)
 {
-  SERIAL_WRITE (e7000_desc, s, strlen (s));
+  serial_write (e7000_desc, s, strlen (s));
 }
 
 static int
@@ -200,7 +201,7 @@ readchar (int timeout)
 
   do
     {
-      c = SERIAL_READCHAR (e7000_desc, timeout);
+      c = serial_readchar (e7000_desc, timeout);
     }
   while (c > 127);
 
@@ -209,10 +210,10 @@ readchar (int timeout)
       if (timeout == 0)
        return -1;
       echo = 0;
-      error ("Timeout reading from remote system.");
+      error (_("Timeout reading from remote system."));
     }
   else if (c < 0)
-    error ("Serial communication error");
+    error (_("Serial communication error"));
 
   if (remote_debug)
     {
@@ -260,21 +261,6 @@ expect (char *string)
   while (1)
     {
       c = readchar (timeout);
-#if 0
-      notice_quit ();
-      if (quit_flag == 1)
-       {
-         if (ctrl_c)
-           {
-             putchar_e7000 (CTRLC);
-             --ctrl_c;
-           }
-         else
-           {
-             quit ();
-           }
-       }
-#endif
 
       if (echo)
        {
@@ -377,7 +363,7 @@ get_hex_regs (int n, int regno)
       val = 0;
       for (j = 0; j < 8; j++)
        val = (val << 4) + get_hex_digit (j == 0);
-      supply_register (regno++, (char *) &val);
+      regcache_raw_supply (current_regcache, regno++, (char *) &val);
     }
 }
 #endif
@@ -386,15 +372,16 @@ get_hex_regs (int n, int regno)
    user types "run" after having attached.  */
 
 static void
-e7000_create_inferior (char *execfile, char *args, char **env)
+e7000_create_inferior (char *execfile, char *args, char **env,
+                      int from_tty)
 {
   int entry_pt;
 
   if (args && *args)
-    error ("Can't pass arguments to remote E7000DEBUG process");
+    error (_("Can't pass arguments to remote E7000DEBUG process"));
 
   if (execfile == 0 || exec_bfd == 0)
-    error ("No executable file specified");
+    error (_("No executable file specified"));
 
   entry_pt = (int) bfd_get_start_address (exec_bfd);
 
@@ -418,7 +405,7 @@ e7000_create_inferior (char *execfile, char *args, char **env)
   target_terminal_inferior ();
 
   /* insert_step_breakpoint ();  FIXME, do we need this?  */
-  proceed ((CORE_ADDR) entry_pt, -1, 0);       /* Let 'er rip... */
+  write_pc ((CORE_ADDR) entry_pt);
 }
 
 /* Open a connection to a remote debugger.  NAME is the filename used
@@ -473,7 +460,7 @@ e7000_login_command (char *args, int from_tty)
     }
   else
     {
-      error ("Syntax is ftplogin <machine> <user> <passwd> <directory>");
+      error (_("Syntax is ftplogin <machine> <user> <passwd> <directory>"));
     }
 }
 
@@ -537,13 +524,13 @@ e7000_parse_device (char *args, char *dev_name, int baudrate)
 
       if (n != 1 && n != 2)
        {
-         error ("Bad arguments.  Usage:\ttarget e7000 <device> <speed>\n\
+         error (_("Bad arguments.  Usage:\ttarget e7000 <device> <speed>\n\
 or \t\ttarget e7000 <host>[:<port>]\n\
 or \t\ttarget e7000 tcp_remote <host>[:<port>]\n\
-or \t\ttarget e7000 pc\n");
+or \t\ttarget e7000 pc\n"));
        }
 
-#if !defined(__GO32__) && !defined(_WIN32)
+#if !defined(__GO32__) && !defined(_WIN32) && !defined(__CYGWIN__)
       /* FIXME!  test for ':' is ambiguous */
       if (n == 1 && strchr (dev_name, ':') == 0)
        {
@@ -627,7 +614,7 @@ e7000_start_remote (void *dummy)
   if (!sync)
     {
       fprintf_unfiltered (gdb_stderr, "Giving up after %d tries...\n", try);
-      error ("Unable to synchronize with target.\n");
+      error (_("Unable to synchronize with target."));
     }
 
   puts_e7000debug ("\r");
@@ -644,9 +631,7 @@ e7000_start_remote (void *dummy)
   flush_cached_frames ();
   registers_changed ();
   stop_pc = read_pc ();
-  set_current_frame (create_new_frame (read_fp (), stop_pc));
-  select_frame (get_current_frame (), 0);
-  print_stack_frame (selected_frame, -1, 1);
+  print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
 
   return 1;
 }
@@ -662,17 +647,17 @@ e7000_open (char *args, int from_tty)
 
   push_target (&e7000_ops);
 
-  e7000_desc = SERIAL_OPEN (dev_name);
+  e7000_desc = serial_open (dev_name);
 
   if (!e7000_desc)
     perror_with_name (dev_name);
 
-  SERIAL_SETBAUDRATE (e7000_desc, baudrate);
-  SERIAL_RAW (e7000_desc);
-
-#ifdef GDB_TARGET_IS_H8300
-  h8300hmode = 1;
-#endif
+  if (serial_setbaudrate (e7000_desc, baudrate))
+    {
+      serial_close (e7000_desc);
+      perror_with_name (dev_name);
+    }
+  serial_raw (e7000_desc);
 
   /* Start the remote connection; if error (0), discard this target.
      In particular, if the user quits, be sure to discard it
@@ -691,7 +676,7 @@ e7000_close (int quitting)
 {
   if (e7000_desc)
     {
-      SERIAL_CLOSE (e7000_desc);
+      serial_close (e7000_desc);
       e7000_desc = 0;
     }
 }
@@ -710,7 +695,7 @@ e7000_detach (char *arg, int from_tty)
 /* Tell the remote machine to resume.  */
 
 static void
-e7000_resume (int pid, int step, enum target_signal sigal)
+e7000_resume (ptid_t ptid, int step, enum target_signal sigal)
 {
   if (step)
     puts_e7000debug ("S\r");
@@ -794,14 +779,17 @@ gbyte (void)
   return (high << 4) + low;
 }
 
-void
+static void
 fetch_regs_from_dump (int (*nextchar) (), char *want)
 {
   int regno;
-  char buf[MAX_REGISTER_RAW_SIZE];
+  char buf[MAX_REGISTER_SIZE];
 
   int thischar = nextchar ();
 
+  if (want == NULL)
+    internal_error (__FILE__, __LINE__, _("Register set not selected."));
+
   while (*want)
     {
       switch (*want)
@@ -838,7 +826,7 @@ fetch_regs_from_dump (int (*nextchar) (), char *want)
            }
          else
            {
-             error ("out of sync in fetch registers wanted <%s>, got <%c 0x%x>",
+             error (_("out of sync in fetch registers wanted <%s>, got <%c 0x%x>"),
                     want, thischar, thischar);
            }
 
@@ -866,9 +854,9 @@ fetch_regs_from_dump (int (*nextchar) (), char *want)
              want++;
              break;
 #endif
-#ifdef FP_REGNUM
+#ifdef DEPRECATED_FP_REGNUM
            case 'f':
-             regno = FP_REGNUM;
+             regno = DEPRECATED_FP_REGNUM;
              want++;
              break;
 #endif
@@ -889,12 +877,12 @@ fetch_regs_from_dump (int (*nextchar) (), char *want)
                }
 
              else
-               internal_error (__FILE__, __LINE__, "failed internal consistency check");
+               internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
            }
          store_signed_integer (buf,
-                               REGISTER_RAW_SIZE (regno),
+                               register_size (current_gdbarch, regno),
                                (LONGEST) get_hex (&thischar));
-         supply_register (regno, buf);
+         regcache_raw_supply (current_regcache, regno, buf);
          break;
        }
     }
@@ -904,13 +892,15 @@ static void
 e7000_fetch_registers (void)
 {
   int regno;
-  char *wanted;
+  char *wanted = NULL;
+  int realregs = 0;
 
   puts_e7000debug ("R\r");
 
   if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
     {
       wanted = want_sh;
+      realregs = 59;
       switch (TARGET_ARCHITECTURE->mach)
        {
        case bfd_mach_sh3:
@@ -919,24 +909,29 @@ e7000_fetch_registers (void)
          wanted = want_sh3;
        }
     }
-#ifdef GDB_TARGET_IS_H8300
   if (TARGET_ARCHITECTURE->arch == bfd_arch_h8300)
     {
-      if (h8300smode)
-       wanted = want_h8300s;
-      else
-       wanted = want_h8300h;
+      wanted = want_h8300h;
+      realregs = 10;
+      switch (TARGET_ARCHITECTURE->mach)
+       {
+       case bfd_mach_h8300s:
+       case bfd_mach_h8300sn:
+       case bfd_mach_h8300sx:
+       case bfd_mach_h8300sxn:
+         wanted = want_h8300s;
+         realregs = 11;
+       }
     }
-#endif
 
   fetch_regs_from_dump (gch, wanted);
 
   /* And supply the extra ones the simulator uses */
-  for (regno = NUM_REALREGS; regno < NUM_REGS; regno++)
+  for (regno = realregs; regno < NUM_REGS; regno++)
     {
       int buf = 0;
 
-      supply_register (regno, (char *) (&buf));
+      regcache_raw_supply (current_regcache, regno, (char *) (&buf));
     }
 }
 
@@ -955,8 +950,18 @@ static void
 e7000_store_registers (void)
 {
   int regno;
+  int realregs = 0;
 
-  for (regno = 0; regno < NUM_REALREGS; regno++)
+  if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
+    realregs = 59;
+  if (TARGET_ARCHITECTURE->arch == bfd_arch_h8300) {
+    realregs = ((TARGET_ARCHITECTURE->mach == bfd_mach_h8300s ||
+                TARGET_ARCHITECTURE->mach == bfd_mach_h8300sn ||
+                TARGET_ARCHITECTURE->mach == bfd_mach_h8300sx ||
+                TARGET_ARCHITECTURE->mach == bfd_mach_h8300sxn) ? 11 : 10);
+  }
+
+  for (regno = 0; regno < realregs; regno++)
     e7000_store_register (regno);
 
   registers_changed ();
@@ -979,18 +984,18 @@ e7000_store_register (int regno)
     {
       if (regno <= 7)
        {
-         sprintf (buf, ".ER%d %lx\r", regno, read_register (regno));
+         sprintf (buf, ".ER%d %s\r", regno, phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
       else if (regno == PC_REGNUM)
        {
-         sprintf (buf, ".PC %lx\r", read_register (regno));
+         sprintf (buf, ".PC %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
 #ifdef CCR_REGNUM
       else if (regno == CCR_REGNUM)
        {
-         sprintf (buf, ".CCR %lx\r", read_register (regno));
+         sprintf (buf, ".CCR %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
 #endif
@@ -1000,48 +1005,48 @@ e7000_store_register (int regno)
     {
       if (regno == PC_REGNUM)
        {
-         sprintf (buf, ".PC %lx\r", read_register (regno));
+         sprintf (buf, ".PC %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
 
       else if (regno == SR_REGNUM)
        {
-         sprintf (buf, ".SR %lx\r", read_register (regno));
+         sprintf (buf, ".SR %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
 
       else if (regno ==  PR_REGNUM)
        {
-         sprintf (buf, ".PR %lx\r", read_register (regno));
+         sprintf (buf, ".PR %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
 
       else if (regno == GBR_REGNUM)
        {
-         sprintf (buf, ".GBR %lx\r", read_register (regno));
+         sprintf (buf, ".GBR %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
 
       else if (regno == VBR_REGNUM)
        {
-         sprintf (buf, ".VBR %lx\r", read_register (regno));
+         sprintf (buf, ".VBR %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
 
       else if (regno == MACH_REGNUM)
        {
-         sprintf (buf, ".MACH %lx\r", read_register (regno));
+         sprintf (buf, ".MACH %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
 
       else if (regno == MACL_REGNUM)
        {
-         sprintf (buf, ".MACL %lx\r", read_register (regno));
+         sprintf (buf, ".MACL %s\r", phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
       else
        {
-         sprintf (buf, ".R%d %lx\r", regno, read_register (regno));
+         sprintf (buf, ".R%d %s\r", regno, phex_nz (read_register (regno), 0));
          puts_e7000debug (buf);
        }
     }
@@ -1091,15 +1096,15 @@ write_small (CORE_ADDR memaddr, unsigned char *myaddr, int len)
       if (((memaddr + i) & 3) == 0 && (i + 3 < len))
        {
          /* Can be done with a long word */
-         sprintf (buf, "m %lx %x%02x%02x%02x;l\r",
-                  memaddr + i,
+         sprintf (buf, "m %s %x%02x%02x%02x;l\r",
+                  paddr_nz (memaddr + i),
                   myaddr[i], myaddr[i + 1], myaddr[i + 2], myaddr[i + 3]);
          puts_e7000debug (buf);
          i += 3;
        }
       else
        {
-         sprintf (buf, "m %lx %x\r", memaddr + i, myaddr[i]);
+         sprintf (buf, "m %s %x\r", paddr_nz (memaddr + i), myaddr[i]);
          puts_e7000debug (buf);
        }
     }
@@ -1180,7 +1185,7 @@ write_large (CORE_ADDR memaddr, unsigned char *myaddr, int len)
       compose[where++] = '\n';
       compose[where++] = 0;
 
-      SERIAL_WRITE (e7000_desc, compose, where);
+      serial_write (e7000_desc, compose, where);
       j = readchar (0);
       if (j == -1)
        {
@@ -1190,7 +1195,7 @@ write_large (CORE_ADDR memaddr, unsigned char *myaddr, int len)
        {
          /* Hmm, it's trying to tell us something */
          expect (":");
-         error ("Error writing memory");
+         error (_("Error writing memory"));
        }
       else
        {
@@ -1252,7 +1257,7 @@ e7000_read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
       return 0;
     }
 
-  sprintf (buf, "m %lx;l\r", memaddr);
+  sprintf (buf, "m %s;l\r", paddr_nz (memaddr));
   puts_e7000debug (buf);
 
   for (count = 0; count < len; count += 4)
@@ -1331,7 +1336,7 @@ e7000_read_inferior_memory_large (CORE_ADDR memaddr, unsigned char *myaddr,
       return 0;
     }
 
-  sprintf (buf, "d %lx %lx\r", memaddr, memaddr + len - 1);
+  sprintf (buf, "d %s %s\r", paddr_nz (memaddr), paddr_nz (memaddr + len - 1));
   puts_e7000debug (buf);
 
   count = 0;
@@ -1399,7 +1404,7 @@ fast_but_for_the_pause_e7000_read_inferior_memory (CORE_ADDR memaddr,
   if (c != ENQ)
     {
       /* Got an error */
-      error ("Memory read error");
+      error (_("Memory read error"));
     }
   putchar_e7000 (ACK);
   expect ("SV s");
@@ -1473,10 +1478,9 @@ fast_but_for_the_pause_e7000_read_inferior_memory (CORE_ADDR memaddr,
    Returns the number of bytes transferred. */
 
 static int
-e7000_xfer_inferior_memory (CORE_ADDR memaddr, char *myaddr,
-                           int len, int write, 
-                           struct mem_attrib *attrib ATTRIBUTE_UNUSED,
-                           struct target_ops *target ATTRIBUTE_UNUSED)
+e7000_xfer_inferior_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
+                           int write, struct mem_attrib *attrib,
+                           struct target_ops *target)
 {
   if (write)
     return e7000_write_inferior_memory (memaddr, myaddr, len);
@@ -1546,7 +1550,7 @@ e7000_load (char *args, int from_tty)
       else if (strncmp (arg, "-nostart", strlen (arg)) == 0)
        nostart = 1;
       else
-       error ("unknown option `%s'", arg);
+       error (_("unknown option `%s'"), arg);
     }
 
   if (!filename)
@@ -1561,7 +1565,7 @@ e7000_load (char *args, int from_tty)
   old_chain = make_cleanup_bfd_close (pbfd);
 
   if (!bfd_check_format (pbfd, bfd_object))
-    error ("\"%s\" is not an object file: %s", filename,
+    error (_("\"%s\" is not an object file: %s"), filename,
           bfd_errmsg (bfd_get_error ()));
 
   start_time = time (NULL);
@@ -1580,13 +1584,13 @@ e7000_load (char *args, int from_tty)
          file_ptr fptr;
 
          section_address = bfd_get_section_vma (pbfd, section);
-         section_size = bfd_get_section_size_before_reloc (section);
+         section_size = bfd_get_section_size (section);
 
          if (!quiet)
-           printf_filtered ("[Loading section %s at 0x%x (%ud bytes)]\n",
+           printf_filtered ("[Loading section %s at 0x%s (%s bytes)]\n",
                             bfd_get_section_name (pbfd, section),
-                            section_address,
-                            section_size);
+                            paddr_nz (section_address),
+                            paddr_u (section_size));
 
          fptr = 0;
 
@@ -1614,9 +1618,9 @@ e7000_load (char *args, int from_tty)
 
              bfd_get_section_contents (pbfd, section, buf + 10, fptr, count);
 
-             if (SERIAL_WRITE (e7000_desc, buf, count + 10))
+             if (serial_write (e7000_desc, buf, count + 10))
                fprintf_unfiltered (gdb_stderr,
-                                   "e7000_load: SERIAL_WRITE failed: %s\n",
+                                   "e7000_load: serial_write failed: %s\n",
                                    safe_strerror (errno));
 
              expect ("OK");
@@ -1645,7 +1649,7 @@ e7000_load (char *args, int from_tty)
   if (exec_bfd)
     write_pc (bfd_get_start_address (exec_bfd));
 
-  inferior_pid = 0;            /* No process now */
+  inferior_ptid = null_ptid;   /* No process now */
 
 /* This is necessary because many things were based on the PC at the time that
    we attached to the monitor, which is no longer valid now that we have loaded
@@ -1660,7 +1664,7 @@ e7000_load (char *args, int from_tty)
       entry = bfd_get_start_address (pbfd);
 
       if (!quiet)
-       printf_unfiltered ("[Starting %s at 0x%x]\n", filename, entry);
+       printf_unfiltered ("[Starting %s at 0x%s]\n", filename, paddr_nz (entry));
 
 /*      start_routine (entry); */
     }
@@ -1698,8 +1702,9 @@ static CORE_ADDR breakaddr[MAX_BREAKPOINTS] =
 {0};
 
 static int
-e7000_insert_breakpoint (CORE_ADDR addr, char *shadow)
+e7000_insert_breakpoint (struct bp_target_info *bp_tgt)
 {
+  CORE_ADDR addr = bp_tgt->placed_address;
   int i;
   char buf[200];
 #if 0
@@ -1714,17 +1719,18 @@ e7000_insert_breakpoint (CORE_ADDR addr, char *shadow)
 #ifdef HARD_BREAKPOINTS
        if (BC_BREAKPOINTS)
          {
-           sprintf (buf, "BC%d A=%lx\r", i + 1, addr);
+           sprintf (buf, "BC%d A=%s\r", i + 1, paddr_nz (addr));
            puts_e7000debug (buf);
          }
        else
          {
-           sprintf (buf, "B %lx\r", addr);
+           sprintf (buf, "B %s\r", paddr_nz (addr));
            puts_e7000debug (buf);
          }
 #else
 #if 0
-       e7000_read_inferior_memory (addr, shadow, 2);
+       bp_tgt->shadow_len = 2;
+       e7000_read_inferior_memory (addr, bp_tgt->shadow_contents, 2);
        e7000_write_inferior_memory (addr, nop, 2);
 #endif
 
@@ -1735,14 +1741,15 @@ e7000_insert_breakpoint (CORE_ADDR addr, char *shadow)
        return 0;
       }
 
-  error ("Too many breakpoints ( > %d) for the E7000\n",
+  error (_("Too many breakpoints ( > %d) for the E7000."),
         MAX_E7000DEBUG_BREAKPOINTS);
   return 1;
 }
 
 static int
-e7000_remove_breakpoint (CORE_ADDR addr, char *shadow)
+e7000_remove_breakpoint (struct bp_target_info *bp_tgt)
 {
+  CORE_ADDR addr = bp_tgt->placed_address;
   int i;
   char buf[200];
 
@@ -1758,25 +1765,26 @@ e7000_remove_breakpoint (CORE_ADDR addr, char *shadow)
          }
        else
          {
-           sprintf (buf, "B - %lx\r", addr);
+           sprintf (buf, "B - %s\r", paddr_nz (addr));
            puts_e7000debug (buf);
          }
        expect_prompt ();
 #else
-       sprintf (buf, "B - %lx\r", addr);
+       sprintf (buf, "B - %s\r", paddr_nz (addr));
        puts_e7000debug (buf);
        expect_prompt ();
 
 #if 0
        /* Replace the insn under the break */
-       e7000_write_inferior_memory (addr, shadow, 2);
+       e7000_write_inferior_memory (addr, bp_tgt->shadow_contents,
+                                    bp_tgt->shadow_len);
 #endif
 #endif
 
        return 0;
       }
-
-  warning ("Can't find breakpoint associated with 0x%lx\n", addr);
+  warning (_("Can't find breakpoint associated with 0x%s."), paddr_nz (addr));
   return 1;
 }
 
@@ -1792,7 +1800,7 @@ e7000_command (char *args, int fromtty)
   echo = 0;
 
   if (!e7000_desc)
-    error ("e7000 target not open.");
+    error (_("e7000 target not open."));
   if (!args)
     {
       puts_e7000debug ("\r");
@@ -1823,7 +1831,7 @@ e7000_drain_command (char *args, int fromtty)
   puts_e7000debug ("end\r");
   putchar_e7000 (CTRLC);
 
-  while ((c = readchar (1) != -1))
+  while ((c = readchar (1)) != -1)
     {
       if (quit_flag)
        {
@@ -1884,7 +1892,7 @@ why_stop (void)
 /* Suck characters, if a string match, then return the strings index
    otherwise echo them.  */
 
-int
+static int
 expect_n (char **strings)
 {
   char *(ptr[10]);
@@ -1975,10 +1983,10 @@ sub2_from_pc (void)
   char buf2[200];
 
   store_signed_integer (buf,
-                       REGISTER_RAW_SIZE (PC_REGNUM),
+                       register_size (current_gdbarch, PC_REGNUM),
                        read_register (PC_REGNUM) - 2);
-  supply_register (PC_REGNUM, buf);
-  sprintf (buf2, ".PC %lx\r", read_register (PC_REGNUM));
+  regcache_raw_supply (current_regcache, PC_REGNUM, buf);
+  sprintf (buf2, ".PC %s\r", phex_nz (read_register (PC_REGNUM), 0));
   puts_e7000debug (buf2);
 }
 
@@ -1999,15 +2007,16 @@ static char *estrings[] =
 /* Wait until the remote machine stops, then return, storing status in
    STATUS just as `wait' would.  */
 
-static int
-e7000_wait (int pid, struct target_waitstatus *status)
+static ptid_t
+e7000_wait (ptid_t ptid, struct target_waitstatus *status)
 {
   int stop_reason;
   int regno;
   int running_count = 0;
   int had_sleep = 0;
   int loop = 1;
-  char *wanted_nopc;
+  char *wanted_nopc = NULL;
+  int realregs = 0;
 
   /* Then echo chars until PC= string seen */
   gch ();                      /* Drop cr */
@@ -2049,6 +2058,7 @@ e7000_wait (int pid, struct target_waitstatus *status)
   if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
     {
       wanted_nopc = want_nopc_sh;
+      realregs = 59;
       switch (TARGET_ARCHITECTURE->mach)
        {
        case bfd_mach_sh3:
@@ -2057,22 +2067,27 @@ e7000_wait (int pid, struct target_waitstatus *status)
          wanted_nopc = want_nopc_sh3;
        }
     }
-#ifdef GDB_TARGET_IS_H8300
   if (TARGET_ARCHITECTURE->arch == bfd_arch_h8300)
     {
-      if (h8300smode)
-       wanted_nopc = want_nopc_h8300s;
-      else
-       wanted_nopc = want_nopc_h8300h;
+      wanted_nopc = want_nopc_h8300h;
+      realregs = 10;
+      switch (TARGET_ARCHITECTURE->mach)
+       {
+       case bfd_mach_h8300s:
+       case bfd_mach_h8300sn:
+       case bfd_mach_h8300sx:
+       case bfd_mach_h8300sxn:
+         wanted_nopc = want_nopc_h8300s;
+         realregs = 11;
+       }
     }
-#endif
   fetch_regs_from_dump (gch, wanted_nopc);
 
   /* And supply the extra ones the simulator uses */
-  for (regno = NUM_REALREGS; regno < NUM_REGS; regno++)
+  for (regno = realregs; regno < NUM_REGS; regno++)
     {
       int buf = 0;
-      supply_register (regno, (char *) &buf);
+      regcache_raw_supply (current_regcache, regno, (char *) &buf);
     }
 
   stop_reason = why_stop ();
@@ -2119,10 +2134,10 @@ e7000_wait (int pid, struct target_waitstatus *status)
       break;
     default:
       /* Get the user's attention - this should never happen. */
-      internal_error (__FILE__, __LINE__, "failed internal consistency check");
+      internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
     }
 
-  return 0;
+  return inferior_ptid;
 }
 
 /* Stop the running program.  */
@@ -2142,8 +2157,8 @@ static void
 init_e7000_ops (void)
 {
   e7000_ops.to_shortname = "e7000";
-  e7000_ops.to_longname = "Remote Hitachi e7000 target";
-  e7000_ops.to_doc = "Use a remote Hitachi e7000 ICE connected by a serial line;\n\
+  e7000_ops.to_longname = "Remote Renesas e7000 target";
+  e7000_ops.to_doc = "Use a remote Renesas e7000 ICE connected by a serial line;\n\
 or a network connection.\n\
 Arguments are the name of the device for the serial line,\n\
 the speed to connect at in bits per second.\n\
@@ -2152,66 +2167,32 @@ target e7000 /dev/ttya 9600\n\
 target e7000 foobar";
   e7000_ops.to_open = e7000_open;
   e7000_ops.to_close = e7000_close;
-  e7000_ops.to_attach = 0;
-  e7000_ops.to_post_attach = NULL;
-  e7000_ops.to_require_attach = NULL;
   e7000_ops.to_detach = e7000_detach;
-  e7000_ops.to_require_detach = NULL;
   e7000_ops.to_resume = e7000_resume;
   e7000_ops.to_wait = e7000_wait;
-  e7000_ops.to_post_wait = NULL;
   e7000_ops.to_fetch_registers = e7000_fetch_register;
   e7000_ops.to_store_registers = e7000_store_register;
   e7000_ops.to_prepare_to_store = e7000_prepare_to_store;
-  e7000_ops.to_xfer_memory = e7000_xfer_inferior_memory;
+  e7000_ops.deprecated_xfer_memory = e7000_xfer_inferior_memory;
   e7000_ops.to_files_info = e7000_files_info;
   e7000_ops.to_insert_breakpoint = e7000_insert_breakpoint;
   e7000_ops.to_remove_breakpoint = e7000_remove_breakpoint;
-  e7000_ops.to_terminal_init = 0;
-  e7000_ops.to_terminal_inferior = 0;
-  e7000_ops.to_terminal_ours_for_output = 0;
-  e7000_ops.to_terminal_ours = 0;
-  e7000_ops.to_terminal_info = 0;
   e7000_ops.to_kill = e7000_kill;
   e7000_ops.to_load = e7000_load;
-  e7000_ops.to_lookup_symbol = 0;
   e7000_ops.to_create_inferior = e7000_create_inferior;
-  e7000_ops.to_post_startup_inferior = NULL;
-  e7000_ops.to_acknowledge_created_inferior = NULL;
-  e7000_ops.to_clone_and_follow_inferior = NULL;
-  e7000_ops.to_post_follow_inferior_by_clone = NULL;
-  e7000_ops.to_insert_fork_catchpoint = NULL;
-  e7000_ops.to_remove_fork_catchpoint = NULL;
-  e7000_ops.to_insert_vfork_catchpoint = NULL;
-  e7000_ops.to_remove_vfork_catchpoint = NULL;
-  e7000_ops.to_has_forked = NULL;
-  e7000_ops.to_has_vforked = NULL;
-  e7000_ops.to_can_follow_vfork_prior_to_exec = NULL;
-  e7000_ops.to_post_follow_vfork = NULL;
-  e7000_ops.to_insert_exec_catchpoint = NULL;
-  e7000_ops.to_remove_exec_catchpoint = NULL;
-  e7000_ops.to_has_execd = NULL;
-  e7000_ops.to_reported_exec_events_per_exec_call = NULL;
-  e7000_ops.to_has_exited = NULL;
   e7000_ops.to_mourn_inferior = e7000_mourn_inferior;
-  e7000_ops.to_can_run = 0;
-  e7000_ops.to_notice_signals = 0;
-  e7000_ops.to_thread_alive = 0;
   e7000_ops.to_stop = e7000_stop;
-  e7000_ops.to_pid_to_exec_file = NULL;
-  e7000_ops.to_core_file_to_sym_file = NULL;
   e7000_ops.to_stratum = process_stratum;
-  e7000_ops.DONT_USE = 0;
   e7000_ops.to_has_all_memory = 1;
   e7000_ops.to_has_memory = 1;
   e7000_ops.to_has_stack = 1;
   e7000_ops.to_has_registers = 1;
   e7000_ops.to_has_execution = 1;
-  e7000_ops.to_sections = 0;
-  e7000_ops.to_sections_end = 0;
   e7000_ops.to_magic = OPS_MAGIC;
 };
 
+extern initialize_file_ftype _initialize_remote_e7000; /* -Wmissing-prototypes */
+
 void
 _initialize_remote_e7000 (void)
 {
@@ -2219,19 +2200,22 @@ _initialize_remote_e7000 (void)
   add_target (&e7000_ops);
 
   add_com ("e7000", class_obscure, e7000_command,
-          "Send a command to the e7000 monitor.");
+          _("Send a command to the e7000 monitor."));
 
   add_com ("ftplogin", class_obscure, e7000_login_command,
-          "Login to machine and change to directory.");
+          _("Login to machine and change to directory."));
 
   add_com ("ftpload", class_obscure, e7000_ftp_command,
-          "Fetch and load a file from previously described place.");
+          _("Fetch and load a file from previously described place."));
 
   add_com ("drain", class_obscure, e7000_drain_command,
-          "Drain pending e7000 text buffers.");
-
-  add_show_from_set (add_set_cmd ("usehardbreakpoints", no_class,
-                               var_integer, (char *) &use_hard_breakpoints,
-       "Set use of hardware breakpoints for all breakpoints.\n", &setlist),
-                    &showlist);
+          _("Drain pending e7000 text buffers."));
+
+  add_setshow_integer_cmd ("usehardbreakpoints", no_class,
+                          &use_hard_breakpoints, _("\
+Set use of hardware breakpoints for all breakpoints."), _("\
+Show use of hardware breakpoints for all breakpoints."), NULL,
+                          NULL,
+                          NULL, /* FIXME: i18n: */
+                          &setlist, &showlist);
 }
This page took 0.040475 seconds and 4 git commands to generate.