diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-05-19 00:57:48 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-05-19 00:57:48 +0000 |
commit | 993583e53b5537544f01aa235f068318557f4753 (patch) | |
tree | 80f7fbf0af136f7c30264c36388804a6fce9a77c /gdb/infcmd.c | |
parent | 27daf1a9146abed8dc51ff9e8f3bb1967b39da68 (diff) | |
download | gdb-993583e53b5537544f01aa235f068318557f4753.zip gdb-993583e53b5537544f01aa235f068318557f4753.tar.gz 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.c | 27 |
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 |