diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2023-05-09 10:04:23 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2023-05-25 09:41:16 -0400 |
commit | e2a1578868a2a681fbafd6c56b694cfe9410b8d4 (patch) | |
tree | cdd46ed5139532adf299ce060a55dfafa400c416 /gdb/breakpoint.c | |
parent | b00b30b2981d393743bafe86b5ea37fd2299eccc (diff) | |
download | fsf-binutils-gdb-e2a1578868a2a681fbafd6c56b694cfe9410b8d4.zip fsf-binutils-gdb-e2a1578868a2a681fbafd6c56b694cfe9410b8d4.tar.gz fsf-binutils-gdb-e2a1578868a2a681fbafd6c56b694cfe9410b8d4.tar.bz2 |
gdb: link breakpoints with intrusive_list
Change-Id: I043d8d6f3dd864d80d5088f6ffc2c098337249ea
Reviewed-By: Andrew Burgess <aburgess@redhat.com>
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r-- | gdb/breakpoint.c | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 0cdf5a7..8c61307 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -614,14 +614,16 @@ bool target_exact_watchpoints = false; /* Chains of all breakpoints defined. */ -static struct breakpoint *breakpoint_chain; +static intrusive_list<breakpoint> breakpoint_chain; /* See breakpoint.h. */ breakpoint_range all_breakpoints () { - return breakpoint_range (breakpoint_chain); + return breakpoint_range + (breakpoint_pointer_iterator (breakpoint_chain.begin ()), + breakpoint_pointer_iterator (breakpoint_chain.end ())); } /* See breakpoint.h. */ @@ -637,7 +639,9 @@ all_breakpoints_safe () tracepoint_range all_tracepoints () { - return tracepoint_range (breakpoint_chain); + return tracepoint_range + (tracepoint_iterator (breakpoint_pointer_iterator (breakpoint_chain.begin ())), + tracepoint_iterator (breakpoint_pointer_iterator (breakpoint_chain.end ()))); } /* Array is sorted by bp_location_is_less_than - primarily by the ADDRESS. */ @@ -7428,23 +7432,12 @@ decref_bp_location (struct bp_location **blp) static breakpoint * add_to_breakpoint_chain (std::unique_ptr<breakpoint> &&b) { - struct breakpoint *b1; - struct breakpoint *result = b.get (); - /* Add this breakpoint to the end of the chain so that a list of breakpoints will come out in order of increasing numbers. */ - b1 = breakpoint_chain; - if (b1 == 0) - breakpoint_chain = b.release (); - else - { - while (b1->next) - b1 = b1->next; - b1->next = b.release (); - } + breakpoint_chain.push_back (*b.release ()); - return result; + return &breakpoint_chain.back (); } /* Initialize loc->function_name. */ @@ -12372,15 +12365,7 @@ delete_breakpoint (struct breakpoint *bpt) if (bpt->number) gdb::observers::breakpoint_deleted.notify (bpt); - if (breakpoint_chain == bpt) - breakpoint_chain = bpt->next; - - for (breakpoint *b : all_breakpoints ()) - if (b->next == bpt) - { - b->next = bpt->next; - break; - } + breakpoint_chain.erase (breakpoint_chain.iterator_to (*bpt)); /* Be sure no bpstat's are pointing at the breakpoint after it's been freed. */ @@ -14442,7 +14427,6 @@ _initialize_breakpoint () gdb::observers::memory_changed.attach (invalidate_bp_value_on_memory_change, "breakpoint"); - breakpoint_chain = 0; /* Don't bother to call set_breakpoint_count. $bpnum isn't useful before a breakpoint is set. */ breakpoint_count = 0; |