mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-29 15:18:34 +08:00
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:
@ -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.
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 *);
|
||||||
|
|
||||||
|
@ -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 ... */
|
||||||
|
@ -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
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user