*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / m32r-rom.c
index b4bfefdf2103438c399e1c4554b640a7c4b7184d..a31e0d288c00102eba9d61b0423e9f99c0be7a68 100644 (file)
@@ -1,6 +1,7 @@
 /* Remote debugging interface to m32r and mon2000 ROM monitors for GDB, 
    the GNU debugger.
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001
+
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2004, 2005
    Free Software Foundation, Inc.
 
    Adapted by Michael Snyder of 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.  */
 
-/* This module defines communication with the Mitsubishi m32r monitor */
+/* This module defines communication with the Renesas m32r monitor */
 
 #include "defs.h"
 #include "gdbcore.h"
 #include "target.h"
+#include "exceptions.h"
 #include "monitor.h"
 #include "serial.h"
 #include "symtab.h"
 #include "command.h"
 #include "gdbcmd.h"
 #include "symfile.h"           /* for generic load */
+#include <sys/time.h>
 #include <time.h>              /* for time_t */
 #include "gdb_string.h"
 #include "objfiles.h"          /* for ALL_OBJFILES etc. */
 #include <ctype.h>
 #include "regcache.h"
 
-extern void report_transfer_performance (unsigned long, time_t, time_t);
-
 /*
  * All this stuff just to get my host computer's IP address!
  */
+#ifdef __MINGW32__
+#include <winsock.h>
+#else
 #include <sys/types.h>
 #include <netdb.h>             /* for hostent */
 #include <netinet/in.h>                /* for struct in_addr */
 #if 1
 #include <arpa/inet.h>         /* for inet_ntoa */
 #endif
+#endif
 
 static char *board_addr;       /* user-settable IP address for M32R-EVA */
 static char *server_addr;      /* user-settable IP address for gdb host */
 static char *download_path;    /* user-settable path for SREC files     */
 
 
+/* REGNUM */
+#define PSW_REGNUM      16
+#define SPI_REGNUM      18
+#define SPU_REGNUM      19
+#define ACCL_REGNUM     22
+#define ACCH_REGNUM     23
+
+
 /* 
  * Function: m32r_load_1 (helper function)
  */
@@ -75,7 +88,7 @@ m32r_load_section (bfd *abfd, asection *s, void *obj)
 
       printf_filtered ("Loading section %s, size 0x%lx lma ",
                       bfd_section_name (abfd, s), section_size);
-      print_address_numeric (section_base, 1, gdb_stdout);
+      deprecated_print_address_numeric (section_base, 1, gdb_stdout);
       printf_filtered ("\n");
       gdb_flush (gdb_stdout);
       monitor_printf ("%s mw\r", paddr_nz (section_base));
@@ -111,17 +124,17 @@ m32r_load (char *filename, int from_tty)
   bfd *abfd;
   asection *s;
   unsigned int i, data_count = 0;
-  time_t start_time, end_time; /* for timing of download */
+  struct timeval start_time, end_time;
 
   if (filename == NULL || filename[0] == 0)
     filename = get_exec_file (1);
 
   abfd = bfd_openr (filename, 0);
   if (!abfd)
-    error ("Unable to open file %s\n", filename);
+    error (_("Unable to open file %s."), filename);
   if (bfd_check_format (abfd, bfd_object) == 0)
-    error ("File is not an object file\n");
-  start_time = time (NULL);
+    error (_("File is not an object file."));
+  gettimeofday (&start_time, NULL);
 #if 0
   for (s = abfd->sections; s; s = s->next)
     if (s->flags & SEC_LOAD)
@@ -134,7 +147,7 @@ m32r_load (char *filename, int from_tty)
 
        printf_filtered ("Loading section %s, size 0x%lx vma ",
                         bfd_section_name (abfd, s), section_size);
-       print_address_numeric (section_base, 1, gdb_stdout);
+       deprecated_print_address_numeric (section_base, 1, gdb_stdout);
        printf_filtered ("\n");
        gdb_flush (gdb_stdout);
        monitor_printf ("%x mw\r", section_base);
@@ -155,9 +168,10 @@ m32r_load (char *filename, int from_tty)
       return;
     }
 #endif
-  end_time = time (NULL);
+  gettimeofday (&end_time, NULL);
   printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
-  report_transfer_performance (data_count, start_time, end_time);
+  print_transfer_performance (gdb_stdout, data_count, 0, &start_time,
+                             &end_time);
 
   /* Finally, make the PC point at the start address */
   if (exec_bfd)
@@ -190,9 +204,9 @@ static void mon2000_open (char *args, int from_tty);
    either. So, typing "info reg sp" becomes an "A7". */
 
 static char *m32r_regnames[] =
