aboutsummaryrefslogtreecommitdiff
path: root/gdb/infcmd.c
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1993-05-19 00:57:48 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1993-05-19 00:57:48 +0000
commit993583e53b5537544f01aa235f068318557f4753 (patch)
tree80f7fbf0af136f7c30264c36388804a6fce9a77c /gdb/infcmd.c
parent27daf1a9146abed8dc51ff9e8f3bb1967b39da68 (diff)
downloadfsf-binutils-gdb-993583e53b5537544f01aa235f068318557f4753.zip
fsf-binutils-gdb-993583e53b5537544f01aa235f068318557f4753.tar.gz
fsf-binutils-gdb-993583e53b5537544f01aa235f068318557f4753.tar.bz2
* blockframe.c (get_prev_frame_info): If pc in sigtramp, set
signal_handler_caller. * tm-68k.h (FRAME_{CHAIN,SAVED_PC}): Deal with sigtramp. * tm-hp300bsd.h: Define SIGTRAMP_{START,END} not IN_SIGTRAMP. * inferior.h (IN_SIGTRAMP): Definition moved from infrun.c. Use SIGTRAMP_START if defined. * infcmd.c (step_1): Use SIGTRAMP_{START,END} if needed. * infrun.c (wait_for_inferior): Check IN_SIGTRAMP before SKIP_PROLOGUE.
Diffstat (limited to 'gdb/infcmd.c')
-rw-r--r--gdb/infcmd.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 9746583..666be8e 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -365,23 +365,36 @@ 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. */
+ /* FIXME: This should be using containing_function_bounds or a
+ cleaned-up version thereof, to deal with things like the
+ end of the text segment. */
msymbol = lookup_minimal_symbol_by_pc (stop_pc);
target_terminal_ours ();
printf_filtered ("Current function has no line number information.\n");
fflush (stdout);
- /* No info or after _etext ("Can't happen") */
if (msymbol == NULL || SYMBOL_NAME (msymbol + 1) == NULL)
- error ("Cannot find bounds of current function.");
+ {
+ /* If sigtramp is in the u area, check for it. */
+#if defined SIGTRAMP_START
+ if (IN_SIGTRAMP (stop_pc, (char *)NULL))
+ {
+ step_range_start = SIGTRAMP_START;
+ step_range_end = SIGTRAMP_END;
+ }
+ else
+#endif
+ error ("Cannot find bounds of current function.");
+ }
+ else
+ {
+ step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
+ step_range_end = SYMBOL_VALUE_ADDRESS (msymbol + 1);
+ }
printf_filtered ("Single stepping until function exit.\n");
fflush (stdout);
-
- step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
- step_range_end = SYMBOL_VALUE_ADDRESS (msymbol + 1);
}
}
else