diff options
author | Andrew Cagney <cagney@redhat.com> | 2004-09-03 22:41:27 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2004-09-03 22:41:27 +0000 |
commit | 0d5febcc7cc832308a751e5642069291a371781e (patch) | |
tree | e52aab9c55fe6752b40235573632760c733ed977 | |
parent | 283be8734b44d7d12e1671a490e7cea5a35c9064 (diff) | |
download | gdb-0d5febcc7cc832308a751e5642069291a371781e.zip gdb-0d5febcc7cc832308a751e5642069291a371781e.tar.gz gdb-0d5febcc7cc832308a751e5642069291a371781e.tar.bz2 |
2004-09-03 Andrew Cagney <cagney@gnu.org>
* mips-tdep.c (find_proc_desc): Delete function.
(mips_mdebug_frame_cache): Inline call to find_proc_desc,
simplify.
(mips_insn16_frame_cache): Replace find_proc_desc with code from
mips_insn32_frame_cache.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/mips-tdep.c | 51 |
2 files changed, 23 insertions, 34 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2638371..2d32028 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2004-09-03 Andrew Cagney <cagney@gnu.org> + * mips-tdep.c (find_proc_desc): Delete function. + (mips_mdebug_frame_cache): Inline call to find_proc_desc, + simplify. + (mips_insn16_frame_cache): Replace find_proc_desc with code from + mips_insn32_frame_cache. + * mips-tdep.c (find_proc_desc): Inline call to find_proc_desc. Simplify as NEXT_FRAME is NULL. (find_proc_desc): Simplify as NEXT_FRAME is non-NULL. diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 9e1b500..225305f 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -431,9 +431,6 @@ static CORE_ADDR read_next_frame_reg (struct frame_info *, int); static void reinit_frame_cache_sfunc (char *, int, struct cmd_list_element *); -static mips_extra_func_info_t find_proc_desc (CORE_ADDR pc, - struct frame_info *next_frame); - static CORE_ADDR after_prologue (CORE_ADDR pc); static struct type *mips_float_register_type (void); @@ -1559,6 +1556,7 @@ struct mips_frame_cache static struct mips_frame_cache * mips_mdebug_frame_cache (struct frame_info *next_frame, void **this_cache) { + CORE_ADDR startaddr = 0; mips_extra_func_info_t proc_desc; struct mips_frame_cache *cache; struct gdbarch *gdbarch = get_frame_arch (next_frame); @@ -1575,12 +1573,11 @@ mips_mdebug_frame_cache (struct frame_info *next_frame, void **this_cache) cache->saved_regs = trad_frame_alloc_saved_regs (next_frame); /* Get the mdebug proc descriptor. */ - proc_desc = find_proc_desc (frame_pc_unwind (next_frame), next_frame); - if (proc_desc == NULL) - /* I'm not sure how/whether this can happen. Normally when we - can't find a proc_desc, we "synthesize" one using - heuristic_proc_desc and set the saved_regs right away. */ - return cache; + proc_desc = non_heuristic_proc_desc (frame_pc_unwind (next_frame), + &startaddr); + /* Must be true. This is only called when the sniffer detected a + proc descriptor. */ + gdb_assert (proc_desc != NULL); /* Extract the frame's base. */ cache->base = (frame_unwind_register_signed (next_frame, NUM_REGS + PROC_FRAME_REG (proc_desc)) @@ -1850,14 +1847,18 @@ mips_insn16_frame_cache (struct frame_info *next_frame, void **this_cache) (*this_cache) = cache; cache->saved_regs = trad_frame_alloc_saved_regs (next_frame); - /* Get the mdebug proc descriptor. */ - proc_desc = find_proc_desc (frame_pc_unwind (next_frame), next_frame); - if (proc_desc == NULL) - /* I'm not sure how/whether this can happen. Normally when we - can't find a proc_desc, we "synthesize" one using - heuristic_proc_desc and set the saved_regs right away. */ - return cache; + /* Synthesize a proc descriptor. */ + { + const CORE_ADDR pc = frame_pc_unwind (next_frame); + CORE_ADDR start_addr; + find_pc_partial_function (pc, NULL, &start_addr, NULL); + if (start_addr == 0) + start_addr = heuristic_proc_start (pc); + + proc_desc = heuristic_proc_desc (start_addr, pc, next_frame); + } + /* Extract the frame's base. */ cache->base = (frame_unwind_register_signed (next_frame, NUM_REGS + PROC_FRAME_REG (proc_desc)) + PROC_FRAME_OFFSET (proc_desc) - PROC_FRAME_ADJUST (proc_desc)); @@ -3139,24 +3140,6 @@ non_heuristic_proc_desc (CORE_ADDR pc, CORE_ADDR *addrptr) return NULL; } - -static mips_extra_func_info_t -find_proc_desc (CORE_ADDR pc, struct frame_info *next_frame) -{ - mips_extra_func_info_t proc_desc; - CORE_ADDR startaddr = 0; - - proc_desc = non_heuristic_proc_desc (pc, &startaddr); - if (proc_desc == NULL) - { - if (startaddr == 0) - startaddr = heuristic_proc_start (pc); - - proc_desc = heuristic_proc_desc (startaddr, pc, next_frame); - } - return proc_desc; -} - /* MIPS stack frames are almost impenetrable. When execution stops, we basically have to look at symbol information for the function that we stopped in, which tells us *which* register (if any) is |