X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fdwarf2-frame-tailcall.c;h=613cc34b893481322d126c1b4032a8a5011d9734;hb=8d3842cd156eb6cd6cd6c68c49c090b8f9452a2d;hp=c99fde019b02b09834dd618a370ac77e8e1f3ae5;hpb=32d0add0a654c1204ab71dc8a55d9374538c4b33;p=binutils-gdb.git diff --git a/gdb/dwarf2-frame-tailcall.c b/gdb/dwarf2-frame-tailcall.c index c99fde019b0..613cc34b893 100644 --- a/gdb/dwarf2-frame-tailcall.c +++ b/gdb/dwarf2-frame-tailcall.c @@ -68,7 +68,7 @@ struct tailcall_cache static hashval_t cache_hash (const void *arg) { - const struct tailcall_cache *cache = arg; + const struct tailcall_cache *cache = (const struct tailcall_cache *) arg; return htab_hash_pointer (cache->next_bottom_frame); } @@ -78,8 +78,8 @@ cache_hash (const void *arg) static int cache_eq (const void *arg1, const void *arg2) { - const struct tailcall_cache *cache1 = arg1; - const struct tailcall_cache *cache2 = arg2; + const struct tailcall_cache *cache1 = (const struct tailcall_cache *) arg1; + const struct tailcall_cache *cache2 = (const struct tailcall_cache *) arg2; return cache1->next_bottom_frame == cache2->next_bottom_frame; } @@ -91,11 +91,9 @@ cache_eq (const void *arg1, const void *arg2) static struct tailcall_cache * cache_new_ref1 (struct frame_info *next_bottom_frame) { - struct tailcall_cache *cache; + struct tailcall_cache *cache = XCNEW (struct tailcall_cache); void **slot; - cache = xzalloc (sizeof (*cache)); - cache->next_bottom_frame = next_bottom_frame; cache->refc = 1; @@ -162,7 +160,7 @@ cache_find (struct frame_info *fi) if (slot == NULL) return NULL; - cache = *slot; + cache = (struct tailcall_cache *) *slot; gdb_assert (cache != NULL); return cache; } @@ -197,7 +195,7 @@ pretended_chain_levels (struct call_site_chain *chain) return chain->length; chain_levels = chain->callers + chain->callees; - gdb_assert (chain_levels < chain->length); + gdb_assert (chain_levels <= chain->length); return chain_levels; } @@ -211,7 +209,7 @@ static void tailcall_frame_this_id (struct frame_info *this_frame, void **this_cache, struct frame_id *this_id) { - struct tailcall_cache *cache = *this_cache; + struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache; struct frame_info *next_frame; /* Tail call does not make sense for a sentinel frame. */ @@ -266,7 +264,7 @@ dwarf2_tailcall_prev_register_first (struct frame_info *this_frame, void **tailcall_cachep, int regnum) { struct gdbarch *this_gdbarch = get_frame_arch (this_frame); - struct tailcall_cache *cache = *tailcall_cachep; + struct tailcall_cache *cache = (struct tailcall_cache *) *tailcall_cachep; CORE_ADDR addr; if (regnum == gdbarch_pc_regnum (this_gdbarch)) @@ -295,7 +293,7 @@ static struct value * tailcall_frame_prev_register (struct frame_info *this_frame, void **this_cache, int regnum) { - struct tailcall_cache *cache = *this_cache; + struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache; struct value *val; gdb_assert (this_frame != cache->next_bottom_frame); @@ -368,7 +366,6 @@ dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, struct gdbarch *prev_gdbarch; struct call_site_chain *chain = NULL; struct tailcall_cache *cache; - volatile struct gdb_exception except; gdb_assert (*tailcall_cachep == NULL); @@ -377,7 +374,7 @@ dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, this_pc = get_frame_address_in_block (this_frame); /* Catch any unwinding errors. */ - TRY_CATCH (except, RETURN_MASK_ERROR) + TRY { int sp_regnum; @@ -389,20 +386,23 @@ dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, /* call_site_find_chain can throw an exception. */ chain = call_site_find_chain (prev_gdbarch, prev_pc, this_pc); - if (entry_cfa_sp_offsetp == NULL) - break; - sp_regnum = gdbarch_sp_regnum (prev_gdbarch); - if (sp_regnum == -1) - break; - prev_sp = frame_unwind_register_unsigned (this_frame, sp_regnum); - prev_sp_p = 1; + if (entry_cfa_sp_offsetp != NULL) + { + sp_regnum = gdbarch_sp_regnum (prev_gdbarch); + if (sp_regnum != -1) + { + prev_sp = frame_unwind_register_unsigned (this_frame, sp_regnum); + prev_sp_p = 1; + } + } } - if (except.reason < 0) + CATCH (except, RETURN_MASK_ERROR) { if (entry_values_debug) exception_print (gdb_stdout, except); return; } + END_CATCH /* Ambiguous unwind or unambiguous unwind verified as matching. */ if (chain == NULL || chain->length == 0) @@ -432,7 +432,7 @@ dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, static void tailcall_frame_dealloc_cache (struct frame_info *self, void *this_cache) { - struct tailcall_cache *cache = this_cache; + struct tailcall_cache *cache = (struct tailcall_cache *) this_cache; cache_unref (cache); } @@ -444,7 +444,7 @@ static struct gdbarch * tailcall_frame_prev_arch (struct frame_info *this_frame, void **this_prologue_cache) { - struct tailcall_cache *cache = *this_prologue_cache; + struct tailcall_cache *cache = (struct tailcall_cache *) *this_prologue_cache; return get_frame_arch (cache->next_bottom_frame); }