get_prev_frame, stop_reason != UNWIND_NO_REASON, add frame debug output.

The stop_reason != UNWIND_NO_REASON doesn't currently have "set debug
frame" output.  This patch makes it print the stop_reason enum value
as a string.

gdb/
2013-11-28  Pedro Alves  <palves@redhat.com>

	* frame.c (get_prev_frame_1) <stop_reason != UNWIND_NO_REASON>:
	Add "set debug frame" output.
	(frame_stop_reason_symbol_string): New function.
This commit is contained in:
Pedro Alves 2013-11-28 18:09:41 +00:00
parent 50fd528a13
commit a730086980
2 changed files with 38 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2013-11-28 Pedro Alves <palves@redhat.com>
* frame.c (get_prev_frame_1) <stop_reason != UNWIND_NO_REASON>:
Add "set debug frame" output.
(frame_stop_reason_symbol_string): New function.
2013-11-28 Pedro Alves <palves@redhat.com>
* frame-unwind.c (default_frame_unwind_stop_reason): Return

View File

@ -48,6 +48,7 @@
static struct frame_info *get_prev_frame_1 (struct frame_info *this_frame);
static struct frame_info *get_prev_frame_raw (struct frame_info *this_frame);
static const char *frame_stop_reason_symbol_string (enum unwind_stop_reason reason);
/* We keep a cache of stack frames, each of which is a "struct
frame_info". The innermost one gets allocated (in
@ -1771,7 +1772,18 @@ get_prev_frame_1 (struct frame_info *this_frame)
&this_frame->prologue_cache);
if (this_frame->stop_reason != UNWIND_NO_REASON)
return NULL;
{
if (frame_debug)
{
enum unwind_stop_reason reason = this_frame->stop_reason;
fprintf_unfiltered (gdb_stdlog, "-> ");
fprint_frame (gdb_stdlog, NULL);
fprintf_unfiltered (gdb_stdlog, " // %s }\n",
frame_stop_reason_symbol_string (reason));
}
return NULL;
}
/* Check that this frame's ID isn't inner to (younger, below, next)
the next frame. This happens when a frame unwind goes backwards.
@ -2479,6 +2491,25 @@ frame_stop_reason_string (enum unwind_stop_reason reason)
}
}
/* Return the enum symbol name of REASON as a string, to use in debug
output. */
static const char *
frame_stop_reason_symbol_string (enum unwind_stop_reason reason)
{
switch (reason)
{
#define SET(name, description) \
case name: return #name;
#include "unwind_stop_reasons.def"
#undef SET
default:
internal_error (__FILE__, __LINE__,
"Invalid frame stop reason");
}
}
/* Clean up after a failed (wrong unwinder) attempt to unwind past
FRAME. */