-{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
- "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
- "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch",
+  { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
 "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch",
 };
 
 static void
@@ -256,7 +270,9 @@ m32r_supply_register (char *regname, int regnamelen, char *val, int vallen)
 
       if (regno == SPI_REGNUM || regno == SPU_REGNUM)
        {                       /* special handling for stack pointer (spu or spi) */
-         unsigned long stackmode = read_register (PSW_REGNUM) & 0x80;
+         ULONGEST stackmode, psw;
+         regcache_cooked_read_unsigned (current_regcache, PSW_REGNUM, &psw);
+         stackmode = psw & 0x80;
 
          if (regno == SPI_REGNUM && !stackmode)        /* SP == SPI */
            monitor_supply_register (SP_REGNUM, val);
@@ -270,8 +286,7 @@ m32r_supply_register (char *regname, int regnamelen, char *val, int vallen)
 
 static struct target_ops m32r_ops;
 
-static char *m32r_inits[] =
-{"\r", NULL};
+static char *m32r_inits[] = { "\r", NULL };
 
 static struct monitor_ops m32r_cmds;
 
@@ -311,7 +326,7 @@ init_m32r_cmds (void)
   m32r_cmds.getreg.term_cmd = NULL;    /* getreg.term_cmd */
   m32r_cmds.dump_registers = ".reg\r"; /* dump_registers */
   m32r_cmds.register_pattern = "\\(\\w+\\) += \\([0-9a-fA-F]+\\b\\)";  /* register_pattern */
-  m32r_cmds.supply_register = m32r_supply_register;    /* supply_register */
+  m32r_cmds.supply_register = m32r_supply_register;
   m32r_cmds.load_routine = NULL;       /* load_routine (defaults to SRECs) */
   m32r_cmds.load = NULL;       /* download command */
   m32r_cmds.loadresp = NULL;   /* load response */
@@ -348,8 +363,8 @@ init_mon2000_cmds (void)
   mon2000_cmds.clr_all_break = "bpoff\r";      /* clear all breakpoints */
   mon2000_cmds.fill = "%x %x %x fill\r";       /* fill (start length val) */
   mon2000_cmds.setmem.cmdb = "%x 1 %x fill\r"; /* setmem.cmdb (addr, value) */
-  mon2000_cmds.setmem.cmdw = "%x 1 %x fillh\r";                /* setmem.cmdw (addr, value) */
-  mon2000_cmds.setmem.cmdl = "%x 1 %x fillw\r";                /* setmem.cmdl (addr, value) */
+  mon2000_cmds.setmem.cmdw = "%x 1 %x fillh\r";        /* setmem.cmdw (addr, value) */
+  mon2000_cmds.setmem.cmdl = "%x 1 %x fillw\r";        /* setmem.cmdl (addr, value) */
   mon2000_cmds.setmem.cmdll = NULL;    /* setmem.cmdll (addr, value) */
   mon2000_cmds.setmem.resp_delim = NULL;       /* setmem.resp_delim */
   mon2000_cmds.setmem.term = NULL;     /* setmem.term */
@@ -371,7 +386,7 @@ init_mon2000_cmds (void)
   mon2000_cmds.getreg.term_cmd = NULL; /* getreg.term_cmd */
   mon2000_cmds.dump_registers = ".reg\r";      /* dump_registers */
   mon2000_cmds.register_pattern = "\\(\\w+\\) += \\([0-9a-fA-F]+\\b\\)";       /* register_pattern */
-  mon2000_cmds.supply_register = m32r_supply_register; /* supply_register */
+  mon2000_cmds.supply_register = m32r_supply_register;
   mon2000_cmds.load_routine = NULL;    /* load_routine (defaults to SRECs) */
   mon2000_cmds.load = NULL;    /* download command */
   mon2000_cmds.loadresp = NULL;        /* load response */
@@ -390,69 +405,12 @@ mon2000_open (char *args, int from_tty)
   monitor_open (args, &mon2000_cmds, from_tty);
 }
 
-/* Function: set_board_address
-   Tell the BootOne monitor what it's ethernet IP address is. */
-
-static void
-m32r_set_board_address (char *args, int from_tty)
-{
-  int resp_len;
-  char buf[1024];
-
-  if (args && *args)
-    {
-      monitor_printf ("ulip %s\n", args);
-      resp_len = monitor_expect_prompt (buf, sizeof (buf));
-      /* now parse the result for success */
-    }
-  else
-    error ("Requires argument (IP address for M32R-EVA board)");
-}
-
-/* Function: set_server_address
-   Tell the BootOne monitor what gdb's ethernet IP address is. */
-
-static void
-m32r_set_server_address (char *args, int from_tty)
-{
-  int resp_len;
-  char buf[1024];
-
-  if (args && *args)
-    {
-      monitor_printf ("uhip %s\n", args);
-      resp_len = monitor_expect_prompt (buf, sizeof (buf));
-      /* now parse the result for success */
-    }
-  else
-    error ("Requires argument (IP address of GDB's host computer)");
-}
-
-/* Function: set_download_path
-   Tell the BootOne monitor the default path for downloadable SREC files. */
-
-static void
-m32r_set_download_path (char *args, int from_tty)
-{
-  int resp_len;
-  char buf[1024];
-
-  if (args && *args)
-    {
-      monitor_printf ("up %s\n", args);
-      resp_len = monitor_expect_prompt (buf, sizeof (buf));
-      /* now parse the result for success */
-    }
-  else
-    error ("Requires argument (default path for downloadable SREC files)");
-}
-
 static void
 m32r_upload_command (char *args, int from_tty)
 {
   bfd *abfd;
   asection *s;
-  time_t start_time, end_time; /* for timing of download */
+  struct timeval start_time, end_time;
   int resp_len, data_count = 0;
   char buf[1024];
   struct hostent *hostent;
@@ -462,7 +420,7 @@ m32r_upload_command (char *args, int from_tty)
   monitor_printf ("ust\r");
   resp_len = monitor_expect_prompt (buf, sizeof (buf));
   if (!strchr (buf, ':'))
-    error ("No ethernet connection!");
+    error (_("No ethernet connection!"));
 
   if (board_addr == 0)
     {
@@ -473,29 +431,40 @@ m32r_upload_command (char *args, int from_tty)
        myIPaddress++;
 
       if (!strncmp (myIPaddress, "0.0.", 4))   /* empty */
-       error ("Please use 'set board-address' to set the M32R-EVA board's IP address.");
+       error
+         ("Please use 'set board-address' to set the M32R-EVA board's IP address.");
       if (strchr (myIPaddress, '('))
        *(strchr (myIPaddress, '(')) = '\0';    /* delete trailing junk */
       board_addr = xstrdup (myIPaddress);
     }
   if (server_addr == 0)
     {
+#ifdef __MINGW32__
+      WSADATA wd;
+      /* Winsock initialization. */
+      if (WSAStartup (MAKEWORD (1, 1), &wd))
+       error (_("Couldn't initialize WINSOCK."));
+#endif
+
       buf[0] = 0;
       gethostname (buf, sizeof (buf));
       if (buf[0] != 0)
-       hostent = gethostbyname (buf);
-      if (hostent != 0)
        {
+         hostent = gethostbyname (buf);
+         if (hostent != 0)
+           {
 #if 1
-         memcpy (&inet_addr.s_addr, hostent->h_addr,
-                 sizeof (inet_addr.s_addr));
-         server_addr = (char *) inet_ntoa (inet_addr);
+             memcpy (&inet_addr.s_addr, hostent->h_addr,
+                     sizeof (inet_addr.s_addr));
+             server_addr = (char *) inet_ntoa (inet_addr);
 #else
-         server_addr = (char *) inet_ntoa (hostent->h_addr);
+             server_addr = (char *) inet_ntoa (hostent->h_addr);
 #endif
+           }
        }
       if (server_addr == 0)    /* failed? */
-       error ("Need to know gdb host computer's IP address (use 'set server-address')");
+       error
+         ("Need to know gdb host computer's IP address (use 'set server-address')");
     }
 
   if (args == 0 || args[0] == 0)       /* no args: upload the current file */
@@ -506,32 +475,35 @@ m32r_upload_command (char *args, int from_tty)
       if (current_directory)
        download_path = xstrdup (current_directory);
       else
-       error ("Need to know default download path (use 'set download-path')");
+       error
+         ("Need to know default download path (use 'set download-path')");
     }
 
-  start_time = time (NULL);
+  gettimeofday (&start_time, NULL);
   monitor_printf ("uhip %s\r", server_addr);
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));                /* parse result? */
+  resp_len = monitor_expect_prompt (buf, sizeof (buf));        /* parse result? */
   monitor_printf ("ulip %s\r", board_addr);
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));                /* parse result? */
+  resp_len = monitor_expect_prompt (buf, sizeof (buf));        /* parse result? */
   if (args[0] != '/')
     monitor_printf ("up %s\r", download_path); /* use default path */
   else
     monitor_printf ("up\r");   /* rooted filename/path */
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));                /* parse result? */
+  resp_len = monitor_expect_prompt (buf, sizeof (buf));        /* parse result? */
 
   if (strrchr (args, '.') && !strcmp (strrchr (args, '.'), ".srec"))
     monitor_printf ("ul %s\r", args);
   else                         /* add ".srec" suffix */
     monitor_printf ("ul %s.srec\r", args);
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));                /* parse result? */
+  resp_len = monitor_expect_prompt (buf, sizeof (buf));        /* parse result? */
 
   if (buf[0] == 0 || strstr (buf, "complete") == 0)
