aboutsummaryrefslogtreecommitdiff
path: root/gdb/infcmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/infcmd.c')
-rw-r--r--gdb/infcmd.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 05d2214..9746583 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -365,6 +365,9 @@ step_1 (skip_subroutines, single_inst, count_string)
{
struct minimal_symbol *msymbol;
+ /* FIXME: we should be using containing_function_bounds or
+ a cleaned up version thereof. */
+
msymbol = lookup_minimal_symbol_by_pc (stop_pc);
target_terminal_ours ();
printf_filtered ("Current function has no line number information.\n");
@@ -372,7 +375,7 @@ step_1 (skip_subroutines, single_inst, count_string)
/* No info or after _etext ("Can't happen") */
if (msymbol == NULL || SYMBOL_NAME (msymbol + 1) == NULL)
- error ("No data available on pc function.");
+ error ("Cannot find bounds of current function.");
printf_filtered ("Single stepping until function exit.\n");
fflush (stdout);
@@ -874,17 +877,25 @@ path_command (dirname, from_tty)
path_info ((char *)NULL, from_tty);
}
+/* XXX - This routine is getting awfully cluttered with #if's. It's probably
+ time to turn this into target_read_pc. Ditto for write_pc. */
+
CORE_ADDR
read_pc ()
{
-#if GDB_TARGET_IS_HPPA
+#ifdef GDB_TARGET_IS_HPPA
int flags = read_register(FLAGS_REGNUM);
if (flags & 2)
- return read_register(31) & ~0x3;
-#endif
-
+ return read_register(31) & ~0x3; /* User PC is here when in sys call */
+ return read_register (PC_REGNUM) & ~0x3;
+#else
+#ifdef GDB_TARGET_IS_H8500
+ return (read_register (SEG_C_REGNUM) << 16) | read_register (PC_REGNUM);
+#else
return ADDR_BITS_REMOVE ((CORE_ADDR) read_register (PC_REGNUM));
+#endif
+#endif
}
void
@@ -893,7 +904,13 @@ write_pc (val)
{
write_register (PC_REGNUM, (long) val);
#ifdef NPC_REGNUM
- write_register (NPC_REGNUM, (long) val+4);
+ write_register (NPC_REGNUM, (long) val + 4);
+#ifdef NNPC_REGNUM
+ write_register (NNPC_REGNUM, (long) val + 8);
+#endif
+#endif
+#ifdef GDB_TARGET_IS_H8500
+ write_register (SEG_C_REGNUM, val >> 16);
#endif
pc_changed = 0;
}
@@ -1079,7 +1096,7 @@ attach_command (args, from_tty)
if (query ("A program is being debugged already. Kill it? "))
target_kill ();
else
- error ("Inferior not killed.");
+ error ("Not killed.");
}
target_attach (args, from_tty);