2005-02-14 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / m32r-rom.c
index f6ea251f8a23a3ed0190c66a16c7bb3b703dbc01..1a93ca2aaf99484cf930169ac22b3bcf82ea1558 100644 (file)
@@ -1,6 +1,8 @@
 /* Remote debugging interface to m32r and mon2000 ROM monitors for GDB, 
    the GNU debugger.
-   Copyright 1996 Free Software Foundation, Inc.
+
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2004 Free Software
+   Foundation, Inc.
 
    Adapted by Michael Snyder of Cygnus Support.
 
    Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, 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 "objfiles.h"          /* for ALL_OBJFILES etc. */
 #include "inferior.h"          /* for write_pc() */
 #include <ctype.h>
+#include "regcache.h"
 
-extern void report_transfer_performance PARAMS ((unsigned long, time_t, time_t));
-
-#ifndef _MSC_VER
 /*
  * All this stuff just to get my host computer's IP address!
  */
@@ -50,23 +51,28 @@ extern void report_transfer_performance PARAMS ((unsigned long, time_t, time_t))
 #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)
  */
 
 static void
-m32r_load_section (abfd, s, data_count)
-     bfd *abfd;
-     asection *s;
-     unsigned int *data_count;
+m32r_load_section (bfd *abfd, asection *s, void *obj)
 {
+  unsigned int *data_count = obj;
   if (s->flags & SEC_LOAD)
     {
       bfd_size_type section_size = bfd_section_size (abfd, s);
@@ -77,7 +83,7 @@ m32r_load_section (abfd, s, data_count)
 
       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));
@@ -95,8 +101,7 @@ m32r_load_section (abfd, s, data_count)
 }
 
 static int
-m32r_load_1 (dummy)
-     void *dummy;
+m32r_load_1 (void *dummy)
 {
   int data_count = 0;
 
@@ -109,11 +114,8 @@ m32r_load_1 (dummy)
  */
 
 static void
-m32r_load (filename, from_tty)
-     char *filename;
-     int from_tty;
+m32r_load (char *filename, int from_tty)
 {
-  extern int inferior_pid;
   bfd *abfd;
   asection *s;
   unsigned int i, data_count = 0;
@@ -124,9 +126,9 @@ m32r_load (filename, from_tty)
 
   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");
+    error (_("File is not an object file."));
   start_time = time (NULL);
 #if 0
   for (s = abfd->sections; s; s = s->next)
@@ -140,7 +142,7 @@ m32r_load (filename, 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);
@@ -163,13 +165,14 @@ m32r_load (filename, from_tty)
 #endif
   end_time = 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,
+                             end_time - start_time);
 
   /* Finally, make the PC point at the start address */
   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
@@ -182,15 +185,13 @@ m32r_load (filename, from_tty)
 }
 
 static void
-m32r_load_gen (filename, from_tty)
-     char *filename;
-     int from_tty;
+m32r_load_gen (char *filename, int from_tty)
 {
   generic_load (filename, from_tty);
 }
 
-static void m32r_open PARAMS ((char *args, int from_tty));
-static void mon2000_open PARAMS ((char *args, int from_tty));
+static void m32r_open (char *args, int from_tty);
+static void mon2000_open (char *args, int from_tty);
 
 /* This array of registers needs to match the indexes used by GDB. The
    whole reason this exists is because the various ROM monitors use
@@ -198,17 +199,13 @@ static void mon2000_open PARAMS ((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
-m32r_supply_register (regname, regnamelen, val, vallen)
-     char *regname;
-     int regnamelen;
-     char *val;
-     int vallen;
+m32r_supply_register (char *regname, int regnamelen, char *val, int vallen)
 {
   int regno;
   int num_regs = sizeof (m32r_regnames) / sizeof (m32r_regnames[0]);
@@ -268,7 +265,9 @@ m32r_supply_register (regname, regnamelen, val, 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);
@@ -282,8 +281,7 @@ m32r_supply_register (regname, regnamelen, val, 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;
 
@@ -323,7 +321,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 */
@@ -337,9 +335,7 @@ init_m32r_cmds (void)
 }                              /* init_m32r_cmds */
 
 static void
-m32r_open (args, from_tty)
-     char *args;
-     int from_tty;
+m32r_open (char *args, int from_tty)
 {
   monitor_open (args, &m32r_cmds, from_tty);
 }
@@ -362,8 +358,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 */
@@ -385,7 +381,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 */
@@ -399,87 +395,17 @@ init_mon2000_cmds (void)
 }                              /* init_mon2000_cmds */
 
 static void
-mon2000_open (args, from_tty)
-     char *args;
-     int from_tty;
+mon2000_open (char *args, int from_tty)
 {
   monitor_open (args, &mon2000_cmds, from_tty);
 }
 
-#ifndef _MSC_VER
-
-/* Function: set_board_address
-   Tell the BootOne monitor what it's ethernet IP address is. */
-
-static void
-m32r_set_board_address (args, from_tty)
-     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 (args, from_tty)
-     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 (args, from_tty)
-     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 (args, from_tty)
-     char *args;
-     int from_tty;
+m32r_upload_command (char *args, int from_tty)
 {
   bfd *abfd;
   asection *s;
   time_t start_time, end_time; /* for timing of download */
-  extern int inferior_pid;
   int resp_len, data_count = 0;
   char buf[1024];
   struct hostent *hostent;
@@ -489,7 +415,7 @@ m32r_upload_command (args, 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)
     {
@@ -500,29 +426,33 @@ m32r_upload_command (args, 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 = strsave (myIPaddress);
+      board_addr = xstrdup (myIPaddress);
     }
   if (server_addr == 0)
     {
       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 */
@@ -531,30 +461,33 @@ m32r_upload_command (args, from_tty)
   if (args[0] != '/' && download_path == 0)
     {
       if (current_directory)
-       download_path = strsave (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);
   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");
 
@@ -577,16 +510,17 @@ m32r_upload_command (args, 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,
+                                 end_time - start_time);
     }
-  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
@@ -598,10 +532,8 @@ m32r_upload_command (args, from_tty)
   clear_symtab_users ();
 }
 
-#endif /* ! _MSC_VER */
-
 void
-_initialize_m32r_rom ()
+_initialize_m32r_rom (void)
 {
   /* Initialize m32r RevC monitor target */
   init_m32r_cmds ();
@@ -627,31 +559,29 @@ Specify the serial device it is connected to (e.g. /dev/ttya).";
   mon2000_ops.to_open = mon2000_open;
   add_target (&mon2000_ops);
 
-#ifndef _MSC_VER
-  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_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, /* FIXME: i18n: The default path for downloadable SREC files is %s.  */
+                         NULL, NULL, &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, /* FIXME: i18n: IP address for M32R-EVA target board is %s.  */
+                         NULL, NULL, &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, /* FIXME: i18n: IP address for download server (GDB's host computer) is %s.  */
+                         NULL, NULL, &setlist, &showlist);
 
   add_com ("upload", class_obscure, m32r_upload_command,
-      "Upload the srec file via the monitor's Ethernet upload capability.");
+          "Upload the srec file via the monitor's Ethernet upload capability.");
 
   add_com ("tload", class_obscure, m32r_load, "test upload command.");
-#endif
 }
This page took 0.04552 seconds and 4 git commands to generate.