-/* Remote debugging interface for Hitachi E7000 ICE, for GDB
+/* Remote debugging interface for Renesas E7000 ICE, for GDB
- Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Cygnus Support.
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. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
-/* The E7000 is an in-circuit emulator for the Hitachi H8/300-H and
- Hitachi-SH processor. It has serial port and a lan port.
+/* The E7000 is an in-circuit emulator for the Renesas H8/300-H and
+ Renesas-SH processor. It has serial port and a lan port.
The monitor command set makes it difficult to load large ammounts of
data over the lan without using ftp - so try not to issue load
#include "value.h"
#include "command.h"
#include "gdb_string.h"
+#include "exceptions.h"
#include "gdbcmd.h"
#include <sys/types.h>
#include "serial.h"
puts_e7000debug (char *buf)
{
if (!e7000_desc)
- error ("Use \"target e7000 ...\" first.");
+ error (_("Use \"target e7000 ...\" first."));
if (remote_debug)
printf_unfiltered ("Sending %s\n", buf);
if (timeout == 0)
return -1;
echo = 0;
- error ("Timeout reading from remote system.");
+ error (_("Timeout reading from remote system."));
}
else if (c < 0)
- error ("Serial communication error");
+ error (_("Serial communication error"));
if (remote_debug)
{
val = 0;
for (j = 0; j < 8; j++)
val = (val << 4) + get_hex_digit (j == 0);
- supply_register (regno++, (char *) &val);
+ regcache_raw_supply (current_regcache, regno++, (char *) &val);
}
}
#endif
user types "run" after having attached. */
static void
-e7000_create_inferior (char *execfile, char *args, char **env)
+e7000_create_inferior (char *execfile, char *args, char **env,
+ int from_tty)
{
int entry_pt;
if (args && *args)
- error ("Can't pass arguments to remote E7000DEBUG process");
+ error (_("Can't pass arguments to remote E7000DEBUG process"));
if (execfile == 0 || exec_bfd == 0)
- error ("No executable file specified");
+ error (_("No executable file specified"));
entry_pt = (int) bfd_get_start_address (exec_bfd);
}
else
{
- error ("Syntax is ftplogin <machine> <user> <passwd> <directory>");
+ error (_("Syntax is ftplogin <machine> <user> <passwd> <directory>"));
}
}
if (n != 1 && n != 2)
{
- error ("Bad arguments. Usage:\ttarget e7000 <device> <speed>\n\
+ error (_("Bad arguments. Usage:\ttarget e7000 <device> <speed>\n\
or \t\ttarget e7000 <host>[:<port>]\n\
or \t\ttarget e7000 tcp_remote <host>[:<port>]\n\
-or \t\ttarget e7000 pc\n");
+or \t\ttarget e7000 pc\n"));
}
#if !defined(__GO32__) && !defined(_WIN32) && !defined(__CYGWIN__)
if (!sync)
{
fprintf_unfiltered (gdb_stderr, "Giving up after %d tries...\n", try);
- error ("Unable to synchronize with target.\n");
+ error (_("Unable to synchronize with target."));
}
puts_e7000debug ("\r");
flush_cached_frames ();
registers_changed ();
stop_pc = read_pc ();
- print_stack_frame (get_selected_frame (), -1, 1);
+ print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
return 1;
}
}
serial_raw (e7000_desc);
-#ifdef GDB_TARGET_IS_H8300
- h8300hmode = 1;
-#endif
-
/* Start the remote connection; if error (0), discard this target.
In particular, if the user quits, be sure to discard it
(we'd be in an inconsistent state otherwise). */
return (high << 4) + low;
}
-void
+static void
fetch_regs_from_dump (int (*nextchar) (), char *want)
{
int regno;
- char *buf = alloca (max_register_size (current_gdbarch));
+ char buf[MAX_REGISTER_SIZE];
int thischar = nextchar ();
if (want == NULL)
- internal_error (__FILE__, __LINE__, "Register set not selected.");
+ internal_error (__FILE__, __LINE__, _("Register set not selected."));
while (*want)
{
}
else
{
- error ("out of sync in fetch registers wanted <%s>, got <%c 0x%x>",
+ error (_("out of sync in fetch registers wanted <%s>, got <%c 0x%x>"),
want, thischar, thischar);
}
}
else
- internal_error (__FILE__, __LINE__, "failed internal consistency check");
+ internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
}
store_signed_integer (buf,
- REGISTER_RAW_SIZE (regno),
+ register_size (current_gdbarch, regno),
(LONGEST) get_hex (&thischar));
- supply_register (regno, buf);
+ regcache_raw_supply (current_regcache, regno, buf);
break;
}
}
{
int regno;
char *wanted = NULL;
+ int realregs = 0;
puts_e7000debug ("R\r");
if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
{
wanted = want_sh;
+ realregs = 59;
switch (TARGET_ARCHITECTURE->mach)
{
case bfd_mach_sh3:
wanted = want_sh3;
}
}
-#ifdef GDB_TARGET_IS_H8300
if (TARGET_ARCHITECTURE->arch == bfd_arch_h8300)
{
- if (h8300smode)
- wanted = want_h8300s;
- else
- wanted = want_h8300h;
+ wanted = want_h8300h;
+ realregs = 10;
+ switch (TARGET_ARCHITECTURE->mach)
+ {
+ case bfd_mach_h8300s:
+ case bfd_mach_h8300sn:
+ case bfd_mach_h8300sx:
+ case bfd_mach_h8300sxn:
+ wanted = want_h8300s;
+ realregs = 11;
+ }
}
-#endif
fetch_regs_from_dump (gch, wanted);
/* And supply the extra ones the simulator uses */
- for (regno = NUM_REALREGS; regno < NUM_REGS; regno++)
+ for (regno = realregs; regno < NUM_REGS; regno++)
{
int buf = 0;
- supply_register (regno, (char *) (&buf));
+ regcache_raw_supply (current_regcache, regno, (char *) (&buf));
}
}
e7000_store_registers (void)
{
int regno;
+ int realregs = 0;
- for (regno = 0; regno < NUM_REALREGS; regno++)
+ if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
+ realregs = 59;
+ if (TARGET_ARCHITECTURE->arch == bfd_arch_h8300) {
+ realregs = ((TARGET_ARCHITECTURE->mach == bfd_mach_h8300s ||
+ TARGET_ARCHITECTURE->mach == bfd_mach_h8300sn ||
+ TARGET_ARCHITECTURE->mach == bfd_mach_h8300sx ||
+ TARGET_ARCHITECTURE->mach == bfd_mach_h8300sxn) ? 11 : 10);
+ }
+
+ for (regno = 0; regno < realregs; regno++)
e7000_store_register (regno);
registers_changed ();
{
/* Hmm, it's trying to tell us something */
expect (":");
- error ("Error writing memory");
+ error (_("Error writing memory"));
}
else
{
if (c != ENQ)
{
/* Got an error */
- error ("Memory read error");
+ error (_("Memory read error"));
}
putchar_e7000 (ACK);
expect ("SV s");
Returns the number of bytes transferred. */
static int
-e7000_xfer_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len,
+e7000_xfer_inferior_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
int write, struct mem_attrib *attrib,
struct target_ops *target)
{
else if (strncmp (arg, "-nostart", strlen (arg)) == 0)
nostart = 1;
else
- error ("unknown option `%s'", arg);
+ error (_("unknown option `%s'"), arg);
}
if (!filename)
old_chain = make_cleanup_bfd_close (pbfd);
if (!bfd_check_format (pbfd, bfd_object))
- error ("\"%s\" is not an object file: %s", filename,
+ error (_("\"%s\" is not an object file: %s"), filename,
bfd_errmsg (bfd_get_error ()));
start_time = time (NULL);
file_ptr fptr;
section_address = bfd_get_section_vma (pbfd, section);
- section_size = bfd_get_section_size_before_reloc (section);
+ section_size = bfd_get_section_size (section);
if (!quiet)
printf_filtered ("[Loading section %s at 0x%s (%s bytes)]\n",
{0};
static int
-e7000_insert_breakpoint (CORE_ADDR addr, char *shadow)
+e7000_insert_breakpoint (CORE_ADDR addr, bfd_byte *shadow)
{
int i;
char buf[200];
return 0;
}
- error ("Too many breakpoints ( > %d) for the E7000\n",
+ error (_("Too many breakpoints ( > %d) for the E7000."),
MAX_E7000DEBUG_BREAKPOINTS);
return 1;
}
static int
-e7000_remove_breakpoint (CORE_ADDR addr, char *shadow)
+e7000_remove_breakpoint (CORE_ADDR addr, bfd_byte *shadow)
{
int i;
char buf[200];
return 0;
}
- warning ("Can't find breakpoint associated with 0x%s\n", paddr_nz (addr));
+ warning (_("Can't find breakpoint associated with 0x%s."), paddr_nz (addr));
return 1;
}
echo = 0;
if (!e7000_desc)
- error ("e7000 target not open.");
+ error (_("e7000 target not open."));
if (!args)
{
puts_e7000debug ("\r");
/* Suck characters, if a string match, then return the strings index
otherwise echo them. */
-int
+static int
expect_n (char **strings)
{
char *(ptr[10]);
char buf2[200];
store_signed_integer (buf,
- REGISTER_RAW_SIZE (PC_REGNUM),
+ register_size (current_gdbarch, PC_REGNUM),
read_register (PC_REGNUM) - 2);
- supply_register (PC_REGNUM, buf);
+ regcache_raw_supply (current_regcache, PC_REGNUM, buf);
sprintf (buf2, ".PC %s\r", phex_nz (read_register (PC_REGNUM), 0));
puts_e7000debug (buf2);
}
int had_sleep = 0;
int loop = 1;
char *wanted_nopc = NULL;
+ int realregs = 0;
/* Then echo chars until PC= string seen */
gch (); /* Drop cr */
if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
{
wanted_nopc = want_nopc_sh;
+ realregs = 59;
switch (TARGET_ARCHITECTURE->mach)
{
case bfd_mach_sh3:
wanted_nopc = want_nopc_sh3;
}
}
-#ifdef GDB_TARGET_IS_H8300
if (TARGET_ARCHITECTURE->arch == bfd_arch_h8300)
{
- if (h8300smode)
- wanted_nopc = want_nopc_h8300s;
- else
- wanted_nopc = want_nopc_h8300h;
+ wanted_nopc = want_nopc_h8300h;
+ realregs = 10;
+ switch (TARGET_ARCHITECTURE->mach)
+ {
+ case bfd_mach_h8300s:
+ case bfd_mach_h8300sn:
+ case bfd_mach_h8300sx:
+ case bfd_mach_h8300sxn:
+ wanted_nopc = want_nopc_h8300s;
+ realregs = 11;
+ }
}
-#endif
fetch_regs_from_dump (gch, wanted_nopc);
/* And supply the extra ones the simulator uses */
- for (regno = NUM_REALREGS; regno < NUM_REGS; regno++)
+ for (regno = realregs; regno < NUM_REGS; regno++)
{
int buf = 0;
- supply_register (regno, (char *) &buf);
+ regcache_raw_supply (current_regcache, regno, (char *) &buf);
}
stop_reason = why_stop ();
break;
default:
/* Get the user's attention - this should never happen. */
- internal_error (__FILE__, __LINE__, "failed internal consistency check");
+ internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
}
return inferior_ptid;
init_e7000_ops (void)
{
e7000_ops.to_shortname = "e7000";
- e7000_ops.to_longname = "Remote Hitachi e7000 target";
- e7000_ops.to_doc = "Use a remote Hitachi e7000 ICE connected by a serial line;\n\
+ e7000_ops.to_longname = "Remote Renesas e7000 target";
+ e7000_ops.to_doc = "Use a remote Renesas e7000 ICE connected by a serial line;\n\
or a network connection.\n\
Arguments are the name of the device for the serial line,\n\
the speed to connect at in bits per second.\n\
e7000_ops.to_fetch_registers = e7000_fetch_register;
e7000_ops.to_store_registers = e7000_store_register;
e7000_ops.to_prepare_to_store = e7000_prepare_to_store;
- e7000_ops.to_xfer_memory = e7000_xfer_inferior_memory;
+ e7000_ops.deprecated_xfer_memory = e7000_xfer_inferior_memory;
e7000_ops.to_files_info = e7000_files_info;
e7000_ops.to_insert_breakpoint = e7000_insert_breakpoint;
e7000_ops.to_remove_breakpoint = e7000_remove_breakpoint;
e7000_ops.to_magic = OPS_MAGIC;
};
+extern initialize_file_ftype _initialize_remote_e7000; /* -Wmissing-prototypes */
+
void
_initialize_remote_e7000 (void)
{
add_target (&e7000_ops);
add_com ("e7000", class_obscure, e7000_command,
- "Send a command to the e7000 monitor.");
+ _("Send a command to the e7000 monitor."));
add_com ("ftplogin", class_obscure, e7000_login_command,
- "Login to machine and change to directory.");
+ _("Login to machine and change to directory."));
add_com ("ftpload", class_obscure, e7000_ftp_command,
- "Fetch and load a file from previously described place.");
+ _("Fetch and load a file from previously described place."));
add_com ("drain", class_obscure, e7000_drain_command,
- "Drain pending e7000 text buffers.");
-
- add_show_from_set (add_set_cmd ("usehardbreakpoints", no_class,
- var_integer, (char *) &use_hard_breakpoints,
- "Set use of hardware breakpoints for all breakpoints.\n", &setlist),
- &showlist);
+ _("Drain pending e7000 text buffers."));
+
+ add_setshow_integer_cmd ("usehardbreakpoints", no_class,
+ &use_hard_breakpoints, _("\
+Set use of hardware breakpoints for all breakpoints."), _("\
+Show use of hardware breakpoints for all breakpoints."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
}