diff options
author | Tom Tromey <tom@tromey.com> | 2018-06-07 17:22:49 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-06-10 22:12:32 -0600 |
commit | 219605fd6adadadfd40234e39254077e044741d0 (patch) | |
tree | dbe1e44ac2bc80a38d485f3d5d897ce0af0bdfdb | |
parent | 71b73764977a3895b0dda3e7260eece7a8d3e60c (diff) | |
download | gdb-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.
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/record-full.c | 78 |
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; } } |