X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fm32r-rom.c;h=1a93ca2aaf99484cf930169ac22b3bcf82ea1558;hb=7915a72c7f0c255cfcf47c1b186d3739aeafe4da;hp=bbcc1c0cf7b6b31d807e48e40e87360deba93b16;hpb=30727aa6d12fb866494020c0b62ab265a2bdcdfe;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/m32r-rom.c b/gdb/m32r-rom.c index bbcc1c0cf7..1a93ca2aaf 100644 --- a/gdb/m32r-rom.c +++ b/gdb/m32r-rom.c @@ -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. @@ -21,11 +23,12 @@ 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" @@ -35,11 +38,10 @@ #include /* for time_t */ #include "gdb_string.h" #include "objfiles.h" /* for ALL_OBJFILES etc. */ +#include "inferior.h" /* for write_pc() */ +#include +#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! */ @@ -49,23 +51,28 @@ extern void report_transfer_performance PARAMS ((unsigned long, time_t, time_t)) #if 1 #include /* 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); @@ -76,10 +83,10 @@ 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 ("%x mw\r", section_base); + monitor_printf ("%s mw\r", paddr_nz (section_base)); for (i = 0; i < section_size; i += 4) { QUIT; @@ -94,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; @@ -108,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; @@ -123,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) @@ -139,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); @@ -162,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 @@ -181,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 @@ -197,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]); @@ -267,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); @@ -281,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; @@ -322,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 */ @@ -336,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); } @@ -361,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 */ @@ -384,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 */ @@ -398,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; @@ -488,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) { @@ -499,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 */ @@ -530,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"); @@ -576,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 @@ -597,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 (); @@ -626,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 }