/* 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
+ 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 "objfiles.h" /* for ALL_OBJFILES etc. */
#include "inferior.h" /* for write_pc() */
#include <ctype.h>
+#include "regcache.h"
-extern void report_transfer_performance (unsigned long, time_t, time_t);
-
-#ifndef _MSC_VER
/*
* All this stuff just to get my host computer's IP address!
*/
#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);
}
static int
-m32r_load_1 (dummy)
- void *dummy;
+m32r_load_1 (void *dummy)
{
int data_count = 0;
*/
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;
#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
}
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);
}
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]);
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;
} /* 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);
}
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 */
} /* 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;
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 */
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");
}
/* 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
clear_symtab_users ();
}
-#endif /* ! _MSC_VER */
-
void
-_initialize_m32r_rom ()
+_initialize_m32r_rom (void)
{
/* Initialize m32r RevC monitor target */
init_m32r_cmds ();
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_cmd ("download-path", class_obscure,
+ var_string, &download_path,
+ "Set the default path for downloadable SREC files.",
+ "Show the default path for downloadable SREC files.",
+ NULL, NULL, &setlist, &showlist);
+
+ add_setshow_cmd ("board-address", class_obscure,
+ var_string, &board_addr,
+ "Set IP address for M32R-EVA target board.",
+ "Show IP address for M32R-EVA target board.",
+ NULL, NULL, &setlist, &showlist);
+
+ add_setshow_cmd ("server-address", class_obscure,
+ var_string, &server_addr,
+ "Set IP address for download server (GDB's host computer).",
+ "Show IP address for download server (GDB's host computer).",
+ 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
}