diff options
author | Tom Tromey <tom@tromey.com> | 2018-04-03 17:45:21 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-04-06 15:44:46 -0600 |
commit | 22bc8444e6d377fd016253926c2a2597ff944842 (patch) | |
tree | 6978ec817983a137c65d16cab8bee37f7f45c6d2 /gdb/mep-tdep.c | |
parent | Add -Wno-error=deprecated-register to gdb build flags (diff) | |
download | binutils-gdb-22bc8444e6d377fd016253926c2a2597ff944842.tar.gz binutils-gdb-22bc8444e6d377fd016253926c2a2597ff944842.tar.bz2 binutils-gdb-22bc8444e6d377fd016253926c2a2597ff944842.zip |
Introduce a gdb_ref_ptr specialization for struct value
struct value is internally reference counted and so, while it also has
some ownership rules unique to it, it makes sense to use a gdb_ref_ptr
when managing it automatically.
This patch removes the existing unique_ptr specialization in favor of
a reference-counted pointer. It also introduces two other
clarifications:
1. Rename value_free to value_decref, which I think is more in line
with what the function actually does; and
2. Change release_value to return a gdb_ref_ptr. This change allows
us to remove the confusing release_value_or_incref function,
primarily by making it much simpler to reason about the result of
release_value.
gdb/ChangeLog
2018-04-06 Tom Tromey <tom@tromey.com>
* varobj.c (varobj_clear_saved_item)
(update_dynamic_varobj_children, install_new_value, ~varobj):
Update.
* value.h (value_incref): Move declaration earlier.
(value_decref): Rename from value_free.
(struct value_ref_policy): New.
(value_ref_ptr): New typedef.
(struct value_deleter): Remove.
(gdb_value_up): Remove typedef.
(release_value): Change return type.
(release_value_or_incref): Remove.
* value.c (set_value_parent): Update.
(value_incref): Change return type.
(value_decref): Rename from value_free.
(value_free_to_mark, free_all_values, free_value_chain): Update.
(release_value): Return value_ref_ptr.
(release_value_or_incref): Remove.
(record_latest_value, set_internalvar, clear_internalvar):
Update.
* stack.c (info_frame_command): Don't call value_free.
* python/py-value.c (valpy_dealloc, valpy_new)
(value_to_value_object): Update.
* printcmd.c (do_examine): Update.
* opencl-lang.c (lval_func_free_closure): Update.
* mi/mi-main.c (register_changed_p): Don't call value_free.
* mep-tdep.c (mep_frame_prev_register): Don't call value_free.
* m88k-tdep.c (m88k_frame_prev_register): Don't call value_free.
* m68hc11-tdep.c (m68hc11_frame_prev_register): Don't call
value_free.
* guile/scm-value.c (vlscm_free_value_smob)
(vlscm_scm_from_value): Update.
* frame.c (frame_register_unwind, frame_unwind_register_signed)
(frame_unwind_register_unsigned, get_frame_register_bytes)
(put_frame_register_bytes): Don't call value_free.
* findvar.c (address_from_register): Don't call value_free.
* dwarf2read.c (dwarf2_compute_name): Don't call value_free.
* dwarf2loc.c (entry_data_value_free_closure)
(value_of_dwarf_reg_entry, free_pieced_value_closure)
(dwarf2_evaluate_loc_desc_full): Update.
* breakpoint.c (update_watchpoint, breakpoint_init_inferior)
(~bpstats, bpstats, bpstat_clear_actions, watchpoint_check)
(~watchpoint, watch_command_1)
(invalidate_bp_value_on_memory_change): Update.
* alpha-tdep.c (alpha_register_to_value): Don't call value_free.
Diffstat (limited to 'gdb/mep-tdep.c')
-rw-r--r-- | gdb/mep-tdep.c | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c index 1cda2b35af9..0e8c3f97e22 100644 --- a/gdb/mep-tdep.c +++ b/gdb/mep-tdep.c @@ -2005,7 +2005,6 @@ mep_frame_prev_register (struct frame_info *this_frame, MEP_LP_REGNUM); lp = value_as_long (value); release_value (value); - value_free (value); return frame_unwind_got_constant (this_frame, regnum, lp & ~1); } @@ -2036,13 +2035,11 @@ mep_frame_prev_register (struct frame_info *this_frame, psw = value_as_long (value); release_value (value); - value_free (value); /* Get the LP's value, too. */ value = get_frame_register_value (this_frame, MEP_LP_REGNUM); lp = value_as_long (value); release_value (value); - value_free (value); /* If LP.LTOM is set, then toggle PSW.OM. */ if (lp & 0x1) |