Thu Sep 30 11:30:56 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
+ * inflow.c (generic_mourn_inferior): Call reinit_frame_cache
+ instead of doing it ourself.
+ * blockframe.c (reinit_frame_cache): Use code which was in
+ generic_mourn_inferior so we can use this function even when
+ we have switched targets.
* corelow.c (core_detach): Call reinit_frame_cache.
* target.c (target_detach): Don't call generic_mourn_inferior
(revert yesterday's change, now handled by core_detach).
void
reinit_frame_cache ()
{
- FRAME fr = current_frame;
flush_cached_frames ();
- if (fr)
- set_current_frame ( create_new_frame (read_fp (), read_pc ()));
+ if (target_has_stack)
+ {
+ set_current_frame (create_new_frame (read_fp (), read_pc ()));
+ select_frame (get_current_frame (), 0);
+ }
+ else
+ {
+ set_current_frame (0);
+ select_frame ((FRAME) 0, -1);
+ }
}
/* Return a structure containing various interesting information
get_prev_frame_info (next_frame)
FRAME next_frame;
{
- FRAME_ADDR address;
+ FRAME_ADDR address = 0;
struct frame_info *prev;
int fromleaf = 0;
char *name;
}
/* Return the innermost stack frame executing inside of BLOCK,
- or zero if there is no such frame. If BLOCK is NULL, just return NULL. */
+ or NULL if there is no such frame. If BLOCK is NULL, just return NULL. */
FRAME
block_innermost_frame (block)
{
struct frame_info *fi;
register FRAME frame;
- register CORE_ADDR start = BLOCK_START (block);
- register CORE_ADDR end = BLOCK_END (block);
+ register CORE_ADDR start;
+ register CORE_ADDR end;
if (block == NULL)
return NULL;
+ start = BLOCK_START (block);
+ end = BLOCK_END (block);
+
frame = 0;
while (1)
{