2002-12-13 Andrew Cagney <ac131313@redhat.com>

* frame.h (frame_id_unwind): Declare.
	(struct frame_info): Add fields id_unwind, id_unwind_cache_p and
	id_unwind_cache.
	(frame_id_unwind_ftype): Declare.
	* frame.c (frame_id_unwind): New function.
	(set_unwind_by_pc): Add unwind_id parameter.  Initialized.
	(create_new_frame, get_prev_frame): Pass id_unwind to
	set_unwind_by_pc.
	(frame_saved_regs_id_unwind): New function.
	(frame_saved_regs_id_unwind): New function.
	* dummy-frame.c (dummy_frame_id_unwind): New function.
	(struct dummy_frame): Add field id.
	(generic_push_dummy_frame): Initialize `id'.
	* dummy-frame.h (dummy_frame_id_unwind): Declare.
This commit is contained in:
Andrew Cagney
2002-12-13 16:40:25 +00:00
parent 18ea5ba4f0
commit c689142bec
5 changed files with 137 additions and 3 deletions

View File

@@ -43,6 +43,7 @@ struct dummy_frame
CORE_ADDR fp;
CORE_ADDR sp;
CORE_ADDR top;
struct frame_id id;
struct regcache *regcache;
/* Address range of the call dummy code. Look for PC in the range
@@ -232,6 +233,7 @@ generic_push_dummy_frame (void)
dummy_frame->sp = read_sp ();
dummy_frame->top = 0;
dummy_frame->fp = fp;
dummy_frame->id = get_frame_id (get_current_frame ());
regcache_cpy (dummy_frame->regcache, current_regcache);
dummy_frame->next = dummy_frame_stack;
dummy_frame_stack = dummy_frame;
@@ -342,3 +344,17 @@ dummy_frame_pc_unwind (struct frame_info *frame,
return dummy->pc;
}
struct frame_id
dummy_frame_id_unwind (struct frame_info *frame,
void **cache)
{
struct dummy_frame *dummy = cached_find_dummy_frame (frame, cache);
/* Oops! In a dummy-frame but can't find the stack dummy. Pretend
that the frame doesn't unwind. Should this function instead
return a has-no-caller indication? */
if (dummy == NULL)
return null_frame_id;
return dummy->id;
}