2004-05-01 Andrew Cagney <cagney@redhat.com>

* frame.c (create_sentinel_frame): Set type to SENTINEL_FRAME.
	* dummy-frame.c (dummy_frame_this_id): Use get_frame_type, instead
	of frame_relative_level.
	* sentinel-frame.c (sentinel_frame_unwinder): Set unwinder's type
	to SENTINEL_FRAME.
	* frame.h (enum frame_type): Add SENTINEL_FRAME.
	* s390-tdep.c (s390_prologue_frame_unwind_cache): Delete calls to
	frame_relative_level.
This commit is contained in:
Andrew Cagney
2004-05-01 19:35:22 +00:00
parent 55699d593f
commit 0e100dab2e
6 changed files with 25 additions and 12 deletions

View File

@ -1,3 +1,14 @@
2004-05-01 Andrew Cagney <cagney@redhat.com>
* frame.c (create_sentinel_frame): Set type to SENTINEL_FRAME.
* dummy-frame.c (dummy_frame_this_id): Use get_frame_type, instead
of frame_relative_level.
* sentinel-frame.c (sentinel_frame_unwinder): Set unwinder's type
to SENTINEL_FRAME.
* frame.h (enum frame_type): Add SENTINEL_FRAME.
* s390-tdep.c (s390_prologue_frame_unwind_cache): Delete calls to
frame_relative_level.
2004-05-01 Andrew Cagney <cagney@redhat.com> 2004-05-01 Andrew Cagney <cagney@redhat.com>
* frame.h (deprecated_set_frame_type): Delete declaration. * frame.h (deprecated_set_frame_type): Delete declaration.

View File

@ -353,7 +353,7 @@ dummy_frame_this_id (struct frame_info *next_frame,
determine the dummy frame's ID. */ determine the dummy frame's ID. */
(*this_id) = gdbarch_unwind_dummy_id (current_gdbarch, next_frame); (*this_id) = gdbarch_unwind_dummy_id (current_gdbarch, next_frame);
} }
else if (frame_relative_level (next_frame) < 0) else if (get_frame_type (next_frame) == SENTINEL_FRAME)
{ {
/* We're unwinding a sentinel frame, the PC of which is pointing /* We're unwinding a sentinel frame, the PC of which is pointing
at a stack dummy. Fake up the dummy frame's ID using the at a stack dummy. Fake up the dummy frame's ID using the

View File

@ -767,7 +767,7 @@ static struct frame_info *
create_sentinel_frame (struct regcache *regcache) create_sentinel_frame (struct regcache *regcache)
{ {
struct frame_info *frame = FRAME_OBSTACK_ZALLOC (struct frame_info); struct frame_info *frame = FRAME_OBSTACK_ZALLOC (struct frame_info);
frame->type = NORMAL_FRAME; frame->type = SENTINEL_FRAME;
frame->level = -1; frame->level = -1;
/* Explicitly initialize the sentinel frame's cache. Provide it /* Explicitly initialize the sentinel frame's cache. Provide it
with the underlying regcache. In the future additional with the underlying regcache. In the future additional

View File

@ -355,7 +355,10 @@ enum frame_type
DUMMY_FRAME, DUMMY_FRAME,
/* In a signal handler, various OSs handle this in various ways. /* In a signal handler, various OSs handle this in various ways.
The main thing is that the frame may be far from normal. */ The main thing is that the frame may be far from normal. */
SIGTRAMP_FRAME SIGTRAMP_FRAME,
/* Sentinel or registers frame. This frame obtains register values
direct from the inferior's registers. */
SENTINEL_FRAME
}; };
extern enum frame_type get_frame_type (struct frame_info *); extern enum frame_type get_frame_type (struct frame_info *);

View File

@ -1803,10 +1803,10 @@ s390_prologue_frame_unwind_cache (struct frame_info *next_frame,
/* If the next frame is a NORMAL_FRAME, this frame *cannot* have frame /* If the next frame is a NORMAL_FRAME, this frame *cannot* have frame
size zero. This is only possible if the next frame is a sentinel size zero. This is only possible if the next frame is a sentinel
frame, a dummy frame, or a signal trampoline frame. */ frame, a dummy frame, or a signal trampoline frame. */
if (get_frame_type (next_frame) == NORMAL_FRAME /* FIXME: cagney/2004-05-01: This sanity check shouldn't be
/* For some reason, sentinel frames are NORMAL_FRAMEs needed, instead the code should simpliy rely on its
-- but they have negative frame level. */ analysis. */
&& frame_relative_level (next_frame) >= 0) if (get_frame_type (next_frame) == NORMAL_FRAME)
return 0; return 0;
/* If we really have a frameless function, %r14 must be valid /* If we really have a frameless function, %r14 must be valid
@ -1850,9 +1850,9 @@ s390_prologue_frame_unwind_cache (struct frame_info *next_frame,
treat it as frameless if we're currently within the function epilog treat it as frameless if we're currently within the function epilog
code at a point where the frame pointer has already been restored. code at a point where the frame pointer has already been restored.
This can only happen in an innermost frame. */ This can only happen in an innermost frame. */
if (size > 0 /* FIXME: cagney/2004-05-01: This sanity check shouldn't be needed,
&& (get_frame_type (next_frame) != NORMAL_FRAME instead the code should simpliy rely on its analysis. */
|| frame_relative_level (next_frame) < 0)) if (size > 0 && get_frame_type (next_frame) != NORMAL_FRAME)
{ {
/* See the comment in s390_in_function_epilogue_p on why this is /* See the comment in s390_in_function_epilogue_p on why this is
not completely reliable ... */ not completely reliable ... */

View File

@ -83,8 +83,7 @@ sentinel_frame_this_id (struct frame_info *next_frame,
const struct frame_unwind sentinel_frame_unwinder = const struct frame_unwind sentinel_frame_unwinder =
{ {
/* Should the sentinel frame be given a special type? */ SENTINEL_FRAME,
NORMAL_FRAME,
sentinel_frame_this_id, sentinel_frame_this_id,
sentinel_frame_prev_register sentinel_frame_prev_register
}; };