diff options
author | Richard Henderson <rth@redhat.com> | 2003-05-31 00:27:46 +0000 |
---|---|---|
committer | Richard Henderson <rth@redhat.com> | 2003-05-31 00:27:46 +0000 |
commit | fbe586aede90731f60739674eab9243b992408e5 (patch) | |
tree | 1f9eb3eb26eaf9fb4cefc162e7416d6891d828d1 /gdb/alpha-mdebug-tdep.c | |
parent | 86f1d0fbb593d56cf9d4e9ba34681c11696288d0 (diff) | |
download | gdb-fbe586aede90731f60739674eab9243b992408e5.zip gdb-fbe586aede90731f60739674eab9243b992408e5.tar.gz gdb-fbe586aede90731f60739674eab9243b992408e5.tar.bz2 |
* alpha-mdebug-tdep.c (alpha_mdebug_frame_p): Reject prologues.
(alpha_mdebug_frame_unwind_cache): Don't call the heuristic unwinder.
(alpha_mdebug_frame_this_id): Likewise.
(alpha_mdebug_frame_prev_register): Likewise.
(alpha_mdebug_frame_base_address): Likewise.
(alpha_mdebug_frame_locals_address): Likewise.
(alpha_mdebug_frame_args_address): Likewise.
(struct alpha_mdebug_unwind_cache): Remove in_prologue_cache.
* alpha-tdep.c (alpha_heuristic_proc_start): Use get_pc_function_start.
(alpha_heuristic_frame_unwind_cache): Make static; add missing
loop increment.
(alpha_heuristic_frame_this_id): Make static.
(alpha_heuristic_frame_prev_register): Likewise.
(alpha_heuristic_frame_base_address): Likewise.
* alpha-tdep.h: Update.
Diffstat (limited to 'gdb/alpha-mdebug-tdep.c')
-rw-r--r-- | gdb/alpha-mdebug-tdep.c | 62 |
1 files changed, 9 insertions, 53 deletions
diff --git a/gdb/alpha-mdebug-tdep.c b/gdb/alpha-mdebug-tdep.c index 2f84d6d..2f49e08 100644 --- a/gdb/alpha-mdebug-tdep.c +++ b/gdb/alpha-mdebug-tdep.c @@ -174,7 +174,6 @@ struct alpha_mdebug_unwind_cache alpha_extra_func_info_t proc_desc; CORE_ADDR vfp; CORE_ADDR *saved_regs; - void *in_prologue_cache; }; /* Extract all of the information about the frame from PROC_DESC @@ -205,21 +204,6 @@ alpha_mdebug_frame_unwind_cache (struct frame_info *next_frame, info->proc_desc = proc_desc; gdb_assert (proc_desc != NULL); - /* If we're in the prologue, the PDR for this frame is not yet valid. */ - /* ??? We could have said "no" in alpha_mdebug_frame_p, and we'd - walk down the list of unwinders and try the heuristic unwinder - and things would have been fine. However, since we have the PDR, - we know how to skip the search for the start of the procedure, - and all the uncertainty involved there. So instead, arrange for - us to defer to the heuristic unwinder directly. */ - if (alpha_mdebug_in_prologue (pc, proc_desc)) - { - alpha_heuristic_frame_unwind_cache (next_frame, - &info->in_prologue_cache, - PROC_LOW_ADDR (proc_desc)); - return info; - } - info->saved_regs = frame_obstack_zalloc (SIZEOF_FRAME_SAVED_REGS); /* The VFP of the frame is at FRAME_REG+FRAME_OFFSET. */ @@ -275,12 +259,7 @@ alpha_mdebug_frame_this_id (struct frame_info *next_frame, struct alpha_mdebug_unwind_cache *info = alpha_mdebug_frame_unwind_cache (next_frame, this_prologue_cache); - /* If we're in the prologue, defer to the heuristic unwinder. */ - if (info->in_prologue_cache) - alpha_heuristic_frame_this_id (next_frame, &info->in_prologue_cache, - this_id); - else - *this_id = frame_id_build (info->vfp, frame_func_unwind (next_frame)); + *this_id = frame_id_build (info->vfp, frame_func_unwind (next_frame)); } /* Retrieve the value of REGNUM in FRAME. Don't give up! */ @@ -295,16 +274,6 @@ alpha_mdebug_frame_prev_register (struct frame_info *next_frame, struct alpha_mdebug_unwind_cache *info = alpha_mdebug_frame_unwind_cache (next_frame, this_prologue_cache); - /* If we're in the prologue, defer to the heuristic unwinder. */ - if (info->in_prologue_cache) - { - alpha_heuristic_frame_prev_register (next_frame, - &info->in_prologue_cache, - regnum, optimizedp, lvalp, - addrp, realnump, bufferp); - return; - } - /* The PC of the previous frame is stored in the link register of the current frame. Frob regnum so that we pull the value from the correct place. */ @@ -359,6 +328,11 @@ alpha_mdebug_frame_p (CORE_ADDR pc) if (proc_desc == NULL) return NULL; + /* If we're in the prologue, the PDR for this frame is not yet valid. + Say no here and we'll fall back on the heuristic unwinder. */ + if (alpha_mdebug_in_prologue (pc, proc_desc)) + return NULL; + return &alpha_mdebug_frame_unwind; } @@ -369,11 +343,7 @@ alpha_mdebug_frame_base_address (struct frame_info *next_frame, struct alpha_mdebug_unwind_cache *info = alpha_mdebug_frame_unwind_cache (next_frame, this_prologue_cache); - if (info->in_prologue_cache) - return alpha_heuristic_frame_base_address (next_frame, - &info->in_prologue_cache); - else - return info->vfp; + return info->vfp; } static CORE_ADDR @@ -382,15 +352,8 @@ alpha_mdebug_frame_locals_address (struct frame_info *next_frame, { struct alpha_mdebug_unwind_cache *info = alpha_mdebug_frame_unwind_cache (next_frame, this_prologue_cache); - CORE_ADDR vfp; - if (info->in_prologue_cache) - vfp = alpha_heuristic_frame_base_address (next_frame, - &info->in_prologue_cache); - else - vfp = info->vfp; - - return vfp - PROC_LOCALOFF (info->proc_desc); + return info->vfp - PROC_LOCALOFF (info->proc_desc); } static CORE_ADDR @@ -399,15 +362,8 @@ alpha_mdebug_frame_args_address (struct frame_info *next_frame, { struct alpha_mdebug_unwind_cache *info = alpha_mdebug_frame_unwind_cache (next_frame, this_prologue_cache); - CORE_ADDR vfp; - - if (info->in_prologue_cache) - vfp = alpha_heuristic_frame_base_address (next_frame, - &info->in_prologue_cache); - else - vfp = info->vfp; - return vfp - ALPHA_NUM_ARG_REGS * 8; + return info->vfp - ALPHA_NUM_ARG_REGS * 8; } static const struct frame_base alpha_mdebug_frame_base = { |