/* Remote debugging interface to m32r and mon2000 ROM monitors for GDB,
the GNU debugger.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001
- 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 <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!
*/
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)
*/
#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)
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
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);
static struct target_ops m32r_ops;
-static char *m32r_inits[] =
-{"\r", NULL};
+static char *m32r_inits[] = { "\r", NULL };
static struct monitor_ops m32r_cmds;
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 */
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 */
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 */
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)
{
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);
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 */
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);
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");
}
/* 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_ptid = null_ptid; /* No process now */
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_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.", "\
+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.", "\
+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).", "\
+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.");
}