X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fm32r-rom.c;h=ef8c2716e781690b23aac89ed7e83cbb7a100d3f;hb=b2ce2854973e9001fdd9bd7a6779b90ac3407a91;hp=b975acecbca5397de91be9e973eee9f252a712f7;hpb=d0352a18a504a4e7b761f6b3264cf11347d8d056;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/m32r-rom.c b/gdb/m32r-rom.c index b975acecbc..ef8c2716e7 100644 --- a/gdb/m32r-rom.c +++ b/gdb/m32r-rom.c @@ -1,6 +1,7 @@ /* 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. @@ -21,7 +22,7 @@ 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" @@ -37,10 +38,8 @@ #include "objfiles.h" /* for ALL_OBJFILES etc. */ #include "inferior.h" /* for write_pc() */ #include +#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! */ @@ -50,23 +49,28 @@ extern void report_transfer_performance (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); @@ -95,8 +99,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 +112,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; @@ -163,13 +163,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,9 +183,7 @@ 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); } @@ -198,17 +197,13 @@ 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 -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 +263,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 +279,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; @@ -337,9 +333,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 +356,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 */ @@ -399,87 +393,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; @@ -500,29 +424,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 +459,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"); @@ -583,10 +514,11 @@ m32r_upload_command (args, from_tty) } /* 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 +530,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 +557,26 @@ 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_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 }