aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-04-03 18:03:32 -0600
committerTom Tromey <tom@tromey.com>2018-04-06 15:44:47 -0600
commit9b5587295bbc57e5e0453b659e24d7c2b504b894 (patch)
tree7b0aa3fedbcbf91b5fed71ebfc6a629e59aa666c /gdb
parent850645cfe82f5854af90ce73f2056712e20fcea2 (diff)
downloadgdb-9b5587295bbc57e5e0453b659e24d7c2b504b894.zip
gdb-9b5587295bbc57e5e0453b659e24d7c2b504b894.tar.gz
gdb-9b5587295bbc57e5e0453b659e24d7c2b504b894.tar.bz2
Change last_examine_value to value_ref_ptr
This patch removes some manual reference count manipulation by changing last_examine_value to be a value_ref_ptr and then updating the users. gdb/ChangeLog 2018-04-06 Tom Tromey <tom@tromey.com> * printcmd.c (last_examine_address): Change type to value_ref_ptr. (do_examine, x_command): Update.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/printcmd.c21
2 files changed, 14 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index de4d30f..aa2a6bc 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2018-04-06 Tom Tromey <tom@tromey.com>
+ * printcmd.c (last_examine_address): Change type to
+ value_ref_ptr.
+ (do_examine, x_command): Update.
+
+2018-04-06 Tom Tromey <tom@tromey.com>
+
* value.c (release_value): Update.
* breakpoint.h (struct watchpoint) <val>: Now a value_ref_ptr.
(struct bpstats) <val>: Now a value_ref_ptr.
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 8822ae1..a6d6d7e 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -78,7 +78,7 @@ static CORE_ADDR last_examine_address;
/* Contents of last address examined.
This is not valid past the end of the `x' command! */
-static struct value *last_examine_value;
+static value_ref_ptr last_examine_value;
/* Largest offset between a symbolic value and an address, that will be
printed as `0x1234 <symbol+offset>'. */
@@ -1093,9 +1093,6 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
object. */
last_examine_address = next_address;
- if (last_examine_value)
- value_decref (last_examine_value);
-
/* The value to be displayed is not fetched greedily.
Instead, to avoid the possibility of a fetched value not
being used, its retrieval is delayed until the print code
@@ -1105,12 +1102,10 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
the disassembler be modified so that LAST_EXAMINE_VALUE
is left with the byte sequence from the last complete
instruction fetched from memory? */
- last_examine_value = value_at_lazy (val_type, next_address);
-
- if (last_examine_value)
- release_value (last_examine_value).release ();
+ last_examine_value
+ = release_value (value_at_lazy (val_type, next_address));
- print_formatted (last_examine_value, size, &opts, gdb_stdout);
+ print_formatted (last_examine_value.get (), size, &opts, gdb_stdout);
/* Display any branch delay slots following the final insn. */
if (format == 'i' && count == 1)
@@ -1668,12 +1663,12 @@ x_command (const char *exp, int from_tty)
last_format = fmt.format;
/* Set a couple of internal variables if appropriate. */
- if (last_examine_value)
+ if (last_examine_value != nullptr)
{
/* Make last address examined available to the user as $_. Use
the correct pointer type. */
struct type *pointer_type
- = lookup_pointer_type (value_type (last_examine_value));
+ = lookup_pointer_type (value_type (last_examine_value.get ()));
set_internalvar (lookup_internalvar ("_"),
value_from_pointer (pointer_type,
last_examine_address));
@@ -1682,10 +1677,10 @@ x_command (const char *exp, int from_tty)
as $__. If the last value has not been fetched from memory
then don't fetch it now; instead mark it by voiding the $__
variable. */
- if (value_lazy (last_examine_value))
+ if (value_lazy (last_examine_value.get ()))
clear_internalvar (lookup_internalvar ("__"));
else
- set_internalvar (lookup_internalvar ("__"), last_examine_value);
+ set_internalvar (lookup_internalvar ("__"), last_examine_value.get ());
}
}