aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-06-07 17:22:49 -0600
committerTom Tromey <tom@tromey.com>2018-06-10 22:12:32 -0600
commit219605fd6adadadfd40234e39254077e044741d0 (patch)
treedbe1e44ac2bc80a38d485f3d5d897ce0af0bdfdb /gdb
parent71b73764977a3895b0dda3e7260eece7a8d3e60c (diff)
downloadgdb-219605fd6adadadfd40234e39254077e044741d0.zip
gdb-219605fd6adadadfd40234e39254077e044741d0.tar.gz
gdb-219605fd6adadadfd40234e39254077e044741d0.tar.bz2
Remove a VEC from record-full.c
This replaces a VEC in record-full.c with a std::vector. This version of the patch also catches a memory leak in the original code noticed by Simon. Tested by the buildbot. gdb/ChangeLog 2018-06-10 Tom Tromey <tom@tromey.com> * record-full.c (record_full_breakpoint_p): Remove typedef. Don't declare VEC. Add constructor. <in_target_beneath>: Now bool. (record_full_breakpoints): Now a std::vector, static. (record_full_sync_record_breakpoints) (record_full_init_record_breakpoints) (record_full_target::insert_breakpoint) (record_full_target::remove_breakpoint): Update. Don't use XNEW.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog11
-rw-r--r--gdb/record-full.c78
2 files changed, 45 insertions, 44 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index feef6a4..57c2364 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,14 @@
+2018-06-10 Tom Tromey <tom@tromey.com>
+
+ * record-full.c (record_full_breakpoint_p): Remove typedef. Don't
+ declare VEC. Add constructor.
+ <in_target_beneath>: Now bool.
+ (record_full_breakpoints): Now a std::vector, static.
+ (record_full_sync_record_breakpoints)
+ (record_full_init_record_breakpoints)
+ (record_full_target::insert_breakpoint)
+ (record_full_target::remove_breakpoint): Update. Don't use XNEW.
+
2018-06-10 Simon Marchi <simon.marchi@polymtl.ca>
* dwarf2read.c (process_cu_includes): Remove struct keyword.
diff --git a/gdb/record-full.c b/gdb/record-full.c
index 87c77e0..27c8065 100644
--- a/gdb/record-full.c
+++ b/gdb/record-full.c
@@ -1700,6 +1700,15 @@ record_full_target::xfer_partial (enum target_object object,
struct record_full_breakpoint
{
+ record_full_breakpoint (struct address_space *address_space_,
+ CORE_ADDR addr_,
+ bool in_target_beneath_)
+ : address_space (address_space_),
+ addr (addr_),
+ in_target_beneath (in_target_beneath_)
+ {
+ }
+
/* The address and address space the breakpoint was set at. */
struct address_space *address_space;
CORE_ADDR addr;
@@ -1707,15 +1716,12 @@ struct record_full_breakpoint
/* True when the breakpoint has been also installed in the target
beneath. This will be false for breakpoints set during replay or
when recording. */
- int in_target_beneath;
+ bool in_target_beneath;
};
-typedef struct record_full_breakpoint *record_full_breakpoint_p;
-DEF_VEC_P(record_full_breakpoint_p);
-
/* The list of breakpoints inserted while the record target is
active. */
-VEC(record_full_breakpoint_p) *record_full_breakpoints = NULL;
+static std::vector<record_full_breakpoint> record_full_breakpoints;
static void
record_full_sync_record_breakpoints (struct bp_location *loc, void *data)
@@ -1725,14 +1731,10 @@ record_full_sync_record_breakpoints (struct bp_location *loc, void *data)
if (loc->inserted)
{
- struct record_full_breakpoint *bp = XNEW (struct record_full_breakpoint);
-
- bp->addr = loc->target_info.placed_address;
- bp->address_space = loc->target_info.placed_address_space;
-
- bp->in_target_beneath = 1;
-
- VEC_safe_push (record_full_breakpoint_p, record_full_breakpoints, bp);
+ record_full_breakpoints.emplace_back
+ (loc->target_info.placed_address_space,
+ loc->target_info.placed_address,
+ 1);
}
}
@@ -1741,7 +1743,7 @@ record_full_sync_record_breakpoints (struct bp_location *loc, void *data)
static void
record_full_init_record_breakpoints (void)
{
- VEC_free (record_full_breakpoint_p, record_full_breakpoints);
+ record_full_breakpoints.clear ();
iterate_over_bp_locations (record_full_sync_record_breakpoints);
}
@@ -1754,9 +1756,7 @@ int
record_full_target::insert_breakpoint (struct gdbarch *gdbarch,
struct bp_target_info *bp_tgt)
{
- struct record_full_breakpoint *bp;
- int in_target_beneath = 0;
- int ix;
+ bool in_target_beneath = false;
if (!RECORD_FULL_IS_REPLAY)
{
@@ -1773,30 +1773,25 @@ record_full_target::insert_breakpoint (struct gdbarch *gdbarch,
if (ret != 0)
return ret;
- in_target_beneath = 1;
+ in_target_beneath = true;
}
/* Use the existing entries if found in order to avoid duplication
in record_full_breakpoints. */
- for (ix = 0;
- VEC_iterate (record_full_breakpoint_p,
- record_full_breakpoints, ix, bp);
- ++ix)
+ for (struct record_full_breakpoint &bp : record_full_breakpoints)
{
- if (bp->addr == bp_tgt->placed_address
- && bp->address_space == bp_tgt->placed_address_space)
+ if (bp.addr == bp_tgt->placed_address
+ && bp.address_space == bp_tgt->placed_address_space)
{
- gdb_assert (bp->in_target_beneath == in_target_beneath);
+ gdb_assert (bp.in_target_beneath == in_target_beneath);
return 0;
}
}
- bp = XNEW (struct record_full_breakpoint);
- bp->addr = bp_tgt->placed_address;
- bp->address_space = bp_tgt->placed_address_space;
- bp->in_target_beneath = in_target_beneath;
- VEC_safe_push (record_full_breakpoint_p, record_full_breakpoints, bp);
+ record_full_breakpoints.emplace_back (bp_tgt->placed_address_space,
+ bp_tgt->placed_address,
+ in_target_beneath);
return 0;
}
@@ -1807,18 +1802,16 @@ record_full_target::remove_breakpoint (struct gdbarch *gdbarch,
struct bp_target_info *bp_tgt,
enum remove_bp_reason reason)
{
- struct record_full_breakpoint *bp;
- int ix;
-
- for (ix = 0;
- VEC_iterate (record_full_breakpoint_p,
- record_full_breakpoints, ix, bp);
- ++ix)
+ for (auto iter = record_full_breakpoints.begin ();
+ iter != record_full_breakpoints.end ();
+ ++iter)
{
- if (bp->addr == bp_tgt->placed_address
- && bp->address_space == bp_tgt->placed_address_space)
+ struct record_full_breakpoint &bp = *iter;
+
+ if (bp.addr == bp_tgt->placed_address
+ && bp.address_space == bp_tgt->placed_address_space)
{
- if (bp->in_target_beneath)
+ if (bp.in_target_beneath)
{
scoped_restore restore_operation_disable
= record_full_gdb_operation_disable_set ();
@@ -1830,10 +1823,7 @@ record_full_target::remove_breakpoint (struct gdbarch *gdbarch,
}
if (reason == REMOVE_BREAKPOINT)
- {
- VEC_unordered_remove (record_full_breakpoint_p,
- record_full_breakpoints, ix);
- }
+ unordered_remove (record_full_breakpoints, iter);
return 0;
}
}