/* Implement the "skip_prologue" gdbarch method. */ static CORE_ADDR rx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) { const char *name; CORE_ADDR func_addr, func_end; struct rx_prologue p; /* Try to find the extent of the function that contains PC. */ if (!find_pc_partial_function (pc, &name, &func_addr, &func_end)) return pc; rx_analyze_prologue (pc, func_end, &p); return p.prologue_end; }
/* Implement the "skip_prologue" gdbarch method. */ static CORE_ADDR rx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) { const char *name; CORE_ADDR func_addr, func_end; struct rx_prologue p; /* Try to find the extent of the function that contains PC. */ if (!find_pc_partial_function (pc, &name, &func_addr, &func_end)) return pc; /* The frame type doesn't matter here, since we only care about where the prologue ends. We'll use RX_FRAME_TYPE_NORMAL. */ rx_analyze_prologue (pc, func_end, RX_FRAME_TYPE_NORMAL, &p); return p.prologue_end; }
/* Given a frame described by THIS_FRAME, decode the prologue of its associated function if there is not cache entry as specified by THIS_PROLOGUE_CACHE. Save the decoded prologue in the cache and return that struct as the value of this function. */ static struct rx_prologue * rx_analyze_frame_prologue (struct frame_info *this_frame, void **this_prologue_cache) { if (!*this_prologue_cache) { CORE_ADDR func_start, stop_addr; *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct rx_prologue); func_start = get_frame_func (this_frame); stop_addr = get_frame_pc (this_frame); /* If we couldn't find any function containing the PC, then just initialize the prologue cache, but don't do anything. */ if (!func_start) stop_addr = func_start; rx_analyze_prologue (func_start, stop_addr, *this_prologue_cache); }