-/* Remote debugging interface for Hitachi E7000 ICE, for GDB
- Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
- Free Software Foundation, Inc.
+/* 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.
+
Contributed by Cygnus Support.
Written by Steve Chamberlain for Cygnus Support.
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, 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
#define SR_REGNUM -1
#endif
-extern void notice_quit (void);
-
extern void report_transfer_performance (unsigned long, time_t, time_t);
extern char *sh_processor_type;
static int e7000_parse_device (char *args, char *dev_name, int baudrate);
/* Variables. */
-static serial_t e7000_desc;
+static struct serial *e7000_desc;
/* Allow user to chose between using hardware breakpoints or memory. */
static int use_hard_breakpoints = 0; /* use sw breakpoints by default */
if (remote_debug)
printf_unfiltered ("Sending %s\n", buf);
- if (SERIAL_WRITE (e7000_desc, buf, strlen (buf)))
- fprintf_unfiltered (gdb_stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
+ if (serial_write (e7000_desc, buf, strlen (buf)))
+ fprintf_unfiltered (gdb_stderr, "serial_write failed: %s\n", safe_strerror (errno));
/* And expect to see it echoed, unless using the pc interface */
#if 0
char b[1];
b[0] = x;
- SERIAL_WRITE (e7000_desc, b, 1);
+ serial_write (e7000_desc, b, 1);
}
static void
write_e7000 (char *s)
{
- SERIAL_WRITE (e7000_desc, s, strlen (s));
+ serial_write (e7000_desc, s, strlen (s));
}
static int
do
{
- c = SERIAL_READCHAR (e7000_desc, timeout);
+ c = serial_readchar (e7000_desc, timeout);
}
while (c > 127);
while (1)
{
c = readchar (timeout);
-#if 0
- notice_quit ();
- if (quit_flag == 1)
- {
- if (ctrl_c)
- {
- putchar_e7000 (CTRLC);
- --ctrl_c;
- }
- else
- {
- quit ();
- }
- }
-#endif
if (echo)
{
flush_cached_frames ();
registers_changed ();
stop_pc = read_pc ();
- set_current_frame (create_new_frame (read_fp (), stop_pc));
- select_frame (get_current_frame (), 0);
- print_stack_frame (selected_frame, -1, 1);
+ print_stack_frame (get_selected_frame (), -1, 1);
return 1;
}
push_target (&e7000_ops);
- e7000_desc = SERIAL_OPEN (dev_name);
+ e7000_desc = serial_open (dev_name);
if (!e7000_desc)
perror_with_name (dev_name);
- if (SERIAL_SETBAUDRATE (e7000_desc, baudrate))
+ if (serial_setbaudrate (e7000_desc, baudrate))
{
- SERIAL_CLOSE (dev_name);
+ serial_close (e7000_desc);
perror_with_name (dev_name);
}
- SERIAL_RAW (e7000_desc);
+ serial_raw (e7000_desc);
#ifdef GDB_TARGET_IS_H8300
h8300hmode = 1;
{
if (e7000_desc)
{
- SERIAL_CLOSE (e7000_desc);
+ serial_close (e7000_desc);
e7000_desc = 0;
}
}
return (high << 4) + low;
}
-void
+static void
fetch_regs_from_dump (int (*nextchar) (), char *want)
{
int regno;
- char buf[MAX_REGISTER_RAW_SIZE];
+ char buf[MAX_REGISTER_SIZE];
int thischar = nextchar ();
+ if (want == NULL)
+ internal_error (__FILE__, __LINE__, "Register set not selected.");
+
while (*want)
{
switch (*want)
want++;
break;
#endif
-#ifdef FP_REGNUM
+#ifdef DEPRECATED_FP_REGNUM
case 'f':
- regno = FP_REGNUM;
+ regno = DEPRECATED_FP_REGNUM;
want++;
break;
#endif
internal_error (__FILE__, __LINE__, "failed internal consistency check");
}
store_signed_integer (buf,
- REGISTER_RAW_SIZE (regno),
+ DEPRECATED_REGISTER_RAW_SIZE (regno),
(LONGEST) get_hex (&thischar));
supply_register (regno, buf);
break;
e7000_fetch_registers (void)
{
int regno;
- char *wanted;
+ char *wanted = NULL;
puts_e7000debug ("R\r");
{
if (regno <= 7)
{
- sprintf (buf, ".ER%d %lx\r", regno, read_register (regno));
+ sprintf (buf, ".ER%d %s\r", regno, phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
else if (regno == PC_REGNUM)
{
- sprintf (buf, ".PC %lx\r", read_register (regno));
+ sprintf (buf, ".PC %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
#ifdef CCR_REGNUM
else if (regno == CCR_REGNUM)
{
- sprintf (buf, ".CCR %lx\r", read_register (regno));
+ sprintf (buf, ".CCR %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
#endif
{
if (regno == PC_REGNUM)
{
- sprintf (buf, ".PC %lx\r", read_register (regno));
+ sprintf (buf, ".PC %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
else if (regno == SR_REGNUM)
{
- sprintf (buf, ".SR %lx\r", read_register (regno));
+ sprintf (buf, ".SR %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
else if (regno == PR_REGNUM)
{
- sprintf (buf, ".PR %lx\r", read_register (regno));
+ sprintf (buf, ".PR %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
else if (regno == GBR_REGNUM)
{
- sprintf (buf, ".GBR %lx\r", read_register (regno));
+ sprintf (buf, ".GBR %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
else if (regno == VBR_REGNUM)
{
- sprintf (buf, ".VBR %lx\r", read_register (regno));
+ sprintf (buf, ".VBR %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
else if (regno == MACH_REGNUM)
{
- sprintf (buf, ".MACH %lx\r", read_register (regno));
+ sprintf (buf, ".MACH %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
else if (regno == MACL_REGNUM)
{
- sprintf (buf, ".MACL %lx\r", read_register (regno));
+ sprintf (buf, ".MACL %s\r", phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
else
{
- sprintf (buf, ".R%d %lx\r", regno, read_register (regno));
+ sprintf (buf, ".R%d %s\r", regno, phex_nz (read_register (regno), 0));
puts_e7000debug (buf);
}
}
if (((memaddr + i) & 3) == 0 && (i + 3 < len))
{
/* Can be done with a long word */
- sprintf (buf, "m %lx %x%02x%02x%02x;l\r",
- memaddr + i,
+ sprintf (buf, "m %s %x%02x%02x%02x;l\r",
+ paddr_nz (memaddr + i),
myaddr[i], myaddr[i + 1], myaddr[i + 2], myaddr[i + 3]);
puts_e7000debug (buf);
i += 3;
}
else
{
- sprintf (buf, "m %lx %x\r", memaddr + i, myaddr[i]);
+ sprintf (buf, "m %s %x\r", paddr_nz (memaddr + i), myaddr[i]);
puts_e7000debug (buf);
}
}
compose[where++] = '\n';
compose[where++] = 0;
- SERIAL_WRITE (e7000_desc, compose, where);
+ serial_write (e7000_desc, compose, where);
j = readchar (0);
if (j == -1)
{
return 0;
}
- sprintf (buf, "m %lx;l\r", memaddr);
+ sprintf (buf, "m %s;l\r", paddr_nz (memaddr));
puts_e7000debug (buf);
for (count = 0; count < len; count += 4)
return 0;
}
- sprintf (buf, "d %lx %lx\r", memaddr, memaddr + len - 1);
+ sprintf (buf, "d %s %s\r", paddr_nz (memaddr), paddr_nz (memaddr + len - 1));
puts_e7000debug (buf);
count = 0;
Returns the number of bytes transferred. */
static int
-e7000_xfer_inferior_memory (CORE_ADDR memaddr, char *myaddr,
- int len, int write,
- struct mem_attrib *attrib ATTRIBUTE_UNUSED,
- struct target_ops *target ATTRIBUTE_UNUSED)
+e7000_xfer_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len,
+ int write, struct mem_attrib *attrib,
+ struct target_ops *target)
{
if (write)
return e7000_write_inferior_memory (memaddr, myaddr, len);
section_size = bfd_get_section_size_before_reloc (section);
if (!quiet)
- printf_filtered ("[Loading section %s at 0x%x (%ud bytes)]\n",
+ printf_filtered ("[Loading section %s at 0x%s (%s bytes)]\n",
bfd_get_section_name (pbfd, section),
- section_address,
- section_size);
+ paddr_nz (section_address),
+ paddr_u (section_size));
fptr = 0;
bfd_get_section_contents (pbfd, section, buf + 10, fptr, count);
- if (SERIAL_WRITE (e7000_desc, buf, count + 10))
+ if (serial_write (e7000_desc, buf, count + 10))
fprintf_unfiltered (gdb_stderr,
- "e7000_load: SERIAL_WRITE failed: %s\n",
+ "e7000_load: serial_write failed: %s\n",
safe_strerror (errno));
expect ("OK");
entry = bfd_get_start_address (pbfd);
if (!quiet)
- printf_unfiltered ("[Starting %s at 0x%x]\n", filename, entry);
+ printf_unfiltered ("[Starting %s at 0x%s]\n", filename, paddr_nz (entry));
/* start_routine (entry); */
}
#ifdef HARD_BREAKPOINTS
if (BC_BREAKPOINTS)
{
- sprintf (buf, "BC%d A=%lx\r", i + 1, addr);
+ sprintf (buf, "BC%d A=%s\r", i + 1, paddr_nz (addr));
puts_e7000debug (buf);
}
else
{
- sprintf (buf, "B %lx\r", addr);
+ sprintf (buf, "B %s\r", paddr_nz (addr));
puts_e7000debug (buf);
}
#else
}
else
{
- sprintf (buf, "B - %lx\r", addr);
+ sprintf (buf, "B - %s\r", paddr_nz (addr));
puts_e7000debug (buf);
}
expect_prompt ();
#else
- sprintf (buf, "B - %lx\r", addr);
+ sprintf (buf, "B - %s\r", paddr_nz (addr));
puts_e7000debug (buf);
expect_prompt ();
return 0;
}
-
- warning ("Can't find breakpoint associated with 0x%lx\n", addr);
+
+ warning ("Can't find breakpoint associated with 0x%s\n", paddr_nz (addr));
return 1;
}
puts_e7000debug ("end\r");
putchar_e7000 (CTRLC);
- while ((c = readchar (1) != -1))
+ while ((c = readchar (1)) != -1)
{
if (quit_flag)
{
/* 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),
+ DEPRECATED_REGISTER_RAW_SIZE (PC_REGNUM),
read_register (PC_REGNUM) - 2);
supply_register (PC_REGNUM, buf);
- sprintf (buf2, ".PC %lx\r", read_register (PC_REGNUM));
+ sprintf (buf2, ".PC %s\r", phex_nz (read_register (PC_REGNUM), 0));
puts_e7000debug (buf2);
}
int running_count = 0;
int had_sleep = 0;
int loop = 1;
- char *wanted_nopc;
+ char *wanted_nopc = NULL;
/* Then echo chars until PC= string seen */
gch (); /* Drop cr */
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\
target e7000 foobar";
e7000_ops.to_open = e7000_open;
e7000_ops.to_close = e7000_close;
- e7000_ops.to_attach = 0;
- e7000_ops.to_post_attach = NULL;
- e7000_ops.to_require_attach = NULL;
e7000_ops.to_detach = e7000_detach;
- e7000_ops.to_require_detach = NULL;
e7000_ops.to_resume = e7000_resume;
e7000_ops.to_wait = e7000_wait;
- e7000_ops.to_post_wait = NULL;
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_files_info = e7000_files_info;
e7000_ops.to_insert_breakpoint = e7000_insert_breakpoint;
e7000_ops.to_remove_breakpoint = e7000_remove_breakpoint;
- e7000_ops.to_terminal_init = 0;
- e7000_ops.to_terminal_inferior = 0;
- e7000_ops.to_terminal_ours_for_output = 0;
- e7000_ops.to_terminal_ours = 0;
- e7000_ops.to_terminal_info = 0;
e7000_ops.to_kill = e7000_kill;
e7000_ops.to_load = e7000_load;
- e7000_ops.to_lookup_symbol = 0;
e7000_ops.to_create_inferior = e7000_create_inferior;
- e7000_ops.to_post_startup_inferior = NULL;
- e7000_ops.to_acknowledge_created_inferior = NULL;
- e7000_ops.to_clone_and_follow_inferior = NULL;
- e7000_ops.to_post_follow_inferior_by_clone = NULL;
- e7000_ops.to_insert_fork_catchpoint = NULL;
- e7000_ops.to_remove_fork_catchpoint = NULL;
- e7000_ops.to_insert_vfork_catchpoint = NULL;
- e7000_ops.to_remove_vfork_catchpoint = NULL;
- e7000_ops.to_has_forked = NULL;
- e7000_ops.to_has_vforked = NULL;
- e7000_ops.to_can_follow_vfork_prior_to_exec = NULL;
- e7000_ops.to_post_follow_vfork = NULL;
- e7000_ops.to_insert_exec_catchpoint = NULL;
- e7000_ops.to_remove_exec_catchpoint = NULL;
- e7000_ops.to_has_execd = NULL;
- e7000_ops.to_reported_exec_events_per_exec_call = NULL;
- e7000_ops.to_has_exited = NULL;
e7000_ops.to_mourn_inferior = e7000_mourn_inferior;
- e7000_ops.to_can_run = 0;
- e7000_ops.to_notice_signals = 0;
- e7000_ops.to_thread_alive = 0;
e7000_ops.to_stop = e7000_stop;
- e7000_ops.to_pid_to_exec_file = NULL;
e7000_ops.to_stratum = process_stratum;
- e7000_ops.DONT_USE = 0;
e7000_ops.to_has_all_memory = 1;
e7000_ops.to_has_memory = 1;
e7000_ops.to_has_stack = 1;
e7000_ops.to_has_registers = 1;
e7000_ops.to_has_execution = 1;
- e7000_ops.to_sections = 0;
- e7000_ops.to_sections_end = 0;
e7000_ops.to_magic = OPS_MAGIC;
};
+extern initialize_file_ftype _initialize_remote_e7000; /* -Wmissing-prototypes */
+
void
_initialize_remote_e7000 (void)
{