mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-30 21:34:42 +08:00
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 <tom@tromey.com> * 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.
This commit is contained in:
@ -1375,8 +1375,8 @@ s390_store (struct s390_prologue_data *data,
|
||||
|
||||
|
||||
/* Check whether we are storing a register into the stack. */
|
||||
if (!pv_area_store_would_trash (data->stack, addr))
|
||||
pv_area_store (data->stack, addr, size, value);
|
||||
if (!data->stack->store_would_trash (addr))
|
||||
data->stack->store (addr, size, value);
|
||||
|
||||
|
||||
/* Note: If this is some store we cannot identify, you might think we
|
||||
@ -1413,11 +1413,11 @@ s390_load (struct s390_prologue_data *data,
|
||||
}
|
||||
|
||||
/* Check whether we are accessing one of our save slots. */
|
||||
return pv_area_fetch (data->stack, addr, size);
|
||||
return data->stack->fetch (addr, size);
|
||||
}
|
||||
|
||||
/* 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
|
||||
@ -1486,12 +1486,13 @@ s390_analyze_prologue (struct gdbarch *gdbarch,
|
||||
/* The address of the next instruction after that. */
|
||||
CORE_ADDR next_pc;
|
||||
|
||||
pv_area stack (S390_SP_REGNUM, gdbarch_addr_bit (gdbarch));
|
||||
scoped_restore restore_stack = make_scoped_restore (&data->stack, &stack);
|
||||
|
||||
/* Set up everything's initial value. */
|
||||
{
|
||||
int i;
|
||||
|
||||
data->stack = make_pv_area (S390_SP_REGNUM, gdbarch_addr_bit (gdbarch));
|
||||
|
||||
/* For the purpose of prologue tracking, we consider the GPR size to
|
||||
be equal to the ABI word size, even if it is actually larger
|
||||
(i.e. when running a 32-bit binary under a 64-bit kernel). */
|
||||
@ -1730,10 +1731,7 @@ s390_analyze_prologue (struct gdbarch *gdbarch,
|
||||
}
|
||||
|
||||
/* Record where all the registers were saved. */
|
||||
pv_area_scan (data->stack, s390_check_for_saved, data);
|
||||
|
||||
free_pv_area (data->stack);
|
||||
data->stack = NULL;
|
||||
data->stack->scan (s390_check_for_saved, data);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
Reference in New Issue
Block a user