aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2018-04-07 14:03:12 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2018-04-07 14:03:12 -0400
commit6f14adc55864818ec3754460f5df4150c2addf42 (patch)
tree5ed8e7dccc5aeb3cc905394943a56fb21dddfaf9 /gdb
parentb2bdb8cf395f491319264cda42e41538f55a86d9 (diff)
downloadfsf-binutils-gdb-6f14adc55864818ec3754460f5df4150c2addf42.zip
fsf-binutils-gdb-6f14adc55864818ec3754460f5df4150c2addf42.tar.gz
fsf-binutils-gdb-6f14adc55864818ec3754460f5df4150c2addf42.tar.bz2
Replace make_cleanup_restore_current_traceframe with RAII class
I put the constructor in tracepoint.c because it needs to read traceframe_number, and I prefer to do that than to expose traceframe_number. gdb/ChangeLog: * tracepoint.c (struct current_traceframe_cleanup): Remove. (do_restore_current_traceframe_cleanup): Remove. (restore_current_traceframe_cleanup_dtor): Remove. (make_cleanup_restore_current_traceframe): Remove. (scoped_restore_current_traceframe::scoped_restore_current_traceframe): New. * tracepoint.h (struct scoped_restore_current_traceframe): New. * infrun.c (fetch_inferior_event): Use scoped_restore_current_traceframe.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog12
-rw-r--r--gdb/infrun.c3
-rw-r--r--gdb/tracepoint.c40
-rw-r--r--gdb/tracepoint.h17
4 files changed, 33 insertions, 39 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9c7cc14..fc95d76 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,17 @@
2018-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+ * tracepoint.c (struct current_traceframe_cleanup): Remove.
+ (do_restore_current_traceframe_cleanup): Remove.
+ (restore_current_traceframe_cleanup_dtor): Remove.
+ (make_cleanup_restore_current_traceframe): Remove.
+ (scoped_restore_current_traceframe::scoped_restore_current_traceframe):
+ New.
+ * tracepoint.h (struct scoped_restore_current_traceframe): New.
+ * infrun.c (fetch_inferior_event): Use
+ scoped_restore_current_traceframe.
+
+2018-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+
* dwarf2read.h (struct dwarf2_per_objfile) <n_type_units>:
Remove.
<n_allocated_type_units>: Remove.
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 6648698..d89f813 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -3877,9 +3877,10 @@ fetch_inferior_event (void *client_data)
debugging. If we're looking at traceframes while the target is
running, we're going to need to get back to that mode after
handling the event. */
+ gdb::optional<scoped_restore_current_traceframe> maybe_restore_traceframe;
if (non_stop)
{
- make_cleanup_restore_current_traceframe ();
+ maybe_restore_traceframe.emplace ();
set_current_traceframe (-1);
}
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index f66cc68..a2f1376 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -3012,43 +3012,9 @@ set_current_traceframe (int num)
clear_traceframe_info ();
}
-/* A cleanup used when switching away and back from tfind mode. */
-
-struct current_traceframe_cleanup
-{
- /* The traceframe we were inspecting. */
- int traceframe_number;
-};
-
-static void
-do_restore_current_traceframe_cleanup (void *arg)
-{
- struct current_traceframe_cleanup *old
- = (struct current_traceframe_cleanup *) arg;
-
- set_current_traceframe (old->traceframe_number);
-}
-
-static void
-restore_current_traceframe_cleanup_dtor (void *arg)
-{
- struct current_traceframe_cleanup *old
- = (struct current_traceframe_cleanup *) arg;
-
- xfree (old);
-}
-
-struct cleanup *
-make_cleanup_restore_current_traceframe (void)
-{
- struct current_traceframe_cleanup *old =
- XNEW (struct current_traceframe_cleanup);
-
- old->traceframe_number = traceframe_number;
-
- return make_cleanup_dtor (do_restore_current_traceframe_cleanup, old,
- restore_current_traceframe_cleanup_dtor);
-}
+scoped_restore_current_traceframe::scoped_restore_current_traceframe ()
+: m_traceframe_number (traceframe_number)
+{}
/* Given a number and address, return an uploaded tracepoint with that
number, creating if necessary. */
diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h
index 8613cb2..02f4bf7 100644
--- a/gdb/tracepoint.h
+++ b/gdb/tracepoint.h
@@ -321,7 +321,22 @@ extern int get_tracepoint_number (void);
etc.). */
extern void set_current_traceframe (int num);
-struct cleanup *make_cleanup_restore_current_traceframe (void);
+struct scoped_restore_current_traceframe
+{
+ scoped_restore_current_traceframe ();
+
+ ~scoped_restore_current_traceframe ()
+ {
+ set_current_traceframe (m_traceframe_number);
+ }
+
+ DISABLE_COPY_AND_ASSIGN (scoped_restore_current_traceframe);
+
+private:
+
+ /* The traceframe we were inspecting. */
+ int m_traceframe_number;
+};
void free_actions (struct breakpoint *);