From f7b7ed97a23e2bf4a2ec27bef0fe0af55a080a94 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 7 Oct 2017 18:23:36 -0600 Subject: C++-ify prologue-value's pv_area This patch is an initial C++-ification of pv_area, from prologue-value. It turns pv_area into a class with a constructor and destructor; renames the data members; and changes various functions to be member functions. This allows the removal of make_cleanup_free_pv_area. gdb/ChangeLog 2017-10-12 Tom Tromey * s390-linux-tdep.c (s390_store, s390_load) (s390_check_for_saved, s390_analyze_prologue): Update. * rx-tdep.c (check_for_saved, rx_analyze_prologue): Update. * rl78-tdep.c (rl78_analyze_prologue, check_for_saved): Update. * prologue-value.h (class pv_area): Move from prologue-value.c. Change names of members. Add constructor, destructor, member functions. (make_pv_area, free_pv_area, make_cleanup_free_pv_area) (pv_area_store, pv_area_fetch, pv_area_store_would_trash) (pv_area_fetch, pv_area_scan): Don't declare. * prologue-value.c (struct pv_area::area_entry): Now member of pv_area. (struct pv_area): Move to prologue-value.h. (pv_area::pv_area): Rename from make_pv_area. (pv_area::~pv_area): Rename from free_pv_area. (do_free_pv_area_cleanup, make_cleanup_free_pv_area): Remove. (clear_entries, find_entry, overlaps, store_would_trash, store) (fetch, find_reg, scan): Now member of pv_area. Remove "area" argument. Update. * msp430-tdep.c (check_for_saved, msp430_analyze_prologue): Update. * mn10300-tdep.c (push_reg, check_for_saved) (mn10300_analyze_prologue): Update. * mep-tdep.c (is_arg_spill, check_for_saved) (mep_analyze_prologue): Update. * m32c-tdep.c (m32c_pv_push, m32c_srcdest_fetch) (m32c_srcdest_store, m32c_pv_enter, m32c_is_arg_spill) (m32c_is_struct_return, m32c_analyze_prologue): Update. * arm-tdep.c (thumb_analyze_prologue, arm_analyze_prologue): Update. * arc-tdep.c (arc_is_in_prologue, arc_analyze_prologue): Update. * aarch64-tdep.c (aarch64_analyze_prologue): Update. --- gdb/mep-tdep.c | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) (limited to 'gdb/mep-tdep.c') diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c index 623ab7f..bf08ca1 100644 --- a/gdb/mep-tdep.c +++ b/gdb/mep-tdep.c @@ -1640,12 +1640,12 @@ is_arg_spill (struct gdbarch *gdbarch, pv_t value, pv_t addr, { return (is_arg_reg (value) && pv_is_register (addr, MEP_SP_REGNUM) - && ! pv_area_find_reg (stack, gdbarch, value.reg, 0)); + && ! stack->find_reg (gdbarch, value.reg, 0)); } /* Function for finding saved registers in a 'struct pv_area'; we pass - this to pv_area_scan. + this to pv_area::scan. If VALUE is a saved register, ADDR says it was saved at a constant offset from the frame base, and SIZE indicates that the whole @@ -1675,8 +1675,6 @@ mep_analyze_prologue (struct gdbarch *gdbarch, int rn; int found_lp = 0; pv_t reg[MEP_NUM_REGS]; - struct pv_area *stack; - struct cleanup *back_to; CORE_ADDR after_last_frame_setup_insn = start_pc; memset (result, 0, sizeof (*result)); @@ -1688,8 +1686,7 @@ mep_analyze_prologue (struct gdbarch *gdbarch, result->reg_offset[rn] = 1; } - stack = make_pv_area (MEP_SP_REGNUM, gdbarch_addr_bit (gdbarch)); - back_to = make_cleanup_free_pv_area (stack); + pv_area stack (MEP_SP_REGNUM, gdbarch_addr_bit (gdbarch)); pc = start_pc; while (pc < limit_pc) @@ -1741,13 +1738,13 @@ mep_analyze_prologue (struct gdbarch *gdbarch, /* If simulating this store would require us to forget everything we know about the stack frame in the name of accuracy, it would be better to just quit now. */ - if (pv_area_store_would_trash (stack, reg[rm])) + if (stack.store_would_trash (reg[rm])) break; - if (is_arg_spill (gdbarch, reg[rn], reg[rm], stack)) + if (is_arg_spill (gdbarch, reg[rn], reg[rm], &stack)) after_last_frame_setup_insn = next_pc; - pv_area_store (stack, reg[rm], 4, reg[rn]); + stack.store (reg[rm], 4, reg[rn]); } else if (IS_SW_IMMD (insn)) { @@ -1758,13 +1755,13 @@ mep_analyze_prologue (struct gdbarch *gdbarch, /* If simulating this store would require us to forget everything we know about the stack frame in the name of accuracy, it would be better to just quit now. */ - if (pv_area_store_would_trash (stack, addr)) + if (stack.store_would_trash (addr)) break; - if (is_arg_spill (gdbarch, reg[rn], addr, stack)) + if (is_arg_spill (gdbarch, reg[rn], addr, &stack)) after_last_frame_setup_insn = next_pc; - pv_area_store (stack, addr, 4, reg[rn]); + stack.store (addr, 4, reg[rn]); } else if (IS_MOV (insn)) { @@ -1786,13 +1783,13 @@ mep_analyze_prologue (struct gdbarch *gdbarch, : (gdb_assert (IS_SW (insn)), 4)); pv_t addr = pv_add_constant (reg[rm], disp); - if (pv_area_store_would_trash (stack, addr)) + if (stack.store_would_trash (addr)) break; - if (is_arg_spill (gdbarch, reg[rn], addr, stack)) + if (is_arg_spill (gdbarch, reg[rn], addr, &stack)) after_last_frame_setup_insn = next_pc; - pv_area_store (stack, addr, size, reg[rn]); + stack.store (addr, size, reg[rn]); } else if (IS_LDC (insn)) { @@ -1808,7 +1805,7 @@ mep_analyze_prologue (struct gdbarch *gdbarch, int offset = LW_OFFSET (insn); pv_t addr = pv_add_constant (reg[rm], offset); - reg[rn] = pv_area_fetch (stack, addr, 4); + reg[rn] = stack.fetch (addr, 4); } else if (IS_BRA (insn) && BRA_DISP (insn) > 0) { @@ -1887,11 +1884,9 @@ mep_analyze_prologue (struct gdbarch *gdbarch, } /* Record where all the registers were saved. */ - pv_area_scan (stack, check_for_saved, (void *) result); + stack.scan (check_for_saved, (void *) result); result->prologue_end = after_last_frame_setup_insn; - - do_cleanups (back_to); } -- cgit v1.1