-    error ("Upload file not found: %s.srec\nCheck IP addresses and download path.", args);
+    error
+      ("Upload file not found: %s.srec\nCheck IP addresses and download path.",
+       args);
   else
     printf_filtered (" -- Ethernet load complete.\n");
 
-  end_time = time (NULL);
+  gettimeofday (&end_time, NULL);
   abfd = bfd_openr (args, 0);
   if (abfd != NULL)
     {                          /* Download is done -- print section statistics */
@@ -550,14 +522,15 @@ m32r_upload_command (char *args, int from_tty)
 
            printf_filtered ("Loading section %s, size 0x%lx lma ",
                             bfd_section_name (abfd, s), section_size);
-           print_address_numeric (section_base, 1, gdb_stdout);
+           deprecated_print_address_numeric (section_base, 1, gdb_stdout);
            printf_filtered ("\n");
            gdb_flush (gdb_stdout);
          }
       /* Finally, make the PC point at the start address */
       write_pc (bfd_get_start_address (abfd));
-      report_transfer_performance (data_count, start_time, end_time);
       printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
+      print_transfer_performance (gdb_stdout, data_count, 0, &start_time,
+                                 &end_time);
     }
   inferior_ptid = null_ptid;   /* No process now */
 
@@ -598,29 +571,32 @@ Specify the serial device it is connected to (e.g. /dev/ttya).";
   mon2000_ops.to_open = mon2000_open;
   add_target (&mon2000_ops);
 
