X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fm32r-rom.c;h=1491f229c0e040e47c56e76488c38d9763d40f88;hb=7feb7d068ae65557ede03c36468ebac61b0939ca;hp=c963b2c6c6c3d3dd80ed31b9dc931cb374544d0b;hpb=23a6d36940157c674aedaf5a9d4b38676ea0d9e9;p=deliverable%2Fbinutils-gdb.git
diff --git a/gdb/m32r-rom.c b/gdb/m32r-rom.c
index c963b2c6c6..1491f229c0 100644
--- a/gdb/m32r-rom.c
+++ b/gdb/m32r-rom.c
@@ -1,7 +1,8 @@
/* 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 (C) 1996, 1997, 1998, 1999, 2000, 2001, 2004, 2005, 2007, 2008,
+ 2009 Free Software Foundation, Inc.
Adapted by Michael Snyder of Cygnus Support.
@@ -9,7 +10,7 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@@ -18,37 +19,41 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ along with this program. If not, see . */
/* 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 "command.h"
#include "gdbcmd.h"
#include "symfile.h" /* for generic load */
+#include
#include /* for time_t */
#include "gdb_string.h"
#include "objfiles.h" /* for ALL_OBJFILES etc. */
-#include "inferior.h" /* for write_pc() */
+#include "inferior.h"
#include
#include "regcache.h"
/*
* All this stuff just to get my host computer's IP address!
*/
+#ifdef __MINGW32__
+#include
+#else
#include
#include /* for hostent */
#include /* for struct in_addr */
#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 */
@@ -80,8 +85,9 @@ m32r_load_section (bfd *abfd, asection *s, void *obj)
*data_count += section_size;
printf_filtered ("Loading section %s, size 0x%lx lma ",
- bfd_section_name (abfd, s), section_size);
- print_address_numeric (section_base, 1, gdb_stdout);
+ bfd_section_name (abfd, s),
+ (unsigned long) section_size);
+ fputs_filtered (paddress (section_base), gdb_stdout);
printf_filtered ("\n");
gdb_flush (gdb_stdout);
monitor_printf ("%s mw\r", paddr_nz (section_base));
@@ -117,17 +123,17 @@ m32r_load (char *filename, int from_tty)
bfd *abfd;
asection *s;
unsigned int i, data_count = 0;
- time_t start_time, end_time; /* for timing of download */
+ struct timeval start_time, end_time;
if (filename == NULL || filename[0] == 0)
filename = get_exec_file (1);
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");
- start_time = time (NULL);
+ error (_("File is not an object file."));
+ gettimeofday (&start_time, NULL);
#if 0
for (s = abfd->sections; s; s = s->next)
if (s->flags & SEC_LOAD)
@@ -140,7 +146,7 @@ m32r_load (char *filename, int 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);
+ fputs_filtered (paddress (section_base), gdb_stdout);
printf_filtered ("\n");
gdb_flush (gdb_stdout);
monitor_printf ("%x mw\r", section_base);
@@ -161,14 +167,16 @@ m32r_load (char *filename, int from_tty)
return;
}
#endif
- end_time = time (NULL);
- printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
- print_transfer_performance (gdb_stdout, data_count, 0,
- end_time - start_time);
+ gettimeofday (&end_time, NULL);
+ printf_filtered ("Start address 0x%lx\n",
+ (unsigned long) bfd_get_start_address (abfd));
+ print_transfer_performance (gdb_stdout, data_count, 0, &start_time,
+ &end_time);
/* Finally, make the PC point at the start address */
if (exec_bfd)
- write_pc (bfd_get_start_address (exec_bfd));
+ regcache_write_pc (get_current_regcache (),
+ bfd_get_start_address (exec_bfd));
inferior_ptid = null_ptid; /* No process now */
@@ -203,10 +211,12 @@ static char *m32r_regnames[] =
};
static void
-m32r_supply_register (char *regname, int regnamelen, char *val, int vallen)
+m32r_supply_register (struct regcache *regcache, char *regname,
+ int regnamelen, char *val, int vallen)
{
int regno;
int num_regs = sizeof (m32r_regnames) / sizeof (m32r_regnames[0]);
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
for (regno = 0; regno < num_regs; regno++)
if (strncmp (regname, m32r_regnames[regno], regnamelen) == 0)
@@ -217,14 +227,14 @@ m32r_supply_register (char *regname, int regnamelen, char *val, int vallen)
if (regno == ACCL_REGNUM)
{ /* special handling for 64-bit acc reg */
- monitor_supply_register (ACCH_REGNUM, val);
+ monitor_supply_register (regcache, ACCH_REGNUM, val);
val = strchr (val, ':'); /* skip past ':' to get 2nd word */
if (val != NULL)
- monitor_supply_register (ACCL_REGNUM, val + 1);
+ monitor_supply_register (regcache, ACCL_REGNUM, val + 1);
}
else
{
- monitor_supply_register (regno, val);
+ monitor_supply_register (regcache, regno, val);
if (regno == PSW_REGNUM)
{
unsigned long psw = strtoul (val, NULL, 16);
@@ -232,45 +242,47 @@ m32r_supply_register (char *regname, int regnamelen, char *val, int vallen)
#ifdef SM_REGNUM
/* Stack mode bit */
- monitor_supply_register (SM_REGNUM, (psw & 0x80) ? one : zero);
+ monitor_supply_register (regcache, SM_REGNUM, (psw & 0x80) ? one : zero);
#endif
#ifdef BSM_REGNUM
/* Backup stack mode bit */
- monitor_supply_register (BSM_REGNUM, (psw & 0x8000) ? one : zero);
+ monitor_supply_register (regcache, BSM_REGNUM, (psw & 0x8000) ? one : zero);
#endif
#ifdef IE_REGNUM
/* Interrupt enable bit */
- monitor_supply_register (IE_REGNUM, (psw & 0x40) ? one : zero);
+ monitor_supply_register (regcache, IE_REGNUM, (psw & 0x40) ? one : zero);
#endif
#ifdef BIE_REGNUM
/* Backup interrupt enable bit */
- monitor_supply_register (BIE_REGNUM, (psw & 0x4000) ? one : zero);
+ monitor_supply_register (regcache, BIE_REGNUM, (psw & 0x4000) ? one : zero);
#endif
#ifdef COND_REGNUM
/* Condition bit (carry etc.) */
- monitor_supply_register (COND_REGNUM, (psw & 0x1) ? one : zero);
+ monitor_supply_register (regcache, COND_REGNUM, (psw & 0x1) ? one : zero);
#endif
#ifdef CBR_REGNUM
- monitor_supply_register (CBR_REGNUM, (psw & 0x1) ? one : zero);
+ monitor_supply_register (regcache, CBR_REGNUM, (psw & 0x1) ? one : zero);
#endif
#ifdef BPC_REGNUM
- monitor_supply_register (BPC_REGNUM, zero); /* KLUDGE: (???????) */
+ monitor_supply_register (regcache, BPC_REGNUM, zero); /* KLUDGE: (???????) */
#endif
#ifdef BCARRY_REGNUM
- monitor_supply_register (BCARRY_REGNUM, zero); /* KLUDGE: (??????) */
+ monitor_supply_register (regcache, BCARRY_REGNUM, zero); /* KLUDGE: (??????) */
#endif
}
if (regno == SPI_REGNUM || regno == SPU_REGNUM)
{ /* special handling for stack pointer (spu or spi) */
ULONGEST stackmode, psw;
- regcache_cooked_read_unsigned (current_regcache, PSW_REGNUM, &psw);
+ regcache_cooked_read_unsigned (regcache, PSW_REGNUM, &psw);
stackmode = psw & 0x80;
if (regno == SPI_REGNUM && !stackmode) /* SP == SPI */
- monitor_supply_register (SP_REGNUM, val);
+ monitor_supply_register (regcache,
+ gdbarch_sp_regnum (gdbarch), val);
else if (regno == SPU_REGNUM && stackmode) /* SP == SPU */
- monitor_supply_register (SP_REGNUM, val);
+ monitor_supply_register (regcache,
+ gdbarch_sp_regnum (gdbarch), val);
}
}
}
@@ -403,7 +415,7 @@ m32r_upload_command (char *args, int from_tty)
{
bfd *abfd;
asection *s;
- time_t start_time, end_time; /* for timing of download */
+ struct timeval start_time, end_time;
int resp_len, data_count = 0;
char buf[1024];
struct hostent *hostent;
@@ -413,7 +425,7 @@ m32r_upload_command (char *args, int 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)
{
@@ -432,6 +444,13 @@ m32r_upload_command (char *args, int from_tty)
}
if (server_addr == 0)
{
+#ifdef __MINGW32__
+ WSADATA wd;
+ /* Winsock initialization. */
+ if (WSAStartup (MAKEWORD (1, 1), &wd))
+ error (_("Couldn't initialize WINSOCK."));
+#endif
+
buf[0] = 0;
gethostname (buf, sizeof (buf));
if (buf[0] != 0)
@@ -465,7 +484,7 @@ m32r_upload_command (char *args, int from_tty)
("Need to know default download path (use 'set download-path')");
}
- start_time = time (NULL);
+ gettimeofday (&start_time, NULL);
monitor_printf ("uhip %s\r", server_addr);
resp_len = monitor_expect_prompt (buf, sizeof (buf)); /* parse result? */
monitor_printf ("ulip %s\r", board_addr);
@@ -489,7 +508,7 @@ m32r_upload_command (char *args, int from_tty)
else
printf_filtered (" -- Ethernet load complete.\n");
- end_time = time (NULL);
+ gettimeofday (&end_time, NULL);
abfd = bfd_openr (args, 0);
if (abfd != NULL)
{ /* Download is done -- print section statistics */
@@ -507,16 +526,19 @@ m32r_upload_command (char *args, int from_tty)
data_count += section_size;
printf_filtered ("Loading section %s, size 0x%lx lma ",
- bfd_section_name (abfd, s), section_size);
- print_address_numeric (section_base, 1, gdb_stdout);
+ bfd_section_name (abfd, s),
+ (unsigned long) section_size);
+ fputs_filtered (paddress (section_base), 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));
- printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
- print_transfer_performance (gdb_stdout, data_count, 0,
- end_time - start_time);
+ regcache_write_pc (get_current_regcache (),
+ bfd_get_start_address (abfd));
+ printf_filtered ("Start address 0x%lx\n",
+ (unsigned long) bfd_get_start_address (abfd));
+ print_transfer_performance (gdb_stdout, data_count, 0, &start_time,
+ &end_time);
}
inferior_ptid = null_ptid; /* No process now */
@@ -530,6 +552,9 @@ m32r_upload_command (char *args, int from_tty)
clear_symtab_users ();
}
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_m32r_rom;
+
void
_initialize_m32r_rom (void)
{
@@ -557,26 +582,32 @@ Specify the serial device it is connected to (e.g. /dev/ttya).";
mon2000_ops.to_open = mon2000_open;
add_target (&mon2000_ops);
- 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.");
-
- add_com ("tload", class_obscure, m32r_load, "test upload command.");
+ 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,
+ NULL, /* FIXME: i18n: The default path for downloadable SREC files is %s. */
+ &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,
+ NULL, /* FIXME: i18n: IP address for M32R-EVA target board is %s. */
+ &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,
+ NULL, /* FIXME: i18n: IP address for download server (GDB's host computer) is %s. */
+ &setlist, &showlist);
+
+ add_com ("upload", class_obscure, m32r_upload_command, _("\
+Upload the srec file via the monitor's Ethernet upload capability."));
+
+ add_com ("tload", class_obscure, m32r_load, _("test upload command."));
}