-  add_show_from_set
-    (add_set_cmd ("download-path", class_obscure, var_string,
-                 (char *) &download_path,
-                 "Set the default path for downloadable SREC files.",
-                 &setlist),
-     &showlist);
-
-  add_show_from_set
-    (add_set_cmd ("board-address", class_obscure, var_string,
-                 (char *) &board_addr,
-                 "Set IP address for M32R-EVA target board.",
-                 &setlist),
-     &showlist);
-
-  add_show_from_set
-    (add_set_cmd ("server-address", class_obscure, var_string,
-                 (char *) &server_addr,
-               "Set IP address for download server (GDB's host computer).",
-                 &setlist),
-     &showlist);
-
-  add_com ("upload", class_obscure, m32r_upload_command,
-      "Upload the srec file via the monitor's Ethernet upload capability.");
-
-  add_com ("tload", class_obscure, m32r_load, "test upload command.");
+  add_setshow_string_cmd ("download-path", class_obscure, &download_path, _("\
+Set the default path for downloadable SREC files."), _("\
+Show the default path for downloadable SREC files."), _("\
+Determines the default path for downloadable SREC files."),
+                         NULL,
+                         NULL, /* FIXME: i18n: The default path for downloadable SREC files is %s.  */
+                         &setlist, &showlist);
+
+  add_setshow_string_cmd ("board-address", class_obscure, &board_addr, _("\
+Set IP address for M32R-EVA target board."), _("\
+Show IP address for M32R-EVA target board."), _("\
+Determine the IP address for M32R-EVA target board."),
+                         NULL,
+                         NULL, /* FIXME: i18n: IP address for M32R-EVA target board is %s.  */
+                         &setlist, &showlist);
+
+  add_setshow_string_cmd ("server-address", class_obscure, &server_addr, _("\
+Set IP address for download server (GDB's host computer)."), _("\
+Show IP address for download server (GDB's host computer)."), _("\
+Determine the IP address for download server (GDB's host computer)."),
+                         NULL,
+                         NULL, /* FIXME: i18n: IP address for download server (GDB's host computer) is %s.  */
+                         &setlist, &showlist);
+
+  add_com ("upload", class_obscure, m32r_upload_command, _("\
+Upload the srec file via the monitor's Ethernet upload capability."));
+
+  add_com ("tload", class_obscure, m32r_load, _("test upload command."));
 }
This page took 0.03105 seconds and 4 git commands to generate.