1 /* Everything about breakpoints, for GDB.
3 Copyright (C) 1986-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "arch-utils.h"
22 #include "event-top.h"
26 #include "breakpoint.h"
27 #include "tracepoint.h"
29 #include "expression.h"
31 #include "cli/cli-cmds.h"
36 #include "gdbthread.h"
39 #include "gdb-demangle.h"
40 #include "filenames.h"
46 #include "completer.h"
48 #include "cli/cli-script.h"
52 #include "observable.h"
59 #include "parser-defs.h"
60 #include "gdbsupport/gdb_regex.h"
62 #include "cli/cli-utils.h"
65 #include "dummy-frame.h"
67 #include "gdbsupport/format.h"
68 #include "thread-fsm.h"
69 #include "tid-parse.h"
70 #include "cli/cli-style.h"
71 #include "cli/cli-decode.h"
72 #include <unordered_set>
74 /* readline include files */
75 #include "readline/tilde.h"
77 /* readline defines this. */
80 #include "mi/mi-common.h"
81 #include "extension.h"
83 #include "progspace-and-thread.h"
84 #include "gdbsupport/array-view.h"
86 #include "gdbsupport/common-utils.h"
88 /* Prototypes for local functions. */
90 static void map_breakpoint_numbers (const char *,
91 gdb::function_view
<void (breakpoint
*)>);
94 create_sals_from_location_spec_default (location_spec
*locspec
,
95 linespec_result
*canonical
);
97 static void create_breakpoints_sal (struct gdbarch
*,
98 struct linespec_result
*,
99 gdb::unique_xmalloc_ptr
<char>,
100 gdb::unique_xmalloc_ptr
<char>,
102 enum bpdisp
, int, int, int,
104 int, int, int, unsigned);
106 static int can_use_hardware_watchpoint
107 (const std::vector
<value_ref_ptr
> &vals
);
109 static void mention (const breakpoint
*);
111 static breakpoint
*add_to_breakpoint_chain (std::unique_ptr
<breakpoint
> &&b
);
113 static breakpoint
*add_to_breakpoint_chain (std::unique_ptr
<breakpoint
> &&b
);
115 static struct breakpoint
*
116 momentary_breakpoint_from_master (struct breakpoint
*orig
,
118 int loc_enabled
, int thread
);
120 static void breakpoint_adjustment_warning (CORE_ADDR
, CORE_ADDR
, int, bool);
122 static CORE_ADDR
adjust_breakpoint_address (struct gdbarch
*gdbarch
,
125 struct program_space
*pspace
);
127 static bool watchpoint_locations_match (const struct bp_location
*loc1
,
128 const struct bp_location
*loc2
);
130 static bool breakpoint_locations_match (const struct bp_location
*loc1
,
131 const struct bp_location
*loc2
,
132 bool sw_hw_bps_match
= false);
134 static bool breakpoint_location_address_match (struct bp_location
*bl
,
135 const struct address_space
*aspace
,
138 static bool breakpoint_location_address_range_overlap (struct bp_location
*,
139 const address_space
*,
142 static int remove_breakpoint (struct bp_location
*);
143 static int remove_breakpoint_1 (struct bp_location
*, enum remove_bp_reason
);
145 static enum print_stop_action
print_bp_stop_message (bpstat
*bs
);
147 static int hw_breakpoint_used_count (void);
149 static int hw_watchpoint_use_count (struct breakpoint
*);
151 static int hw_watchpoint_used_count_others (struct breakpoint
*except
,
153 int *other_type_used
);
155 static void enable_breakpoint_disp (struct breakpoint
*, enum bpdisp
,
158 static void decref_bp_location (struct bp_location
**loc
);
160 static std::vector
<symtab_and_line
> bkpt_probe_decode_location_spec
161 (struct breakpoint
*b
,
162 location_spec
*locspec
,
163 struct program_space
*search_pspace
);
165 static bool bl_address_is_meaningful (bp_location
*loc
);
167 static int find_loc_num_by_location (const bp_location
*loc
);
169 /* update_global_location_list's modes of operation wrt to whether to
170 insert locations now. */
171 enum ugll_insert_mode
173 /* Don't insert any breakpoint locations into the inferior, only
174 remove already-inserted locations that no longer should be
175 inserted. Functions that delete a breakpoint or breakpoints
176 should specify this mode, so that deleting a breakpoint doesn't
177 have the side effect of inserting the locations of other
178 breakpoints that are marked not-inserted, but should_be_inserted
179 returns true on them.
181 This behavior is useful is situations close to tear-down -- e.g.,
182 after an exec, while the target still has execution, but
183 breakpoint shadows of the previous executable image should *NOT*
184 be restored to the new image; or before detaching, where the
185 target still has execution and wants to delete breakpoints from
186 GDB's lists, and all breakpoints had already been removed from
190 /* May insert breakpoints iff breakpoints_should_be_inserted_now
191 claims breakpoints should be inserted now. */
194 /* Insert locations now, irrespective of
195 breakpoints_should_be_inserted_now. E.g., say all threads are
196 stopped right now, and the user did "continue". We need to
197 insert breakpoints _before_ resuming the target, but
198 UGLL_MAY_INSERT wouldn't insert them, because
199 breakpoints_should_be_inserted_now returns false at that point,
200 as no thread is running yet. */
204 /* Return a textual version of INSERT_MODE. */
207 ugll_insert_mode_text (ugll_insert_mode insert_mode
)
209 /* Make sure the compiler warns if a new ugll_insert_mode enumerator is added
210 but not handled here. */
212 DIAGNOSTIC_ERROR_SWITCH
215 case UGLL_DONT_INSERT
:
216 return "UGLL_DONT_INSERT";
217 case UGLL_MAY_INSERT
:
218 return "UGLL_MAY_INSERT";
220 return "UGLL_INSERT";
224 gdb_assert_not_reached ("must handle all enum values");
227 /* Return a textual version of REASON. */
230 remove_bp_reason_str (remove_bp_reason reason
)
232 /* Make sure the compiler warns if a new remove_bp_reason enumerator is added
233 but not handled here. */
235 DIAGNOSTIC_ERROR_SWITCH
238 case REMOVE_BREAKPOINT
:
239 return "regular remove";
240 case DETACH_BREAKPOINT
:
245 gdb_assert_not_reached ("must handle all enum values");
248 /* Return a textual version of breakpoint location BL describing number,
249 location and address. */
252 breakpoint_location_address_str (const bp_location
*bl
)
254 std::string str
= string_printf ("Breakpoint %d (%s) at address %s",
256 host_address_to_string (bl
),
257 paddress (bl
->gdbarch
, bl
->address
));
259 std::string loc_string
= bl
->to_string ();
260 if (!loc_string
.empty ())
261 str
+= string_printf (" %s", loc_string
.c_str ());
266 static void update_global_location_list (enum ugll_insert_mode
);
268 static void update_global_location_list_nothrow (enum ugll_insert_mode
);
270 static void insert_breakpoint_locations (void);
272 static void trace_pass_command (const char *, int);
274 static void set_tracepoint_count (int num
);
276 static bool is_masked_watchpoint (const struct breakpoint
*b
);
278 /* Return true if B refers to a static tracepoint set by marker ("-m"),
281 static bool strace_marker_p (struct breakpoint
*b
);
283 static void bkpt_probe_create_sals_from_location_spec
284 (location_spec
*locspec
,
285 struct linespec_result
*canonical
);
286 static void tracepoint_probe_create_sals_from_location_spec
287 (location_spec
*locspec
,
288 struct linespec_result
*canonical
);
290 const struct breakpoint_ops code_breakpoint_ops
=
292 create_sals_from_location_spec_default
,
293 create_breakpoints_sal
,
296 /* Breakpoints set on probes. */
297 static const struct breakpoint_ops bkpt_probe_breakpoint_ops
=
299 bkpt_probe_create_sals_from_location_spec
,
300 create_breakpoints_sal
,
303 /* Tracepoints set on probes. */
304 static const struct breakpoint_ops tracepoint_probe_breakpoint_ops
=
306 tracepoint_probe_create_sals_from_location_spec
,
307 create_breakpoints_sal
,
310 /* Implementation of abstract dtors. These must exist to satisfy the
313 breakpoint::~breakpoint ()
317 code_breakpoint::~code_breakpoint ()
321 catchpoint::~catchpoint ()
325 /* The structure to be used in regular breakpoints. */
326 struct ordinary_breakpoint
: public code_breakpoint
328 using code_breakpoint::code_breakpoint
;
330 int resources_needed (const struct bp_location
*) override
;
331 enum print_stop_action
print_it (const bpstat
*bs
) const override
;
332 void print_mention () const override
;
333 void print_recreate (struct ui_file
*fp
) const override
;
336 /* Internal breakpoints. These typically have a lifetime the same as
337 the program, and they end up installed on the breakpoint chain with
338 a negative breakpoint number. They're visible in "maint info
339 breakpoints", but not "info breakpoints". */
340 struct internal_breakpoint
: public code_breakpoint
342 internal_breakpoint (struct gdbarch
*gdbarch
,
343 enum bptype type
, CORE_ADDR address
)
344 : code_breakpoint (gdbarch
, type
)
348 sal
.section
= find_pc_overlay (sal
.pc
);
349 sal
.pspace
= current_program_space
;
352 pspace
= current_program_space
;
353 disposition
= disp_donttouch
;
356 void re_set () override
;
357 void check_status (struct bpstat
*bs
) override
;
358 enum print_stop_action
print_it (const bpstat
*bs
) const override
;
359 void print_mention () const override
;
362 /* Momentary breakpoints. These typically have a lifetime of some run
363 control command only, are always thread-specific, and have 0 for
364 breakpoint number. I.e., there can be many momentary breakpoints
365 on the breakpoint chain and they all same the same number (zero).
366 They're visible in "maint info breakpoints", but not "info
368 struct momentary_breakpoint
: public code_breakpoint
370 momentary_breakpoint (struct gdbarch
*gdbarch_
, enum bptype bptype
,
371 program_space
*pspace_
,
372 const struct frame_id
&frame_id_
,
374 : code_breakpoint (gdbarch_
, bptype
)
376 /* If FRAME_ID is valid, it should be a real frame, not an inlined
377 or tail-called one. */
378 gdb_assert (!frame_id_artificial_p (frame_id
));
380 /* Momentary breakpoints are always thread-specific. */
381 gdb_assert (thread_
> 0);
384 enable_state
= bp_enabled
;
385 disposition
= disp_donttouch
;
386 frame_id
= frame_id_
;
389 /* The inferior should have been set by the parent constructor. */
390 gdb_assert (inferior
== -1);
393 void re_set () override
;
394 void check_status (struct bpstat
*bs
) override
;
395 enum print_stop_action
print_it (const bpstat
*bs
) const override
;
396 void print_mention () const override
;
399 /* DPrintf breakpoints. */
400 struct dprintf_breakpoint
: public ordinary_breakpoint
402 using ordinary_breakpoint::ordinary_breakpoint
;
404 void re_set () override
;
405 int breakpoint_hit (const struct bp_location
*bl
,
406 const address_space
*aspace
,
408 const target_waitstatus
&ws
) override
;
409 void print_recreate (struct ui_file
*fp
) const override
;
410 void after_condition_true (struct bpstat
*bs
) override
;
413 /* Ranged breakpoints. */
414 struct ranged_breakpoint
: public ordinary_breakpoint
416 explicit ranged_breakpoint (struct gdbarch
*gdbarch
,
417 const symtab_and_line
&sal_start
,
419 location_spec_up start_locspec
,
420 location_spec_up end_locspec
)
421 : ordinary_breakpoint (gdbarch
, bp_hardware_breakpoint
)
423 bp_location
*bl
= add_location (sal_start
);
426 disposition
= disp_donttouch
;
428 locspec
= std::move (start_locspec
);
429 locspec_range_end
= std::move (end_locspec
);
432 int breakpoint_hit (const struct bp_location
*bl
,
433 const address_space
*aspace
,
435 const target_waitstatus
&ws
) override
;
436 int resources_needed (const struct bp_location
*) override
;
437 enum print_stop_action
print_it (const bpstat
*bs
) const override
;
438 bool print_one (const bp_location
**) const override
;
439 void print_one_detail (struct ui_out
*) const override
;
440 void print_mention () const override
;
441 void print_recreate (struct ui_file
*fp
) const override
;
444 /* Static tracepoints with marker (`-m'). */
445 struct static_marker_tracepoint
: public tracepoint
447 using tracepoint::tracepoint
;
449 std::vector
<symtab_and_line
> decode_location_spec
450 (struct location_spec
*locspec
,
451 struct program_space
*search_pspace
) override
;
454 /* The style in which to perform a dynamic printf. This is a user
455 option because different output options have different tradeoffs;
456 if GDB does the printing, there is better error handling if there
457 is a problem with any of the arguments, but using an inferior
458 function lets you have special-purpose printers and sending of
459 output to the same place as compiled-in print functions. */
461 static const char dprintf_style_gdb
[] = "gdb";
462 static const char dprintf_style_call
[] = "call";
463 static const char dprintf_style_agent
[] = "agent";
464 static const char *const dprintf_style_enums
[] = {
470 static const char *dprintf_style
= dprintf_style_gdb
;
472 /* The function to use for dynamic printf if the preferred style is to
473 call into the inferior. The value is simply a string that is
474 copied into the command, so it can be anything that GDB can
475 evaluate to a callable address, not necessarily a function name. */
477 static std::string dprintf_function
= "printf";
479 /* The channel to use for dynamic printf if the preferred style is to
480 call into the inferior; if a nonempty string, it will be passed to
481 the call as the first argument, with the format string as the
482 second. As with the dprintf function, this can be anything that
483 GDB knows how to evaluate, so in addition to common choices like
484 "stderr", this could be an app-specific expression like
485 "mystreams[curlogger]". */
487 static std::string dprintf_channel
;
489 /* True if dprintf commands should continue to operate even if GDB
491 static bool disconnected_dprintf
= true;
493 struct command_line
*
494 breakpoint_commands (struct breakpoint
*b
)
496 return b
->commands
? b
->commands
.get () : NULL
;
499 /* Flag indicating that a command has proceeded the inferior past the
500 current breakpoint. */
502 static bool breakpoint_proceeded
;
505 bpdisp_text (enum bpdisp disp
)
507 /* NOTE: the following values are a part of MI protocol and
508 represent values of 'disp' field returned when inferior stops at
510 static const char * const bpdisps
[] = {"del", "dstp", "dis", "keep"};
512 return bpdisps
[(int) disp
];
515 /* Prototypes for exported functions. */
516 /* If FALSE, gdb will not use hardware support for watchpoints, even
517 if such is available. */
518 static int can_use_hw_watchpoints
;
521 show_can_use_hw_watchpoints (struct ui_file
*file
, int from_tty
,
522 struct cmd_list_element
*c
,
526 _("Debugger's willingness to use "
527 "watchpoint hardware is %s.\n"),
531 /* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
532 If AUTO_BOOLEAN_TRUE, gdb will automatically create pending breakpoints
533 for unrecognized breakpoint locations.
534 If AUTO_BOOLEAN_AUTO, gdb will query when breakpoints are unrecognized. */
535 static enum auto_boolean pending_break_support
;
537 show_pending_break_support (struct ui_file
*file
, int from_tty
,
538 struct cmd_list_element
*c
,
542 _("Debugger's behavior regarding "
543 "pending breakpoints is %s.\n"),
547 /* If true, gdb will automatically use hardware breakpoints for breakpoints
548 set with "break" but falling in read-only memory.
549 If false, gdb will warn about such breakpoints, but won't automatically
550 use hardware breakpoints. */
551 static bool automatic_hardware_breakpoints
;
553 show_automatic_hardware_breakpoints (struct ui_file
*file
, int from_tty
,
554 struct cmd_list_element
*c
,
558 _("Automatic usage of hardware breakpoints is %s.\n"),
562 /* If on, GDB keeps breakpoints inserted even if the inferior is
563 stopped, and immediately inserts any new breakpoints as soon as
564 they're created. If off (default), GDB keeps breakpoints off of
565 the target as long as possible. That is, it delays inserting
566 breakpoints until the next resume, and removes them again when the
567 target fully stops. This is a bit safer in case GDB crashes while
568 processing user input. */
569 static bool always_inserted_mode
= false;
572 show_always_inserted_mode (struct ui_file
*file
, int from_tty
,
573 struct cmd_list_element
*c
, const char *value
)
575 gdb_printf (file
, _("Always inserted breakpoint mode is %s.\n"),
579 /* True if breakpoint debug output is enabled. */
580 static bool debug_breakpoint
= false;
582 /* Print a "breakpoint" debug statement. */
583 #define breakpoint_debug_printf(fmt, ...) \
584 debug_prefixed_printf_cond (debug_breakpoint, "breakpoint", fmt, \
587 /* "show debug breakpoint" implementation. */
589 show_debug_breakpoint (struct ui_file
*file
, int from_tty
,
590 struct cmd_list_element
*c
, const char *value
)
592 gdb_printf (file
, _("Breakpoint location debugging is %s.\n"), value
);
595 /* See breakpoint.h. */
598 breakpoints_should_be_inserted_now (void)
600 if (gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
602 /* If breakpoints are global, they should be inserted even if no
603 thread under gdb's control is running, or even if there are
604 no threads under GDB's control yet. */
609 if (always_inserted_mode
)
611 /* The user wants breakpoints inserted even if all threads
616 for (inferior
*inf
: all_inferiors ())
617 if (inf
->has_execution ()
618 && threads_are_executing (inf
->process_target ()))
621 /* Don't remove breakpoints yet if, even though all threads are
622 stopped, we still have events to process. */
623 for (thread_info
*tp
: all_non_exited_threads ())
624 if (tp
->resumed () && tp
->has_pending_waitstatus ())
630 static const char condition_evaluation_both
[] = "host or target";
632 /* Modes for breakpoint condition evaluation. */
633 static const char condition_evaluation_auto
[] = "auto";
634 static const char condition_evaluation_host
[] = "host";
635 static const char condition_evaluation_target
[] = "target";
636 static const char *const condition_evaluation_enums
[] = {
637 condition_evaluation_auto
,
638 condition_evaluation_host
,
639 condition_evaluation_target
,
643 /* Global that holds the current mode for breakpoint condition evaluation. */
644 static const char *condition_evaluation_mode_1
= condition_evaluation_auto
;
646 /* Global that we use to display information to the user (gets its value from
647 condition_evaluation_mode_1. */
648 static const char *condition_evaluation_mode
= condition_evaluation_auto
;
650 /* Translate a condition evaluation mode MODE into either "host"
651 or "target". This is used mostly to translate from "auto" to the
652 real setting that is being used. It returns the translated
656 translate_condition_evaluation_mode (const char *mode
)
658 if (mode
== condition_evaluation_auto
)
660 if (target_supports_evaluation_of_breakpoint_conditions ())
661 return condition_evaluation_target
;
663 return condition_evaluation_host
;
669 /* Discovers what condition_evaluation_auto translates to. */
672 breakpoint_condition_evaluation_mode (void)
674 return translate_condition_evaluation_mode (condition_evaluation_mode
);
677 /* Return true if GDB should evaluate breakpoint conditions or false
681 gdb_evaluates_breakpoint_condition_p (void)
683 const char *mode
= breakpoint_condition_evaluation_mode ();
685 return (mode
== condition_evaluation_host
);
688 /* Are we executing breakpoint commands? */
689 static int executing_breakpoint_commands
;
691 /* Are overlay event breakpoints enabled? */
692 static int overlay_events_enabled
;
694 /* See description in breakpoint.h. */
695 bool target_exact_watchpoints
= false;
697 /* Chains of all breakpoints defined. */
699 static intrusive_list
<breakpoint
> breakpoint_chain
;
701 /* See breakpoint.h. */
706 return breakpoint_range (breakpoint_chain
.begin (), breakpoint_chain
.end ());
709 /* See breakpoint.h. */
711 breakpoint_safe_range
712 all_breakpoints_safe ()
714 return breakpoint_safe_range (all_breakpoints ());
717 /* See breakpoint.h. */
722 return tracepoint_range (tracepoint_iterator (breakpoint_chain
.begin ()),
723 tracepoint_iterator (breakpoint_chain
.end ()));
726 /* Array is sorted by bp_location_is_less_than - primarily by the ADDRESS. */
728 static std::vector
<bp_location
*> bp_locations
;
730 /* See breakpoint.h. */
732 const std::vector
<bp_location
*> &
738 /* Range to iterate over breakpoint locations at a given address. */
740 struct bp_locations_at_addr_range
742 using iterator
= std::vector
<bp_location
*>::iterator
;
744 bp_locations_at_addr_range (CORE_ADDR addr
)
748 bool operator() (const bp_location
*loc
, CORE_ADDR addr_
) const
749 { return loc
->address
< addr_
; }
751 bool operator() (CORE_ADDR addr_
, const bp_location
*loc
) const
752 { return addr_
< loc
->address
; }
755 auto it_pair
= std::equal_range (bp_locations
.begin (), bp_locations
.end (),
758 m_begin
= it_pair
.first
;
759 m_end
= it_pair
.second
;
762 iterator
begin () const
765 iterator
end () const
773 /* Return a range to iterate over all breakpoint locations exactly at address
776 If it's needed to iterate multiple times on the same range, it's possible
777 to save the range in a local variable and use it multiple times:
779 auto range = all_bp_locations_at_addr (addr);
781 for (bp_location *loc : range)
784 for (bp_location *loc : range)
787 This saves a bit of time, as it avoids re-doing the binary searches to find
788 the range's boundaries. Just remember not to change the bp_locations vector
789 in the mean time, as it could make the range's iterators stale. */
791 static bp_locations_at_addr_range
792 all_bp_locations_at_addr (CORE_ADDR addr
)
794 return bp_locations_at_addr_range (addr
);
797 /* Maximum alignment offset between bp_target_info.PLACED_ADDRESS and
798 ADDRESS for the current elements of BP_LOCATIONS which get a valid
799 result from bp_location_has_shadow. You can use it for roughly
800 limiting the subrange of BP_LOCATIONS to scan for shadow bytes for
801 an address you need to read. */
803 static CORE_ADDR bp_locations_placed_address_before_address_max
;
805 /* Maximum offset plus alignment between bp_target_info.PLACED_ADDRESS
806 + bp_target_info.SHADOW_LEN and ADDRESS for the current elements of
807 BP_LOCATIONS which get a valid result from bp_location_has_shadow.
808 You can use it for roughly limiting the subrange of BP_LOCATIONS to
809 scan for shadow bytes for an address you need to read. */
811 static CORE_ADDR bp_locations_shadow_len_after_address_max
;
813 /* The locations that no longer correspond to any breakpoint, unlinked
814 from the bp_locations array, but for which a hit may still be
815 reported by a target. */
816 static std::vector
<bp_location
*> moribund_locations
;
818 /* Number of last breakpoint made. */
820 static int breakpoint_count
;
822 /* The value of `breakpoint_count' before the last command that
823 created breakpoints. If the last (break-like) command created more
824 than one breakpoint, then the difference between BREAKPOINT_COUNT
825 and PREV_BREAKPOINT_COUNT is more than one. */
826 static int prev_breakpoint_count
;
828 /* Number of last tracepoint made. */
830 static int tracepoint_count
;
832 static struct cmd_list_element
*breakpoint_set_cmdlist
;
833 static struct cmd_list_element
*breakpoint_show_cmdlist
;
834 struct cmd_list_element
*save_cmdlist
;
836 /* Return whether a breakpoint is an active enabled breakpoint. */
838 breakpoint_enabled (struct breakpoint
*b
)
840 return (b
->enable_state
== bp_enabled
);
843 /* Set breakpoint count to NUM. */
846 set_breakpoint_count (int num
)
848 prev_breakpoint_count
= breakpoint_count
;
849 breakpoint_count
= num
;
850 set_internalvar_integer (lookup_internalvar ("bpnum"), num
);
853 /* Used by `start_rbreak_breakpoints' below, to record the current
854 breakpoint count before "rbreak" creates any breakpoint. */
855 static int rbreak_start_breakpoint_count
;
857 /* Called at the start an "rbreak" command to record the first
860 scoped_rbreak_breakpoints::scoped_rbreak_breakpoints ()
862 rbreak_start_breakpoint_count
= breakpoint_count
;
865 /* Called at the end of an "rbreak" command to record the last
868 scoped_rbreak_breakpoints::~scoped_rbreak_breakpoints ()
870 prev_breakpoint_count
= rbreak_start_breakpoint_count
;
873 /* Used in run_command to zero the hit count when a new run starts. */
876 clear_breakpoint_hit_counts (void)
878 for (breakpoint
&b
: all_breakpoints ())
883 /* Return the breakpoint with the specified number, or NULL
884 if the number does not refer to an existing breakpoint. */
887 get_breakpoint (int num
)
889 for (breakpoint
&b
: all_breakpoints ())
896 /* Return TRUE if NUM refer to an existing breakpoint that has
897 multiple code locations. */
900 has_multiple_locations (int num
)
902 for (breakpoint
&b
: all_breakpoints ())
904 return b
.has_multiple_locations ();
911 /* Mark locations as "conditions have changed" in case the target supports
912 evaluating conditions on its side. */
915 mark_breakpoint_modified (struct breakpoint
*b
)
917 /* This is only meaningful if the target is
918 evaluating conditions and if the user has
919 opted for condition evaluation on the target's
921 if (gdb_evaluates_breakpoint_condition_p ()
922 || !target_supports_evaluation_of_breakpoint_conditions ())
925 if (!is_breakpoint (b
))
928 for (bp_location
&loc
: b
->locations ())
929 loc
.condition_changed
= condition_modified
;
932 /* Mark location as "conditions have changed" in case the target supports
933 evaluating conditions on its side. */
936 mark_breakpoint_location_modified (struct bp_location
*loc
)
938 /* This is only meaningful if the target is
939 evaluating conditions and if the user has
940 opted for condition evaluation on the target's
942 if (gdb_evaluates_breakpoint_condition_p ()
943 || !target_supports_evaluation_of_breakpoint_conditions ())
947 if (!is_breakpoint (loc
->owner
))
950 loc
->condition_changed
= condition_modified
;
953 /* Sets the condition-evaluation mode using the static global
954 condition_evaluation_mode. */
957 set_condition_evaluation_mode (const char *args
, int from_tty
,
958 struct cmd_list_element
*c
)
960 const char *old_mode
, *new_mode
;
962 if ((condition_evaluation_mode_1
== condition_evaluation_target
)
963 && !target_supports_evaluation_of_breakpoint_conditions ())
965 condition_evaluation_mode_1
= condition_evaluation_mode
;
966 warning (_("Target does not support breakpoint condition evaluation.\n"
967 "Using host evaluation mode instead."));
971 new_mode
= translate_condition_evaluation_mode (condition_evaluation_mode_1
);
972 old_mode
= translate_condition_evaluation_mode (condition_evaluation_mode
);
974 /* Flip the switch. Flip it even if OLD_MODE == NEW_MODE as one of the
975 settings was "auto". */
976 condition_evaluation_mode
= condition_evaluation_mode_1
;
978 /* Only update the mode if the user picked a different one. */
979 if (new_mode
!= old_mode
)
981 /* If the user switched to a different evaluation mode, we
982 need to synch the changes with the target as follows:
984 "host" -> "target": Send all (valid) conditions to the target.
985 "target" -> "host": Remove all the conditions from the target.
988 if (new_mode
== condition_evaluation_target
)
990 /* Mark everything modified and synch conditions with the
992 for (bp_location
*loc
: all_bp_locations ())
993 mark_breakpoint_location_modified (loc
);
997 /* Manually mark non-duplicate locations to synch conditions
998 with the target. We do this to remove all the conditions the
999 target knows about. */
1000 for (bp_location
*loc
: all_bp_locations ())
1001 if (is_breakpoint (loc
->owner
) && loc
->inserted
)
1002 loc
->needs_update
= 1;
1005 /* Do the update. */
1006 update_global_location_list (UGLL_MAY_INSERT
);
1012 /* Shows the current mode of breakpoint condition evaluation. Explicitly shows
1013 what "auto" is translating to. */
1016 show_condition_evaluation_mode (struct ui_file
*file
, int from_tty
,
1017 struct cmd_list_element
*c
, const char *value
)
1019 if (condition_evaluation_mode
== condition_evaluation_auto
)
1021 _("Breakpoint condition evaluation "
1022 "mode is %s (currently %s).\n"),
1024 breakpoint_condition_evaluation_mode ());
1026 gdb_printf (file
, _("Breakpoint condition evaluation mode is %s.\n"),
1030 /* Parse COND_STRING in the context of LOC and set as the condition
1031 expression of LOC. BP_NUM is the number of LOC's owner, LOC_NUM is
1032 the number of LOC within its owner. In case of parsing error, mark
1033 LOC as DISABLED_BY_COND. In case of success, unset DISABLED_BY_COND. */
1036 set_breakpoint_location_condition (const char *cond_string
, bp_location
*loc
,
1037 int bp_num
, int loc_num
)
1039 bool has_junk
= false;
1042 expression_up new_exp
= parse_exp_1 (&cond_string
, loc
->address
,
1043 block_for_pc (loc
->address
), 0);
1044 if (*cond_string
!= 0)
1048 loc
->cond
= std::move (new_exp
);
1049 if (loc
->disabled_by_cond
&& loc
->enabled
)
1050 gdb_printf (_("Breakpoint %d's condition is now valid at "
1051 "location %d, enabling.\n"),
1054 loc
->disabled_by_cond
= false;
1057 catch (const gdb_exception_error
&e
)
1061 /* Warn if a user-enabled location is now becoming disabled-by-cond.
1062 BP_NUM is 0 if the breakpoint is being defined for the first
1063 time using the "break ... if ..." command, and non-zero if
1066 warning (_("failed to validate condition at location %d.%d, "
1067 "disabling:\n %s"), bp_num
, loc_num
, e
.what ());
1069 warning (_("failed to validate condition at location %d, "
1070 "disabling:\n %s"), loc_num
, e
.what ());
1073 loc
->disabled_by_cond
= true;
1077 error (_("Garbage '%s' follows condition"), cond_string
);
1080 /* See breakpoint.h. */
1083 notify_breakpoint_modified (breakpoint
*b
)
1085 interps_notify_breakpoint_modified (b
);
1086 gdb::observers::breakpoint_modified
.notify (b
);
1090 set_breakpoint_condition (struct breakpoint
*b
, const char *exp
,
1091 int from_tty
, bool force
)
1095 b
->cond_string
.reset ();
1097 if (is_watchpoint (b
))
1098 gdb::checked_static_cast
<watchpoint
*> (b
)->cond_exp
.reset ();
1102 for (bp_location
&loc
: b
->locations ())
1105 if (loc
.disabled_by_cond
&& loc
.enabled
)
1106 gdb_printf (_("Breakpoint %d's condition is now valid at "
1107 "location %d, enabling.\n"),
1108 b
->number
, loc_num
);
1109 loc
.disabled_by_cond
= false;
1112 /* No need to free the condition agent expression
1113 bytecode (if we have one). We will handle this
1114 when we go through update_global_location_list. */
1119 gdb_printf (_("Breakpoint %d now unconditional.\n"), b
->number
);
1123 if (is_watchpoint (b
))
1125 innermost_block_tracker tracker
;
1126 const char *arg
= exp
;
1127 expression_up new_exp
= parse_exp_1 (&arg
, 0, 0, 0, &tracker
);
1129 error (_("Junk at end of expression"));
1130 watchpoint
*w
= gdb::checked_static_cast
<watchpoint
*> (b
);
1131 w
->cond_exp
= std::move (new_exp
);
1132 w
->cond_exp_valid_block
= tracker
.block ();
1136 /* Parse and set condition expressions. We make two passes.
1137 In the first, we parse the condition string to see if it
1138 is valid in at least one location. If so, the condition
1139 would be accepted. So we go ahead and set the locations'
1140 conditions. In case no valid case is found, we throw
1141 the error and the condition string will be rejected.
1142 This two-pass approach is taken to avoid setting the
1143 state of locations in case of a reject. */
1144 for (const bp_location
&loc
: b
->locations ())
1148 const char *arg
= exp
;
1149 parse_exp_1 (&arg
, loc
.address
,
1150 block_for_pc (loc
.address
), 0);
1152 error (_("Junk at end of expression"));
1155 catch (const gdb_exception_error
&e
)
1157 /* Condition string is invalid. If this happens to
1158 be the last loc, abandon (if not forced) or continue
1160 if (&loc
== &b
->last_loc () && !force
)
1165 /* If we reach here, the condition is valid at some locations. */
1167 for (bp_location
&loc
: b
->locations ())
1169 set_breakpoint_location_condition (exp
, &loc
, b
->number
, loc_num
);
1174 /* We know that the new condition parsed successfully. The
1175 condition string of the breakpoint can be safely updated. */
1176 b
->cond_string
= make_unique_xstrdup (exp
);
1177 b
->condition_not_parsed
= 0;
1179 mark_breakpoint_modified (b
);
1181 notify_breakpoint_modified (b
);
1184 /* See breakpoint.h. */
1187 set_breakpoint_condition (int bpnum
, const char *exp
, int from_tty
,
1190 for (breakpoint
&b
: all_breakpoints ())
1191 if (b
.number
== bpnum
)
1193 /* Check if this breakpoint has a "stop" method implemented in an
1194 extension language. This method and conditions entered into GDB
1195 from the CLI are mutually exclusive. */
1196 const struct extension_language_defn
*extlang
1197 = get_breakpoint_cond_ext_lang (&b
, EXT_LANG_NONE
);
1199 if (extlang
!= NULL
)
1201 error (_("Only one stop condition allowed. There is currently"
1202 " a %s stop condition defined for this breakpoint."),
1203 ext_lang_capitalized_name (extlang
));
1205 set_breakpoint_condition (&b
, exp
, from_tty
, force
);
1207 if (is_breakpoint (&b
))
1208 update_global_location_list (UGLL_MAY_INSERT
);
1213 error (_("No breakpoint number %d."), bpnum
);
1216 /* The options for the "condition" command. */
1218 struct condition_command_opts
1221 bool force_condition
= false;
1224 static const gdb::option::option_def condition_command_option_defs
[] = {
1226 gdb::option::flag_option_def
<condition_command_opts
> {
1228 [] (condition_command_opts
*opts
) { return &opts
->force_condition
; },
1229 N_("Set the condition even if it is invalid for all current locations."),
1234 /* Create an option_def_group for the "condition" options, with
1235 CC_OPTS as context. */
1237 static inline gdb::option::option_def_group
1238 make_condition_command_options_def_group (condition_command_opts
*cc_opts
)
1240 return {{condition_command_option_defs
}, cc_opts
};
1243 /* Completion for the "condition" command. */
1246 condition_completer (struct cmd_list_element
*cmd
,
1247 completion_tracker
&tracker
,
1248 const char *text
, const char * /*word*/)
1250 bool has_no_arguments
= (*text
== '\0');
1251 condition_command_opts cc_opts
;
1252 const auto group
= make_condition_command_options_def_group (&cc_opts
);
1253 if (gdb::option::complete_options
1254 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, group
))
1257 text
= skip_spaces (text
);
1258 const char *space
= skip_to_space (text
);
1265 tracker
.advance_custom_word_point_by (1);
1266 /* We don't support completion of history indices. */
1267 if (!isdigit (text
[1]))
1268 complete_internalvar (tracker
, &text
[1]);
1272 /* Suggest the "-force" flag if no arguments are given. If
1273 arguments were passed, they either already include the flag,
1274 or we are beyond the point of suggesting it because it's
1275 positionally the first argument. */
1276 if (has_no_arguments
)
1277 gdb::option::complete_on_all_options (tracker
, group
);
1279 /* We're completing the breakpoint number. */
1280 len
= strlen (text
);
1282 for (breakpoint
&b
: all_breakpoints ())
1286 xsnprintf (number
, sizeof (number
), "%d", b
.number
);
1288 if (strncmp (number
, text
, len
) == 0)
1289 tracker
.add_completion (make_unique_xstrdup (number
));
1295 /* We're completing the expression part. Skip the breakpoint num. */
1296 const char *exp_start
= skip_spaces (space
);
1297 tracker
.advance_custom_word_point_by (exp_start
- text
);
1299 const char *word
= advance_to_expression_complete_word_point (tracker
, text
);
1300 expression_completer (cmd
, tracker
, text
, word
);
1303 /* condition N EXP -- set break condition of breakpoint N to EXP. */
1306 condition_command (const char *arg
, int from_tty
)
1312 error_no_arg (_("breakpoint number"));
1316 /* Check if the "-force" flag was passed. */
1317 condition_command_opts cc_opts
;
1318 const auto group
= make_condition_command_options_def_group (&cc_opts
);
1319 gdb::option::process_options
1320 (&p
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, group
);
1322 bnum
= get_number (&p
);
1324 error (_("Bad breakpoint argument: '%s'"), arg
);
1326 set_breakpoint_condition (bnum
, p
, from_tty
, cc_opts
.force_condition
);
1329 /* Check that COMMAND do not contain commands that are suitable
1330 only for tracepoints and not suitable for ordinary breakpoints.
1331 Throw if any such commands is found. */
1334 check_no_tracepoint_commands (struct command_line
*commands
)
1336 struct command_line
*c
;
1338 for (c
= commands
; c
; c
= c
->next
)
1340 if (c
->control_type
== while_stepping_control
)
1341 error (_("The 'while-stepping' command can "
1342 "only be used for tracepoints"));
1344 check_no_tracepoint_commands (c
->body_list_0
.get ());
1345 check_no_tracepoint_commands (c
->body_list_1
.get ());
1347 /* Not that command parsing removes leading whitespace and comment
1348 lines and also empty lines. So, we only need to check for
1349 command directly. */
1350 if (strstr (c
->line
, "collect ") == c
->line
)
1351 error (_("The 'collect' command can only be used for tracepoints"));
1353 if (strstr (c
->line
, "teval ") == c
->line
)
1354 error (_("The 'teval' command can only be used for tracepoints"));
1358 struct longjmp_breakpoint
: public momentary_breakpoint
1360 using momentary_breakpoint::momentary_breakpoint
;
1362 ~longjmp_breakpoint () override
;
1365 /* Encapsulate tests for different types of tracepoints. */
1368 is_tracepoint_type (bptype type
)
1370 return (type
== bp_tracepoint
1371 || type
== bp_fast_tracepoint
1372 || type
== bp_static_tracepoint
1373 || type
== bp_static_marker_tracepoint
);
1376 /* See breakpoint.h. */
1379 is_tracepoint (const struct breakpoint
*b
)
1381 return is_tracepoint_type (b
->type
);
1384 /* Factory function to create an appropriate instance of breakpoint given
1387 template<typename
... Arg
>
1388 static std::unique_ptr
<code_breakpoint
>
1389 new_breakpoint_from_type (struct gdbarch
*gdbarch
, bptype type
,
1397 case bp_hardware_breakpoint
:
1398 b
= new ordinary_breakpoint (gdbarch
, type
,
1399 std::forward
<Arg
> (args
)...);
1402 case bp_fast_tracepoint
:
1403 case bp_static_tracepoint
:
1405 b
= new tracepoint (gdbarch
, type
,
1406 std::forward
<Arg
> (args
)...);
1409 case bp_static_marker_tracepoint
:
1410 b
= new static_marker_tracepoint (gdbarch
, type
,
1411 std::forward
<Arg
> (args
)...);
1415 b
= new dprintf_breakpoint (gdbarch
, type
,
1416 std::forward
<Arg
> (args
)...);
1420 gdb_assert_not_reached ("invalid type");
1423 return std::unique_ptr
<code_breakpoint
> (b
);
1426 /* A helper function that validates that COMMANDS are valid for a
1427 breakpoint. This function will throw an exception if a problem is
1431 validate_commands_for_breakpoint (struct breakpoint
*b
,
1432 struct command_line
*commands
)
1434 if (is_tracepoint (b
))
1436 tracepoint
*t
= gdb::checked_static_cast
<tracepoint
*> (b
);
1437 struct command_line
*c
;
1438 struct command_line
*while_stepping
= 0;
1440 /* Reset the while-stepping step count. The previous commands
1441 might have included a while-stepping action, while the new
1445 /* We need to verify that each top-level element of commands is
1446 valid for tracepoints, that there's at most one
1447 while-stepping element, and that the while-stepping's body
1448 has valid tracing commands excluding nested while-stepping.
1449 We also need to validate the tracepoint action line in the
1450 context of the tracepoint --- validate_actionline actually
1451 has side effects, like setting the tracepoint's
1452 while-stepping STEP_COUNT, in addition to checking if the
1453 collect/teval actions parse and make sense in the
1454 tracepoint's context. */
1455 for (c
= commands
; c
; c
= c
->next
)
1457 if (c
->control_type
== while_stepping_control
)
1459 if (b
->type
== bp_fast_tracepoint
)
1460 error (_("The 'while-stepping' command "
1461 "cannot be used for fast tracepoint"));
1462 else if (b
->type
== bp_static_tracepoint
1463 || b
->type
== bp_static_marker_tracepoint
)
1464 error (_("The 'while-stepping' command "
1465 "cannot be used for static tracepoint"));
1468 error (_("The 'while-stepping' command "
1469 "can be used only once"));
1474 validate_actionline (c
->line
, t
);
1478 struct command_line
*c2
;
1480 gdb_assert (while_stepping
->body_list_1
== nullptr);
1481 c2
= while_stepping
->body_list_0
.get ();
1482 for (; c2
; c2
= c2
->next
)
1484 if (c2
->control_type
== while_stepping_control
)
1485 error (_("The 'while-stepping' command cannot be nested"));
1491 check_no_tracepoint_commands (commands
);
1495 /* Return a vector of all the static tracepoints set at ADDR. The
1496 caller is responsible for releasing the vector. */
1498 std::vector
<breakpoint
*>
1499 static_tracepoints_here (CORE_ADDR addr
)
1501 std::vector
<breakpoint
*> found
;
1503 for (breakpoint
&b
: all_breakpoints ())
1504 if (b
.type
== bp_static_tracepoint
1505 || b
.type
== bp_static_marker_tracepoint
)
1507 for (bp_location
&loc
: b
.locations ())
1508 if (loc
.address
== addr
)
1509 found
.push_back (&b
);
1515 /* Set the command list of B to COMMANDS. If breakpoint is tracepoint,
1516 validate that only allowed commands are included. */
1519 breakpoint_set_commands (struct breakpoint
*b
,
1520 counted_command_line
&&commands
)
1522 validate_commands_for_breakpoint (b
, commands
.get ());
1524 b
->commands
= std::move (commands
);
1525 notify_breakpoint_modified (b
);
1528 /* Set the internal `silent' flag on the breakpoint. Note that this
1529 is not the same as the "silent" that may appear in the breakpoint's
1533 breakpoint_set_silent (struct breakpoint
*b
, int silent
)
1535 int old_silent
= b
->silent
;
1538 if (old_silent
!= silent
)
1539 notify_breakpoint_modified (b
);
1542 /* See breakpoint.h. */
1545 breakpoint_set_thread (struct breakpoint
*b
, int thread
)
1547 /* THREAD should be -1, meaning no thread restriction, or it should be a
1548 valid global thread-id, which are greater than zero. */
1549 gdb_assert (thread
== -1 || thread
> 0);
1551 /* It is not valid to set a thread restriction for a breakpoint that
1552 already has task or inferior restriction. */
1553 gdb_assert (thread
== -1 || (b
->task
== -1 && b
->inferior
== -1));
1555 int old_thread
= b
->thread
;
1557 if (old_thread
!= thread
)
1558 notify_breakpoint_modified (b
);
1561 /* See breakpoint.h. */
1564 breakpoint_set_inferior (struct breakpoint
*b
, int inferior
)
1566 /* INFERIOR should be -1, meaning no inferior restriction, or it should
1567 be a valid inferior number, which are greater than zero. */
1568 gdb_assert (inferior
== -1 || inferior
> 0);
1570 /* It is not valid to set an inferior restriction for a breakpoint that
1571 already has a task or thread restriction. */
1572 gdb_assert (inferior
== -1 || (b
->task
== -1 && b
->thread
== -1));
1574 int old_inferior
= b
->inferior
;
1575 b
->inferior
= inferior
;
1576 if (old_inferior
!= inferior
)
1577 notify_breakpoint_modified (b
);
1580 /* See breakpoint.h. */
1583 breakpoint_set_task (struct breakpoint
*b
, int task
)
1585 /* TASK should be -1, meaning no task restriction, or it should be a
1586 valid task-id, which are greater than zero. */
1587 gdb_assert (task
== -1 || task
> 0);
1589 /* It is not valid to set a task restriction for a breakpoint that
1590 already has a thread or inferior restriction. */
1591 gdb_assert (task
== -1 || (b
->thread
== -1 && b
->inferior
== -1));
1593 int old_task
= b
->task
;
1595 if (old_task
!= task
)
1596 notify_breakpoint_modified (b
);
1600 commands_command_1 (const char *arg
, int from_tty
,
1601 struct command_line
*control
)
1603 counted_command_line cmd
;
1604 /* cmd_read will be true once we have read cmd. Note that cmd might still be
1605 NULL after the call to read_command_lines if the user provides an empty
1606 list of command by just typing "end". */
1607 bool cmd_read
= false;
1609 std::string new_arg
;
1611 if (arg
== NULL
|| !*arg
)
1613 /* Argument not explicitly given. Synthesize it. */
1614 if (breakpoint_count
- prev_breakpoint_count
> 1)
1615 new_arg
= string_printf ("%d-%d", prev_breakpoint_count
+ 1,
1617 else if (breakpoint_count
> 0)
1618 new_arg
= string_printf ("%d", breakpoint_count
);
1622 /* Create a copy of ARG. This is needed because the "commands"
1623 command may be coming from a script. In that case, the read
1624 line buffer is going to be overwritten in the lambda of
1625 'map_breakpoint_numbers' below when reading the next line
1626 before we are are done parsing the breakpoint numbers. */
1629 arg
= new_arg
.c_str ();
1631 map_breakpoint_numbers
1632 (arg
, [&] (breakpoint
*b
)
1636 gdb_assert (cmd
== NULL
);
1637 if (control
!= NULL
)
1638 cmd
= control
->body_list_0
;
1642 = string_printf (_("Type commands for breakpoint(s) "
1643 "%s, one per line."),
1646 auto do_validate
= [=] (const char *line
)
1649 = gdb::checked_static_cast
<tracepoint
*> (b
);
1650 validate_actionline (line
, t
);
1652 gdb::function_view
<void (const char *)> validator
;
1653 if (is_tracepoint (b
))
1654 validator
= do_validate
;
1656 cmd
= read_command_lines (str
.c_str (), from_tty
, 1, validator
);
1661 /* If a breakpoint was on the list more than once, we don't need to
1663 if (b
->commands
!= cmd
)
1665 validate_commands_for_breakpoint (b
, cmd
.get ());
1667 notify_breakpoint_modified (b
);
1673 commands_command (const char *arg
, int from_tty
)
1675 commands_command_1 (arg
, from_tty
, NULL
);
1678 /* Like commands_command, but instead of reading the commands from
1679 input stream, takes them from an already parsed command structure.
1681 This is used by cli-script.c to DTRT with breakpoint commands
1682 that are part of if and while bodies. */
1683 enum command_control_type
1684 commands_from_control_command (const char *arg
, struct command_line
*cmd
)
1686 commands_command_1 (arg
, 0, cmd
);
1687 return simple_control
;
1690 /* Return true if BL->TARGET_INFO contains valid information. */
1693 bp_location_has_shadow (struct bp_location
*bl
)
1695 if (bl
->loc_type
!= bp_loc_software_breakpoint
)
1699 if (bl
->target_info
.shadow_len
== 0)
1700 /* BL isn't valid, or doesn't shadow memory. */
1705 /* Update BUF, which is LEN bytes read from the target address
1706 MEMADDR, by replacing a memory breakpoint with its shadowed
1709 If READBUF is not NULL, this buffer must not overlap with the of
1710 the breakpoint location's shadow_contents buffer. Otherwise, a
1711 failed assertion internal error will be raised. */
1714 one_breakpoint_xfer_memory (gdb_byte
*readbuf
, gdb_byte
*writebuf
,
1715 const gdb_byte
*writebuf_org
,
1716 ULONGEST memaddr
, LONGEST len
,
1717 struct bp_target_info
*target_info
,
1718 struct gdbarch
*gdbarch
)
1720 /* Now do full processing of the found relevant range of elements. */
1721 CORE_ADDR bp_addr
= 0;
1725 if (!breakpoint_address_match (target_info
->placed_address_space
, 0,
1726 current_program_space
->aspace
.get (), 0))
1728 /* The breakpoint is inserted in a different address space. */
1732 /* Addresses and length of the part of the breakpoint that
1734 bp_addr
= target_info
->placed_address
;
1735 bp_size
= target_info
->shadow_len
;
1737 if (bp_addr
+ bp_size
<= memaddr
)
1739 /* The breakpoint is entirely before the chunk of memory we are
1744 if (bp_addr
>= memaddr
+ len
)
1746 /* The breakpoint is entirely after the chunk of memory we are
1751 /* Offset within shadow_contents. */
1752 if (bp_addr
< memaddr
)
1754 /* Only copy the second part of the breakpoint. */
1755 bp_size
-= memaddr
- bp_addr
;
1756 bptoffset
= memaddr
- bp_addr
;
1760 if (bp_addr
+ bp_size
> memaddr
+ len
)
1762 /* Only copy the first part of the breakpoint. */
1763 bp_size
-= (bp_addr
+ bp_size
) - (memaddr
+ len
);
1766 if (readbuf
!= NULL
)
1768 /* Verify that the readbuf buffer does not overlap with the
1769 shadow_contents buffer. */
1770 gdb_assert (target_info
->shadow_contents
>= readbuf
+ len
1771 || readbuf
>= (target_info
->shadow_contents
1772 + target_info
->shadow_len
));
1774 /* Update the read buffer with this inserted breakpoint's
1776 memcpy (readbuf
+ bp_addr
- memaddr
,
1777 target_info
->shadow_contents
+ bptoffset
, bp_size
);
1781 const unsigned char *bp
;
1782 CORE_ADDR addr
= target_info
->reqstd_address
;
1785 /* Update the shadow with what we want to write to memory. */
1786 memcpy (target_info
->shadow_contents
+ bptoffset
,
1787 writebuf_org
+ bp_addr
- memaddr
, bp_size
);
1789 /* Determine appropriate breakpoint contents and size for this
1791 bp
= gdbarch_breakpoint_from_pc (gdbarch
, &addr
, &placed_size
);
1793 /* Update the final write buffer with this inserted
1794 breakpoint's INSN. */
1795 memcpy (writebuf
+ bp_addr
- memaddr
, bp
+ bptoffset
, bp_size
);
1799 /* Update BUF, which is LEN bytes read from the target address MEMADDR,
1800 by replacing any memory breakpoints with their shadowed contents.
1802 If READBUF is not NULL, this buffer must not overlap with any of
1803 the breakpoint location's shadow_contents buffers. Otherwise,
1804 a failed assertion internal error will be raised.
1806 The range of shadowed area by each bp_location is:
1807 bl->address - bp_locations_placed_address_before_address_max
1808 up to bl->address + bp_locations_shadow_len_after_address_max
1809 The range we were requested to resolve shadows for is:
1810 memaddr ... memaddr + len
1811 Thus the safe cutoff boundaries for performance optimization are
1812 memaddr + len <= (bl->address
1813 - bp_locations_placed_address_before_address_max)
1815 bl->address + bp_locations_shadow_len_after_address_max <= memaddr */
1818 breakpoint_xfer_memory (gdb_byte
*readbuf
, gdb_byte
*writebuf
,
1819 const gdb_byte
*writebuf_org
,
1820 ULONGEST memaddr
, LONGEST len
)
1822 /* Left boundary, right boundary and median element of our binary
1824 unsigned bc_l
, bc_r
, bc
;
1826 /* Find BC_L which is a leftmost element which may affect BUF
1827 content. It is safe to report lower value but a failure to
1828 report higher one. */
1831 bc_r
= bp_locations
.size ();
1832 while (bc_l
+ 1 < bc_r
)
1834 struct bp_location
*bl
;
1836 bc
= (bc_l
+ bc_r
) / 2;
1837 bl
= bp_locations
[bc
];
1839 /* Check first BL->ADDRESS will not overflow due to the added
1840 constant. Then advance the left boundary only if we are sure
1841 the BC element can in no way affect the BUF content (MEMADDR
1842 to MEMADDR + LEN range).
1844 Use the BP_LOCATIONS_SHADOW_LEN_AFTER_ADDRESS_MAX safety
1845 offset so that we cannot miss a breakpoint with its shadow
1846 range tail still reaching MEMADDR. */
1848 if ((bl
->address
+ bp_locations_shadow_len_after_address_max
1850 && (bl
->address
+ bp_locations_shadow_len_after_address_max
1857 /* Due to the binary search above, we need to make sure we pick the
1858 first location that's at BC_L's address. E.g., if there are
1859 multiple locations at the same address, BC_L may end up pointing
1860 at a duplicate location, and miss the "master"/"inserted"
1861 location. Say, given locations L1, L2 and L3 at addresses A and
1864 L1@A, L2@A, L3@B, ...
1866 BC_L could end up pointing at location L2, while the "master"
1867 location could be L1. Since the `loc->inserted' flag is only set
1868 on "master" locations, we'd forget to restore the shadow of L1
1871 && bp_locations
[bc_l
]->address
== bp_locations
[bc_l
- 1]->address
)
1874 /* Now do full processing of the found relevant range of elements. */
1876 for (bc
= bc_l
; bc
< bp_locations
.size (); bc
++)
1878 struct bp_location
*bl
= bp_locations
[bc
];
1880 /* bp_location array has BL->OWNER always non-NULL. */
1881 if (bl
->owner
->type
== bp_none
)
1882 warning (_("reading through apparently deleted breakpoint #%d?"),
1885 /* Performance optimization: any further element can no longer affect BUF
1888 if (bl
->address
>= bp_locations_placed_address_before_address_max
1891 - bp_locations_placed_address_before_address_max
)))
1894 if (!bp_location_has_shadow (bl
))
1897 one_breakpoint_xfer_memory (readbuf
, writebuf
, writebuf_org
,
1898 memaddr
, len
, &bl
->target_info
, bl
->gdbarch
);
1902 /* See breakpoint.h. */
1905 is_breakpoint (const struct breakpoint
*bpt
)
1907 return (bpt
->type
== bp_breakpoint
1908 || bpt
->type
== bp_hardware_breakpoint
1909 || bpt
->type
== bp_dprintf
);
1912 /* Return true if BPT is of any hardware watchpoint kind. */
1915 is_hardware_watchpoint (const struct breakpoint
*bpt
)
1917 return (bpt
->type
== bp_hardware_watchpoint
1918 || bpt
->type
== bp_read_watchpoint
1919 || bpt
->type
== bp_access_watchpoint
);
1922 /* See breakpoint.h. */
1925 is_watchpoint (const struct breakpoint
*bpt
)
1927 return (is_hardware_watchpoint (bpt
)
1928 || bpt
->type
== bp_watchpoint
);
1931 /* Returns true if the current thread and its running state are safe
1932 to evaluate or update watchpoint B. Watchpoints on local
1933 expressions need to be evaluated in the context of the thread that
1934 was current when the watchpoint was created, and, that thread needs
1935 to be stopped to be able to select the correct frame context.
1936 Watchpoints on global expressions can be evaluated on any thread,
1937 and in any state. It is presently left to the target allowing
1938 memory accesses when threads are running. */
1941 watchpoint_in_thread_scope (struct watchpoint
*b
)
1943 return (b
->pspace
== current_program_space
1944 && (b
->watchpoint_thread
== null_ptid
1945 || (inferior_ptid
== b
->watchpoint_thread
1946 && !inferior_thread ()->executing ())));
1949 /* Set watchpoint B to disp_del_at_next_stop, even including its possible
1950 associated bp_watchpoint_scope breakpoint. */
1953 watchpoint_del_at_next_stop (struct watchpoint
*w
)
1955 if (w
->related_breakpoint
!= w
)
1957 gdb_assert (w
->related_breakpoint
->type
== bp_watchpoint_scope
);
1958 gdb_assert (w
->related_breakpoint
->related_breakpoint
== w
);
1959 w
->related_breakpoint
->disposition
= disp_del_at_next_stop
;
1960 w
->related_breakpoint
->related_breakpoint
= w
->related_breakpoint
;
1961 w
->related_breakpoint
= w
;
1963 w
->disposition
= disp_del_at_next_stop
;
1964 disable_breakpoint (w
);
1967 /* Extract a bitfield value from value VAL using the bit parameters contained in
1970 static struct value
*
1971 extract_bitfield_from_watchpoint_value (struct watchpoint
*w
, struct value
*val
)
1973 struct value
*bit_val
;
1978 bit_val
= value::allocate (val
->type ());
1980 val
->unpack_bitfield (bit_val
,
1983 val
->contents_for_printing ().data (),
1989 /* Allocate a dummy location and add it to B. This is required
1990 because bpstat_stop_status requires a location to be able to report
1994 add_dummy_location (struct breakpoint
*b
,
1995 struct program_space
*pspace
)
1997 gdb_assert (!b
->has_locations ());
1999 bp_location
*loc
= new bp_location (b
, bp_loc_other
);
2000 loc
->pspace
= pspace
;
2001 b
->add_location (*loc
);
2004 /* Assuming that B is a watchpoint:
2005 - Reparse watchpoint expression, if REPARSE is true
2006 - Evaluate expression and store the result in B->val
2007 - Evaluate the condition if there is one, and store the result
2009 - Update the list of values that must be watched in B->loc.
2011 If the watchpoint disposition is disp_del_at_next_stop, then do
2012 nothing. If this is local watchpoint that is out of scope, delete
2015 Even with `set breakpoint always-inserted on' the watchpoints are
2016 removed + inserted on each stop here. Normal breakpoints must
2017 never be removed because they might be missed by a running thread
2018 when debugging in non-stop mode. On the other hand, hardware
2019 watchpoints (is_hardware_watchpoint; processed here) are specific
2020 to each LWP since they are stored in each LWP's hardware debug
2021 registers. Therefore, such LWP must be stopped first in order to
2022 be able to modify its hardware watchpoints.
2024 Hardware watchpoints must be reset exactly once after being
2025 presented to the user. It cannot be done sooner, because it would
2026 reset the data used to present the watchpoint hit to the user. And
2027 it must not be done later because it could display the same single
2028 watchpoint hit during multiple GDB stops. Note that the latter is
2029 relevant only to the hardware watchpoint types bp_read_watchpoint
2030 and bp_access_watchpoint. False hit by bp_hardware_watchpoint is
2031 not user-visible - its hit is suppressed if the memory content has
2034 The following constraints influence the location where we can reset
2035 hardware watchpoints:
2037 * target_stopped_by_watchpoint and target_stopped_data_address are
2038 called several times when GDB stops.
2041 * Multiple hardware watchpoints can be hit at the same time,
2042 causing GDB to stop. GDB only presents one hardware watchpoint
2043 hit at a time as the reason for stopping, and all the other hits
2044 are presented later, one after the other, each time the user
2045 requests the execution to be resumed. Execution is not resumed
2046 for the threads still having pending hit event stored in
2047 LWP_INFO->STATUS. While the watchpoint is already removed from
2048 the inferior on the first stop the thread hit event is kept being
2049 reported from its cached value by linux_nat_stopped_data_address
2050 until the real thread resume happens after the watchpoint gets
2051 presented and thus its LWP_INFO->STATUS gets reset.
2053 Therefore the hardware watchpoint hit can get safely reset on the
2054 watchpoint removal from inferior. */
2057 update_watchpoint (struct watchpoint
*b
, bool reparse
)
2059 bool within_current_scope
;
2061 /* If this is a local watchpoint, we only want to check if the
2062 watchpoint frame is in scope if the current thread is the thread
2063 that was used to create the watchpoint. */
2064 if (!watchpoint_in_thread_scope (b
))
2067 if (b
->disposition
== disp_del_at_next_stop
)
2070 std::optional
<scoped_restore_selected_frame
> restore_frame
;
2072 /* Determine if the watchpoint is within scope. */
2073 if (b
->exp_valid_block
== NULL
)
2074 within_current_scope
= true;
2077 frame_info_ptr fi
= get_current_frame ();
2078 struct gdbarch
*frame_arch
= get_frame_arch (fi
);
2079 CORE_ADDR frame_pc
= get_frame_pc (fi
);
2081 /* If we're at a point where the stack has been destroyed
2082 (e.g. in a function epilogue), unwinding may not work
2083 properly. Do not attempt to recreate locations at this
2084 point. See similar comments in watchpoint_check. */
2085 if (gdbarch_stack_frame_destroyed_p (frame_arch
, frame_pc
))
2088 /* Save the current frame's ID so we can restore it after
2089 evaluating the watchpoint expression on its own frame. */
2090 /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
2091 took a frame parameter, so that we didn't have to change the
2093 restore_frame
.emplace ();
2095 fi
= frame_find_by_id (b
->watchpoint_frame
);
2096 within_current_scope
= (fi
!= NULL
);
2097 if (within_current_scope
)
2101 /* We don't free locations. They are stored in the bp_location array
2102 and update_global_location_list will eventually delete them and
2103 remove breakpoints if needed. */
2104 b
->clear_locations ();
2106 if (within_current_scope
&& reparse
)
2111 s
= (b
->exp_string_reparse
2112 ? b
->exp_string_reparse
.get ()
2113 : b
->exp_string
.get ());
2114 b
->exp
= parse_exp_1 (&s
, 0, b
->exp_valid_block
, 0);
2115 /* If the meaning of expression itself changed, the old value is
2116 no longer relevant. We don't want to report a watchpoint hit
2117 to the user when the old value and the new value may actually
2118 be completely different objects. */
2120 b
->val_valid
= false;
2122 /* Note that unlike with breakpoints, the watchpoint's condition
2123 expression is stored in the breakpoint object, not in the
2124 locations (re)created below. */
2125 if (b
->cond_string
!= NULL
)
2127 b
->cond_exp
.reset ();
2129 s
= b
->cond_string
.get ();
2130 b
->cond_exp
= parse_exp_1 (&s
, 0, b
->cond_exp_valid_block
, 0);
2134 /* If we failed to parse the expression, for example because
2135 it refers to a global variable in a not-yet-loaded shared library,
2136 don't try to insert watchpoint. We don't automatically delete
2137 such watchpoint, though, since failure to parse expression
2138 is different from out-of-scope watchpoint. */
2139 if (!target_has_execution ())
2141 /* Without execution, memory can't change. No use to try and
2142 set watchpoint locations. The watchpoint will be reset when
2143 the target gains execution, through breakpoint_re_set. */
2144 if (!can_use_hw_watchpoints
)
2146 if (b
->works_in_software_mode ())
2147 b
->type
= bp_watchpoint
;
2149 error (_("Can't set read/access watchpoint when "
2150 "hardware watchpoints are disabled."));
2153 else if (within_current_scope
&& b
->exp
)
2155 std::vector
<value_ref_ptr
> val_chain
;
2156 struct value
*v
, *result
;
2157 struct program_space
*wp_pspace
;
2159 fetch_subexp_value (b
->exp
.get (), b
->exp
->op
.get (), &v
, &result
,
2162 /* Avoid setting b->val if it's already set. The meaning of
2163 b->val is 'the last value' user saw, and we should update
2164 it only if we reported that last value to user. As it
2165 happens, the code that reports it updates b->val directly.
2166 We don't keep track of the memory value for masked
2168 if (!b
->val_valid
&& !is_masked_watchpoint (b
))
2170 if (b
->val_bitsize
!= 0)
2171 v
= extract_bitfield_from_watchpoint_value (b
, v
);
2172 b
->val
= release_value (v
);
2173 b
->val_valid
= true;
2176 if (b
->exp_valid_block
== nullptr)
2177 wp_pspace
= current_program_space
;
2179 wp_pspace
= get_frame_program_space (get_selected_frame (NULL
));
2181 /* Look at each value on the value chain. */
2182 gdb_assert (!val_chain
.empty ());
2183 for (const value_ref_ptr
&iter
: val_chain
)
2187 /* If it's a memory location, and GDB actually needed
2188 its contents to evaluate the expression, then we
2189 must watch it. If the first value returned is
2190 still lazy, that means an error occurred reading it;
2191 watch it anyway in case it becomes readable. */
2192 if (v
->lval () == lval_memory
2193 && (v
== val_chain
[0] || ! v
->lazy ()))
2195 struct type
*vtype
= check_typedef (v
->type ());
2197 /* We only watch structs and arrays if user asked
2198 for it explicitly, never if they just happen to
2199 appear in the middle of some value chain. */
2201 || (vtype
->code () != TYPE_CODE_STRUCT
2202 && vtype
->code () != TYPE_CODE_ARRAY
))
2205 enum target_hw_bp_type type
;
2206 int bitpos
= 0, bitsize
= 0;
2208 if (v
->bitsize () != 0)
2210 /* Extract the bit parameters out from the bitfield
2212 bitpos
= v
->bitpos ();
2213 bitsize
= v
->bitsize ();
2215 else if (v
== result
&& b
->val_bitsize
!= 0)
2217 /* If VAL_BITSIZE != 0 then RESULT is actually a bitfield
2218 lvalue whose bit parameters are saved in the fields
2219 VAL_BITPOS and VAL_BITSIZE. */
2220 bitpos
= b
->val_bitpos
;
2221 bitsize
= b
->val_bitsize
;
2224 addr
= v
->address ();
2227 /* Skip the bytes that don't contain the bitfield. */
2232 if (b
->type
== bp_read_watchpoint
)
2234 else if (b
->type
== bp_access_watchpoint
)
2237 bp_location
*loc
= b
->allocate_location ();
2238 loc
->gdbarch
= v
->type ()->arch ();
2239 loc
->pspace
= wp_pspace
;
2241 = gdbarch_remove_non_address_bits (loc
->gdbarch
, addr
);
2242 b
->add_location (*loc
);
2246 /* Just cover the bytes that make up the bitfield. */
2247 loc
->length
= ((bitpos
% 8) + bitsize
+ 7) / 8;
2250 loc
->length
= v
->type ()->length ();
2252 loc
->watchpoint_type
= type
;
2257 /* Helper function to bundle possibly emitting a warning along with
2258 changing the type of B to bp_watchpoint. */
2259 auto change_type_to_bp_watchpoint
= [] (breakpoint
*bp
)
2261 /* Only warn for breakpoints that have been assigned a +ve number,
2262 anything else is either an internal watchpoint (which we don't
2263 currently create) or has not yet been finalized, in which case
2264 this change of type will be occurring before the user is told
2265 the type of this watchpoint. */
2266 if (bp
->type
== bp_hardware_watchpoint
&& bp
->number
> 0)
2267 warning (_("watchpoint %d downgraded to software watchpoint"),
2269 bp
->type
= bp_watchpoint
;
2272 /* Change the type of breakpoint between hardware assisted or
2273 an ordinary watchpoint depending on the hardware support and
2274 free hardware slots. Recheck the number of free hardware slots
2275 as the value chain may have changed. */
2278 enum bp_loc_type loc_type
;
2280 reg_cnt
= can_use_hardware_watchpoint (val_chain
);
2284 int i
, target_resources_ok
, other_type_used
;
2287 /* Use an exact watchpoint when there's only one memory region to be
2288 watched, and only one debug register is needed to watch it. */
2289 b
->exact
= target_exact_watchpoints
&& reg_cnt
== 1;
2291 /* We need to determine how many resources are already
2292 used for all other hardware watchpoints plus this one
2293 to see if we still have enough resources to also fit
2294 this watchpoint in as well. */
2296 /* If this is a software watchpoint, we try to turn it
2297 to a hardware one -- count resources as if B was of
2298 hardware watchpoint type. */
2300 if (type
== bp_watchpoint
)
2301 type
= bp_hardware_watchpoint
;
2303 /* This watchpoint may or may not have been placed on
2304 the list yet at this point (it won't be in the list
2305 if we're trying to create it for the first time,
2306 through watch_command), so always account for it
2309 /* Count resources used by all watchpoints except B. */
2310 i
= hw_watchpoint_used_count_others (b
, type
, &other_type_used
);
2312 /* Add in the resources needed for B. */
2313 i
+= hw_watchpoint_use_count (b
);
2316 = target_can_use_hardware_watchpoint (type
, i
, other_type_used
);
2317 if (target_resources_ok
<= 0)
2319 bool sw_mode
= b
->works_in_software_mode ();
2321 if (target_resources_ok
== 0 && !sw_mode
)
2322 error (_("Target does not support this type of "
2323 "hardware watchpoint."));
2324 else if (target_resources_ok
< 0 && !sw_mode
)
2325 error (_("There are not enough available hardware "
2326 "resources for this watchpoint."));
2328 /* Downgrade to software watchpoint. */
2329 change_type_to_bp_watchpoint (b
);
2333 /* If this was a software watchpoint, we've just
2334 found we have enough resources to turn it to a
2335 hardware watchpoint. Otherwise, this is a
2340 else if (!b
->works_in_software_mode ())
2342 if (!can_use_hw_watchpoints
)
2343 error (_("Can't set read/access watchpoint when "
2344 "hardware watchpoints are disabled."));
2346 error (_("Expression cannot be implemented with "
2347 "read/access watchpoint."));
2350 change_type_to_bp_watchpoint (b
);
2352 loc_type
= (b
->type
== bp_watchpoint
? bp_loc_software_watchpoint
2353 : bp_loc_hardware_watchpoint
);
2355 for (bp_location
&bl
: b
->locations ())
2356 bl
.loc_type
= loc_type
;
2359 /* If a software watchpoint is not watching any memory, then the
2360 above left it without any location set up. But,
2361 bpstat_stop_status requires a location to be able to report
2362 stops, so make sure there's at least a dummy one. */
2363 if (b
->type
== bp_watchpoint
&& !b
->has_locations ())
2364 add_dummy_location (b
, wp_pspace
);
2366 else if (!within_current_scope
)
2369 Watchpoint %d deleted because the program has left the block\n\
2370 in which its expression is valid.\n"),
2372 watchpoint_del_at_next_stop (b
);
2376 /* Returns true iff breakpoint location should be
2377 inserted in the inferior. We don't differentiate the type of BL's owner
2378 (breakpoint vs. tracepoint), although insert_location in tracepoint's
2379 breakpoint_ops is not defined, because in insert_bp_location,
2380 tracepoint's insert_location will not be called. */
2383 should_be_inserted (struct bp_location
*bl
)
2385 if (bl
->owner
== NULL
|| !breakpoint_enabled (bl
->owner
))
2388 if (bl
->owner
->disposition
== disp_del_at_next_stop
)
2391 if (!bl
->enabled
|| bl
->disabled_by_cond
2392 || bl
->shlib_disabled
|| bl
->duplicate
)
2395 if (user_breakpoint_p (bl
->owner
) && bl
->pspace
->executing_startup
)
2398 /* This is set for example, when we're attached to the parent of a
2399 vfork, and have detached from the child. The child is running
2400 free, and we expect it to do an exec or exit, at which point the
2401 OS makes the parent schedulable again (and the target reports
2402 that the vfork is done). Until the child is done with the shared
2403 memory region, do not insert breakpoints in the parent, otherwise
2404 the child could still trip on the parent's breakpoints. Since
2405 the parent is blocked anyway, it won't miss any breakpoint. */
2406 if (bl
->pspace
->breakpoints_not_allowed
)
2409 /* Don't insert a breakpoint if we're trying to step past its
2410 location, except if the breakpoint is a single-step breakpoint,
2411 and the breakpoint's thread is the thread which is stepping past
2413 if ((bl
->loc_type
== bp_loc_software_breakpoint
2414 || bl
->loc_type
== bp_loc_hardware_breakpoint
)
2415 && stepping_past_instruction_at (bl
->pspace
->aspace
.get (),
2417 /* The single-step breakpoint may be inserted at the location
2418 we're trying to step if the instruction branches to itself.
2419 However, the instruction won't be executed at all and it may
2420 break the semantics of the instruction, for example, the
2421 instruction is a conditional branch or updates some flags.
2422 We can't fix it unless GDB is able to emulate the instruction
2423 or switch to displaced stepping. */
2424 && !(bl
->owner
->type
== bp_single_step
2425 && thread_is_stepping_over_breakpoint (bl
->owner
->thread
)))
2427 infrun_debug_printf ("skipping breakpoint: stepping past insn at: %s",
2428 paddress (bl
->gdbarch
, bl
->address
));
2432 /* Don't insert watchpoints if we're trying to step past the
2433 instruction that triggered one. */
2434 if ((bl
->loc_type
== bp_loc_hardware_watchpoint
)
2435 && stepping_past_nonsteppable_watchpoint ())
2437 infrun_debug_printf ("stepping past non-steppable watchpoint. "
2438 "skipping watchpoint at %s:%d",
2439 paddress (bl
->gdbarch
, bl
->address
), bl
->length
);
2446 /* Same as should_be_inserted but does the check assuming
2447 that the location is not duplicated. */
2450 unduplicated_should_be_inserted (struct bp_location
*bl
)
2452 scoped_restore restore_bl_duplicate
2453 = make_scoped_restore (&bl
->duplicate
, 0);
2455 return should_be_inserted (bl
);
2458 /* Parses a conditional described by an expression COND into an
2459 agent expression bytecode suitable for evaluation
2460 by the bytecode interpreter. Return NULL if there was
2461 any error during parsing. */
2463 static agent_expr_up
2464 parse_cond_to_aexpr (CORE_ADDR scope
, struct expression
*cond
)
2469 agent_expr_up aexpr
;
2471 /* We don't want to stop processing, so catch any errors
2472 that may show up. */
2475 aexpr
= gen_eval_for_expr (scope
, cond
);
2478 catch (const gdb_exception_error
&ex
)
2480 /* If we got here, it means the condition could not be parsed to a valid
2481 bytecode expression and thus can't be evaluated on the target's side.
2482 It's no use iterating through the conditions. */
2485 /* We have a valid agent expression. */
2489 /* Based on location BL, create a list of breakpoint conditions to be
2490 passed on to the target. If we have duplicated locations with different
2491 conditions, we will add such conditions to the list. The idea is that the
2492 target will evaluate the list of conditions and will only notify GDB when
2493 one of them is true. */
2496 build_target_condition_list (struct bp_location
*bl
)
2498 bool null_condition_or_parse_error
= false;
2499 int modified
= bl
->needs_update
;
2501 /* Release conditions left over from a previous insert. */
2502 bl
->target_info
.conditions
.clear ();
2504 /* This is only meaningful if the target is
2505 evaluating conditions and if the user has
2506 opted for condition evaluation on the target's
2508 if (gdb_evaluates_breakpoint_condition_p ()
2509 || !target_supports_evaluation_of_breakpoint_conditions ())
2512 auto loc_range
= all_bp_locations_at_addr (bl
->address
);
2514 /* Do a first pass to check for locations with no assigned
2515 conditions or conditions that fail to parse to a valid agent
2516 expression bytecode. If any of these happen, then it's no use to
2517 send conditions to the target since this location will always
2518 trigger and generate a response back to GDB. Note we consider
2519 all locations at the same address irrespective of type, i.e.,
2520 even if the locations aren't considered duplicates (e.g.,
2521 software breakpoint and hardware breakpoint at the same
2523 for (bp_location
*loc
: loc_range
)
2525 if (is_breakpoint (loc
->owner
) && loc
->pspace
->num
== bl
->pspace
->num
)
2529 /* Re-parse the conditions since something changed. In that
2530 case we already freed the condition bytecodes (see
2531 force_breakpoint_reinsertion). We just
2532 need to parse the condition to bytecodes again. */
2533 loc
->cond_bytecode
= parse_cond_to_aexpr (bl
->address
,
2537 /* If we have a NULL bytecode expression, it means something
2538 went wrong or we have a null condition expression. */
2539 if (!loc
->cond_bytecode
)
2541 null_condition_or_parse_error
= true;
2547 /* If any of these happened, it means we will have to evaluate the conditions
2548 for the location's address on gdb's side. It is no use keeping bytecodes
2549 for all the other duplicate locations, thus we free all of them here.
2551 This is so we have a finer control over which locations' conditions are
2552 being evaluated by GDB or the remote stub. */
2553 if (null_condition_or_parse_error
)
2555 for (bp_location
*loc
: loc_range
)
2557 if (is_breakpoint (loc
->owner
) && loc
->pspace
->num
== bl
->pspace
->num
)
2559 /* Only go as far as the first NULL bytecode is
2561 if (!loc
->cond_bytecode
)
2564 loc
->cond_bytecode
.reset ();
2569 /* No NULL conditions or failed bytecode generation. Build a
2570 condition list for this location's address. If we have software
2571 and hardware locations at the same address, they aren't
2572 considered duplicates, but we still merge all the conditions
2573 anyway, as it's simpler, and doesn't really make a practical
2575 for (bp_location
*loc
: loc_range
)
2577 && is_breakpoint (loc
->owner
)
2578 && loc
->pspace
->num
== bl
->pspace
->num
2579 && loc
->owner
->enable_state
== bp_enabled
2581 && !loc
->disabled_by_cond
)
2583 /* Add the condition to the vector. This will be used later
2584 to send the conditions to the target. */
2585 bl
->target_info
.conditions
.push_back (loc
->cond_bytecode
.get ());
2591 /* Parses a command described by string CMD into an agent expression
2592 bytecode suitable for evaluation by the bytecode interpreter.
2593 Return NULL if there was any error during parsing. */
2595 static agent_expr_up
2596 parse_cmd_to_aexpr (CORE_ADDR scope
, char *cmd
)
2598 const char *cmdrest
;
2599 const char *format_start
, *format_end
;
2600 struct gdbarch
*gdbarch
= get_current_arch ();
2607 if (*cmdrest
== ',')
2609 cmdrest
= skip_spaces (cmdrest
);
2611 if (*cmdrest
++ != '"')
2612 error (_("No format string following the location"));
2614 format_start
= cmdrest
;
2616 format_pieces
fpieces (&cmdrest
);
2618 format_end
= cmdrest
;
2620 if (*cmdrest
++ != '"')
2621 error (_("Bad format string, non-terminated '\"'."));
2623 cmdrest
= skip_spaces (cmdrest
);
2625 if (!(*cmdrest
== ',' || *cmdrest
== '\0'))
2626 error (_("Invalid argument syntax"));
2628 if (*cmdrest
== ',')
2630 cmdrest
= skip_spaces (cmdrest
);
2632 /* For each argument, make an expression. */
2634 std::vector
<struct expression
*> argvec
;
2635 while (*cmdrest
!= '\0')
2640 expression_up expr
= parse_exp_1 (&cmd1
, scope
, block_for_pc (scope
),
2641 PARSER_COMMA_TERMINATES
);
2642 argvec
.push_back (expr
.release ());
2644 if (*cmdrest
== ',')
2648 agent_expr_up aexpr
;
2650 /* We don't want to stop processing, so catch any errors
2651 that may show up. */
2654 aexpr
= gen_printf (scope
, gdbarch
, 0, 0,
2655 format_start
, format_end
- format_start
,
2656 argvec
.size (), argvec
.data ());
2658 catch (const gdb_exception_error
&ex
)
2660 /* If we got here, it means the command could not be parsed to a valid
2661 bytecode expression and thus can't be evaluated on the target's side.
2662 It's no use iterating through the other commands. */
2665 /* We have a valid agent expression, return it. */
2669 /* Based on location BL, create a list of breakpoint commands to be
2670 passed on to the target. If we have duplicated locations with
2671 different commands, we will add any such to the list. */
2674 build_target_command_list (struct bp_location
*bl
)
2676 bool null_command_or_parse_error
= false;
2677 int modified
= bl
->needs_update
;
2679 /* Clear commands left over from a previous insert. */
2680 bl
->target_info
.tcommands
.clear ();
2682 if (!target_can_run_breakpoint_commands ())
2685 /* For now, limit to agent-style dprintf breakpoints. */
2686 if (dprintf_style
!= dprintf_style_agent
)
2689 auto loc_range
= all_bp_locations_at_addr (bl
->address
);
2691 /* For now, if we have any location at the same address that isn't a
2692 dprintf, don't install the target-side commands, as that would
2693 make the breakpoint not be reported to the core, and we'd lose
2695 for (bp_location
*loc
: loc_range
)
2696 if (is_breakpoint (loc
->owner
)
2697 && loc
->pspace
->num
== bl
->pspace
->num
2698 && loc
->owner
->type
!= bp_dprintf
)
2701 /* Do a first pass to check for locations with no assigned
2702 conditions or conditions that fail to parse to a valid agent expression
2703 bytecode. If any of these happen, then it's no use to send conditions
2704 to the target since this location will always trigger and generate a
2705 response back to GDB. */
2706 for (bp_location
*loc
: loc_range
)
2708 if (is_breakpoint (loc
->owner
) && loc
->pspace
->num
== bl
->pspace
->num
)
2712 /* Re-parse the commands since something changed. In that
2713 case we already freed the command bytecodes (see
2714 force_breakpoint_reinsertion). We just
2715 need to parse the command to bytecodes again. */
2717 = parse_cmd_to_aexpr (bl
->address
,
2718 loc
->owner
->extra_string
.get ());
2721 /* If we have a NULL bytecode expression, it means something
2722 went wrong or we have a null command expression. */
2723 if (!loc
->cmd_bytecode
)
2725 null_command_or_parse_error
= true;
2731 /* If anything failed, then we're not doing target-side commands,
2733 if (null_command_or_parse_error
)
2735 for (bp_location
*loc
: loc_range
)
2736 if (is_breakpoint (loc
->owner
)
2737 && loc
->pspace
->num
== bl
->pspace
->num
)
2739 /* Only go as far as the first NULL bytecode is
2741 if (loc
->cmd_bytecode
== NULL
)
2744 loc
->cmd_bytecode
.reset ();
2748 /* No NULL commands or failed bytecode generation. Build a command
2749 list for all duplicate locations at this location's address.
2750 Note that here we must care for whether the breakpoint location
2751 types are considered duplicates, otherwise, say, if we have a
2752 software and hardware location at the same address, the target
2753 could end up running the commands twice. For the moment, we only
2754 support targets-side commands with dprintf, but it doesn't hurt
2755 to be pedantically correct in case that changes. */
2756 for (bp_location
*loc
: loc_range
)
2757 if (breakpoint_locations_match (bl
, loc
)
2758 && loc
->owner
->extra_string
2759 && is_breakpoint (loc
->owner
)
2760 && loc
->pspace
->num
== bl
->pspace
->num
2761 && loc
->owner
->enable_state
== bp_enabled
2763 && !loc
->disabled_by_cond
)
2765 /* Add the command to the vector. This will be used later
2766 to send the commands to the target. */
2767 bl
->target_info
.tcommands
.push_back (loc
->cmd_bytecode
.get ());
2770 bl
->target_info
.persist
= 0;
2771 /* Maybe flag this location as persistent. */
2772 if (bl
->owner
->type
== bp_dprintf
&& disconnected_dprintf
)
2773 bl
->target_info
.persist
= 1;
2776 /* Return the kind of breakpoint on address *ADDR. Get the kind
2777 of breakpoint according to ADDR except single-step breakpoint.
2778 Get the kind of single-step breakpoint according to the current
2782 breakpoint_kind (const struct bp_location
*bl
, CORE_ADDR
*addr
)
2784 if (bl
->owner
->type
== bp_single_step
)
2786 struct thread_info
*thr
= find_thread_global_id (bl
->owner
->thread
);
2787 struct regcache
*regcache
;
2789 regcache
= get_thread_regcache (thr
);
2791 return gdbarch_breakpoint_kind_from_current_state (bl
->gdbarch
,
2795 return gdbarch_breakpoint_kind_from_pc (bl
->gdbarch
, addr
);
2798 /* Rethrow the currently handled exception, if it's a TARGET_CLOSE_ERROR.
2799 E is either the currently handled exception, or a copy, or a sliced copy,
2800 so we can't rethrow that one, but we can use it to inspect the properties
2801 of the currently handled exception. */
2804 rethrow_on_target_close_error (const gdb_exception
&e
)
2808 /* Can't set the breakpoint. */
2810 if (e
.error
!= TARGET_CLOSE_ERROR
)
2813 /* If the target has closed then it will have deleted any breakpoints
2814 inserted within the target inferior, as a result any further attempts
2815 to interact with the breakpoint objects is not possible. Just rethrow
2816 the error. Don't use e to rethrow, to prevent object slicing of the
2821 /* Insert a low-level "breakpoint" of some type. BL is the breakpoint
2822 location. Any error messages are printed to TMP_ERROR_STREAM; and
2823 DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems.
2824 Returns 0 for success, 1 if the bp_location type is not supported or
2827 NOTE drow/2003-09-09: This routine could be broken down to an
2828 object-style method for each breakpoint or catchpoint type. */
2830 insert_bp_location (struct bp_location
*bl
,
2831 struct ui_file
*tmp_error_stream
,
2832 int *disabled_breaks
,
2833 int *hw_breakpoint_error
,
2834 int *hw_bp_error_explained_already
)
2836 gdb_exception bp_excpt
;
2838 if (!should_be_inserted (bl
) || (bl
->inserted
&& !bl
->needs_update
))
2841 breakpoint_debug_printf ("%s", breakpoint_location_address_str (bl
).c_str ());
2843 /* Note we don't initialize bl->target_info, as that wipes out
2844 the breakpoint location's shadow_contents if the breakpoint
2845 is still inserted at that location. This in turn breaks
2846 target_read_memory which depends on these buffers when
2847 a memory read is requested at the breakpoint location:
2848 Once the target_info has been wiped, we fail to see that
2849 we have a breakpoint inserted at that address and thus
2850 read the breakpoint instead of returning the data saved in
2851 the breakpoint location's shadow contents. */
2852 bl
->target_info
.reqstd_address
= bl
->address
;
2853 bl
->target_info
.placed_address_space
= bl
->pspace
->aspace
.get ();
2854 bl
->target_info
.length
= bl
->length
;
2856 /* When working with target-side conditions, we must pass all the conditions
2857 for the same breakpoint address down to the target since GDB will not
2858 insert those locations. With a list of breakpoint conditions, the target
2859 can decide when to stop and notify GDB. */
2861 if (is_breakpoint (bl
->owner
))
2863 build_target_condition_list (bl
);
2864 build_target_command_list (bl
);
2865 /* Reset the modification marker. */
2866 bl
->needs_update
= 0;
2869 /* If "set breakpoint auto-hw" is "on" and a software breakpoint was
2870 set at a read-only address, then a breakpoint location will have
2871 been changed to hardware breakpoint before we get here. If it is
2872 "off" however, error out before actually trying to insert the
2873 breakpoint, with a nicer error message. */
2874 if (bl
->loc_type
== bp_loc_software_breakpoint
2875 && !automatic_hardware_breakpoints
)
2877 mem_region
*mr
= lookup_mem_region (bl
->address
);
2879 if (mr
!= nullptr && mr
->attrib
.mode
!= MEM_RW
)
2881 gdb_printf (tmp_error_stream
,
2882 _("Cannot insert breakpoint %d.\n"
2883 "Cannot set software breakpoint "
2884 "at read-only address %s\n"),
2886 paddress (bl
->gdbarch
, bl
->address
));
2891 if (bl
->loc_type
== bp_loc_software_breakpoint
2892 || bl
->loc_type
== bp_loc_hardware_breakpoint
)
2894 /* First check to see if we have to handle an overlay. */
2895 if (overlay_debugging
== ovly_off
2896 || bl
->section
== NULL
2897 || !(section_is_overlay (bl
->section
)))
2899 /* No overlay handling: just set the breakpoint. */
2904 val
= bl
->owner
->insert_location (bl
);
2906 bp_excpt
= gdb_exception
{RETURN_ERROR
, GENERIC_ERROR
};
2908 catch (gdb_exception
&e
)
2910 rethrow_on_target_close_error (e
);
2911 bp_excpt
= std::move (e
);
2916 /* This breakpoint is in an overlay section.
2917 Shall we set a breakpoint at the LMA? */
2918 if (!overlay_events_enabled
)
2920 /* Yes -- overlay event support is not active,
2921 so we must try to set a breakpoint at the LMA.
2922 This will not work for a hardware breakpoint. */
2923 if (bl
->loc_type
== bp_loc_hardware_breakpoint
)
2924 warning (_("hardware breakpoint %d not supported in overlay!"),
2928 CORE_ADDR addr
= overlay_unmapped_address (bl
->address
,
2930 /* Set a software (trap) breakpoint at the LMA. */
2931 bl
->overlay_target_info
= bl
->target_info
;
2932 bl
->overlay_target_info
.reqstd_address
= addr
;
2934 /* No overlay handling: just set the breakpoint. */
2939 bl
->overlay_target_info
.kind
2940 = breakpoint_kind (bl
, &addr
);
2941 bl
->overlay_target_info
.placed_address
= addr
;
2942 val
= target_insert_breakpoint (bl
->gdbarch
,
2943 &bl
->overlay_target_info
);
2946 = gdb_exception
{RETURN_ERROR
, GENERIC_ERROR
};
2948 catch (gdb_exception
&e
)
2950 rethrow_on_target_close_error (e
);
2951 bp_excpt
= std::move (e
);
2954 if (bp_excpt
.reason
!= 0)
2955 gdb_printf (tmp_error_stream
,
2956 "Overlay breakpoint %d "
2957 "failed: in ROM?\n",
2961 /* Shall we set a breakpoint at the VMA? */
2962 if (section_is_mapped (bl
->section
))
2964 /* Yes. This overlay section is mapped into memory. */
2969 val
= bl
->owner
->insert_location (bl
);
2971 bp_excpt
= gdb_exception
{RETURN_ERROR
, GENERIC_ERROR
};
2973 catch (gdb_exception_error
&e
)
2975 rethrow_on_target_close_error (e
);
2976 bp_excpt
= std::move (e
);
2981 /* No. This breakpoint will not be inserted.
2982 No error, but do not mark the bp as 'inserted'. */
2987 if (bp_excpt
.reason
!= 0)
2989 /* Can't set the breakpoint. */
2990 gdb_assert (bl
->owner
!= nullptr);
2992 /* In some cases, we might not be able to insert a
2993 breakpoint in a shared library that has already been
2994 removed, but we have not yet processed the shlib unload
2995 event. Unfortunately, some targets that implement
2996 breakpoint insertion themselves can't tell why the
2997 breakpoint insertion failed (e.g., the remote target
2998 doesn't define error codes), so we must treat generic
2999 errors as memory errors. */
3000 if (bp_excpt
.reason
== RETURN_ERROR
3001 && (bp_excpt
.error
== GENERIC_ERROR
3002 || bp_excpt
.error
== MEMORY_ERROR
)
3003 && bl
->loc_type
== bp_loc_software_breakpoint
3004 && (solib_name_from_address (bl
->pspace
, bl
->address
)
3005 || shared_objfile_contains_address_p (bl
->pspace
,
3008 /* See also: disable_breakpoints_in_shlibs. */
3009 bl
->shlib_disabled
= 1;
3010 notify_breakpoint_modified (bl
->owner
);
3011 if (!*disabled_breaks
)
3013 gdb_printf (tmp_error_stream
,
3014 "Cannot insert breakpoint %d.\n",
3016 gdb_printf (tmp_error_stream
,
3017 "Temporarily disabling shared "
3018 "library breakpoints:\n");
3020 *disabled_breaks
= 1;
3021 gdb_printf (tmp_error_stream
,
3022 "breakpoint #%d\n", bl
->owner
->number
);
3027 if (bl
->loc_type
== bp_loc_hardware_breakpoint
)
3029 *hw_breakpoint_error
= 1;
3030 *hw_bp_error_explained_already
= bp_excpt
.message
!= NULL
;
3031 gdb_printf (tmp_error_stream
,
3032 "Cannot insert hardware breakpoint %d%s",
3034 bp_excpt
.message
? ":" : ".\n");
3035 if (bp_excpt
.message
!= NULL
)
3036 gdb_printf (tmp_error_stream
, "%s.\n",
3041 if (bp_excpt
.message
== NULL
)
3044 = memory_error_message (TARGET_XFER_E_IO
,
3045 bl
->gdbarch
, bl
->address
);
3047 gdb_printf (tmp_error_stream
,
3048 "Cannot insert breakpoint %d.\n"
3050 bl
->owner
->number
, message
.c_str ());
3054 gdb_printf (tmp_error_stream
,
3055 "Cannot insert breakpoint %d: %s\n",
3070 else if (bl
->loc_type
== bp_loc_hardware_watchpoint
3071 && bl
->owner
->disposition
!= disp_del_at_next_stop
)
3075 val
= bl
->owner
->insert_location (bl
);
3077 /* If trying to set a read-watchpoint, and it turns out it's not
3078 supported, try emulating one with an access watchpoint. */
3079 if (val
== 1 && bl
->watchpoint_type
== hw_read
)
3081 /* But don't try to insert it, if there's already another
3082 hw_access location that would be considered a duplicate
3084 for (bp_location
*loc
: all_bp_locations ())
3086 && loc
->watchpoint_type
== hw_access
3087 && watchpoint_locations_match (bl
, loc
))
3091 bl
->target_info
= loc
->target_info
;
3092 bl
->watchpoint_type
= hw_access
;
3099 bl
->watchpoint_type
= hw_access
;
3100 val
= bl
->owner
->insert_location (bl
);
3103 /* Back to the original value. */
3104 bl
->watchpoint_type
= hw_read
;
3108 bl
->inserted
= (val
== 0);
3111 else if (bl
->owner
->type
== bp_catchpoint
)
3115 val
= bl
->owner
->insert_location (bl
);
3118 bl
->owner
->enable_state
= bp_disabled
;
3122 Error inserting catchpoint %d: Your system does not support this type\n\
3123 of catchpoint."), bl
->owner
->number
);
3125 warning (_("Error inserting catchpoint %d."), bl
->owner
->number
);
3128 bl
->inserted
= (val
== 0);
3130 /* We've already printed an error message if there was a problem
3131 inserting this catchpoint, and we've disabled the catchpoint,
3132 so just return success. */
3139 /* This function is called when program space PSPACE is about to be
3140 deleted. It takes care of updating breakpoints to not reference
3144 breakpoint_program_space_exit (struct program_space
*pspace
)
3146 /* Remove any breakpoint that was set through this program space. */
3147 for (breakpoint
&b
: all_breakpoints_safe ())
3148 if (b
.pspace
== pspace
)
3149 delete_breakpoint (&b
);
3151 /* Breakpoints set through other program spaces could have locations
3152 bound to PSPACE as well. Remove those. */
3153 for (bp_location
*loc
: all_bp_locations ())
3154 if (loc
->pspace
== pspace
)
3156 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
3157 loc
->owner
->unadd_location (*loc
);
3160 /* Now update the global location list to permanently delete the
3161 removed locations above. */
3162 update_global_location_list (UGLL_DONT_INSERT
);
3165 /* Make sure all breakpoints are inserted in inferior.
3166 Throws exception on any error.
3167 A breakpoint that is already inserted won't be inserted
3168 again, so calling this function twice is safe. */
3170 insert_breakpoints (void)
3172 for (breakpoint
&bpt
: all_breakpoints ())
3173 if (is_hardware_watchpoint (&bpt
))
3175 watchpoint
&w
= gdb::checked_static_cast
<watchpoint
&> (bpt
);
3177 update_watchpoint (&w
, false /* don't reparse. */);
3180 /* Updating watchpoints creates new locations, so update the global
3181 location list. Explicitly tell ugll to insert locations and
3182 ignore breakpoints_always_inserted_mode. Also,
3183 update_global_location_list tries to "upgrade" software
3184 breakpoints to hardware breakpoints to handle "set breakpoint
3185 auto-hw", so we need to call it even if we don't have new
3187 update_global_location_list (UGLL_INSERT
);
3190 /* This is used when we need to synch breakpoint conditions between GDB and the
3191 target. It is the case with deleting and disabling of breakpoints when using
3192 always-inserted mode. */
3195 update_inserted_breakpoint_locations (void)
3199 int disabled_breaks
= 0;
3200 int hw_breakpoint_error
= 0;
3201 int hw_bp_details_reported
= 0;
3203 string_file tmp_error_stream
;
3205 /* Explicitly mark the warning -- this will only be printed if
3206 there was an error. */
3207 tmp_error_stream
.puts ("Warning:\n");
3209 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
3211 for (bp_location
*bl
: all_bp_locations ())
3213 /* We only want to update software breakpoints and hardware
3215 if (!is_breakpoint (bl
->owner
))
3218 /* We only want to update locations that are already inserted
3219 and need updating. This is to avoid unwanted insertion during
3220 deletion of breakpoints. */
3221 if (!bl
->inserted
|| !bl
->needs_update
)
3224 switch_to_program_space_and_thread (bl
->pspace
);
3226 /* For targets that support global breakpoints, there's no need
3227 to select an inferior to insert breakpoint to. In fact, even
3228 if we aren't attached to any process yet, we should still
3229 insert breakpoints. */
3230 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ())
3231 && (inferior_ptid
== null_ptid
|| !target_has_execution ()))
3234 val
= insert_bp_location (bl
, &tmp_error_stream
, &disabled_breaks
,
3235 &hw_breakpoint_error
, &hw_bp_details_reported
);
3242 target_terminal::ours_for_output ();
3243 error (("%s"), tmp_error_stream
.c_str ());
3247 /* Used when starting or continuing the program. */
3250 insert_breakpoint_locations (void)
3254 int disabled_breaks
= 0;
3255 int hw_breakpoint_error
= 0;
3256 int hw_bp_error_explained_already
= 0;
3258 string_file tmp_error_stream
;
3260 /* Explicitly mark the warning -- this will only be printed if
3261 there was an error. */
3262 tmp_error_stream
.puts ("Warning:\n");
3264 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
3266 for (bp_location
*bl
: all_bp_locations ())
3268 if (!should_be_inserted (bl
) || (bl
->inserted
&& !bl
->needs_update
))
3271 /* There is no point inserting thread-specific breakpoints if
3272 the thread no longer exists. ALL_BP_LOCATIONS bp_location
3273 has BL->OWNER always non-NULL. */
3274 if (bl
->owner
->thread
!= -1
3275 && !valid_global_thread_id (bl
->owner
->thread
))
3278 /* Or inferior specific breakpoints if the inferior no longer
3280 if (bl
->owner
->inferior
!= -1
3281 && !valid_global_inferior_id (bl
->owner
->inferior
))
3284 switch_to_program_space_and_thread (bl
->pspace
);
3286 /* For targets that support global breakpoints, there's no need
3287 to select an inferior to insert breakpoint to. In fact, even
3288 if we aren't attached to any process yet, we should still
3289 insert breakpoints. */
3290 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ())
3291 && (inferior_ptid
== null_ptid
|| !target_has_execution ()))
3294 val
= insert_bp_location (bl
, &tmp_error_stream
, &disabled_breaks
,
3295 &hw_breakpoint_error
, &hw_bp_error_explained_already
);
3300 /* If we failed to insert all locations of a watchpoint, remove
3301 them, as half-inserted watchpoint is of limited use. */
3302 for (breakpoint
&bpt
: all_breakpoints ())
3304 bool some_failed
= false;
3306 if (!is_hardware_watchpoint (&bpt
))
3309 if (!breakpoint_enabled (&bpt
))
3312 if (bpt
.disposition
== disp_del_at_next_stop
)
3315 for (bp_location
&loc
: bpt
.locations ())
3316 if (!loc
.inserted
&& should_be_inserted (&loc
))
3324 for (bp_location
&loc
: bpt
.locations ())
3326 remove_breakpoint (&loc
);
3328 hw_breakpoint_error
= 1;
3329 tmp_error_stream
.printf ("Could not insert "
3330 "hardware watchpoint %d.\n",
3338 /* If a hardware breakpoint or watchpoint was inserted, add a
3339 message about possibly exhausted resources. */
3340 if (hw_breakpoint_error
&& !hw_bp_error_explained_already
)
3342 tmp_error_stream
.printf ("Could not insert hardware breakpoints:\n\
3343 You may have requested too many hardware breakpoints/watchpoints.\n");
3345 target_terminal::ours_for_output ();
3346 error (("%s"), tmp_error_stream
.c_str ());
3350 /* Used when the program stops.
3351 Returns zero if successful, or non-zero if there was a problem
3352 removing a breakpoint location. */
3355 remove_breakpoints (void)
3359 for (bp_location
*bl
: all_bp_locations ())
3360 if (bl
->inserted
&& !is_tracepoint (bl
->owner
))
3361 val
|= remove_breakpoint (bl
);
3366 /* When a thread exits, remove breakpoints that are related to
3370 remove_threaded_breakpoints (thread_info
*tp
,
3371 std::optional
<ULONGEST
> /* exit_code */,
3374 for (breakpoint
&b
: all_breakpoints_safe ())
3376 if (b
.thread
== tp
->global_num
&& user_breakpoint_p (&b
))
3379 Thread-specific breakpoint %d deleted - thread %s no longer in the thread list.\n"),
3380 b
.number
, print_thread_id (tp
));
3381 delete_breakpoint (&b
);
3386 /* Called when inferior INF has been removed from GDB. Remove associated
3387 per-inferior breakpoints. */
3390 remove_inferior_breakpoints (struct inferior
*inf
)
3392 for (breakpoint
&b
: all_breakpoints_safe ())
3394 if (b
.inferior
== inf
->num
&& user_breakpoint_p (&b
))
3396 /* Tell the user the breakpoint has been deleted. But only for
3397 breakpoints that would not normally have been deleted at the
3398 next stop anyway. */
3399 if (b
.disposition
!= disp_del
3400 && b
.disposition
!= disp_del_at_next_stop
)
3402 Inferior-specific breakpoint %d deleted - inferior %d has been removed.\n"),
3403 b
.number
, inf
->num
);
3404 delete_breakpoint (&b
);
3409 /* See breakpoint.h. */
3412 remove_breakpoints_inf (inferior
*inf
)
3416 breakpoint_debug_printf ("inf->num = %d", inf
->num
);
3418 for (bp_location
*bl
: all_bp_locations ())
3420 if (bl
->pspace
!= inf
->pspace
)
3423 if (bl
->inserted
&& !bl
->target_info
.persist
)
3425 val
= remove_breakpoint (bl
);
3432 static int internal_breakpoint_number
= -1;
3434 /* Set the breakpoint number of B, depending on the value of INTERNAL.
3435 If INTERNAL is non-zero, the breakpoint number will be populated
3436 from internal_breakpoint_number and that variable decremented.
3437 Otherwise the breakpoint number will be populated from
3438 breakpoint_count and that value incremented. Internal breakpoints
3439 do not set the internal var bpnum. */
3441 set_breakpoint_number (int internal
, struct breakpoint
*b
)
3444 b
->number
= internal_breakpoint_number
--;
3447 set_breakpoint_count (breakpoint_count
+ 1);
3448 b
->number
= breakpoint_count
;
3452 /* Create a TYPE breakpoint on ADDRESS from an object file with GDBARCH. */
3454 static struct breakpoint
*
3455 create_internal_breakpoint (struct gdbarch
*gdbarch
,
3456 CORE_ADDR address
, enum bptype type
)
3458 std::unique_ptr
<internal_breakpoint
> b
3459 (new internal_breakpoint (gdbarch
, type
, address
));
3461 b
->number
= internal_breakpoint_number
--;
3463 return add_to_breakpoint_chain (std::move (b
));
3466 /* Create a TYPE breakpoint on minimal symbol MSYM from an object file with
3469 static struct breakpoint
*
3470 create_internal_breakpoint (struct gdbarch
*gdbarch
,
3471 struct bound_minimal_symbol
&msym
, enum bptype type
)
3475 address
= msym
.value_address ();
3477 address
= gdbarch_convert_from_func_ptr_addr
3478 (gdbarch
, address
, current_inferior ()->top_target ());
3480 /* Note that we're not using gdbarch_addr_bits_remove here, because that's
3481 related to addresses in $pc. We're getting the address from the
3482 minimal symbol table. */
3484 /* Is gdbarch_deprecated_function_start_offset needed here? Or is that dealt
3485 with elsewhere? Needs testing on vax. */
3487 if (gdbarch_skip_entrypoint_p (gdbarch
))
3488 address
= gdbarch_skip_entrypoint (gdbarch
, address
);
3490 return create_internal_breakpoint (gdbarch
, address
, type
);
3493 static const char *const longjmp_names
[] =
3495 "longjmp", "_longjmp", "siglongjmp", "_siglongjmp"
3497 #define NUM_LONGJMP_NAMES ARRAY_SIZE(longjmp_names)
3499 /* Per-objfile data private to breakpoint.c. */
3500 struct breakpoint_objfile_data
3502 /* Minimal symbol for "_ovly_debug_event" (if any). */
3503 struct bound_minimal_symbol overlay_msym
;
3505 /* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any). */
3506 struct bound_minimal_symbol longjmp_msym
[NUM_LONGJMP_NAMES
];
3508 /* True if we have looked for longjmp probes. */
3509 int longjmp_searched
= 0;
3511 /* SystemTap probe points for longjmp (if any). These are non-owning
3513 std::vector
<probe
*> longjmp_probes
;
3515 /* Minimal symbol for "std::terminate()" (if any). */
3516 struct bound_minimal_symbol terminate_msym
;
3518 /* Minimal symbol for "_Unwind_DebugHook" (if any). */
3519 struct bound_minimal_symbol exception_msym
;
3521 /* True if we have looked for exception probes. */
3522 int exception_searched
= 0;
3524 /* SystemTap probe points for unwinding (if any). These are non-owning
3526 std::vector
<probe
*> exception_probes
;
3529 static const registry
<objfile
>::key
<breakpoint_objfile_data
>
3530 breakpoint_objfile_key
;
3532 /* Minimal symbol not found sentinel. */
3533 static struct minimal_symbol msym_not_found
;
3535 /* Returns TRUE if MSYM point to the "not found" sentinel. */
3538 msym_not_found_p (const struct minimal_symbol
*msym
)
3540 return msym
== &msym_not_found
;
3543 /* Return per-objfile data needed by breakpoint.c.
3544 Allocate the data if necessary. */
3546 static struct breakpoint_objfile_data
*
3547 get_breakpoint_objfile_data (struct objfile
*objfile
)
3549 struct breakpoint_objfile_data
*bp_objfile_data
;
3551 bp_objfile_data
= breakpoint_objfile_key
.get (objfile
);
3552 if (bp_objfile_data
== NULL
)
3553 bp_objfile_data
= breakpoint_objfile_key
.emplace (objfile
);
3554 return bp_objfile_data
;
3558 create_overlay_event_breakpoint (void)
3560 const char *const func_name
= "_ovly_debug_event";
3562 for (objfile
*objfile
: current_program_space
->objfiles ())
3564 struct breakpoint
*b
;
3565 struct breakpoint_objfile_data
*bp_objfile_data
;
3568 bp_objfile_data
= get_breakpoint_objfile_data (objfile
);
3570 if (msym_not_found_p (bp_objfile_data
->overlay_msym
.minsym
))
3573 if (bp_objfile_data
->overlay_msym
.minsym
== NULL
)
3575 struct bound_minimal_symbol m
;
3577 m
= lookup_minimal_symbol_text (func_name
, objfile
);
3578 if (m
.minsym
== NULL
)
3580 /* Avoid future lookups in this objfile. */
3581 bp_objfile_data
->overlay_msym
.minsym
= &msym_not_found
;
3584 bp_objfile_data
->overlay_msym
= m
;
3587 addr
= bp_objfile_data
->overlay_msym
.value_address ();
3588 b
= create_internal_breakpoint (objfile
->arch (), addr
,
3590 b
->locspec
= new_explicit_location_spec_function (func_name
);
3592 if (overlay_debugging
== ovly_auto
)
3594 b
->enable_state
= bp_enabled
;
3595 overlay_events_enabled
= 1;
3599 b
->enable_state
= bp_disabled
;
3600 overlay_events_enabled
= 0;
3605 /* Install a master longjmp breakpoint for OBJFILE using a probe. Return
3606 true if a breakpoint was installed. */
3609 create_longjmp_master_breakpoint_probe (objfile
*objfile
)
3611 struct gdbarch
*gdbarch
= objfile
->arch ();
3612 struct breakpoint_objfile_data
*bp_objfile_data
3613 = get_breakpoint_objfile_data (objfile
);
3615 if (!bp_objfile_data
->longjmp_searched
)
3617 std::vector
<probe
*> ret
3618 = find_probes_in_objfile (objfile
, "libc", "longjmp");
3622 /* We are only interested in checking one element. */
3625 if (!p
->can_evaluate_arguments ())
3627 /* We cannot use the probe interface here,
3628 because it does not know how to evaluate
3633 bp_objfile_data
->longjmp_probes
= ret
;
3634 bp_objfile_data
->longjmp_searched
= 1;
3637 if (bp_objfile_data
->longjmp_probes
.empty ())
3640 for (probe
*p
: bp_objfile_data
->longjmp_probes
)
3642 struct breakpoint
*b
;
3644 b
= create_internal_breakpoint (gdbarch
,
3645 p
->get_relocated_address (objfile
),
3647 b
->locspec
= new_probe_location_spec ("-probe-stap libc:longjmp");
3648 b
->enable_state
= bp_disabled
;
3654 /* Install master longjmp breakpoints for OBJFILE using longjmp_names.
3655 Return true if at least one breakpoint was installed. */
3658 create_longjmp_master_breakpoint_names (objfile
*objfile
)
3660 struct gdbarch
*gdbarch
= objfile
->arch ();
3661 if (!gdbarch_get_longjmp_target_p (gdbarch
))
3664 struct breakpoint_objfile_data
*bp_objfile_data
3665 = get_breakpoint_objfile_data (objfile
);
3666 unsigned int installed_bp
= 0;
3668 for (int i
= 0; i
< NUM_LONGJMP_NAMES
; i
++)
3670 struct breakpoint
*b
;
3671 const char *func_name
;
3674 if (msym_not_found_p (bp_objfile_data
->longjmp_msym
[i
].minsym
))
3677 func_name
= longjmp_names
[i
];
3678 if (bp_objfile_data
->longjmp_msym
[i
].minsym
== NULL
)
3680 struct bound_minimal_symbol m
;
3682 m
= lookup_minimal_symbol_text (func_name
, objfile
);
3683 if (m
.minsym
== NULL
)
3685 /* Prevent future lookups in this objfile. */
3686 bp_objfile_data
->longjmp_msym
[i
].minsym
= &msym_not_found
;
3689 bp_objfile_data
->longjmp_msym
[i
] = m
;
3692 addr
= bp_objfile_data
->longjmp_msym
[i
].value_address ();
3693 b
= create_internal_breakpoint (gdbarch
, addr
, bp_longjmp_master
);
3694 b
->locspec
= new_explicit_location_spec_function (func_name
);
3695 b
->enable_state
= bp_disabled
;
3699 return installed_bp
> 0;
3702 /* Create a master longjmp breakpoint. */
3705 create_longjmp_master_breakpoint (void)
3707 scoped_restore_current_program_space restore_pspace
;
3709 for (struct program_space
*pspace
: program_spaces
)
3711 set_current_program_space (pspace
);
3713 for (objfile
*obj
: current_program_space
->objfiles ())
3715 /* Skip separate debug object, it's handled in the loop below. */
3716 if (obj
->separate_debug_objfile_backlink
!= nullptr)
3719 /* Try a probe kind breakpoint on main objfile. */
3720 if (create_longjmp_master_breakpoint_probe (obj
))
3723 /* Try longjmp_names kind breakpoints on main and separate_debug
3725 for (objfile
*debug_objfile
: obj
->separate_debug_objfiles ())
3726 if (create_longjmp_master_breakpoint_names (debug_objfile
))
3732 /* Create a master std::terminate breakpoint. */
3734 create_std_terminate_master_breakpoint (void)
3736 const char *const func_name
= "std::terminate()";
3738 scoped_restore_current_program_space restore_pspace
;
3739 scoped_restore_current_language save_language
;
3740 set_language (language_cplus
);
3742 for (struct program_space
*pspace
: program_spaces
)
3744 set_current_program_space (pspace
);
3746 for (objfile
*objfile
: current_program_space
->objfiles ())
3748 struct breakpoint
*b
;
3749 struct breakpoint_objfile_data
*bp_objfile_data
;
3751 bp_objfile_data
= get_breakpoint_objfile_data (objfile
);
3753 if (msym_not_found_p (bp_objfile_data
->terminate_msym
.minsym
))
3756 if (bp_objfile_data
->terminate_msym
.minsym
== NULL
)
3758 struct bound_minimal_symbol m
;
3760 m
= lookup_minimal_symbol (func_name
, NULL
, objfile
);
3761 if (m
.minsym
== NULL
|| (m
.minsym
->type () != mst_text
3762 && m
.minsym
->type () != mst_file_text
))
3764 /* Prevent future lookups in this objfile. */
3765 bp_objfile_data
->terminate_msym
.minsym
= &msym_not_found
;
3768 bp_objfile_data
->terminate_msym
= m
;
3771 b
= create_internal_breakpoint (objfile
->arch (),
3772 bp_objfile_data
->terminate_msym
,
3773 bp_std_terminate_master
);
3774 b
->locspec
= new_explicit_location_spec_function (func_name
);
3775 b
->enable_state
= bp_disabled
;
3780 /* Install a master breakpoint on the unwinder's debug hook for OBJFILE using a
3781 probe. Return true if a breakpoint was installed. */
3784 create_exception_master_breakpoint_probe (objfile
*objfile
)
3786 struct breakpoint
*b
;
3787 struct gdbarch
*gdbarch
;
3788 struct breakpoint_objfile_data
*bp_objfile_data
;
3790 bp_objfile_data
= get_breakpoint_objfile_data (objfile
);
3792 /* We prefer the SystemTap probe point if it exists. */
3793 if (!bp_objfile_data
->exception_searched
)
3795 std::vector
<probe
*> ret
3796 = find_probes_in_objfile (objfile
, "libgcc", "unwind");
3800 /* We are only interested in checking one element. */
3803 if (!p
->can_evaluate_arguments ())
3805 /* We cannot use the probe interface here, because it does
3806 not know how to evaluate arguments. */
3810 bp_objfile_data
->exception_probes
= ret
;
3811 bp_objfile_data
->exception_searched
= 1;
3814 if (bp_objfile_data
->exception_probes
.empty ())
3817 gdbarch
= objfile
->arch ();
3819 for (probe
*p
: bp_objfile_data
->exception_probes
)
3821 b
= create_internal_breakpoint (gdbarch
,
3822 p
->get_relocated_address (objfile
),
3823 bp_exception_master
);
3824 b
->locspec
= new_probe_location_spec ("-probe-stap libgcc:unwind");
3825 b
->enable_state
= bp_disabled
;
3831 /* Install a master breakpoint on the unwinder's debug hook for OBJFILE using
3832 _Unwind_DebugHook. Return true if a breakpoint was installed. */
3835 create_exception_master_breakpoint_hook (objfile
*objfile
)
3837 const char *const func_name
= "_Unwind_DebugHook";
3838 struct breakpoint
*b
;
3839 struct gdbarch
*gdbarch
;
3840 struct breakpoint_objfile_data
*bp_objfile_data
;
3842 bp_objfile_data
= get_breakpoint_objfile_data (objfile
);
3844 if (msym_not_found_p (bp_objfile_data
->exception_msym
.minsym
))
3847 gdbarch
= objfile
->arch ();
3849 if (bp_objfile_data
->exception_msym
.minsym
== NULL
)
3851 struct bound_minimal_symbol debug_hook
;
3853 debug_hook
= lookup_minimal_symbol_text (func_name
, objfile
);
3854 if (debug_hook
.minsym
== NULL
)
3856 bp_objfile_data
->exception_msym
.minsym
= &msym_not_found
;
3860 bp_objfile_data
->exception_msym
= debug_hook
;
3863 b
= create_internal_breakpoint (gdbarch
, bp_objfile_data
->exception_msym
,
3864 bp_exception_master
);
3865 b
->locspec
= new_explicit_location_spec_function (func_name
);
3866 b
->enable_state
= bp_disabled
;
3871 /* Install a master breakpoint on the unwinder's debug hook. */
3874 create_exception_master_breakpoint (void)
3876 for (objfile
*obj
: current_program_space
->objfiles ())
3878 /* Skip separate debug object. */
3879 if (obj
->separate_debug_objfile_backlink
)
3882 /* Try a probe kind breakpoint. */
3883 if (create_exception_master_breakpoint_probe (obj
))
3886 /* Iterate over main and separate debug objects and try an
3887 _Unwind_DebugHook kind breakpoint. */
3888 for (objfile
*debug_objfile
: obj
->separate_debug_objfiles ())
3889 if (create_exception_master_breakpoint_hook (debug_objfile
))
3894 /* Does B have a location spec? */
3897 breakpoint_location_spec_empty_p (const struct breakpoint
*b
)
3899 return (b
->locspec
!= nullptr && b
->locspec
->empty_p ());
3903 update_breakpoints_after_exec (void)
3905 /* We're about to delete breakpoints from GDB's lists. If the
3906 INSERTED flag is true, GDB will try to lift the breakpoints by
3907 writing the breakpoints' "shadow contents" back into memory. The
3908 "shadow contents" are NOT valid after an exec, so GDB should not
3909 do that. Instead, the target is responsible from marking
3910 breakpoints out as soon as it detects an exec. We don't do that
3911 here instead, because there may be other attempts to delete
3912 breakpoints after detecting an exec and before reaching here. */
3913 for (bp_location
*bploc
: all_bp_locations ())
3914 if (bploc
->pspace
== current_program_space
)
3915 gdb_assert (!bploc
->inserted
);
3917 for (breakpoint
&b
: all_breakpoints_safe ())
3919 if (b
.pspace
!= current_program_space
)
3922 /* Solib breakpoints must be explicitly reset after an exec(). */
3923 if (b
.type
== bp_shlib_event
)
3925 delete_breakpoint (&b
);
3929 /* JIT breakpoints must be explicitly reset after an exec(). */
3930 if (b
.type
== bp_jit_event
)
3932 delete_breakpoint (&b
);
3936 /* Thread event breakpoints must be set anew after an exec(),
3937 as must overlay event and longjmp master breakpoints. */
3938 if (b
.type
== bp_thread_event
|| b
.type
== bp_overlay_event
3939 || b
.type
== bp_longjmp_master
|| b
.type
== bp_std_terminate_master
3940 || b
.type
== bp_exception_master
)
3942 delete_breakpoint (&b
);
3946 /* Step-resume breakpoints are meaningless after an exec(). */
3947 if (b
.type
== bp_step_resume
|| b
.type
== bp_hp_step_resume
)
3949 delete_breakpoint (&b
);
3953 /* Just like single-step breakpoints. */
3954 if (b
.type
== bp_single_step
)
3956 delete_breakpoint (&b
);
3960 /* Longjmp and longjmp-resume breakpoints are also meaningless
3962 if (b
.type
== bp_longjmp
|| b
.type
== bp_longjmp_resume
3963 || b
.type
== bp_longjmp_call_dummy
3964 || b
.type
== bp_exception
|| b
.type
== bp_exception_resume
)
3966 delete_breakpoint (&b
);
3970 if (b
.type
== bp_catchpoint
)
3972 /* For now, none of the bp_catchpoint breakpoints need to
3973 do anything at this point. In the future, if some of
3974 the catchpoints need to something, we will need to add
3975 a new method, and call this method from here. */
3979 /* bp_finish is a special case. The only way we ought to be able
3980 to see one of these when an exec() has happened, is if the user
3981 caught a vfork, and then said "finish". Ordinarily a finish just
3982 carries them to the call-site of the current callee, by setting
3983 a temporary bp there and resuming. But in this case, the finish
3984 will carry them entirely through the vfork & exec.
3986 We don't want to allow a bp_finish to remain inserted now. But
3987 we can't safely delete it, 'cause finish_command has a handle to
3988 the bp on a bpstat, and will later want to delete it. There's a
3989 chance (and I've seen it happen) that if we delete the bp_finish
3990 here, that its storage will get reused by the time finish_command
3991 gets 'round to deleting the "use to be a bp_finish" breakpoint.
3992 We really must allow finish_command to delete a bp_finish.
3994 In the absence of a general solution for the "how do we know
3995 it's safe to delete something others may have handles to?"
3996 problem, what we'll do here is just uninsert the bp_finish, and
3997 let finish_command delete it.
3999 (We know the bp_finish is "doomed" in the sense that it's
4000 momentary, and will be deleted as soon as finish_command sees
4001 the inferior stopped. So it doesn't matter that the bp's
4002 address is probably bogus in the new a.out, unlike e.g., the
4003 solib breakpoints.) */
4005 if (b
.type
== bp_finish
)
4010 /* Without a symbolic address, we have little hope of the
4011 pre-exec() address meaning the same thing in the post-exec()
4013 if (breakpoint_location_spec_empty_p (&b
))
4015 delete_breakpoint (&b
);
4022 detach_breakpoints (ptid_t ptid
)
4025 scoped_restore save_inferior_ptid
= make_scoped_restore (&inferior_ptid
);
4026 struct inferior
*inf
= current_inferior ();
4028 if (ptid
.pid () == inferior_ptid
.pid ())
4029 error (_("Cannot detach breakpoints of inferior_ptid"));
4031 /* Set inferior_ptid; remove_breakpoint_1 uses this global. */
4032 inferior_ptid
= ptid
;
4033 for (bp_location
*bl
: all_bp_locations ())
4035 if (bl
->pspace
!= inf
->pspace
)
4038 /* This function must physically remove breakpoints locations
4039 from the specified ptid, without modifying the breakpoint
4040 package's state. Locations of type bp_loc_other and
4041 bp_loc_software_watchpoint are only maintained at GDB side,
4042 so there is no need to remove them. Moreover, removing these
4043 would modify the breakpoint package's state. */
4044 if (bl
->loc_type
== bp_loc_other
4045 || bl
->loc_type
== bp_loc_software_watchpoint
)
4049 val
|= remove_breakpoint_1 (bl
, DETACH_BREAKPOINT
);
4055 /* Remove the breakpoint location BL from the current address space.
4056 Note that this is used to detach breakpoints from a child fork.
4057 When we get here, the child isn't in the inferior list, and neither
4058 do we have objects to represent its address space --- we should
4059 *not* look at bl->pspace->aspace here. */
4062 remove_breakpoint_1 (struct bp_location
*bl
, enum remove_bp_reason reason
)
4064 breakpoint_debug_printf ("%s due to %s",
4065 breakpoint_location_address_str (bl
).c_str (),
4066 remove_bp_reason_str (reason
));
4070 /* BL is never in moribund_locations by our callers. */
4071 gdb_assert (bl
->owner
!= NULL
);
4073 /* The type of none suggests that owner is actually deleted.
4074 This should not ever happen. */
4075 gdb_assert (bl
->owner
->type
!= bp_none
);
4077 if (bl
->loc_type
== bp_loc_software_breakpoint
4078 || bl
->loc_type
== bp_loc_hardware_breakpoint
)
4080 /* "Normal" instruction breakpoint: either the standard
4081 trap-instruction bp (bp_breakpoint), or a
4082 bp_hardware_breakpoint. */
4084 /* First check to see if we have to handle an overlay. */
4085 if (overlay_debugging
== ovly_off
4086 || bl
->section
== NULL
4087 || !(section_is_overlay (bl
->section
)))
4089 /* No overlay handling: just remove the breakpoint. */
4091 /* If we're trying to uninsert a memory breakpoint that we
4092 know is set in a dynamic object that is marked
4093 shlib_disabled, then either the dynamic object was
4094 removed with "remove-symbol-file" or with
4095 "nosharedlibrary". In the former case, we don't know
4096 whether another dynamic object might have loaded over the
4097 breakpoint's address -- the user might well let us know
4098 about it next with add-symbol-file (the whole point of
4099 add-symbol-file is letting the user manually maintain a
4100 list of dynamically loaded objects). If we have the
4101 breakpoint's shadow memory, that is, this is a software
4102 breakpoint managed by GDB, check whether the breakpoint
4103 is still inserted in memory, to avoid overwriting wrong
4104 code with stale saved shadow contents. Note that HW
4105 breakpoints don't have shadow memory, as they're
4106 implemented using a mechanism that is not dependent on
4107 being able to modify the target's memory, and as such
4108 they should always be removed. */
4109 if (bl
->shlib_disabled
4110 && bl
->target_info
.shadow_len
!= 0
4111 && !memory_validate_breakpoint (bl
->gdbarch
, &bl
->target_info
))
4114 val
= bl
->owner
->remove_location (bl
, reason
);
4118 /* This breakpoint is in an overlay section.
4119 Did we set a breakpoint at the LMA? */
4120 if (!overlay_events_enabled
)
4122 /* Yes -- overlay event support is not active, so we
4123 should have set a breakpoint at the LMA. Remove it.
4125 /* Ignore any failures: if the LMA is in ROM, we will
4126 have already warned when we failed to insert it. */
4127 if (bl
->loc_type
== bp_loc_hardware_breakpoint
)
4128 target_remove_hw_breakpoint (bl
->gdbarch
,
4129 &bl
->overlay_target_info
);
4131 target_remove_breakpoint (bl
->gdbarch
,
4132 &bl
->overlay_target_info
,
4135 /* Did we set a breakpoint at the VMA?
4136 If so, we will have marked the breakpoint 'inserted'. */
4139 /* Yes -- remove it. Previously we did not bother to
4140 remove the breakpoint if the section had been
4141 unmapped, but let's not rely on that being safe. We
4142 don't know what the overlay manager might do. */
4144 /* However, we should remove *software* breakpoints only
4145 if the section is still mapped, or else we overwrite
4146 wrong code with the saved shadow contents. */
4147 if (bl
->loc_type
== bp_loc_hardware_breakpoint
4148 || section_is_mapped (bl
->section
))
4149 val
= bl
->owner
->remove_location (bl
, reason
);
4155 /* No -- not inserted, so no need to remove. No error. */
4160 /* In some cases, we might not be able to remove a breakpoint in
4161 a shared library that has already been removed, but we have
4162 not yet processed the shlib unload event. Similarly for an
4163 unloaded add-symbol-file object - the user might not yet have
4164 had the chance to remove-symbol-file it. shlib_disabled will
4165 be set if the library/object has already been removed, but
4166 the breakpoint hasn't been uninserted yet, e.g., after
4167 "nosharedlibrary" or "remove-symbol-file" with breakpoints
4168 always-inserted mode. */
4170 && (bl
->loc_type
== bp_loc_software_breakpoint
4171 && (bl
->shlib_disabled
4172 || solib_name_from_address (bl
->pspace
, bl
->address
)
4173 || shared_objfile_contains_address_p (bl
->pspace
,
4179 bl
->inserted
= (reason
== DETACH_BREAKPOINT
);
4181 else if (bl
->loc_type
== bp_loc_hardware_watchpoint
)
4183 bl
->inserted
= (reason
== DETACH_BREAKPOINT
);
4184 bl
->owner
->remove_location (bl
, reason
);
4186 /* Failure to remove any of the hardware watchpoints comes here. */
4187 if (reason
== REMOVE_BREAKPOINT
&& bl
->inserted
)
4188 warning (_("Could not remove hardware watchpoint %d."),
4191 else if (bl
->owner
->type
== bp_catchpoint
4192 && breakpoint_enabled (bl
->owner
)
4195 val
= bl
->owner
->remove_location (bl
, reason
);
4199 bl
->inserted
= (reason
== DETACH_BREAKPOINT
);
4206 remove_breakpoint (struct bp_location
*bl
)
4208 /* BL is never in moribund_locations by our callers. */
4209 gdb_assert (bl
->owner
!= NULL
);
4211 /* The type of none suggests that owner is actually deleted.
4212 This should not ever happen. */
4213 gdb_assert (bl
->owner
->type
!= bp_none
);
4215 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
4217 switch_to_program_space_and_thread (bl
->pspace
);
4219 return remove_breakpoint_1 (bl
, REMOVE_BREAKPOINT
);
4222 /* See breakpoint.h. */
4225 mark_breakpoints_out (program_space
*pspace
)
4227 for (bp_location
*bl
: all_bp_locations ())
4228 if (bl
->pspace
== pspace
)
4232 /* See breakpoint.h. */
4235 breakpoint_init_inferior (inferior
*inf
, inf_context context
)
4237 /* If breakpoint locations are shared across processes, then there's
4239 if (gdbarch_has_global_breakpoints (inf
->arch ()))
4242 mark_breakpoints_out (inf
->pspace
);
4244 for (breakpoint
&b
: all_breakpoints_safe ())
4246 if (b
.has_locations () && b
.first_loc ().pspace
!= inf
->pspace
)
4252 case bp_longjmp_call_dummy
:
4254 /* If the call dummy breakpoint is at the entry point it will
4255 cause problems when the inferior is rerun, so we better get
4258 case bp_watchpoint_scope
:
4260 /* Also get rid of scope breakpoints. */
4262 case bp_shlib_event
:
4264 /* Also remove solib event breakpoints. Their addresses may
4265 have changed since the last time we ran the program.
4266 Actually we may now be debugging against different target;
4267 and so the solib backend that installed this breakpoint may
4268 not be used in by the target. E.g.,
4270 (gdb) file prog-linux
4271 (gdb) run # native linux target
4274 (gdb) file prog-win.exe
4275 (gdb) tar rem :9999 # remote Windows gdbserver.
4278 case bp_step_resume
:
4280 /* Also remove step-resume breakpoints. */
4282 case bp_single_step
:
4284 /* Also remove single-step breakpoints. */
4286 delete_breakpoint (&b
);
4290 case bp_hardware_watchpoint
:
4291 case bp_read_watchpoint
:
4292 case bp_access_watchpoint
:
4294 watchpoint
&w
= gdb::checked_static_cast
<watchpoint
&> (b
);
4296 /* Likewise for watchpoints on local expressions. */
4297 if (w
.exp_valid_block
!= NULL
)
4298 delete_breakpoint (&b
);
4301 /* Get rid of existing locations, which are no longer
4302 valid. New ones will be created in
4303 update_watchpoint, when the inferior is restarted.
4304 The next update_global_location_list call will
4305 garbage collect them. */
4306 b
.clear_locations ();
4308 if (context
== inf_starting
)
4310 /* Reset val field to force reread of starting value in
4311 insert_breakpoints. */
4312 w
.val
.reset (nullptr);
4313 w
.val_valid
= false;
4323 /* Get rid of the moribund locations. */
4324 for (bp_location
*bl
: moribund_locations
)
4325 decref_bp_location (&bl
);
4326 moribund_locations
.clear ();
4329 /* These functions concern about actual breakpoints inserted in the
4330 target --- to e.g. check if we need to do decr_pc adjustment or if
4331 we need to hop over the bkpt --- so we check for address space
4332 match, not program space. */
4334 /* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint
4335 exists at PC. It returns ordinary_breakpoint_here if it's an
4336 ordinary breakpoint, or permanent_breakpoint_here if it's a
4337 permanent breakpoint.
4338 - When continuing from a location with an ordinary breakpoint, we
4339 actually single step once before calling insert_breakpoints.
4340 - When continuing from a location with a permanent breakpoint, we
4341 need to use the `SKIP_PERMANENT_BREAKPOINT' macro, provided by
4342 the target, to advance the PC past the breakpoint. */
4344 enum breakpoint_here
4345 breakpoint_here_p (const address_space
*aspace
, CORE_ADDR pc
)
4347 bool any_breakpoint_here
= false;
4349 for (bp_location
*bl
: all_bp_locations ())
4351 if (bl
->loc_type
!= bp_loc_software_breakpoint
4352 && bl
->loc_type
!= bp_loc_hardware_breakpoint
)
4355 /* ALL_BP_LOCATIONS bp_location has BL->OWNER always non-NULL. */
4356 if ((breakpoint_enabled (bl
->owner
)
4358 && breakpoint_location_address_match (bl
, aspace
, pc
))
4360 if (overlay_debugging
4361 && section_is_overlay (bl
->section
)
4362 && !section_is_mapped (bl
->section
))
4363 continue; /* unmapped overlay -- can't be a match */
4364 else if (bl
->permanent
)
4365 return permanent_breakpoint_here
;
4367 any_breakpoint_here
= true;
4371 return any_breakpoint_here
? ordinary_breakpoint_here
: no_breakpoint_here
;
4374 /* See breakpoint.h. */
4377 breakpoint_in_range_p (const address_space
*aspace
,
4378 CORE_ADDR addr
, ULONGEST len
)
4380 for (bp_location
*bl
: all_bp_locations ())
4382 if (bl
->loc_type
!= bp_loc_software_breakpoint
4383 && bl
->loc_type
!= bp_loc_hardware_breakpoint
)
4386 if ((breakpoint_enabled (bl
->owner
)
4388 && breakpoint_location_address_range_overlap (bl
, aspace
,
4391 if (overlay_debugging
4392 && section_is_overlay (bl
->section
)
4393 && !section_is_mapped (bl
->section
))
4395 /* Unmapped overlay -- can't be a match. */
4406 /* Return true if there's a moribund breakpoint at PC. */
4409 moribund_breakpoint_here_p (const address_space
*aspace
, CORE_ADDR pc
)
4411 for (bp_location
*loc
: moribund_locations
)
4412 if (breakpoint_location_address_match (loc
, aspace
, pc
))
4418 /* Returns true iff BL is inserted at PC, in address space ASPACE. */
4421 bp_location_inserted_here_p (const struct bp_location
*bl
,
4422 const address_space
*aspace
, CORE_ADDR pc
)
4425 && breakpoint_address_match (bl
->pspace
->aspace
.get (), bl
->address
,
4428 /* An unmapped overlay can't be a match. */
4429 return !(overlay_debugging
4430 && section_is_overlay (bl
->section
)
4431 && !section_is_mapped (bl
->section
));
4436 /* Returns non-zero iff there's a breakpoint inserted at PC. */
4439 breakpoint_inserted_here_p (const address_space
*aspace
, CORE_ADDR pc
)
4441 for (bp_location
*bl
: all_bp_locations_at_addr (pc
))
4443 if (bl
->loc_type
!= bp_loc_software_breakpoint
4444 && bl
->loc_type
!= bp_loc_hardware_breakpoint
)
4447 if (bp_location_inserted_here_p (bl
, aspace
, pc
))
4453 /* This function returns non-zero iff there is a software breakpoint
4457 software_breakpoint_inserted_here_p (const address_space
*aspace
,
4460 for (bp_location
*bl
: all_bp_locations_at_addr (pc
))
4462 if (bl
->loc_type
!= bp_loc_software_breakpoint
)
4465 if (bp_location_inserted_here_p (bl
, aspace
, pc
))
4472 /* See breakpoint.h. */
4475 hardware_breakpoint_inserted_here_p (const address_space
*aspace
,
4478 for (bp_location
*bl
: all_bp_locations_at_addr (pc
))
4480 if (bl
->loc_type
!= bp_loc_hardware_breakpoint
)
4483 if (bp_location_inserted_here_p (bl
, aspace
, pc
))
4491 hardware_watchpoint_inserted_in_range (const address_space
*aspace
,
4492 CORE_ADDR addr
, ULONGEST len
)
4494 for (breakpoint
&bpt
: all_breakpoints ())
4496 if (bpt
.type
!= bp_hardware_watchpoint
4497 && bpt
.type
!= bp_access_watchpoint
)
4500 if (!breakpoint_enabled (&bpt
))
4503 for (bp_location
&loc
: bpt
.locations ())
4504 if (loc
.pspace
->aspace
.get () == aspace
&& loc
.inserted
)
4508 /* Check for intersection. */
4509 l
= std::max
<CORE_ADDR
> (loc
.address
, addr
);
4510 h
= std::min
<CORE_ADDR
> (loc
.address
+ loc
.length
, addr
+ len
);
4518 /* See breakpoint.h. */
4521 is_catchpoint (struct breakpoint
*b
)
4523 return (b
->type
== bp_catchpoint
);
4526 /* Clear a bpstat so that it says we are not at any breakpoint.
4527 Also free any storage that is part of a bpstat. */
4530 bpstat_clear (bpstat
**bsp
)
4547 bpstat::bpstat (const bpstat
&other
)
4549 bp_location_at (other
.bp_location_at
),
4550 breakpoint_at (other
.breakpoint_at
),
4551 commands (other
.commands
),
4552 print (other
.print
),
4554 print_it (other
.print_it
)
4556 if (other
.old_val
!= NULL
)
4557 old_val
= release_value (other
.old_val
->copy ());
4560 /* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
4561 is part of the bpstat is copied as well. */
4564 bpstat_copy (bpstat
*bs
)
4566 bpstat
*p
= nullptr;
4568 bpstat
*retval
= nullptr;
4573 for (; bs
!= NULL
; bs
= bs
->next
)
4575 tmp
= new bpstat (*bs
);
4578 /* This is the first thing in the chain. */
4588 /* Find the bpstat associated with this breakpoint. */
4591 bpstat_find_breakpoint (bpstat
*bsp
, struct breakpoint
*breakpoint
)
4596 for (; bsp
!= NULL
; bsp
= bsp
->next
)
4598 if (bsp
->breakpoint_at
== breakpoint
)
4604 /* See breakpoint.h. */
4607 bpstat_explains_signal (bpstat
*bsp
, enum gdb_signal sig
)
4609 for (; bsp
!= NULL
; bsp
= bsp
->next
)
4611 if (bsp
->breakpoint_at
== NULL
)
4613 /* A moribund location can never explain a signal other than
4615 if (sig
== GDB_SIGNAL_TRAP
)
4620 if (bsp
->breakpoint_at
->explains_signal (sig
))
4628 /* See breakpoint.h. */
4631 bpstat_num (bpstat
**bsp
, int *num
)
4633 struct breakpoint
*b
;
4636 return 0; /* No more breakpoint values */
4638 /* We assume we'll never have several bpstats that correspond to a
4639 single breakpoint -- otherwise, this function might return the
4640 same number more than once and this will look ugly. */
4641 b
= (*bsp
)->breakpoint_at
;
4642 *bsp
= (*bsp
)->next
;
4644 return -1; /* breakpoint that's been deleted since */
4646 *num
= b
->number
; /* We have its number */
4650 /* See breakpoint.h */
4653 bpstat_locno (const bpstat
*bs
)
4655 const struct breakpoint
*b
= bs
->breakpoint_at
;
4656 const struct bp_location
*bl
= bs
->bp_location_at
.get ();
4658 if (b
!= nullptr && b
->has_multiple_locations ())
4662 for (bp_location
&loc
: b
->locations ())
4670 warning (_("location number not found for breakpoint %d address %s."),
4671 b
->number
, paddress (bl
->gdbarch
, bl
->address
));
4677 /* See breakpoint.h. */
4680 print_num_locno (const bpstat
*bs
, struct ui_out
*uiout
)
4682 struct breakpoint
*b
= bs
->breakpoint_at
;
4685 uiout
->text (_("deleted breakpoint"));
4688 uiout
->field_signed ("bkptno", b
->number
);
4690 int locno
= bpstat_locno (bs
);
4692 uiout
->message (".%pF", signed_field ("locno", locno
));
4696 /* See breakpoint.h. */
4699 bpstat_clear_actions (void)
4703 if (inferior_ptid
== null_ptid
)
4706 thread_info
*tp
= inferior_thread ();
4707 for (bs
= tp
->control
.stop_bpstat
; bs
!= NULL
; bs
= bs
->next
)
4709 bs
->commands
= NULL
;
4710 bs
->old_val
.reset (nullptr);
4714 /* Called when a command is about to proceed the inferior. */
4717 breakpoint_about_to_proceed (void)
4719 if (inferior_ptid
!= null_ptid
)
4721 struct thread_info
*tp
= inferior_thread ();
4723 /* Allow inferior function calls in breakpoint commands to not
4724 interrupt the command list. When the call finishes
4725 successfully, the inferior will be standing at the same
4726 breakpoint as if nothing happened. */
4727 if (tp
->control
.in_infcall
)
4731 breakpoint_proceeded
= 1;
4734 /* Return true iff CMD as the first line of a command sequence is `silent'
4735 or its equivalent. */
4738 command_line_is_silent (struct command_line
*cmd
)
4740 return cmd
&& (strcmp ("silent", cmd
->line
) == 0);
4743 /* Sets the $_hit_bpnum and $_hit_locno to bpnum and locno.
4744 A locno 0 is changed to 1 to e.g. let the user do
4745 (gdb) disable $_hit_bpnum.$_hit_locno
4746 for a single location breakpoint. */
4749 set_hit_convenience_vars (int bpnum
, int locno
)
4751 set_internalvar_integer (lookup_internalvar ("_hit_bpnum"), bpnum
);
4752 set_internalvar_integer (lookup_internalvar ("_hit_locno"),
4753 (locno
> 0 ? locno
: 1));
4756 /* Execute all the commands associated with all the breakpoints at
4757 this location. Any of these commands could cause the process to
4758 proceed beyond this point, etc. We look out for such changes by
4759 checking the global "breakpoint_proceeded" after each command.
4761 Returns true if a breakpoint command resumed the inferior. In that
4762 case, it is the caller's responsibility to recall it again with the
4763 bpstat of the current thread. */
4766 bpstat_do_actions_1 (bpstat
**bsp
)
4771 /* Avoid endless recursion if a `source' command is contained
4773 if (executing_breakpoint_commands
)
4776 scoped_restore save_executing
4777 = make_scoped_restore (&executing_breakpoint_commands
, 1);
4779 scoped_restore preventer
= prevent_dont_repeat ();
4781 /* This pointer will iterate over the list of bpstat's. */
4784 /* The $_hit_* convenience variables are set before running the
4785 commands of BS. In case we have several bs, after the loop,
4786 we set again the variables to the first printed bpnum and locno.
4787 For multiple breakpoints, this ensures the variables are set to the
4788 breakpoint printed for the user. */
4789 int printed_hit_bpnum
= -1;
4790 int printed_hit_locno
= -1;
4792 breakpoint_proceeded
= 0;
4793 for (; bs
!= NULL
; bs
= bs
->next
)
4795 struct command_line
*cmd
= NULL
;
4797 /* Set the _hit_* convenience variables before running BS's commands. */
4799 const struct breakpoint
*b
= bs
->breakpoint_at
;
4802 int locno
= bpstat_locno (bs
);
4804 set_hit_convenience_vars (b
->number
, locno
);
4805 if (printed_hit_locno
== -1 && bs
->print
)
4807 printed_hit_bpnum
= b
->number
;
4808 printed_hit_locno
= locno
;
4813 /* Take ownership of the BSP's command tree, if it has one.
4815 The command tree could legitimately contain commands like
4816 'step' and 'next', which call clear_proceed_status, which
4817 frees the bpstat BS and its command tree. To make sure this doesn't
4818 free the tree we're executing out from under us, we need to
4819 take ownership of the tree ourselves. Since a given bpstat's
4820 commands are only executed once, we don't need to copy it; we
4821 can clear the pointer in the bpstat, and make sure we free
4822 the tree when we're done. */
4823 counted_command_line ccmd
= bs
->commands
;
4824 bs
->commands
= NULL
;
4827 if (command_line_is_silent (cmd
))
4829 /* The action has been already done by bpstat_stop_status. */
4835 execute_control_command (cmd
);
4836 /* After execute_control_command, if breakpoint_proceeded is true,
4837 BS has been freed and cannot be accessed anymore. */
4839 if (breakpoint_proceeded
)
4845 if (breakpoint_proceeded
)
4847 if (current_ui
->async
)
4848 /* If we are in async mode, then the target might be still
4849 running, not stopped at any breakpoint, so nothing for
4850 us to do here -- just return to the event loop. */
4853 /* In sync mode, when execute_control_command returns
4854 we're already standing on the next breakpoint.
4855 Breakpoint commands for that stop were not run, since
4856 execute_command does not run breakpoint commands --
4857 only command_line_handler does, but that one is not
4858 involved in execution of breakpoint commands. So, we
4859 can now execute breakpoint commands. It should be
4860 noted that making execute_command do bpstat actions is
4861 not an option -- in this case we'll have recursive
4862 invocation of bpstat for each breakpoint with a
4863 command, and can easily blow up GDB stack. Instead, we
4864 return true, which will trigger the caller to recall us
4865 with the new stop_bpstat. */
4871 /* Now that we have executed the commands of all bs, set the _hit_*
4872 convenience variables to the printed values. */
4873 if (printed_hit_locno
!= -1)
4874 set_hit_convenience_vars (printed_hit_bpnum
, printed_hit_locno
);
4879 /* Helper for bpstat_do_actions. Get the current thread, if there's
4880 one, is alive and has execution. Return NULL otherwise. */
4882 static thread_info
*
4883 get_bpstat_thread ()
4885 if (inferior_ptid
== null_ptid
|| !target_has_execution ())
4888 thread_info
*tp
= inferior_thread ();
4889 if (tp
->state
== THREAD_EXITED
|| tp
->executing ())
4895 bpstat_do_actions (void)
4897 auto cleanup_if_error
= make_scope_exit (bpstat_clear_actions
);
4900 /* Do any commands attached to breakpoint we are stopped at. */
4901 while ((tp
= get_bpstat_thread ()) != NULL
)
4903 /* Since in sync mode, bpstat_do_actions may resume the
4904 inferior, and only return when it is stopped at the next
4905 breakpoint, we keep doing breakpoint actions until it returns
4906 false to indicate the inferior was not resumed. */
4907 if (!bpstat_do_actions_1 (&tp
->control
.stop_bpstat
))
4911 cleanup_if_error
.release ();
4914 /* Print out the (old or new) value associated with a watchpoint. */
4917 watchpoint_value_print (struct value
*val
, struct ui_file
*stream
)
4920 fprintf_styled (stream
, metadata_style
.style (), _("<unreadable>"));
4923 struct value_print_options opts
;
4924 get_user_print_options (&opts
);
4925 value_print (val
, stream
, &opts
);
4929 /* Print the "Thread ID hit" part of "Thread ID hit Breakpoint N" if
4930 debugging multiple threads. */
4933 maybe_print_thread_hit_breakpoint (struct ui_out
*uiout
)
4935 if (uiout
->is_mi_like_p ())
4940 if (show_thread_that_caused_stop ())
4942 struct thread_info
*thr
= inferior_thread ();
4944 uiout
->text ("Thread ");
4945 uiout
->field_string ("thread-id", print_thread_id (thr
));
4947 const char *name
= thread_name (thr
);
4950 uiout
->text (" \"");
4951 uiout
->field_string ("name", name
);
4955 uiout
->text (" hit ");
4959 /* Generic routine for printing messages indicating why we
4960 stopped. The behavior of this function depends on the value
4961 'print_it' in the bpstat structure. Under some circumstances we
4962 may decide not to print anything here and delegate the task to
4965 static enum print_stop_action
4966 print_bp_stop_message (bpstat
*bs
)
4968 switch (bs
->print_it
)
4971 /* Nothing should be printed for this bpstat entry. */
4972 return PRINT_UNKNOWN
;
4975 /* We still want to print the frame, but we already printed the
4976 relevant messages. */
4977 return PRINT_SRC_AND_LOC
;
4979 case print_it_normal
:
4981 struct breakpoint
*b
= bs
->breakpoint_at
;
4983 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
4984 which has since been deleted. */
4986 return PRINT_UNKNOWN
;
4988 /* Normal case. Call the breakpoint's print_it method. */
4989 return b
->print_it (bs
);
4993 internal_error (_("print_bp_stop_message: unrecognized enum value"));
4997 /* See breakpoint.h. */
5000 print_solib_event (bool is_catchpoint
)
5002 bool any_deleted
= !current_program_space
->deleted_solibs
.empty ();
5003 bool any_added
= !current_program_space
->added_solibs
.empty ();
5007 if (any_added
|| any_deleted
)
5008 current_uiout
->text (_("Stopped due to shared library event:\n"));
5010 current_uiout
->text (_("Stopped due to shared library event (no "
5011 "libraries added or removed)\n"));
5014 if (current_uiout
->is_mi_like_p ())
5015 current_uiout
->field_string ("reason",
5016 async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT
));
5020 current_uiout
->text (_(" Inferior unloaded "));
5021 ui_out_emit_list
list_emitter (current_uiout
, "removed");
5022 for (int ix
= 0; ix
< current_program_space
->deleted_solibs
.size (); ix
++)
5024 const std::string
&name
= current_program_space
->deleted_solibs
[ix
];
5027 current_uiout
->text (" ");
5028 current_uiout
->field_string ("library", name
);
5029 current_uiout
->text ("\n");
5035 current_uiout
->text (_(" Inferior loaded "));
5036 ui_out_emit_list
list_emitter (current_uiout
, "added");
5038 for (solib
*iter
: current_program_space
->added_solibs
)
5041 current_uiout
->text (" ");
5043 current_uiout
->field_string ("library", iter
->so_name
);
5044 current_uiout
->text ("\n");
5049 /* Print a message indicating what happened. This is called from
5050 normal_stop(). The input to this routine is the head of the bpstat
5051 list - a list of the eventpoints that caused this stop. KIND is
5052 the target_waitkind for the stopping event. This
5053 routine calls the generic print routine for printing a message
5054 about reasons for stopping. This will print (for example) the
5055 "Breakpoint n," part of the output. The return value of this
5058 PRINT_UNKNOWN: Means we printed nothing.
5059 PRINT_SRC_AND_LOC: Means we printed something, and expect subsequent
5060 code to print the location. An example is
5061 "Breakpoint 1, " which should be followed by
5063 PRINT_SRC_ONLY: Means we printed something, but there is no need
5064 to also print the location part of the message.
5065 An example is the catch/throw messages, which
5066 don't require a location appended to the end.
5067 PRINT_NOTHING: We have done some printing and we don't need any
5068 further info to be printed. */
5070 enum print_stop_action
5071 bpstat_print (bpstat
*bs
, target_waitkind kind
)
5073 enum print_stop_action val
;
5075 /* Maybe another breakpoint in the chain caused us to stop.
5076 (Currently all watchpoints go on the bpstat whether hit or not.
5077 That probably could (should) be changed, provided care is taken
5078 with respect to bpstat_explains_signal). */
5079 for (; bs
; bs
= bs
->next
)
5081 val
= print_bp_stop_message (bs
);
5082 if (val
== PRINT_SRC_ONLY
5083 || val
== PRINT_SRC_AND_LOC
5084 || val
== PRINT_NOTHING
)
5088 /* If we had hit a shared library event breakpoint,
5089 print_bp_stop_message would print out this message. If we hit an
5090 OS-level shared library event, do the same thing. */
5091 if (kind
== TARGET_WAITKIND_LOADED
)
5093 print_solib_event (false);
5094 return PRINT_NOTHING
;
5097 /* We reached the end of the chain, or we got a null BS to start
5098 with and nothing was printed. */
5099 return PRINT_UNKNOWN
;
5102 /* Evaluate the boolean expression EXP and return the result. */
5105 breakpoint_cond_eval (expression
*exp
)
5107 scoped_value_mark mark
;
5108 return value_true (exp
->evaluate ());
5111 /* Allocate a new bpstat. Link it to the FIFO list by BS_LINK_POINTER. */
5113 bpstat::bpstat (struct bp_location
*bl
, bpstat
***bs_link_pointer
)
5115 bp_location_at (bp_location_ref_ptr::new_reference (bl
)),
5116 breakpoint_at (bl
->owner
),
5120 print_it (print_it_normal
)
5122 **bs_link_pointer
= this;
5123 *bs_link_pointer
= &next
;
5128 breakpoint_at (NULL
),
5132 print_it (print_it_normal
)
5136 /* The target has stopped with waitstatus WS. Check if any hardware
5137 watchpoints have triggered, according to the target. */
5140 watchpoints_triggered (const target_waitstatus
&ws
)
5142 bool stopped_by_watchpoint
= target_stopped_by_watchpoint ();
5145 if (!stopped_by_watchpoint
)
5147 /* We were not stopped by a watchpoint. Mark all watchpoints
5148 as not triggered. */
5149 for (breakpoint
&b
: all_breakpoints ())
5150 if (is_hardware_watchpoint (&b
))
5152 watchpoint
&w
= gdb::checked_static_cast
<watchpoint
&> (b
);
5154 w
.watchpoint_triggered
= watch_triggered_no
;
5160 if (!target_stopped_data_address (current_inferior ()->top_target (), &addr
))
5162 /* We were stopped by a watchpoint, but we don't know where.
5163 Mark all watchpoints as unknown. */
5164 for (breakpoint
&b
: all_breakpoints ())
5165 if (is_hardware_watchpoint (&b
))
5167 watchpoint
&w
= gdb::checked_static_cast
<watchpoint
&> (b
);
5169 w
.watchpoint_triggered
= watch_triggered_unknown
;
5175 /* The target could report the data address. Mark watchpoints
5176 affected by this data address as triggered, and all others as not
5179 for (breakpoint
&b
: all_breakpoints ())
5180 if (is_hardware_watchpoint (&b
))
5182 watchpoint
&w
= gdb::checked_static_cast
<watchpoint
&> (b
);
5184 w
.watchpoint_triggered
= watch_triggered_no
;
5185 for (bp_location
&loc
: b
.locations ())
5187 if (is_masked_watchpoint (&b
))
5189 CORE_ADDR newaddr
= addr
& w
.hw_wp_mask
;
5190 CORE_ADDR start
= loc
.address
& w
.hw_wp_mask
;
5192 if (newaddr
== start
)
5194 w
.watchpoint_triggered
= watch_triggered_yes
;
5198 /* Exact match not required. Within range is sufficient. */
5199 else if (target_watchpoint_addr_within_range
5200 (current_inferior ()->top_target (), addr
, loc
.address
,
5203 w
.watchpoint_triggered
= watch_triggered_yes
;
5212 /* Possible return values for watchpoint_check. */
5213 enum wp_check_result
5215 /* The watchpoint has been deleted. */
5218 /* The value has changed. */
5219 WP_VALUE_CHANGED
= 2,
5221 /* The value has not changed. */
5222 WP_VALUE_NOT_CHANGED
= 3,
5224 /* Ignore this watchpoint, no matter if the value changed or not. */
5228 #define BP_TEMPFLAG 1
5229 #define BP_HARDWAREFLAG 2
5231 /* Evaluate watchpoint condition expression and check if its value
5234 static wp_check_result
5235 watchpoint_check (bpstat
*bs
)
5238 bool within_current_scope
;
5240 /* BS is built from an existing struct breakpoint. */
5241 gdb_assert (bs
->breakpoint_at
!= NULL
);
5242 watchpoint
*b
= gdb::checked_static_cast
<watchpoint
*> (bs
->breakpoint_at
);
5244 /* If this is a local watchpoint, we only want to check if the
5245 watchpoint frame is in scope if the current thread is the thread
5246 that was used to create the watchpoint. */
5247 if (!watchpoint_in_thread_scope (b
))
5250 if (b
->exp_valid_block
== NULL
)
5251 within_current_scope
= true;
5254 frame_info_ptr frame
= get_current_frame ();
5255 struct gdbarch
*frame_arch
= get_frame_arch (frame
);
5256 CORE_ADDR frame_pc
= get_frame_pc (frame
);
5258 /* stack_frame_destroyed_p() returns a non-zero value if we're
5259 still in the function but the stack frame has already been
5260 invalidated. Since we can't rely on the values of local
5261 variables after the stack has been destroyed, we are treating
5262 the watchpoint in that state as `not changed' without further
5263 checking. Don't mark watchpoints as changed if the current
5264 frame is in an epilogue - even if they are in some other
5265 frame, our view of the stack is likely to be wrong and
5266 frame_find_by_id could error out. */
5267 if (gdbarch_stack_frame_destroyed_p (frame_arch
, frame_pc
))
5270 fr
= frame_find_by_id (b
->watchpoint_frame
);
5271 within_current_scope
= (fr
!= NULL
);
5273 /* If we've gotten confused in the unwinder, we might have
5274 returned a frame that can't describe this variable. */
5275 if (within_current_scope
)
5277 struct symbol
*function
;
5279 function
= get_frame_function (fr
);
5280 if (function
== NULL
5281 || !function
->value_block ()->contains (b
->exp_valid_block
))
5282 within_current_scope
= false;
5285 if (within_current_scope
)
5286 /* If we end up stopping, the current frame will get selected
5287 in normal_stop. So this call to select_frame won't affect
5292 if (within_current_scope
)
5294 /* We use value_{,free_to_}mark because it could be a *long*
5295 time before we return to the command level and call
5296 free_all_values. We can't call free_all_values because we
5297 might be in the middle of evaluating a function call. */
5300 struct value
*new_val
;
5302 if (is_masked_watchpoint (b
))
5303 /* Since we don't know the exact trigger address (from
5304 stopped_data_address), just tell the user we've triggered
5305 a mask watchpoint. */
5306 return WP_VALUE_CHANGED
;
5308 mark
= value_mark ();
5309 fetch_subexp_value (b
->exp
.get (), b
->exp
->op
.get (), &new_val
,
5312 if (b
->val_bitsize
!= 0)
5313 new_val
= extract_bitfield_from_watchpoint_value (b
, new_val
);
5315 /* We use value_equal_contents instead of value_equal because
5316 the latter coerces an array to a pointer, thus comparing just
5317 the address of the array instead of its contents. This is
5318 not what we want. */
5319 if ((b
->val
!= NULL
) != (new_val
!= NULL
)
5320 || (b
->val
!= NULL
&& !value_equal_contents (b
->val
.get (),
5323 bs
->old_val
= b
->val
;
5324 b
->val
= release_value (new_val
);
5325 b
->val_valid
= true;
5326 if (new_val
!= NULL
)
5327 value_free_to_mark (mark
);
5328 return WP_VALUE_CHANGED
;
5332 /* Nothing changed. */
5333 value_free_to_mark (mark
);
5334 return WP_VALUE_NOT_CHANGED
;
5339 /* This seems like the only logical thing to do because
5340 if we temporarily ignored the watchpoint, then when
5341 we reenter the block in which it is valid it contains
5342 garbage (in the case of a function, it may have two
5343 garbage values, one before and one after the prologue).
5344 So we can't even detect the first assignment to it and
5345 watch after that (since the garbage may or may not equal
5346 the first value assigned). */
5347 /* We print all the stop information in
5348 breakpointprint_it, but in this case, by the time we
5349 call breakpoint->print_it this bp will be deleted
5350 already. So we have no choice but print the information
5353 SWITCH_THRU_ALL_UIS ()
5355 struct ui_out
*uiout
= current_uiout
;
5357 if (uiout
->is_mi_like_p ())
5359 ("reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_SCOPE
));
5360 uiout
->message ("\nWatchpoint %pF deleted because the program has "
5361 "left the block in\n"
5362 "which its expression is valid.\n",
5363 signed_field ("wpnum", b
->number
));
5366 /* Make sure the watchpoint's commands aren't executed. */
5368 watchpoint_del_at_next_stop (b
);
5374 /* Return true if it looks like target has stopped due to hitting
5375 breakpoint location BL. This function does not check if we should
5376 stop, only if BL explains the stop. */
5379 bpstat_check_location (const struct bp_location
*bl
,
5380 const address_space
*aspace
, CORE_ADDR bp_addr
,
5381 const target_waitstatus
&ws
)
5383 struct breakpoint
*b
= bl
->owner
;
5385 /* BL is from an existing breakpoint. */
5386 gdb_assert (b
!= NULL
);
5388 return b
->breakpoint_hit (bl
, aspace
, bp_addr
, ws
);
5391 /* Determine if the watched values have actually changed, and we
5392 should stop. If not, set BS->stop to false. */
5395 bpstat_check_watchpoint (bpstat
*bs
)
5397 const struct bp_location
*bl
;
5399 /* BS is built for existing struct breakpoint. */
5400 bl
= bs
->bp_location_at
.get ();
5401 gdb_assert (bl
!= NULL
);
5402 watchpoint
*b
= gdb::checked_static_cast
<watchpoint
*> (bs
->breakpoint_at
);
5404 bool must_check_value
= false;
5406 if (b
->type
== bp_watchpoint
)
5407 /* For a software watchpoint, we must always check the
5409 must_check_value
= true;
5410 else if (b
->watchpoint_triggered
== watch_triggered_yes
)
5411 /* We have a hardware watchpoint (read, write, or access)
5412 and the target earlier reported an address watched by
5414 must_check_value
= true;
5415 else if (b
->watchpoint_triggered
== watch_triggered_unknown
5416 && b
->type
== bp_hardware_watchpoint
)
5417 /* We were stopped by a hardware watchpoint, but the target could
5418 not report the data address. We must check the watchpoint's
5419 value. Access and read watchpoints are out of luck; without
5420 a data address, we can't figure it out. */
5421 must_check_value
= true;
5423 if (must_check_value
)
5429 e
= watchpoint_check (bs
);
5431 catch (const gdb_exception_error
&ex
)
5433 exception_fprintf (gdb_stderr
, ex
,
5434 "Error evaluating expression "
5435 "for watchpoint %d\n",
5438 SWITCH_THRU_ALL_UIS ()
5440 gdb_printf (_("Watchpoint %d deleted.\n"),
5443 watchpoint_del_at_next_stop (b
);
5450 /* We've already printed what needs to be printed. */
5451 bs
->print_it
= print_it_done
;
5455 bs
->print_it
= print_it_noop
;
5458 case WP_VALUE_CHANGED
:
5459 if (b
->type
== bp_read_watchpoint
)
5461 /* There are two cases to consider here:
5463 1. We're watching the triggered memory for reads.
5464 In that case, trust the target, and always report
5465 the watchpoint hit to the user. Even though
5466 reads don't cause value changes, the value may
5467 have changed since the last time it was read, and
5468 since we're not trapping writes, we will not see
5469 those, and as such we should ignore our notion of
5472 2. We're watching the triggered memory for both
5473 reads and writes. There are two ways this may
5476 2.1. This is a target that can't break on data
5477 reads only, but can break on accesses (reads or
5478 writes), such as e.g., x86. We detect this case
5479 at the time we try to insert read watchpoints.
5481 2.2. Otherwise, the target supports read
5482 watchpoints, but, the user set an access or write
5483 watchpoint watching the same memory as this read
5486 If we're watching memory writes as well as reads,
5487 ignore watchpoint hits when we find that the
5488 value hasn't changed, as reads don't cause
5489 changes. This still gives false positives when
5490 the program writes the same value to memory as
5491 what there was already in memory (we will confuse
5492 it for a read), but it's much better than
5495 int other_write_watchpoint
= 0;
5497 if (bl
->watchpoint_type
== hw_read
)
5499 for (breakpoint
&other_b
: all_breakpoints ())
5500 if (other_b
.type
== bp_hardware_watchpoint
5501 || other_b
.type
== bp_access_watchpoint
)
5503 watchpoint
&other_w
=
5504 gdb::checked_static_cast
<watchpoint
&> (other_b
);
5506 if (other_w
.watchpoint_triggered
5507 == watch_triggered_yes
)
5509 other_write_watchpoint
= 1;
5515 if (other_write_watchpoint
5516 || bl
->watchpoint_type
== hw_access
)
5518 /* We're watching the same memory for writes,
5519 and the value changed since the last time we
5520 updated it, so this trap must be for a write.
5522 bs
->print_it
= print_it_noop
;
5527 case WP_VALUE_NOT_CHANGED
:
5528 if (b
->type
== bp_hardware_watchpoint
5529 || b
->type
== bp_watchpoint
)
5531 /* Don't stop: write watchpoints shouldn't fire if
5532 the value hasn't changed. */
5533 bs
->print_it
= print_it_noop
;
5543 else /* !must_check_value */
5545 /* This is a case where some watchpoint(s) triggered, but
5546 not at the address of this watchpoint, or else no
5547 watchpoint triggered after all. So don't print
5548 anything for this watchpoint. */
5549 bs
->print_it
= print_it_noop
;
5554 /* For breakpoints that are currently marked as telling gdb to stop,
5555 check conditions (condition proper, frame, thread and ignore count)
5556 of breakpoint referred to by BS. If we should not stop for this
5557 breakpoint, set BS->stop to 0. */
5560 bpstat_check_breakpoint_conditions (bpstat
*bs
, thread_info
*thread
)
5562 INFRUN_SCOPED_DEBUG_ENTER_EXIT
;
5564 const struct bp_location
*bl
;
5565 struct breakpoint
*b
;
5567 bool condition_result
= true;
5568 struct expression
*cond
;
5570 gdb_assert (bs
->stop
);
5572 /* BS is built for existing struct breakpoint. */
5573 bl
= bs
->bp_location_at
.get ();
5574 gdb_assert (bl
!= NULL
);
5575 b
= bs
->breakpoint_at
;
5576 gdb_assert (b
!= NULL
);
5578 infrun_debug_printf ("thread = %s, breakpoint %d.%d",
5579 thread
->ptid
.to_string ().c_str (),
5580 b
->number
, find_loc_num_by_location (bl
));
5582 /* Even if the target evaluated the condition on its end and notified GDB, we
5583 need to do so again since GDB does not know if we stopped due to a
5584 breakpoint or a single step breakpoint. */
5586 if (frame_id_p (b
->frame_id
)
5587 && b
->frame_id
!= get_stack_frame_id (get_current_frame ()))
5589 infrun_debug_printf ("incorrect frame %s not %s, not stopping",
5590 get_stack_frame_id (get_current_frame ()).to_string ().c_str (),
5591 b
->frame_id
.to_string ().c_str ());
5596 /* If this is a thread/task-specific breakpoint, don't waste cpu
5597 evaluating the condition if this isn't the specified
5599 if ((b
->thread
!= -1 && b
->thread
!= thread
->global_num
)
5600 || (b
->inferior
!= -1 && b
->inferior
!= thread
->inf
->num
)
5601 || (b
->task
!= -1 && b
->task
!= ada_get_task_number (thread
)))
5603 infrun_debug_printf ("incorrect thread or task, not stopping");
5608 /* Evaluate extension language breakpoints that have a "stop" method
5610 bs
->stop
= breakpoint_ext_lang_cond_says_stop (b
);
5612 if (is_watchpoint (b
))
5614 watchpoint
*w
= gdb::checked_static_cast
<watchpoint
*> (b
);
5616 cond
= w
->cond_exp
.get ();
5619 cond
= bl
->cond
.get ();
5621 if (cond
!= nullptr && b
->disposition
!= disp_del_at_next_stop
)
5623 bool within_current_scope
= true;
5625 /* We use scoped_value_mark because it could be a long time
5626 before we return to the command level and call
5627 free_all_values. We can't call free_all_values because we
5628 might be in the middle of evaluating a function call. */
5629 scoped_value_mark mark
;
5631 watchpoint
*w
= nullptr;
5632 if (is_watchpoint (b
))
5633 w
= gdb::checked_static_cast
<watchpoint
*> (b
);
5635 /* Need to select the frame, with all that implies so that
5636 the conditions will have the right context. Because we
5637 use the frame, we will not see an inlined function's
5638 variables when we arrive at a breakpoint at the start
5639 of the inlined function; the current frame will be the
5641 if (w
== NULL
|| w
->cond_exp_valid_block
== NULL
)
5642 select_frame (get_current_frame ());
5645 frame_info_ptr frame
;
5647 /* For local watchpoint expressions, which particular
5648 instance of a local is being watched matters, so we
5649 keep track of the frame to evaluate the expression
5650 in. To evaluate the condition however, it doesn't
5651 really matter which instantiation of the function
5652 where the condition makes sense triggers the
5653 watchpoint. This allows an expression like "watch
5654 global if q > 10" set in `func', catch writes to
5655 global on all threads that call `func', or catch
5656 writes on all recursive calls of `func' by a single
5657 thread. We simply always evaluate the condition in
5658 the innermost frame that's executing where it makes
5659 sense to evaluate the condition. It seems
5661 frame
= block_innermost_frame (w
->cond_exp_valid_block
);
5663 select_frame (frame
);
5665 within_current_scope
= false;
5667 if (within_current_scope
)
5671 scoped_restore reset_in_cond_eval
5672 = make_scoped_restore (&thread
->control
.in_cond_eval
, true);
5673 condition_result
= breakpoint_cond_eval (cond
);
5675 catch (const gdb_exception_error
&ex
)
5677 int locno
= bpstat_locno (bs
);
5681 "Error in testing condition for breakpoint %d.%d:\n",
5686 "Error in testing condition for breakpoint %d:\n",
5692 warning (_("Watchpoint condition cannot be tested "
5693 "in the current scope"));
5694 /* If we failed to set the right context for this
5695 watchpoint, unconditionally report it. */
5697 /* FIXME-someday, should give breakpoint #. */
5700 if (cond
!= nullptr && !condition_result
)
5702 infrun_debug_printf ("condition_result = false, not stopping");
5706 else if (b
->ignore_count
> 0)
5708 infrun_debug_printf ("ignore count %d, not stopping",
5712 /* Increase the hit count even though we don't stop. */
5714 notify_breakpoint_modified (b
);
5719 infrun_debug_printf ("stopping at this breakpoint");
5721 infrun_debug_printf ("not stopping at this breakpoint");
5724 /* Returns true if we need to track moribund locations of LOC's type
5725 on the current target. */
5728 need_moribund_for_location_type (const struct bp_location
*loc
)
5730 return ((loc
->loc_type
== bp_loc_software_breakpoint
5731 && !target_supports_stopped_by_sw_breakpoint ())
5732 || (loc
->loc_type
== bp_loc_hardware_breakpoint
5733 && !target_supports_stopped_by_hw_breakpoint ()));
5736 /* See breakpoint.h. */
5739 build_bpstat_chain (const address_space
*aspace
, CORE_ADDR bp_addr
,
5740 const target_waitstatus
&ws
)
5742 bpstat
*bs_head
= nullptr, **bs_link
= &bs_head
;
5744 for (breakpoint
&b
: all_breakpoints ())
5746 if (!breakpoint_enabled (&b
))
5749 for (bp_location
&bl
: b
.locations ())
5751 /* For hardware watchpoints, we look only at the first
5752 location. The watchpoint_check function will work on the
5753 entire expression, not the individual locations. For
5754 read watchpoints, the watchpoints_triggered function has
5755 checked all locations already. */
5756 if (b
.type
== bp_hardware_watchpoint
&& &bl
!= &b
.first_loc ())
5759 if (!bl
.enabled
|| bl
.disabled_by_cond
|| bl
.shlib_disabled
)
5762 if (!bpstat_check_location (&bl
, aspace
, bp_addr
, ws
))
5765 /* Come here if it's a watchpoint, or if the break address
5768 bpstat
*bs
= new bpstat (&bl
, &bs_link
); /* Alloc a bpstat to
5771 /* Assume we stop. Should we find a watchpoint that is not
5772 actually triggered, or if the condition of the breakpoint
5773 evaluates as false, we'll reset 'stop' to 0. */
5777 /* If this is a scope breakpoint, mark the associated
5778 watchpoint as triggered so that we will handle the
5779 out-of-scope event. We'll get to the watchpoint next
5781 if (b
.type
== bp_watchpoint_scope
&& b
.related_breakpoint
!= &b
)
5784 = gdb::checked_static_cast
<watchpoint
*> (b
.related_breakpoint
);
5786 w
->watchpoint_triggered
= watch_triggered_yes
;
5791 /* Check if a moribund breakpoint explains the stop. */
5792 if (!target_supports_stopped_by_sw_breakpoint ()
5793 || !target_supports_stopped_by_hw_breakpoint ())
5795 for (bp_location
*loc
: moribund_locations
)
5797 if (breakpoint_location_address_match (loc
, aspace
, bp_addr
)
5798 && need_moribund_for_location_type (loc
))
5800 bpstat
*bs
= new bpstat (loc
, &bs_link
);
5801 /* For hits of moribund locations, we should just proceed. */
5804 bs
->print_it
= print_it_noop
;
5812 /* See breakpoint.h. */
5815 bpstat_stop_status (const address_space
*aspace
,
5816 CORE_ADDR bp_addr
, thread_info
*thread
,
5817 const target_waitstatus
&ws
,
5820 struct breakpoint
*b
= NULL
;
5821 /* First item of allocated bpstat's. */
5822 bpstat
*bs_head
= stop_chain
;
5824 int need_remove_insert
;
5827 /* First, build the bpstat chain with locations that explain a
5828 target stop, while being careful to not set the target running,
5829 as that may invalidate locations (in particular watchpoint
5830 locations are recreated). Resuming will happen here with
5831 breakpoint conditions or watchpoint expressions that include
5832 inferior function calls. */
5833 if (bs_head
== NULL
)
5834 bs_head
= build_bpstat_chain (aspace
, bp_addr
, ws
);
5836 /* A bit of special processing for shlib breakpoints. We need to
5837 process solib loading here, so that the lists of loaded and
5838 unloaded libraries are correct before we handle "catch load" and
5840 for (bs
= bs_head
; bs
!= NULL
; bs
= bs
->next
)
5842 if (bs
->breakpoint_at
&& bs
->breakpoint_at
->type
== bp_shlib_event
)
5844 handle_solib_event ();
5849 /* Now go through the locations that caused the target to stop, and
5850 check whether we're interested in reporting this stop to higher
5851 layers, or whether we should resume the target transparently. */
5855 for (bs
= bs_head
; bs
!= NULL
; bs
= bs
->next
)
5860 b
= bs
->breakpoint_at
;
5861 b
->check_status (bs
);
5864 bpstat_check_breakpoint_conditions (bs
, thread
);
5870 /* We will stop here. */
5871 if (b
->disposition
== disp_disable
)
5873 --(b
->enable_count
);
5874 if (b
->enable_count
<= 0)
5875 b
->enable_state
= bp_disabled
;
5878 notify_breakpoint_modified (b
);
5881 bs
->commands
= b
->commands
;
5882 if (command_line_is_silent (bs
->commands
5883 ? bs
->commands
.get () : NULL
))
5886 b
->after_condition_true (bs
);
5891 /* Print nothing for this entry if we don't stop or don't
5893 if (!bs
->stop
|| !bs
->print
)
5894 bs
->print_it
= print_it_noop
;
5897 /* If we aren't stopping, the value of some hardware watchpoint may
5898 not have changed, but the intermediate memory locations we are
5899 watching may have. Don't bother if we're stopping; this will get
5901 need_remove_insert
= 0;
5902 if (! bpstat_causes_stop (bs_head
))
5903 for (bs
= bs_head
; bs
!= NULL
; bs
= bs
->next
)
5905 && bs
->breakpoint_at
5906 && is_hardware_watchpoint (bs
->breakpoint_at
))
5909 = gdb::checked_static_cast
<watchpoint
*> (bs
->breakpoint_at
);
5911 update_watchpoint (w
, false /* don't reparse. */);
5912 need_remove_insert
= 1;
5915 if (need_remove_insert
)
5916 update_global_location_list (UGLL_MAY_INSERT
);
5917 else if (removed_any
)
5918 update_global_location_list (UGLL_DONT_INSERT
);
5923 /* See breakpoint.h. */
5926 bpstat_stop_status_nowatch (const address_space
*aspace
, CORE_ADDR bp_addr
,
5927 thread_info
*thread
, const target_waitstatus
&ws
)
5929 gdb_assert (!target_stopped_by_watchpoint ());
5931 /* Clear all watchpoints' 'watchpoint_triggered' value from a
5932 previous stop to avoid confusing bpstat_stop_status. */
5933 watchpoints_triggered (ws
);
5935 return bpstat_stop_status (aspace
, bp_addr
, thread
, ws
);
5939 handle_jit_event (CORE_ADDR address
)
5941 struct gdbarch
*gdbarch
;
5943 infrun_debug_printf ("handling bp_jit_event");
5945 /* Switch terminal for any messages produced by
5946 breakpoint_re_set. */
5947 target_terminal::ours_for_output ();
5949 gdbarch
= get_frame_arch (get_current_frame ());
5950 /* This event is caused by a breakpoint set in `jit_breakpoint_re_set`,
5951 thus it is expected that its objectfile can be found through
5952 minimal symbol lookup. If it doesn't work (and assert fails), it
5953 most likely means that `jit_breakpoint_re_set` was changes and this
5954 function needs to be updated too. */
5955 bound_minimal_symbol jit_bp_sym
= lookup_minimal_symbol_by_pc (address
);
5956 gdb_assert (jit_bp_sym
.objfile
!= nullptr);
5957 objfile
*objfile
= jit_bp_sym
.objfile
;
5958 if (objfile
->separate_debug_objfile_backlink
)
5959 objfile
= objfile
->separate_debug_objfile_backlink
;
5960 jit_event_handler (gdbarch
, objfile
);
5962 target_terminal::inferior ();
5965 /* Prepare WHAT final decision for infrun. */
5967 /* Decide what infrun needs to do with this bpstat. */
5970 bpstat_what (bpstat
*bs_head
)
5972 struct bpstat_what retval
;
5975 retval
.main_action
= BPSTAT_WHAT_KEEP_CHECKING
;
5976 retval
.call_dummy
= STOP_NONE
;
5977 retval
.is_longjmp
= false;
5979 for (bs
= bs_head
; bs
!= NULL
; bs
= bs
->next
)
5981 /* Extract this BS's action. After processing each BS, we check
5982 if its action overrides all we've seem so far. */
5983 enum bpstat_what_main_action this_action
= BPSTAT_WHAT_KEEP_CHECKING
;
5986 if (bs
->breakpoint_at
== NULL
)
5988 /* I suspect this can happen if it was a momentary
5989 breakpoint which has since been deleted. */
5993 bptype
= bs
->breakpoint_at
->type
;
6000 case bp_hardware_breakpoint
:
6001 case bp_single_step
:
6004 case bp_shlib_event
:
6008 this_action
= BPSTAT_WHAT_STOP_NOISY
;
6010 this_action
= BPSTAT_WHAT_STOP_SILENT
;
6013 this_action
= BPSTAT_WHAT_SINGLE
;
6016 case bp_hardware_watchpoint
:
6017 case bp_read_watchpoint
:
6018 case bp_access_watchpoint
:
6022 this_action
= BPSTAT_WHAT_STOP_NOISY
;
6024 this_action
= BPSTAT_WHAT_STOP_SILENT
;
6028 /* There was a watchpoint, but we're not stopping.
6029 This requires no further action. */
6033 case bp_longjmp_call_dummy
:
6037 this_action
= BPSTAT_WHAT_SET_LONGJMP_RESUME
;
6038 retval
.is_longjmp
= bptype
!= bp_exception
;
6041 this_action
= BPSTAT_WHAT_SINGLE
;
6043 case bp_longjmp_resume
:
6044 case bp_exception_resume
:
6047 this_action
= BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
;
6048 retval
.is_longjmp
= bptype
== bp_longjmp_resume
;
6051 this_action
= BPSTAT_WHAT_SINGLE
;
6053 case bp_step_resume
:
6055 this_action
= BPSTAT_WHAT_STEP_RESUME
;
6058 /* It is for the wrong frame. */
6059 this_action
= BPSTAT_WHAT_SINGLE
;
6062 case bp_hp_step_resume
:
6064 this_action
= BPSTAT_WHAT_HP_STEP_RESUME
;
6067 /* It is for the wrong frame. */
6068 this_action
= BPSTAT_WHAT_SINGLE
;
6071 case bp_watchpoint_scope
:
6072 case bp_thread_event
:
6073 case bp_overlay_event
:
6074 case bp_longjmp_master
:
6075 case bp_std_terminate_master
:
6076 case bp_exception_master
:
6077 this_action
= BPSTAT_WHAT_SINGLE
;
6083 this_action
= BPSTAT_WHAT_STOP_NOISY
;
6085 this_action
= BPSTAT_WHAT_STOP_SILENT
;
6089 /* Some catchpoints are implemented with breakpoints.
6090 For those, we need to step over the breakpoint. */
6091 if (bs
->bp_location_at
->loc_type
== bp_loc_software_breakpoint
6092 || bs
->bp_location_at
->loc_type
== bp_loc_hardware_breakpoint
)
6093 this_action
= BPSTAT_WHAT_SINGLE
;
6097 this_action
= BPSTAT_WHAT_SINGLE
;
6100 /* Make sure the action is stop (silent or noisy),
6101 so infrun.c pops the dummy frame. */
6102 retval
.call_dummy
= STOP_STACK_DUMMY
;
6103 this_action
= BPSTAT_WHAT_STOP_SILENT
;
6105 case bp_std_terminate
:
6106 /* Make sure the action is stop (silent or noisy),
6107 so infrun.c pops the dummy frame. */
6108 retval
.call_dummy
= STOP_STD_TERMINATE
;
6109 this_action
= BPSTAT_WHAT_STOP_SILENT
;
6112 case bp_fast_tracepoint
:
6113 case bp_static_tracepoint
:
6114 case bp_static_marker_tracepoint
:
6115 /* Tracepoint hits should not be reported back to GDB, and
6116 if one got through somehow, it should have been filtered
6118 internal_error (_("bpstat_what: tracepoint encountered"));
6120 case bp_gnu_ifunc_resolver
:
6121 /* Step over it (and insert bp_gnu_ifunc_resolver_return). */
6122 this_action
= BPSTAT_WHAT_SINGLE
;
6124 case bp_gnu_ifunc_resolver_return
:
6125 /* The breakpoint will be removed, execution will restart from the
6126 PC of the former breakpoint. */
6127 this_action
= BPSTAT_WHAT_KEEP_CHECKING
;
6132 this_action
= BPSTAT_WHAT_STOP_SILENT
;
6134 this_action
= BPSTAT_WHAT_SINGLE
;
6138 internal_error (_("bpstat_what: unhandled bptype %d"), (int) bptype
);
6141 retval
.main_action
= std::max (retval
.main_action
, this_action
);
6148 bpstat_run_callbacks (bpstat
*bs_head
)
6152 for (bs
= bs_head
; bs
!= NULL
; bs
= bs
->next
)
6154 struct breakpoint
*b
= bs
->breakpoint_at
;
6161 handle_jit_event (bs
->bp_location_at
->address
);
6163 case bp_gnu_ifunc_resolver
:
6164 gnu_ifunc_resolver_stop
6165 (gdb::checked_static_cast
<code_breakpoint
*> (b
));
6167 case bp_gnu_ifunc_resolver_return
:
6168 gnu_ifunc_resolver_return_stop
6169 (gdb::checked_static_cast
<code_breakpoint
*> (b
));
6175 /* See breakpoint.h. */
6178 bpstat_should_step ()
6180 for (breakpoint
&b
: all_breakpoints ())
6181 if (breakpoint_enabled (&b
)
6182 && b
.type
== bp_watchpoint
6183 && b
.has_locations ())
6189 /* See breakpoint.h. */
6192 bpstat_causes_stop (bpstat
*bs
)
6194 for (; bs
!= NULL
; bs
= bs
->next
)
6203 /* Compute a number of spaces suitable to indent the next line
6204 so it starts at the position corresponding to the table column
6205 named COL_NAME in the currently active table of UIOUT. */
6208 wrap_indent_at_field (struct ui_out
*uiout
, const char *col_name
)
6210 int i
, total_width
, width
, align
;
6214 for (i
= 1; uiout
->query_table_field (i
, &width
, &align
, &text
); i
++)
6216 if (strcmp (text
, col_name
) == 0)
6219 total_width
+= width
+ 1;
6225 /* Determine if the locations of this breakpoint will have their conditions
6226 evaluated by the target, host or a mix of both. Returns the following:
6228 "host": Host evals condition.
6229 "host or target": Host or Target evals condition.
6230 "target": Target evals condition.
6234 bp_condition_evaluator (const breakpoint
*b
)
6236 char host_evals
= 0;
6237 char target_evals
= 0;
6242 if (!is_breakpoint (b
))
6245 if (gdb_evaluates_breakpoint_condition_p ()
6246 || !target_supports_evaluation_of_breakpoint_conditions ())
6247 return condition_evaluation_host
;
6249 for (bp_location
&bl
: b
->locations ())
6251 if (bl
.cond_bytecode
)
6257 if (host_evals
&& target_evals
)
6258 return condition_evaluation_both
;
6259 else if (target_evals
)
6260 return condition_evaluation_target
;
6262 return condition_evaluation_host
;
6265 /* Determine the breakpoint location's condition evaluator. This is
6266 similar to bp_condition_evaluator, but for locations. */
6269 bp_location_condition_evaluator (const struct bp_location
*bl
)
6271 if (bl
&& !is_breakpoint (bl
->owner
))
6274 if (gdb_evaluates_breakpoint_condition_p ()
6275 || !target_supports_evaluation_of_breakpoint_conditions ())
6276 return condition_evaluation_host
;
6278 if (bl
&& bl
->cond_bytecode
)
6279 return condition_evaluation_target
;
6281 return condition_evaluation_host
;
6284 /* Print the LOC location out of the list of B->LOC locations. */
6287 print_breakpoint_location (const breakpoint
*b
, const bp_location
*loc
)
6289 struct ui_out
*uiout
= current_uiout
;
6291 scoped_restore_current_program_space restore_pspace
;
6293 if (loc
!= NULL
&& loc
->shlib_disabled
)
6297 set_current_program_space (loc
->pspace
);
6299 if (b
->display_canonical
)
6300 uiout
->field_string ("what", b
->locspec
->to_string ());
6301 else if (loc
&& loc
->symtab
)
6303 const struct symbol
*sym
= loc
->symbol
;
6307 uiout
->text ("in ");
6308 uiout
->field_string ("func", sym
->print_name (),
6309 function_name_style
.style ());
6311 uiout
->wrap_hint (wrap_indent_at_field (uiout
, "what"));
6312 uiout
->text ("at ");
6314 uiout
->field_string ("file",
6315 symtab_to_filename_for_display (loc
->symtab
),
6316 file_name_style
.style ());
6319 if (uiout
->is_mi_like_p ())
6320 uiout
->field_string ("fullname", symtab_to_fullname (loc
->symtab
));
6322 uiout
->field_signed ("line", loc
->line_number
);
6328 print_address_symbolic (loc
->gdbarch
, loc
->address
, &stb
,
6330 uiout
->field_stream ("at", stb
);
6334 uiout
->field_string ("pending", b
->locspec
->to_string ());
6335 /* If extra_string is available, it could be holding a condition
6336 or dprintf arguments. In either case, make sure it is printed,
6337 too, but only for non-MI streams. */
6338 if (!uiout
->is_mi_like_p () && b
->extra_string
!= NULL
)
6340 if (b
->type
== bp_dprintf
)
6344 uiout
->text (b
->extra_string
.get ());
6348 if (loc
&& is_breakpoint (b
)
6349 && breakpoint_condition_evaluation_mode () == condition_evaluation_target
6350 && bp_condition_evaluator (b
) == condition_evaluation_both
)
6353 uiout
->field_string ("evaluated-by",
6354 bp_location_condition_evaluator (loc
));
6360 bptype_string (enum bptype type
)
6362 struct ep_type_description
6365 const char *description
;
6367 static struct ep_type_description bptypes
[] =
6369 {bp_none
, "?deleted?"},
6370 {bp_breakpoint
, "breakpoint"},
6371 {bp_hardware_breakpoint
, "hw breakpoint"},
6372 {bp_single_step
, "sw single-step"},
6373 {bp_until
, "until"},
6374 {bp_finish
, "finish"},
6375 {bp_watchpoint
, "watchpoint"},
6376 {bp_hardware_watchpoint
, "hw watchpoint"},
6377 {bp_read_watchpoint
, "read watchpoint"},
6378 {bp_access_watchpoint
, "acc watchpoint"},
6379 {bp_longjmp
, "longjmp"},
6380 {bp_longjmp_resume
, "longjmp resume"},
6381 {bp_longjmp_call_dummy
, "longjmp for call dummy"},
6382 {bp_exception
, "exception"},
6383 {bp_exception_resume
, "exception resume"},
6384 {bp_step_resume
, "step resume"},
6385 {bp_hp_step_resume
, "high-priority step resume"},
6386 {bp_watchpoint_scope
, "watchpoint scope"},
6387 {bp_call_dummy
, "call dummy"},
6388 {bp_std_terminate
, "std::terminate"},
6389 {bp_shlib_event
, "shlib events"},
6390 {bp_thread_event
, "thread events"},
6391 {bp_overlay_event
, "overlay events"},
6392 {bp_longjmp_master
, "longjmp master"},
6393 {bp_std_terminate_master
, "std::terminate master"},
6394 {bp_exception_master
, "exception master"},
6395 {bp_catchpoint
, "catchpoint"},
6396 {bp_tracepoint
, "tracepoint"},
6397 {bp_fast_tracepoint
, "fast tracepoint"},
6398 {bp_static_tracepoint
, "static tracepoint"},
6399 {bp_static_marker_tracepoint
, "static marker tracepoint"},
6400 {bp_dprintf
, "dprintf"},
6401 {bp_jit_event
, "jit events"},
6402 {bp_gnu_ifunc_resolver
, "STT_GNU_IFUNC resolver"},
6403 {bp_gnu_ifunc_resolver_return
, "STT_GNU_IFUNC resolver return"},
6406 if (((int) type
>= (sizeof (bptypes
) / sizeof (bptypes
[0])))
6407 || ((int) type
!= bptypes
[(int) type
].type
))
6408 internal_error (_("bptypes table does not describe type #%d."),
6411 return bptypes
[(int) type
].description
;
6414 /* For MI, output a field named 'thread-groups' with a list as the value.
6415 For CLI, prefix the list with the string 'inf'. */
6418 output_thread_groups (struct ui_out
*uiout
,
6419 const char *field_name
,
6420 const std::vector
<int> &inf_nums
,
6423 int is_mi
= uiout
->is_mi_like_p ();
6425 /* For backward compatibility, don't display inferiors in CLI unless
6426 there are several. Always display them for MI. */
6427 if (!is_mi
&& mi_only
)
6430 ui_out_emit_list
list_emitter (uiout
, field_name
);
6432 for (size_t i
= 0; i
< inf_nums
.size (); i
++)
6438 xsnprintf (mi_group
, sizeof (mi_group
), "i%d", inf_nums
[i
]);
6439 uiout
->field_string (NULL
, mi_group
);
6444 uiout
->text (" inf ");
6448 uiout
->text (plongest (inf_nums
[i
]));
6453 /* See breakpoint.h. */
6455 bool fix_breakpoint_script_output_globally
= false;
6457 /* Print B to gdb_stdout. If RAW_LOC, print raw breakpoint locations
6458 instead of going via breakpoint_ops::print_one. This makes "maint
6459 info breakpoints" show the software breakpoint locations of
6460 catchpoints, which are considered internal implementation
6461 detail. Returns true if RAW_LOC is false and if the breakpoint's
6462 print_one method did something; false otherwise. */
6465 print_one_breakpoint_location (struct breakpoint
*b
,
6466 struct bp_location
*loc
,
6468 const bp_location
**last_loc
,
6469 int allflag
, bool raw_loc
)
6471 struct command_line
*l
;
6472 static char bpenables
[] = "nynny";
6474 struct ui_out
*uiout
= current_uiout
;
6475 bool header_of_multiple
= false;
6476 bool part_of_multiple
= (loc
!= NULL
);
6477 struct value_print_options opts
;
6479 get_user_print_options (&opts
);
6481 gdb_assert (!loc
|| loc_number
!= 0);
6482 /* See comment in print_one_breakpoint concerning treatment of
6483 breakpoints with single disabled location. */
6485 && (b
->has_locations ()
6486 && (b
->has_multiple_locations ()
6487 || !b
->first_loc ().enabled
|| b
->first_loc ().disabled_by_cond
)))
6488 header_of_multiple
= true;
6490 if (loc
== NULL
&& b
->has_locations ())
6491 loc
= &b
->first_loc ();
6497 if (part_of_multiple
)
6498 uiout
->field_fmt ("number", "%d.%d", b
->number
, loc_number
);
6500 uiout
->field_signed ("number", b
->number
);
6504 if (part_of_multiple
)
6505 uiout
->field_skip ("type");
6507 uiout
->field_string ("type", bptype_string (b
->type
));
6511 if (part_of_multiple
)
6512 uiout
->field_skip ("disp");
6514 uiout
->field_string ("disp", bpdisp_text (b
->disposition
));
6518 if (part_of_multiple
)
6520 /* For locations that are disabled because of an invalid
6521 condition, display "N*" on the CLI, where "*" refers to a
6522 footnote below the table. For MI, simply display a "N"
6523 without a footnote. On the CLI, for enabled locations whose
6524 breakpoint is disabled, display "y-". */
6525 auto get_enable_state
= [uiout
, loc
] () -> const char *
6527 if (uiout
->is_mi_like_p ())
6529 if (loc
->disabled_by_cond
)
6531 else if (!loc
->enabled
)
6538 if (loc
->disabled_by_cond
)
6540 else if (!loc
->enabled
)
6542 else if (!breakpoint_enabled (loc
->owner
))
6548 uiout
->field_string ("enabled", get_enable_state ());
6551 uiout
->field_fmt ("enabled", "%c", bpenables
[(int) b
->enable_state
]);
6554 bool result
= false;
6555 if (!raw_loc
&& b
->print_one (last_loc
))
6559 if (is_watchpoint (b
))
6561 watchpoint
*w
= gdb::checked_static_cast
<watchpoint
*> (b
);
6563 /* Field 4, the address, is omitted (which makes the columns
6564 not line up too nicely with the headers, but the effect
6565 is relatively readable). */
6566 if (opts
.addressprint
)
6567 uiout
->field_skip ("addr");
6569 uiout
->field_string ("what", w
->exp_string
.get ());
6571 else if (!is_catchpoint (b
) || is_exception_catchpoint (b
)
6572 || is_ada_exception_catchpoint (b
))
6574 if (opts
.addressprint
)
6577 if (header_of_multiple
)
6578 uiout
->field_string ("addr", "<MULTIPLE>",
6579 metadata_style
.style ());
6580 else if (!b
->has_locations () || loc
->shlib_disabled
)
6581 uiout
->field_string ("addr", "<PENDING>",
6582 metadata_style
.style ());
6584 uiout
->field_core_addr ("addr",
6585 loc
->gdbarch
, loc
->address
);
6588 if (!header_of_multiple
)
6589 print_breakpoint_location (b
, loc
);
6590 if (b
->has_locations ())
6591 *last_loc
= &b
->first_loc ();
6595 if (loc
!= NULL
&& !header_of_multiple
)
6597 std::vector
<int> inf_nums
;
6600 for (inferior
*inf
: all_inferiors ())
6602 if (inf
->pspace
== loc
->pspace
)
6603 inf_nums
.push_back (inf
->num
);
6606 /* For backward compatibility, don't display inferiors in CLI unless
6607 there are several. Always display for MI. */
6609 || (!gdbarch_has_global_breakpoints (current_inferior ()->arch ())
6610 && (program_spaces
.size () > 1
6611 || number_of_inferiors () > 1)
6612 /* LOC is for existing B, it cannot be in
6613 moribund_locations and thus having NULL OWNER. */
6614 && loc
->owner
->type
!= bp_catchpoint
))
6616 output_thread_groups (uiout
, "thread-groups", inf_nums
, mi_only
);
6619 /* In the MI output, each location of a thread or task specific
6620 breakpoint includes the relevant thread or task ID. This is done for
6621 backwards compatibility reasons.
6623 For the CLI output, the thread/task information is printed on a
6624 separate line, see the 'stop only in thread' and 'stop only in task'
6626 if (part_of_multiple
&& uiout
->is_mi_like_p ())
6628 if (b
->thread
!= -1)
6629 uiout
->field_signed ("thread", b
->thread
);
6630 else if (b
->task
!= -1)
6631 uiout
->field_signed ("task", b
->task
);
6632 else if (b
->inferior
!= -1)
6633 uiout
->field_signed ("inferior", b
->inferior
);
6638 if (!part_of_multiple
)
6639 b
->print_one_detail (uiout
);
6641 if (part_of_multiple
&& frame_id_p (b
->frame_id
))
6644 uiout
->text ("\tstop only in stack frame at ");
6645 /* FIXME: cagney/2002-12-01: Shouldn't be poking around inside
6647 uiout
->field_core_addr ("frame",
6648 b
->gdbarch
, b
->frame_id
.stack_addr
);
6652 if (!part_of_multiple
&& b
->cond_string
)
6655 if (is_tracepoint (b
))
6656 uiout
->text ("\ttrace only if ");
6658 uiout
->text ("\tstop only if ");
6659 uiout
->field_string ("cond", b
->cond_string
.get ());
6661 /* Print whether the target is doing the breakpoint's condition
6662 evaluation. If GDB is doing the evaluation, don't print anything. */
6663 if (is_breakpoint (b
)
6664 && breakpoint_condition_evaluation_mode ()
6665 == condition_evaluation_target
)
6667 uiout
->message (" (%pF evals)",
6668 string_field ("evaluated-by",
6669 bp_condition_evaluator (b
)));
6674 if (!part_of_multiple
&& b
->thread
!= -1)
6676 /* FIXME should make an annotation for this. */
6677 uiout
->text ("\tstop only in thread ");
6678 if (uiout
->is_mi_like_p ())
6679 uiout
->field_signed ("thread", b
->thread
);
6682 struct thread_info
*thr
= find_thread_global_id (b
->thread
);
6684 uiout
->field_string ("thread", print_thread_id (thr
));
6689 if (!part_of_multiple
&& b
->task
!= -1)
6691 uiout
->text ("\tstop only in task ");
6692 uiout
->field_signed ("task", b
->task
);
6696 if (!part_of_multiple
&& b
->inferior
!= -1)
6698 uiout
->text ("\tstop only in inferior ");
6699 uiout
->field_signed ("inferior", b
->inferior
);
6703 if (!part_of_multiple
)
6707 /* FIXME should make an annotation for this. */
6708 if (is_catchpoint (b
))
6709 uiout
->text ("\tcatchpoint");
6710 else if (is_tracepoint (b
))
6711 uiout
->text ("\ttracepoint");
6713 uiout
->text ("\tbreakpoint");
6714 uiout
->text (" already hit ");
6715 uiout
->field_signed ("times", b
->hit_count
);
6716 if (b
->hit_count
== 1)
6717 uiout
->text (" time\n");
6719 uiout
->text (" times\n");
6723 /* Output the count also if it is zero, but only if this is mi. */
6724 if (uiout
->is_mi_like_p ())
6725 uiout
->field_signed ("times", b
->hit_count
);
6729 if (!part_of_multiple
&& b
->ignore_count
)
6732 uiout
->message ("\tignore next %pF hits\n",
6733 signed_field ("ignore", b
->ignore_count
));
6736 /* Note that an enable count of 1 corresponds to "enable once"
6737 behavior, which is reported by the combination of enablement and
6738 disposition, so we don't need to mention it here. */
6739 if (!part_of_multiple
&& b
->enable_count
> 1)
6742 uiout
->text ("\tdisable after ");
6743 /* Tweak the wording to clarify that ignore and enable counts
6744 are distinct, and have additive effect. */
6745 if (b
->ignore_count
)
6746 uiout
->text ("additional ");
6748 uiout
->text ("next ");
6749 uiout
->field_signed ("enable", b
->enable_count
);
6750 uiout
->text (" hits\n");
6753 if (!part_of_multiple
&& is_tracepoint (b
))
6755 tracepoint
*tp
= gdb::checked_static_cast
<tracepoint
*> (b
);
6757 if (tp
->traceframe_usage
)
6759 uiout
->text ("\ttrace buffer usage ");
6760 uiout
->field_signed ("traceframe-usage", tp
->traceframe_usage
);
6761 uiout
->text (" bytes\n");
6765 l
= b
->commands
? b
->commands
.get () : NULL
;
6766 if (!part_of_multiple
&& l
)
6770 bool use_fixed_output
=
6771 (uiout
->test_flags (fix_breakpoint_script_output
)
6772 || fix_breakpoint_script_output_globally
);
6774 std::optional
<ui_out_emit_tuple
> tuple_emitter
;
6775 std::optional
<ui_out_emit_list
> list_emitter
;
6777 if (use_fixed_output
)
6778 list_emitter
.emplace (uiout
, "script");
6780 tuple_emitter
.emplace (uiout
, "script");
6782 print_command_lines (uiout
, l
, 4);
6785 if (is_tracepoint (b
))
6787 tracepoint
*t
= gdb::checked_static_cast
<tracepoint
*> (b
);
6789 if (!part_of_multiple
&& t
->pass_count
)
6791 annotate_field (10);
6792 uiout
->text ("\tpass count ");
6793 uiout
->field_signed ("pass", t
->pass_count
);
6794 uiout
->text (" \n");
6797 /* Don't display it when tracepoint or tracepoint location is
6799 if (!header_of_multiple
&& loc
!= NULL
&& !loc
->shlib_disabled
)
6801 annotate_field (11);
6803 if (uiout
->is_mi_like_p ())
6804 uiout
->field_string ("installed",
6805 loc
->inserted
? "y" : "n");
6811 uiout
->text ("\tnot ");
6812 uiout
->text ("installed on target\n");
6817 if (uiout
->is_mi_like_p () && !part_of_multiple
)
6819 if (is_watchpoint (b
))
6821 watchpoint
*w
= gdb::checked_static_cast
<watchpoint
*> (b
);
6823 uiout
->field_string ("original-location", w
->exp_string
.get ());
6825 else if (b
->locspec
!= nullptr)
6827 const char *str
= b
->locspec
->to_string ();
6829 uiout
->field_string ("original-location", str
);
6836 /* See breakpoint.h. */
6838 bool fix_multi_location_breakpoint_output_globally
= false;
6841 print_one_breakpoint (breakpoint
*b
, const bp_location
**last_loc
, int allflag
)
6843 struct ui_out
*uiout
= current_uiout
;
6844 bool use_fixed_output
6845 = (uiout
->test_flags (fix_multi_location_breakpoint_output
)
6846 || fix_multi_location_breakpoint_output_globally
);
6848 std::optional
<ui_out_emit_tuple
> bkpt_tuple_emitter (std::in_place
, uiout
,
6850 bool printed
= print_one_breakpoint_location (b
, NULL
, 0, last_loc
,
6853 /* The mi2 broken format: the main breakpoint tuple ends here, the locations
6855 if (!use_fixed_output
)
6856 bkpt_tuple_emitter
.reset ();
6858 /* If this breakpoint has custom print function,
6859 it's already printed. Otherwise, print individual
6860 locations, if any. */
6861 if (!printed
|| allflag
)
6863 /* If breakpoint has a single location that is disabled, we
6864 print it as if it had several locations, since otherwise it's
6865 hard to represent "breakpoint enabled, location disabled"
6868 Note that while hardware watchpoints have several locations
6869 internally, that's not a property exposed to users.
6871 Likewise, while catchpoints may be implemented with
6872 breakpoints (e.g., catch throw), that's not a property
6873 exposed to users. We do however display the internal
6874 breakpoint locations with "maint info breakpoints". */
6875 if (!is_hardware_watchpoint (b
)
6876 && (!is_catchpoint (b
) || is_exception_catchpoint (b
)
6877 || is_ada_exception_catchpoint (b
))
6879 || (b
->has_locations ()
6880 && (b
->has_multiple_locations ()
6881 || !b
->first_loc ().enabled
6882 || b
->first_loc ().disabled_by_cond
))))
6884 std::optional
<ui_out_emit_list
> locations_list
;
6886 /* For MI version <= 2, keep the behavior where GDB outputs an invalid
6887 MI record. For later versions, place breakpoint locations in a
6889 if (uiout
->is_mi_like_p () && use_fixed_output
)
6890 locations_list
.emplace (uiout
, "locations");
6893 for (bp_location
&loc
: b
->locations ())
6895 ui_out_emit_tuple
loc_tuple_emitter (uiout
, NULL
);
6896 print_one_breakpoint_location (b
, &loc
, n
, last_loc
,
6905 breakpoint_address_bits (struct breakpoint
*b
)
6907 int print_address_bits
= 0;
6909 for (bp_location
&loc
: b
->locations ())
6911 if (!bl_address_is_meaningful (&loc
))
6914 int addr_bit
= gdbarch_addr_bit (loc
.gdbarch
);
6915 if (addr_bit
> print_address_bits
)
6916 print_address_bits
= addr_bit
;
6919 return print_address_bits
;
6922 /* See breakpoint.h. */
6925 print_breakpoint (breakpoint
*b
)
6927 const bp_location
*dummy_loc
= nullptr;
6928 print_one_breakpoint (b
, &dummy_loc
, 0);
6931 /* Return true if this breakpoint was set by the user, false if it is
6932 internal or momentary. */
6935 user_breakpoint_p (struct breakpoint
*b
)
6937 return b
->number
> 0;
6940 /* See breakpoint.h. */
6943 pending_breakpoint_p (struct breakpoint
*b
)
6945 return !b
->has_locations ();
6948 /* Print information on breakpoints (including watchpoints and tracepoints).
6950 If non-NULL, BP_NUM_LIST is a list of numbers and number ranges as
6951 understood by number_or_range_parser. Only breakpoints included in this
6952 list are then printed.
6954 If SHOW_INTERNAL is true, print internal breakpoints.
6956 If FILTER is non-NULL, call it on each breakpoint and only include the
6957 ones for which it returns true.
6959 Return the total number of breakpoints listed. */
6962 breakpoint_1 (const char *bp_num_list
, bool show_internal
,
6963 bool (*filter
) (const struct breakpoint
*))
6965 const bp_location
*last_loc
= nullptr;
6966 int nr_printable_breakpoints
;
6967 struct value_print_options opts
;
6968 int print_address_bits
= 0;
6969 int print_type_col_width
= 14;
6970 struct ui_out
*uiout
= current_uiout
;
6971 bool has_disabled_by_cond_location
= false;
6973 get_user_print_options (&opts
);
6975 /* Compute the number of rows in the table, as well as the size
6976 required for address fields. */
6977 nr_printable_breakpoints
= 0;
6978 for (breakpoint
&b
: all_breakpoints ())
6980 /* If we have a filter, only list the breakpoints it accepts. */
6981 if (filter
&& !filter (&b
))
6984 /* If we have a BP_NUM_LIST string, it is a list of breakpoints to
6985 accept. Skip the others. */
6986 if (bp_num_list
!= NULL
&& *bp_num_list
!= '\0')
6988 if (show_internal
&& parse_and_eval_long (bp_num_list
) != b
.number
)
6990 if (!show_internal
&& !number_is_in_list (bp_num_list
, b
.number
))
6994 if (show_internal
|| user_breakpoint_p (&b
))
6996 int addr_bit
, type_len
;
6998 addr_bit
= breakpoint_address_bits (&b
);
6999 if (addr_bit
> print_address_bits
)
7000 print_address_bits
= addr_bit
;
7002 type_len
= strlen (bptype_string (b
.type
));
7003 if (type_len
> print_type_col_width
)
7004 print_type_col_width
= type_len
;
7006 nr_printable_breakpoints
++;
7011 ui_out_emit_table
table_emitter (uiout
,
7012 opts
.addressprint
? 6 : 5,
7013 nr_printable_breakpoints
,
7016 if (nr_printable_breakpoints
> 0)
7017 annotate_breakpoints_headers ();
7018 if (nr_printable_breakpoints
> 0)
7020 uiout
->table_header (7, ui_left
, "number", "Num"); /* 1 */
7021 if (nr_printable_breakpoints
> 0)
7023 uiout
->table_header (print_type_col_width
, ui_left
, "type", "Type"); /* 2 */
7024 if (nr_printable_breakpoints
> 0)
7026 uiout
->table_header (4, ui_left
, "disp", "Disp"); /* 3 */
7027 if (nr_printable_breakpoints
> 0)
7029 uiout
->table_header (3, ui_left
, "enabled", "Enb"); /* 4 */
7030 if (opts
.addressprint
)
7032 if (nr_printable_breakpoints
> 0)
7034 if (print_address_bits
<= 32)
7035 uiout
->table_header (10, ui_left
, "addr", "Address"); /* 5 */
7037 uiout
->table_header (18, ui_left
, "addr", "Address"); /* 5 */
7039 if (nr_printable_breakpoints
> 0)
7041 uiout
->table_header (40, ui_noalign
, "what", "What"); /* 6 */
7042 uiout
->table_body ();
7043 if (nr_printable_breakpoints
> 0)
7044 annotate_breakpoints_table ();
7046 for (breakpoint
&b
: all_breakpoints ())
7049 /* If we have a filter, only list the breakpoints it accepts. */
7050 if (filter
&& !filter (&b
))
7053 /* If we have a BP_NUM_LIST string, it is a list of breakpoints to
7054 accept. Skip the others. */
7056 if (bp_num_list
!= NULL
&& *bp_num_list
!= '\0')
7058 if (show_internal
) /* maintenance info breakpoint */
7060 if (parse_and_eval_long (bp_num_list
) != b
.number
)
7063 else /* all others */
7065 if (!number_is_in_list (bp_num_list
, b
.number
))
7069 /* We only print out user settable breakpoints unless the
7070 show_internal is set. */
7071 if (show_internal
|| user_breakpoint_p (&b
))
7073 print_one_breakpoint (&b
, &last_loc
, show_internal
);
7074 for (bp_location
&loc
: b
.locations ())
7075 if (loc
.disabled_by_cond
)
7076 has_disabled_by_cond_location
= true;
7081 if (nr_printable_breakpoints
== 0)
7083 /* If there's a filter, let the caller decide how to report
7087 if (bp_num_list
== NULL
|| *bp_num_list
== '\0')
7088 uiout
->message ("No breakpoints, watchpoints, tracepoints, "
7089 "or catchpoints.\n");
7091 uiout
->message ("No breakpoint, watchpoint, tracepoint, "
7092 "or catchpoint matching '%s'.\n", bp_num_list
);
7097 if (last_loc
&& !server_command
)
7098 set_next_address (last_loc
->gdbarch
, last_loc
->address
);
7100 if (has_disabled_by_cond_location
&& !uiout
->is_mi_like_p ())
7101 uiout
->message (_("(*): Breakpoint condition is invalid at this "
7105 /* FIXME? Should this be moved up so that it is only called when
7106 there have been breakpoints? */
7107 annotate_breakpoints_table_end ();
7109 return nr_printable_breakpoints
;
7112 /* Display the value of default-collect in a way that is generally
7113 compatible with the breakpoint list. */
7116 default_collect_info (void)
7118 struct ui_out
*uiout
= current_uiout
;
7120 /* If it has no value (which is frequently the case), say nothing; a
7121 message like "No default-collect." gets in user's face when it's
7123 if (default_collect
.empty ())
7126 /* The following phrase lines up nicely with per-tracepoint collect
7128 uiout
->text ("default collect ");
7129 uiout
->field_string ("default-collect", default_collect
);
7130 uiout
->text (" \n");
7134 info_breakpoints_command (const char *args
, int from_tty
)
7136 breakpoint_1 (args
, false, NULL
);
7138 default_collect_info ();
7142 info_watchpoints_command (const char *args
, int from_tty
)
7144 int num_printed
= breakpoint_1 (args
, false, is_watchpoint
);
7145 struct ui_out
*uiout
= current_uiout
;
7147 if (num_printed
== 0)
7149 if (args
== NULL
|| *args
== '\0')
7150 uiout
->message ("No watchpoints.\n");
7152 uiout
->message ("No watchpoint matching '%s'.\n", args
);
7157 maintenance_info_breakpoints (const char *args
, int from_tty
)
7159 breakpoint_1 (args
, true, NULL
);
7161 default_collect_info ();
7165 breakpoint_has_pc (struct breakpoint
*b
,
7166 struct program_space
*pspace
,
7167 CORE_ADDR pc
, struct obj_section
*section
)
7169 for (bp_location
&bl
: b
->locations ())
7171 if (bl
.pspace
== pspace
7173 && (!overlay_debugging
|| bl
.section
== section
))
7179 /* See breakpoint.h. */
7182 describe_other_breakpoints (struct gdbarch
*gdbarch
,
7183 struct program_space
*pspace
, CORE_ADDR pc
,
7184 struct obj_section
*section
, int thread
)
7188 for (breakpoint
&b
: all_breakpoints ())
7189 others
+= (user_breakpoint_p (&b
)
7190 && breakpoint_has_pc (&b
, pspace
, pc
, section
));
7195 gdb_printf (_("Note: breakpoint "));
7196 else /* if (others == ???) */
7197 gdb_printf (_("Note: breakpoints "));
7198 for (breakpoint
&b
: all_breakpoints ())
7199 if (user_breakpoint_p (&b
)
7200 && breakpoint_has_pc (&b
, pspace
, pc
, section
))
7203 gdb_printf ("%d", b
.number
);
7204 if (b
.thread
== -1 && thread
!= -1)
7205 gdb_printf (" (all threads)");
7206 else if (b
.thread
!= -1)
7208 struct thread_info
*thr
= find_thread_global_id (b
.thread
);
7209 gdb_printf (" (thread %s)", print_thread_id (thr
));
7211 else if (b
.task
!= -1)
7212 gdb_printf (" (task %d)", b
.task
);
7213 gdb_printf ("%s%s ",
7214 ((b
.enable_state
== bp_disabled
7215 || b
.enable_state
== bp_call_disabled
)
7219 : ((others
== 1) ? " and" : ""));
7221 current_uiout
->message (_("also set at pc %ps.\n"),
7222 styled_string (address_style
.style (),
7223 paddress (gdbarch
, pc
)));
7228 /* Return true iff it is meaningful to use the address member of LOC.
7229 For some breakpoint types, the locations' address members are
7230 irrelevant and it makes no sense to attempt to compare them to
7231 other addresses (or use them for any other purpose either).
7233 More specifically, software watchpoints and catchpoints that are
7234 not backed by breakpoints always have a zero valued location
7235 address and we don't want to mark breakpoints of any of these types
7236 to be a duplicate of an actual breakpoint location at address
7240 bl_address_is_meaningful (bp_location
*loc
)
7242 return loc
->loc_type
!= bp_loc_other
;
7245 /* Assuming LOC1 and LOC2's owners are hardware watchpoints, returns
7246 true if LOC1 and LOC2 represent the same watchpoint location. */
7249 watchpoint_locations_match (const struct bp_location
*loc1
,
7250 const struct bp_location
*loc2
)
7252 watchpoint
*w1
= gdb::checked_static_cast
<watchpoint
*> (loc1
->owner
);
7253 watchpoint
*w2
= gdb::checked_static_cast
<watchpoint
*> (loc2
->owner
);
7255 /* Both of them must exist. */
7256 gdb_assert (w1
!= NULL
);
7257 gdb_assert (w2
!= NULL
);
7259 /* If the target can evaluate the condition expression in hardware,
7260 then we we need to insert both watchpoints even if they are at
7261 the same place. Otherwise the watchpoint will only trigger when
7262 the condition of whichever watchpoint was inserted evaluates to
7263 true, not giving a chance for GDB to check the condition of the
7264 other watchpoint. */
7266 && target_can_accel_watchpoint_condition (loc1
->address
,
7268 loc1
->watchpoint_type
,
7269 w1
->cond_exp
.get ()))
7271 && target_can_accel_watchpoint_condition (loc2
->address
,
7273 loc2
->watchpoint_type
,
7274 w2
->cond_exp
.get ())))
7277 /* Note that this checks the owner's type, not the location's. In
7278 case the target does not support read watchpoints, but does
7279 support access watchpoints, we'll have bp_read_watchpoint
7280 watchpoints with hw_access locations. Those should be considered
7281 duplicates of hw_read locations. The hw_read locations will
7282 become hw_access locations later. */
7283 return (loc1
->owner
->type
== loc2
->owner
->type
7284 && loc1
->pspace
->aspace
== loc2
->pspace
->aspace
7285 && loc1
->address
== loc2
->address
7286 && loc1
->length
== loc2
->length
);
7289 /* See breakpoint.h. */
7292 breakpoint_address_match (const address_space
*aspace1
, CORE_ADDR addr1
,
7293 const address_space
*aspace2
, CORE_ADDR addr2
)
7295 return ((gdbarch_has_global_breakpoints (current_inferior ()->arch ())
7296 || aspace1
== aspace2
)
7300 /* Returns true if {ASPACE2,ADDR2} falls within the range determined by
7301 {ASPACE1,ADDR1,LEN1}. In most targets, this can only be true if ASPACE1
7302 matches ASPACE2. On targets that have global breakpoints, the address
7303 space doesn't really matter. */
7306 breakpoint_address_match_range (const address_space
*aspace1
,
7308 int len1
, const address_space
*aspace2
,
7311 return ((gdbarch_has_global_breakpoints (current_inferior ()->arch ())
7312 || aspace1
== aspace2
)
7313 && addr2
>= addr1
&& addr2
< addr1
+ len1
);
7316 /* Returns true if {ASPACE,ADDR} matches the breakpoint BL. BL may be
7317 a ranged breakpoint. In most targets, a match happens only if ASPACE
7318 matches the breakpoint's address space. On targets that have global
7319 breakpoints, the address space doesn't really matter. */
7322 breakpoint_location_address_match (struct bp_location
*bl
,
7323 const address_space
*aspace
,
7326 return (breakpoint_address_match (bl
->pspace
->aspace
.get (), bl
->address
,
7329 && breakpoint_address_match_range (bl
->pspace
->aspace
.get (),
7330 bl
->address
, bl
->length
,
7334 /* Returns true if the [ADDR,ADDR+LEN) range in ASPACE overlaps
7335 breakpoint BL. BL may be a ranged breakpoint. In most targets, a
7336 match happens only if ASPACE matches the breakpoint's address
7337 space. On targets that have global breakpoints, the address space
7338 doesn't really matter. */
7341 breakpoint_location_address_range_overlap (struct bp_location
*bl
,
7342 const address_space
*aspace
,
7343 CORE_ADDR addr
, int len
)
7345 if (gdbarch_has_global_breakpoints (current_inferior ()->arch ())
7346 || bl
->pspace
->aspace
.get () == aspace
)
7348 int bl_len
= bl
->length
!= 0 ? bl
->length
: 1;
7350 if (mem_ranges_overlap (addr
, len
, bl
->address
, bl_len
))
7356 /* If LOC1 and LOC2's owners are not tracepoints, returns false directly.
7357 Then, if LOC1 and LOC2 represent the same tracepoint location, returns
7358 true, otherwise returns false. */
7361 tracepoint_locations_match (const struct bp_location
*loc1
,
7362 const struct bp_location
*loc2
)
7364 if (is_tracepoint (loc1
->owner
) && is_tracepoint (loc2
->owner
))
7365 /* Since tracepoint locations are never duplicated with others', tracepoint
7366 locations at the same address of different tracepoints are regarded as
7367 different locations. */
7368 return (loc1
->address
== loc2
->address
&& loc1
->owner
== loc2
->owner
);
7373 /* Assuming LOC1 and LOC2's types' have meaningful target addresses
7374 (bl_address_is_meaningful), returns true if LOC1 and LOC2 represent
7375 the same location. If SW_HW_BPS_MATCH is true, then software
7376 breakpoint locations and hardware breakpoint locations match,
7377 otherwise they don't. */
7380 breakpoint_locations_match (const struct bp_location
*loc1
,
7381 const struct bp_location
*loc2
,
7382 bool sw_hw_bps_match
)
7384 int hw_point1
, hw_point2
;
7386 /* Both of them must not be in moribund_locations. */
7387 gdb_assert (loc1
->owner
!= NULL
);
7388 gdb_assert (loc2
->owner
!= NULL
);
7390 hw_point1
= is_hardware_watchpoint (loc1
->owner
);
7391 hw_point2
= is_hardware_watchpoint (loc2
->owner
);
7393 if (hw_point1
!= hw_point2
)
7396 return watchpoint_locations_match (loc1
, loc2
);
7397 else if (is_tracepoint (loc1
->owner
) || is_tracepoint (loc2
->owner
))
7398 return tracepoint_locations_match (loc1
, loc2
);
7400 /* We compare bp_location.length in order to cover ranged
7401 breakpoints. Keep this in sync with
7402 bp_location_is_less_than. */
7403 return (breakpoint_address_match (loc1
->pspace
->aspace
.get (),
7405 loc2
->pspace
->aspace
.get (),
7407 && (loc1
->loc_type
== loc2
->loc_type
|| sw_hw_bps_match
)
7408 && loc1
->length
== loc2
->length
);
7412 breakpoint_adjustment_warning (CORE_ADDR from_addr
, CORE_ADDR to_addr
,
7413 int bnum
, bool have_bnum
)
7415 /* The longest string possibly returned by hex_string_custom
7416 is 50 chars. These must be at least that big for safety. */
7420 strcpy (astr1
, hex_string_custom ((unsigned long) from_addr
, 8));
7421 strcpy (astr2
, hex_string_custom ((unsigned long) to_addr
, 8));
7423 warning (_("Breakpoint %d address previously adjusted from %s to %s."),
7424 bnum
, astr1
, astr2
);
7426 warning (_("Breakpoint address adjusted from %s to %s."), astr1
, astr2
);
7429 /* Adjust a breakpoint's address to account for architectural
7430 constraints on breakpoint placement. Return the adjusted address.
7431 Note: Very few targets require this kind of adjustment. For most
7432 targets, this function is simply the identity function. */
7435 adjust_breakpoint_address (struct gdbarch
*gdbarch
,
7436 CORE_ADDR bpaddr
, enum bptype bptype
,
7437 struct program_space
*pspace
)
7439 gdb_assert (pspace
!= nullptr);
7441 if (bptype
== bp_watchpoint
7442 || bptype
== bp_hardware_watchpoint
7443 || bptype
== bp_read_watchpoint
7444 || bptype
== bp_access_watchpoint
7445 || bptype
== bp_catchpoint
)
7447 /* Watchpoints and the various bp_catch_* eventpoints should not
7448 have their addresses modified. */
7451 else if (bptype
== bp_single_step
)
7453 /* Single-step breakpoints should not have their addresses
7454 modified. If there's any architectural constrain that
7455 applies to this address, then it should have already been
7456 taken into account when the breakpoint was created in the
7457 first place. If we didn't do this, stepping through e.g.,
7458 Thumb-2 IT blocks would break. */
7463 CORE_ADDR adjusted_bpaddr
= bpaddr
;
7465 /* Some targets have architectural constraints on the placement
7466 of breakpoint instructions. Obtain the adjusted address. */
7467 if (gdbarch_adjust_breakpoint_address_p (gdbarch
))
7469 /* Targets that implement this adjustment function will likely
7470 inspect either the symbol table, target memory at BPADDR, or
7471 even state registers, so ensure a suitable thread (and its
7472 associated program space) are currently selected. */
7473 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
7474 switch_to_program_space_and_thread (pspace
);
7476 = gdbarch_adjust_breakpoint_address (gdbarch
, bpaddr
);
7480 = gdbarch_remove_non_address_bits (gdbarch
, adjusted_bpaddr
);
7482 /* An adjusted breakpoint address can significantly alter
7483 a user's expectations. Print a warning if an adjustment
7485 if (adjusted_bpaddr
!= bpaddr
)
7486 breakpoint_adjustment_warning (bpaddr
, adjusted_bpaddr
, 0, false);
7488 return adjusted_bpaddr
;
7493 bp_location_from_bp_type (bptype type
)
7498 case bp_single_step
:
7502 case bp_longjmp_resume
:
7503 case bp_longjmp_call_dummy
:
7505 case bp_exception_resume
:
7506 case bp_step_resume
:
7507 case bp_hp_step_resume
:
7508 case bp_watchpoint_scope
:
7510 case bp_std_terminate
:
7511 case bp_shlib_event
:
7512 case bp_thread_event
:
7513 case bp_overlay_event
:
7515 case bp_longjmp_master
:
7516 case bp_std_terminate_master
:
7517 case bp_exception_master
:
7518 case bp_gnu_ifunc_resolver
:
7519 case bp_gnu_ifunc_resolver_return
:
7521 return bp_loc_software_breakpoint
;
7523 case bp_hardware_breakpoint
:
7524 return bp_loc_hardware_breakpoint
;
7526 case bp_hardware_watchpoint
:
7527 case bp_read_watchpoint
:
7528 case bp_access_watchpoint
:
7529 return bp_loc_hardware_watchpoint
;
7532 return bp_loc_software_watchpoint
;
7535 case bp_fast_tracepoint
:
7536 case bp_static_tracepoint
:
7537 case bp_static_marker_tracepoint
:
7538 return bp_loc_tracepoint
;
7541 return bp_loc_other
;
7544 internal_error (_("unknown breakpoint type"));
7548 bp_location::bp_location (breakpoint
*owner
, bp_loc_type type
)
7550 this->owner
= owner
;
7551 this->cond_bytecode
= NULL
;
7552 this->shlib_disabled
= 0;
7554 this->disabled_by_cond
= false;
7556 this->loc_type
= type
;
7558 if (this->loc_type
== bp_loc_software_breakpoint
7559 || this->loc_type
== bp_loc_hardware_breakpoint
)
7560 mark_breakpoint_location_modified (this);
7565 bp_location::bp_location (breakpoint
*owner
)
7566 : bp_location::bp_location (owner
,
7567 bp_location_from_bp_type (owner
->type
))
7571 /* See breakpoint.h. */
7574 bp_location::to_string () const
7577 ui_out_redirect_pop
redir (current_uiout
, &stb
);
7578 print_breakpoint_location (this->owner
, this);
7579 return stb
.release ();
7582 /* Decrement reference count. If the reference count reaches 0,
7583 destroy the bp_location. Sets *BLP to NULL. */
7586 decref_bp_location (struct bp_location
**blp
)
7588 bp_location_ref_policy::decref (*blp
);
7592 /* Add breakpoint B at the end of the global breakpoint chain. */
7595 add_to_breakpoint_chain (std::unique_ptr
<breakpoint
> &&b
)
7597 /* Add this breakpoint to the end of the chain so that a list of
7598 breakpoints will come out in order of increasing numbers. */
7600 breakpoint_chain
.push_back (*b
.release ());
7602 return &breakpoint_chain
.back ();
7605 /* Initialize loc->function_name. */
7608 set_breakpoint_location_function (struct bp_location
*loc
)
7610 gdb_assert (loc
->owner
!= NULL
);
7612 if (loc
->owner
->type
== bp_breakpoint
7613 || loc
->owner
->type
== bp_hardware_breakpoint
7614 || is_tracepoint (loc
->owner
))
7616 const char *function_name
;
7618 if (loc
->msymbol
!= NULL
7619 && (loc
->msymbol
->type () == mst_text_gnu_ifunc
7620 || loc
->msymbol
->type () == mst_data_gnu_ifunc
))
7622 struct breakpoint
*b
= loc
->owner
;
7624 function_name
= loc
->msymbol
->linkage_name ();
7626 if (b
->type
== bp_breakpoint
7627 && b
->has_single_location ()
7628 && b
->related_breakpoint
== b
)
7630 /* Create only the whole new breakpoint of this type but do not
7631 mess more complicated breakpoints with multiple locations. */
7632 b
->type
= bp_gnu_ifunc_resolver
;
7633 /* Remember the resolver's address for use by the return
7635 loc
->related_address
= loc
->address
;
7639 find_pc_partial_function (loc
->address
, &function_name
, NULL
, NULL
);
7642 loc
->function_name
= make_unique_xstrdup (function_name
);
7646 /* Attempt to determine architecture of location identified by SAL. */
7648 get_sal_arch (struct symtab_and_line sal
)
7651 return sal
.section
->objfile
->arch ();
7653 return sal
.symtab
->compunit ()->objfile ()->arch ();
7658 /* Call this routine when stepping and nexting to enable a breakpoint
7659 if we do a longjmp() or 'throw' in TP. FRAME is the frame which
7660 initiated the operation. */
7663 set_longjmp_breakpoint (struct thread_info
*tp
, struct frame_id frame
)
7665 int thread
= tp
->global_num
;
7667 /* To avoid having to rescan all objfile symbols at every step,
7668 we maintain a list of continually-inserted but always disabled
7669 longjmp "master" breakpoints. Here, we simply create momentary
7670 clones of those and enable them for the requested thread. */
7671 for (breakpoint
&b
: all_breakpoints_safe ())
7672 if (b
.pspace
== current_program_space
7673 && (b
.type
== bp_longjmp_master
7674 || b
.type
== bp_exception_master
))
7676 bptype type
= b
.type
== bp_longjmp_master
? bp_longjmp
: bp_exception
;
7677 /* longjmp_breakpoint_ops ensures INITIATING_FRAME is cleared again
7678 after their removal. */
7679 momentary_breakpoint_from_master (&b
, type
, 1, thread
);
7682 tp
->initiating_frame
= frame
;
7685 /* Delete all longjmp breakpoints from THREAD. */
7687 delete_longjmp_breakpoint (int thread
)
7689 for (breakpoint
&b
: all_breakpoints_safe ())
7690 if (b
.type
== bp_longjmp
|| b
.type
== bp_exception
)
7692 if (b
.thread
== thread
)
7694 gdb_assert (b
.inferior
== -1);
7695 delete_breakpoint (&b
);
7701 delete_longjmp_breakpoint_at_next_stop (int thread
)
7703 for (breakpoint
&b
: all_breakpoints_safe ())
7704 if (b
.type
== bp_longjmp
|| b
.type
== bp_exception
)
7706 if (b
.thread
== thread
)
7708 gdb_assert (b
.inferior
== -1);
7709 b
.disposition
= disp_del_at_next_stop
;
7714 /* Place breakpoints of type bp_longjmp_call_dummy to catch longjmp for
7715 INFERIOR_PTID thread. Chain them all by RELATED_BREAKPOINT and return
7716 pointer to any of them. Return NULL if this system cannot place longjmp
7720 set_longjmp_breakpoint_for_call_dummy (void)
7722 breakpoint
*retval
= nullptr;
7724 for (breakpoint
&b
: all_breakpoints ())
7725 if (b
.pspace
== current_program_space
&& b
.type
== bp_longjmp_master
)
7727 int thread
= inferior_thread ()->global_num
;
7729 = momentary_breakpoint_from_master (&b
, bp_longjmp_call_dummy
,
7732 /* Link NEW_B into the chain of RETVAL breakpoints. */
7734 gdb_assert (new_b
->related_breakpoint
== new_b
);
7737 new_b
->related_breakpoint
= retval
;
7738 while (retval
->related_breakpoint
!= new_b
->related_breakpoint
)
7739 retval
= retval
->related_breakpoint
;
7740 retval
->related_breakpoint
= new_b
;
7746 /* Verify all existing dummy frames and their associated breakpoints for
7747 TP. Remove those which can no longer be found in the current frame
7750 If the unwind fails then there is not sufficient information to discard
7751 dummy frames. In this case, elide the clean up and the dummy frames will
7752 be cleaned up next time this function is called from a location where
7753 unwinding is possible. */
7756 check_longjmp_breakpoint_for_call_dummy (struct thread_info
*tp
)
7758 /* We would need to delete breakpoints other than the current one while
7759 iterating, so all_breakpoints_safe is not sufficient to make that safe.
7760 Save all breakpoints to delete in that set and delete them at the end. */
7761 std::unordered_set
<breakpoint
*> to_delete
;
7763 for (struct breakpoint
&b
: all_breakpoints ())
7765 if (b
.type
== bp_longjmp_call_dummy
&& b
.thread
== tp
->global_num
)
7767 gdb_assert (b
.inferior
== -1);
7768 struct breakpoint
*dummy_b
= b
.related_breakpoint
;
7770 /* Find the bp_call_dummy breakpoint in the list of breakpoints
7771 chained off b->related_breakpoint. */
7772 while (dummy_b
!= &b
&& dummy_b
->type
!= bp_call_dummy
)
7773 dummy_b
= dummy_b
->related_breakpoint
;
7775 /* If there was no bp_call_dummy breakpoint then there's nothing
7776 more to do. Or, if the dummy frame associated with the
7777 bp_call_dummy is still on the stack then we need to leave this
7778 bp_call_dummy in place. */
7779 if (dummy_b
->type
!= bp_call_dummy
7780 || frame_find_by_id (dummy_b
->frame_id
) != NULL
)
7783 /* We didn't find the dummy frame on the stack, this could be
7784 because we have longjmp'd to a stack frame that is previous to
7785 the dummy frame, or it could be because the stack unwind is
7786 broken at some point between the longjmp frame and the dummy
7789 Next we figure out why the stack unwind stopped. If it looks
7790 like the unwind is complete then we assume the dummy frame has
7791 been jumped over, however, if the unwind stopped for an
7792 unexpected reason then we assume the stack unwind is currently
7793 broken, and that we will (eventually) return to the dummy
7796 It might be tempting to consider using frame_id_inner here, but
7797 that is not safe. There is no guarantee that the stack frames
7798 we are looking at here are even on the same stack as the
7799 original dummy frame, hence frame_id_inner can't be used. See
7800 the comments on frame_id_inner for more details. */
7801 bool unwind_finished_unexpectedly
= false;
7802 for (frame_info_ptr fi
= get_current_frame (); fi
!= nullptr; )
7804 frame_info_ptr prev
= get_prev_frame (fi
);
7805 if (prev
== nullptr)
7807 /* FI is the last stack frame. Why did this frame not
7809 auto stop_reason
= get_frame_unwind_stop_reason (fi
);
7810 if (stop_reason
!= UNWIND_NO_REASON
7811 && stop_reason
!= UNWIND_OUTERMOST
)
7812 unwind_finished_unexpectedly
= true;
7816 if (unwind_finished_unexpectedly
)
7819 dummy_frame_discard (dummy_b
->frame_id
, tp
);
7821 for (breakpoint
*related_breakpoint
= b
.related_breakpoint
;
7822 related_breakpoint
!= &b
;
7823 related_breakpoint
= related_breakpoint
->related_breakpoint
)
7824 to_delete
.insert (b
.related_breakpoint
);
7826 to_delete
.insert (&b
);
7830 for (breakpoint
*b
: to_delete
)
7831 delete_breakpoint (b
);
7835 enable_overlay_breakpoints (void)
7837 for (breakpoint
&b
: all_breakpoints ())
7838 if (b
.type
== bp_overlay_event
)
7840 b
.enable_state
= bp_enabled
;
7841 update_global_location_list (UGLL_MAY_INSERT
);
7842 overlay_events_enabled
= 1;
7847 disable_overlay_breakpoints (void)
7849 for (breakpoint
&b
: all_breakpoints ())
7850 if (b
.type
== bp_overlay_event
)
7852 b
.enable_state
= bp_disabled
;
7853 update_global_location_list (UGLL_DONT_INSERT
);
7854 overlay_events_enabled
= 0;
7858 /* Set an active std::terminate breakpoint for each std::terminate
7859 master breakpoint. */
7861 set_std_terminate_breakpoint (void)
7863 for (breakpoint
&b
: all_breakpoints_safe ())
7864 if (b
.pspace
== current_program_space
7865 && b
.type
== bp_std_terminate_master
)
7867 momentary_breakpoint_from_master (&b
, bp_std_terminate
, 1,
7868 inferior_thread ()->global_num
);
7872 /* Delete all the std::terminate breakpoints. */
7874 delete_std_terminate_breakpoint (void)
7876 for (breakpoint
&b
: all_breakpoints_safe ())
7877 if (b
.type
== bp_std_terminate
)
7878 delete_breakpoint (&b
);
7882 create_thread_event_breakpoint (struct gdbarch
*gdbarch
, CORE_ADDR address
)
7884 struct breakpoint
*b
;
7886 b
= create_internal_breakpoint (gdbarch
, address
, bp_thread_event
);
7888 b
->enable_state
= bp_enabled
;
7889 /* locspec has to be used or breakpoint_re_set will delete me. */
7890 b
->locspec
= new_address_location_spec (b
->first_loc ().address
, NULL
, 0);
7892 update_global_location_list_nothrow (UGLL_MAY_INSERT
);
7897 struct lang_and_radix
7903 /* Create a breakpoint for JIT code registration and unregistration. */
7906 create_jit_event_breakpoint (struct gdbarch
*gdbarch
, CORE_ADDR address
)
7908 return create_internal_breakpoint (gdbarch
, address
, bp_jit_event
);
7911 /* Remove JIT code registration and unregistration breakpoint(s). */
7914 remove_jit_event_breakpoints (void)
7916 for (breakpoint
&b
: all_breakpoints_safe ())
7917 if (b
.type
== bp_jit_event
7918 && b
.first_loc ().pspace
== current_program_space
)
7919 delete_breakpoint (&b
);
7923 remove_solib_event_breakpoints (void)
7925 for (breakpoint
&b
: all_breakpoints_safe ())
7926 if (b
.type
== bp_shlib_event
7927 && b
.first_loc ().pspace
== current_program_space
)
7928 delete_breakpoint (&b
);
7931 /* See breakpoint.h. */
7934 remove_solib_event_breakpoints_at_next_stop (void)
7936 for (breakpoint
&b
: all_breakpoints_safe ())
7937 if (b
.type
== bp_shlib_event
7938 && b
.first_loc ().pspace
== current_program_space
)
7939 b
.disposition
= disp_del_at_next_stop
;
7942 /* Helper for create_solib_event_breakpoint /
7943 create_and_insert_solib_event_breakpoint. Allows specifying which
7944 INSERT_MODE to pass through to update_global_location_list. */
7946 static struct breakpoint
*
7947 create_solib_event_breakpoint_1 (struct gdbarch
*gdbarch
, CORE_ADDR address
,
7948 enum ugll_insert_mode insert_mode
)
7950 struct breakpoint
*b
;
7952 b
= create_internal_breakpoint (gdbarch
, address
, bp_shlib_event
);
7953 update_global_location_list_nothrow (insert_mode
);
7958 create_solib_event_breakpoint (struct gdbarch
*gdbarch
, CORE_ADDR address
)
7960 return create_solib_event_breakpoint_1 (gdbarch
, address
, UGLL_MAY_INSERT
);
7963 /* See breakpoint.h. */
7966 create_and_insert_solib_event_breakpoint (struct gdbarch
*gdbarch
, CORE_ADDR address
)
7968 struct breakpoint
*b
;
7970 /* Explicitly tell update_global_location_list to insert
7972 b
= create_solib_event_breakpoint_1 (gdbarch
, address
, UGLL_INSERT
);
7973 if (!b
->first_loc ().inserted
)
7975 delete_breakpoint (b
);
7981 /* See breakpoint.h. */
7984 disable_breakpoints_in_shlibs (program_space
*pspace
)
7986 for (bp_location
*loc
: all_bp_locations ())
7988 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
7989 struct breakpoint
*b
= loc
->owner
;
7991 /* We apply the check to all breakpoints, including disabled for
7992 those with loc->duplicate set. This is so that when breakpoint
7993 becomes enabled, or the duplicate is removed, gdb will try to
7994 insert all breakpoints. If we don't set shlib_disabled here,
7995 we'll try to insert those breakpoints and fail. */
7996 if (((b
->type
== bp_breakpoint
)
7997 || (b
->type
== bp_jit_event
)
7998 || (b
->type
== bp_hardware_breakpoint
)
7999 || (is_tracepoint (b
)))
8000 && loc
->pspace
== pspace
8001 && !loc
->shlib_disabled
8002 && solib_name_from_address (loc
->pspace
, loc
->address
)
8005 loc
->shlib_disabled
= 1;
8010 /* Disable any breakpoints and tracepoints that are in SOLIB upon
8011 notification of unloaded_shlib. Only apply to enabled breakpoints,
8012 disabled ones can just stay disabled. */
8015 disable_breakpoints_in_unloaded_shlib (program_space
*pspace
, const solib
&solib
)
8017 bool disabled_shlib_breaks
= false;
8019 for (bp_location
*loc
: all_bp_locations ())
8021 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
8022 struct breakpoint
*b
= loc
->owner
;
8024 if (pspace
== loc
->pspace
8025 && !loc
->shlib_disabled
8026 && (((b
->type
== bp_breakpoint
8027 || b
->type
== bp_jit_event
8028 || b
->type
== bp_hardware_breakpoint
)
8029 && (loc
->loc_type
== bp_loc_hardware_breakpoint
8030 || loc
->loc_type
== bp_loc_software_breakpoint
))
8031 || is_tracepoint (b
))
8032 && solib_contains_address_p (solib
, loc
->address
))
8034 loc
->shlib_disabled
= 1;
8035 /* At this point, we cannot rely on remove_breakpoint
8036 succeeding so we must mark the breakpoint as not inserted
8037 to prevent future errors occurring in remove_breakpoints. */
8040 /* This may cause duplicate notifications for the same breakpoint. */
8041 notify_breakpoint_modified (b
);
8043 if (!disabled_shlib_breaks
)
8045 target_terminal::ours_for_output ();
8046 warning (_("Temporarily disabling breakpoints "
8047 "for unloaded shared library \"%s\""),
8048 solib
.so_name
.c_str ());
8050 disabled_shlib_breaks
= true;
8055 /* Disable any breakpoints and tracepoints in OBJFILE upon
8056 notification of free_objfile. Only apply to enabled breakpoints,
8057 disabled ones can just stay disabled. */
8060 disable_breakpoints_in_freed_objfile (struct objfile
*objfile
)
8062 /* OBJF_SHARED|OBJF_USERLOADED objfiles are dynamic modules manually
8063 managed by the user with add-symbol-file/remove-symbol-file.
8064 Similarly to how breakpoints in shared libraries are handled in
8065 response to "nosharedlibrary", mark breakpoints in such modules
8066 shlib_disabled so they end up uninserted on the next global
8067 location list update. Shared libraries not loaded by the user
8068 aren't handled here -- they're already handled in
8069 disable_breakpoints_in_unloaded_shlib, called by solib.c's
8070 solib_unloaded observer. We skip objfiles that are not
8071 OBJF_SHARED as those aren't considered dynamic objects (e.g. the
8073 if ((objfile
->flags
& OBJF_SHARED
) == 0
8074 || (objfile
->flags
& OBJF_USERLOADED
) == 0)
8077 for (breakpoint
&b
: all_breakpoints ())
8079 bool bp_modified
= false;
8081 if (!is_breakpoint (&b
) && !is_tracepoint (&b
))
8084 for (bp_location
&loc
: b
.locations ())
8086 CORE_ADDR loc_addr
= loc
.address
;
8088 if (loc
.loc_type
!= bp_loc_hardware_breakpoint
8089 && loc
.loc_type
!= bp_loc_software_breakpoint
)
8092 if (loc
.shlib_disabled
!= 0)
8095 if (objfile
->pspace
!= loc
.pspace
)
8098 if (loc
.loc_type
!= bp_loc_hardware_breakpoint
8099 && loc
.loc_type
!= bp_loc_software_breakpoint
)
8102 if (is_addr_in_objfile (loc_addr
, objfile
))
8104 loc
.shlib_disabled
= 1;
8105 /* At this point, we don't know whether the object was
8106 unmapped from the inferior or not, so leave the
8107 inserted flag alone. We'll handle failure to
8108 uninsert quietly, in case the object was indeed
8111 mark_breakpoint_location_modified (&loc
);
8118 notify_breakpoint_modified (&b
);
8122 /* See breakpoint.h. */
8124 breakpoint::breakpoint (struct gdbarch
*gdbarch_
, enum bptype bptype
,
8125 bool temp
, const char *cond_string_
)
8127 disposition (temp
? disp_del
: disp_donttouch
),
8129 language (current_language
->la_language
),
8130 input_radix (::input_radix
),
8131 cond_string (cond_string_
!= nullptr
8132 ? make_unique_xstrdup (cond_string_
)
8134 related_breakpoint (this)
8138 /* See breakpoint.h. */
8140 catchpoint::catchpoint (struct gdbarch
*gdbarch
, bool temp
,
8141 const char *cond_string
)
8142 : breakpoint (gdbarch
, bp_catchpoint
, temp
, cond_string
)
8144 add_dummy_location (this, current_program_space
);
8146 pspace
= current_program_space
;
8149 /* Notify interpreters and observers that breakpoint B was created. */
8152 notify_breakpoint_created (breakpoint
*b
)
8154 interps_notify_breakpoint_created (b
);
8155 gdb::observers::breakpoint_created
.notify (b
);
8159 install_breakpoint (int internal
, std::unique_ptr
<breakpoint
> &&arg
, int update_gll
)
8161 breakpoint
*b
= add_to_breakpoint_chain (std::move (arg
));
8162 set_breakpoint_number (internal
, b
);
8163 if (is_tracepoint (b
))
8164 set_tracepoint_count (breakpoint_count
);
8168 notify_breakpoint_created (b
);
8171 update_global_location_list (UGLL_MAY_INSERT
);
8177 hw_breakpoint_used_count (void)
8181 for (breakpoint
&b
: all_breakpoints ())
8182 if (b
.type
== bp_hardware_breakpoint
&& breakpoint_enabled (&b
))
8183 for (bp_location
&bl
: b
.locations ())
8185 /* Special types of hardware breakpoints may use more than
8187 i
+= b
.resources_needed (&bl
);
8193 /* Returns the resources B would use if it were a hardware
8197 hw_watchpoint_use_count (struct breakpoint
*b
)
8201 if (!breakpoint_enabled (b
))
8204 for (bp_location
&bl
: b
->locations ())
8206 /* Special types of hardware watchpoints may use more than
8208 i
+= b
->resources_needed (&bl
);
8214 /* Returns the sum the used resources of all hardware watchpoints of
8215 type TYPE in the breakpoints list. Also returns in OTHER_TYPE_USED
8216 the sum of the used resources of all hardware watchpoints of other
8217 types _not_ TYPE. */
8220 hw_watchpoint_used_count_others (struct breakpoint
*except
,
8221 enum bptype type
, int *other_type_used
)
8225 *other_type_used
= 0;
8226 for (breakpoint
&b
: all_breakpoints ())
8230 if (!breakpoint_enabled (&b
))
8234 i
+= hw_watchpoint_use_count (&b
);
8235 else if (is_hardware_watchpoint (&b
))
8236 *other_type_used
= 1;
8243 disable_watchpoints_before_interactive_call_start (void)
8245 for (breakpoint
&b
: all_breakpoints ())
8246 if (is_watchpoint (&b
) && breakpoint_enabled (&b
))
8248 b
.enable_state
= bp_call_disabled
;
8249 update_global_location_list (UGLL_DONT_INSERT
);
8254 enable_watchpoints_after_interactive_call_stop (void)
8256 for (breakpoint
&b
: all_breakpoints ())
8257 if (is_watchpoint (&b
) && b
.enable_state
== bp_call_disabled
)
8259 b
.enable_state
= bp_enabled
;
8260 update_global_location_list (UGLL_MAY_INSERT
);
8265 disable_breakpoints_before_startup (void)
8267 current_program_space
->executing_startup
= 1;
8268 update_global_location_list (UGLL_DONT_INSERT
);
8272 enable_breakpoints_after_startup (void)
8274 current_program_space
->executing_startup
= 0;
8275 breakpoint_re_set ();
8278 /* Allocate a new momentary breakpoint. */
8280 template<typename
... Arg
>
8281 static momentary_breakpoint
*
8282 new_momentary_breakpoint (struct gdbarch
*gdbarch
, enum bptype type
,
8285 if (type
== bp_longjmp
|| type
== bp_exception
)
8286 return new longjmp_breakpoint (gdbarch
, type
,
8287 std::forward
<Arg
> (args
)...);
8289 return new momentary_breakpoint (gdbarch
, type
,
8290 std::forward
<Arg
> (args
)...);
8293 /* Set a momentary breakpoint of type TYPE at address specified by
8294 SAL. If FRAME_ID is valid, the breakpoint is restricted to that
8298 set_momentary_breakpoint (struct gdbarch
*gdbarch
, struct symtab_and_line sal
,
8299 struct frame_id frame_id
, enum bptype type
)
8301 /* If FRAME_ID is valid, it should be a real frame, not an inlined or
8303 gdb_assert (!frame_id_artificial_p (frame_id
));
8305 std::unique_ptr
<momentary_breakpoint
> b
8306 (new_momentary_breakpoint (gdbarch
, type
, sal
.pspace
, frame_id
,
8307 inferior_thread ()->global_num
));
8309 b
->add_location (sal
);
8311 breakpoint_up
bp (add_to_breakpoint_chain (std::move (b
)));
8313 update_global_location_list_nothrow (UGLL_MAY_INSERT
);
8318 /* Make a momentary breakpoint based on the master breakpoint ORIG.
8319 The new breakpoint will have type TYPE, use OPS as its
8320 breakpoint_ops, and will set enabled to LOC_ENABLED. */
8322 static struct breakpoint
*
8323 momentary_breakpoint_from_master (struct breakpoint
*orig
,
8328 std::unique_ptr
<breakpoint
> copy
8329 (new_momentary_breakpoint (orig
->gdbarch
, type
, orig
->pspace
,
8330 orig
->frame_id
, thread
));
8331 const bp_location
&orig_loc
= orig
->first_loc ();
8332 bp_location
*copy_loc
= copy
->allocate_location ();
8333 copy
->add_location (*copy_loc
);
8334 set_breakpoint_location_function (copy_loc
);
8336 copy_loc
->gdbarch
= orig_loc
.gdbarch
;
8337 copy_loc
->requested_address
= orig_loc
.requested_address
;
8338 copy_loc
->address
= orig_loc
.address
;
8339 copy_loc
->section
= orig_loc
.section
;
8340 copy_loc
->pspace
= orig_loc
.pspace
;
8341 copy_loc
->probe
= orig_loc
.probe
;
8342 copy_loc
->line_number
= orig_loc
.line_number
;
8343 copy_loc
->symtab
= orig_loc
.symtab
;
8344 copy_loc
->enabled
= loc_enabled
;
8346 breakpoint
*b
= add_to_breakpoint_chain (std::move (copy
));
8347 update_global_location_list_nothrow (UGLL_DONT_INSERT
);
8351 /* Make a deep copy of momentary breakpoint ORIG. Returns NULL if
8355 clone_momentary_breakpoint (struct breakpoint
*orig
)
8357 /* If there's nothing to clone, then return nothing. */
8361 return momentary_breakpoint_from_master (orig
, orig
->type
, 0,
8366 set_momentary_breakpoint_at_pc (struct gdbarch
*gdbarch
, CORE_ADDR pc
,
8369 struct symtab_and_line sal
;
8371 sal
= find_pc_line (pc
, 0);
8373 sal
.section
= find_pc_overlay (pc
);
8374 sal
.explicit_pc
= 1;
8376 return set_momentary_breakpoint (gdbarch
, sal
, null_frame_id
, type
);
8380 /* Tell the user we have just set a breakpoint B. */
8383 mention (const breakpoint
*b
)
8385 b
->print_mention ();
8386 current_uiout
->text ("\n");
8390 static bool bp_loc_is_permanent (struct bp_location
*loc
);
8392 /* Handle "set breakpoint auto-hw on".
8394 If the explicitly specified breakpoint type is not hardware
8395 breakpoint, check the memory map to see whether the breakpoint
8396 address is in read-only memory.
8398 - location type is not hardware breakpoint, memory is read-only.
8399 We change the type of the location to hardware breakpoint.
8401 - location type is hardware breakpoint, memory is read-write. This
8402 means we've previously made the location hardware one, but then the
8403 memory map changed, so we undo.
8407 handle_automatic_hardware_breakpoints (bp_location
*bl
)
8409 if (automatic_hardware_breakpoints
8410 && bl
->owner
->type
!= bp_hardware_breakpoint
8411 && (bl
->loc_type
== bp_loc_software_breakpoint
8412 || bl
->loc_type
== bp_loc_hardware_breakpoint
))
8414 /* When breakpoints are removed, remove_breakpoints will use
8415 location types we've just set here, the only possible problem
8416 is that memory map has changed during running program, but
8417 it's not going to work anyway with current gdb. */
8418 mem_region
*mr
= lookup_mem_region (bl
->address
);
8422 enum bp_loc_type new_type
;
8424 if (mr
->attrib
.mode
!= MEM_RW
)
8425 new_type
= bp_loc_hardware_breakpoint
;
8427 new_type
= bp_loc_software_breakpoint
;
8429 if (new_type
!= bl
->loc_type
)
8431 static bool said
= false;
8433 bl
->loc_type
= new_type
;
8436 gdb_printf (_("Note: automatically using "
8437 "hardware breakpoints for "
8438 "read-only addresses.\n"));
8447 code_breakpoint::add_location (const symtab_and_line
&sal
)
8449 CORE_ADDR adjusted_address
;
8450 struct gdbarch
*loc_gdbarch
= get_sal_arch (sal
);
8452 if (loc_gdbarch
== NULL
)
8453 loc_gdbarch
= gdbarch
;
8455 /* Adjust the breakpoint's address prior to allocating a location.
8456 Once we call allocate_location(), that mostly uninitialized
8457 location will be placed on the location chain. Adjustment of the
8458 breakpoint may cause target_read_memory() to be called and we do
8459 not want its scan of the location chain to find a breakpoint and
8460 location that's only been partially initialized. */
8461 adjusted_address
= adjust_breakpoint_address (loc_gdbarch
,
8465 /* Sort the locations by their ADDRESS. */
8466 bp_location
*new_loc
= this->allocate_location ();
8468 new_loc
->requested_address
= sal
.pc
;
8469 new_loc
->address
= adjusted_address
;
8470 new_loc
->pspace
= sal
.pspace
;
8471 new_loc
->probe
.prob
= sal
.prob
;
8472 new_loc
->probe
.objfile
= sal
.objfile
;
8473 gdb_assert (new_loc
->pspace
!= NULL
);
8474 new_loc
->section
= sal
.section
;
8475 new_loc
->gdbarch
= loc_gdbarch
;
8476 new_loc
->line_number
= sal
.line
;
8477 new_loc
->symtab
= sal
.symtab
;
8478 new_loc
->symbol
= sal
.symbol
;
8479 new_loc
->msymbol
= sal
.msymbol
;
8480 new_loc
->objfile
= sal
.objfile
;
8482 breakpoint::add_location (*new_loc
);
8484 set_breakpoint_location_function (new_loc
);
8486 /* While by definition, permanent breakpoints are already present in the
8487 code, we don't mark the location as inserted. Normally one would expect
8488 that GDB could rely on that breakpoint instruction to stop the program,
8489 thus removing the need to insert its own breakpoint, except that executing
8490 the breakpoint instruction can kill the target instead of reporting a
8491 SIGTRAP. E.g., on SPARC, when interrupts are disabled, executing the
8492 instruction resets the CPU, so QEMU 2.0.0 for SPARC correspondingly dies
8493 with "Trap 0x02 while interrupts disabled, Error state". Letting the
8494 breakpoint be inserted normally results in QEMU knowing about the GDB
8495 breakpoint, and thus trap before the breakpoint instruction is executed.
8496 (If GDB later needs to continue execution past the permanent breakpoint,
8497 it manually increments the PC, thus avoiding executing the breakpoint
8499 if (bp_loc_is_permanent (new_loc
))
8500 new_loc
->permanent
= 1;
8506 /* Return true if LOC is pointing to a permanent breakpoint,
8507 return false otherwise. */
8510 bp_loc_is_permanent (struct bp_location
*loc
)
8512 gdb_assert (loc
!= NULL
);
8514 /* If we have a non-breakpoint-backed catchpoint or a software
8515 watchpoint, just return 0. We should not attempt to read from
8516 the addresses the locations of these breakpoint types point to.
8517 gdbarch_program_breakpoint_here_p, below, will attempt to read
8519 if (!bl_address_is_meaningful (loc
))
8522 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
8523 switch_to_program_space_and_thread (loc
->pspace
);
8524 return gdbarch_program_breakpoint_here_p (loc
->gdbarch
, loc
->address
);
8527 /* Build a command list for the dprintf corresponding to the current
8528 settings of the dprintf style options. */
8531 update_dprintf_command_list (struct breakpoint
*b
)
8533 gdb_assert (b
->type
== bp_dprintf
);
8534 gdb_assert (b
->extra_string
!= nullptr);
8536 const char *dprintf_args
= b
->extra_string
.get ();
8537 gdb::unique_xmalloc_ptr
<char> printf_line
= nullptr;
8539 /* Trying to create a dprintf breakpoint without a format and args
8540 string should be detected at creation time. */
8541 gdb_assert (dprintf_args
!= nullptr);
8543 dprintf_args
= skip_spaces (dprintf_args
);
8545 /* Allow a comma, as it may have terminated a location, but don't
8547 if (*dprintf_args
== ',')
8549 dprintf_args
= skip_spaces (dprintf_args
);
8551 if (*dprintf_args
!= '"')
8552 error (_("Bad format string, missing '\"'."));
8554 if (strcmp (dprintf_style
, dprintf_style_gdb
) == 0)
8555 printf_line
= xstrprintf ("printf %s", dprintf_args
);
8556 else if (strcmp (dprintf_style
, dprintf_style_call
) == 0)
8558 if (dprintf_function
.empty ())
8559 error (_("No function supplied for dprintf call"));
8561 if (!dprintf_channel
.empty ())
8562 printf_line
= xstrprintf ("call (void) %s (%s,%s)",
8563 dprintf_function
.c_str (),
8564 dprintf_channel
.c_str (),
8567 printf_line
= xstrprintf ("call (void) %s (%s)",
8568 dprintf_function
.c_str (),
8571 else if (strcmp (dprintf_style
, dprintf_style_agent
) == 0)
8573 if (target_can_run_breakpoint_commands ())
8574 printf_line
= xstrprintf ("agent-printf %s", dprintf_args
);
8577 warning (_("Target cannot run dprintf commands, falling back to GDB printf"));
8578 printf_line
= xstrprintf ("printf %s", dprintf_args
);
8582 internal_error (_("Invalid dprintf style."));
8584 gdb_assert (printf_line
!= NULL
);
8586 /* Manufacture a printf sequence. */
8587 struct command_line
*printf_cmd_line
8588 = new struct command_line (simple_control
, printf_line
.release ());
8589 breakpoint_set_commands (b
, counted_command_line (printf_cmd_line
,
8590 command_lines_deleter ()));
8593 /* Update all dprintf commands, making their command lists reflect
8594 current style settings. */
8597 update_dprintf_commands (const char *args
, int from_tty
,
8598 struct cmd_list_element
*c
)
8600 for (breakpoint
&b
: all_breakpoints ())
8601 if (b
.type
== bp_dprintf
)
8602 update_dprintf_command_list (&b
);
8605 code_breakpoint::code_breakpoint (struct gdbarch
*gdbarch_
,
8607 gdb::array_view
<const symtab_and_line
> sals
,
8608 location_spec_up
&&locspec_
,
8609 gdb::unique_xmalloc_ptr
<char> filter_
,
8610 gdb::unique_xmalloc_ptr
<char> cond_string_
,
8611 gdb::unique_xmalloc_ptr
<char> extra_string_
,
8612 enum bpdisp disposition_
,
8613 int thread_
, int task_
, int inferior_
,
8616 int enabled_
, unsigned flags
,
8617 int display_canonical_
)
8618 : breakpoint (gdbarch_
, type_
)
8622 if (type
== bp_hardware_breakpoint
)
8624 int target_resources_ok
;
8626 i
= hw_breakpoint_used_count ();
8627 target_resources_ok
=
8628 target_can_use_hardware_watchpoint (bp_hardware_breakpoint
,
8630 if (target_resources_ok
== 0)
8631 error (_("No hardware breakpoint support in the target."));
8632 else if (target_resources_ok
< 0)
8633 error (_("Hardware breakpoints used exceeds limit."));
8636 gdb_assert (!sals
.empty ());
8638 /* At most one of thread, task, or inferior can be set on any breakpoint. */
8639 gdb_assert (((thread
== -1 ? 0 : 1)
8640 + (task
== -1 ? 0 : 1)
8641 + (inferior
== -1 ? 0 : 1)) <= 1);
8645 inferior
= inferior_
;
8647 cond_string
= std::move (cond_string_
);
8648 extra_string
= std::move (extra_string_
);
8649 ignore_count
= ignore_count_
;
8650 enable_state
= enabled_
? bp_enabled
: bp_disabled
;
8651 disposition
= disposition_
;
8653 if (type
== bp_static_tracepoint
8654 || type
== bp_static_marker_tracepoint
)
8656 auto *t
= gdb::checked_static_cast
<tracepoint
*> (this);
8657 struct static_tracepoint_marker marker
;
8659 if (strace_marker_p (this))
8661 /* We already know the marker exists, otherwise, we wouldn't
8662 see a sal for it. */
8663 const char *p
= &locspec_
->to_string ()[3];
8666 p
= skip_spaces (p
);
8668 endp
= skip_to_space (p
);
8670 t
->static_trace_marker_id
.assign (p
, endp
- p
);
8672 gdb_printf (_("Probed static tracepoint marker \"%s\"\n"),
8673 t
->static_trace_marker_id
.c_str ());
8675 else if (target_static_tracepoint_marker_at (sals
[0].pc
, &marker
))
8677 t
->static_trace_marker_id
= std::move (marker
.str_id
);
8679 gdb_printf (_("Probed static tracepoint marker \"%s\"\n"),
8680 t
->static_trace_marker_id
.c_str ());
8683 warning (_("Couldn't determine the static tracepoint marker to probe"));
8686 for (const auto &sal
: sals
)
8690 struct gdbarch
*loc_gdbarch
= get_sal_arch (sal
);
8691 if (loc_gdbarch
== nullptr)
8692 loc_gdbarch
= gdbarch
;
8694 describe_other_breakpoints (loc_gdbarch
,
8695 sal
.pspace
, sal
.pc
, sal
.section
, thread
);
8698 bp_location
*new_loc
= add_location (sal
);
8699 if ((flags
& CREATE_BREAKPOINT_FLAGS_INSERTED
) != 0)
8700 new_loc
->inserted
= 1;
8702 /* Do not set breakpoint locations conditions yet. As locations
8703 are inserted, they get sorted based on their addresses. Let
8704 the list stabilize to have reliable location numbers. */
8707 /* Dynamic printf requires and uses additional arguments on the
8708 command line, otherwise it's an error. */
8709 if (type
== bp_dprintf
)
8710 update_dprintf_command_list (this);
8711 else if (extra_string
!= nullptr)
8712 error (_("Garbage '%s' at end of command"), extra_string
.get ());
8714 /* The order of the locations is now stable. Set the location
8715 condition using the location's number. */
8717 for (bp_location
&bl
: locations ())
8719 if (cond_string
!= nullptr)
8720 set_breakpoint_location_condition (cond_string
.get (), &bl
,
8726 display_canonical
= display_canonical_
;
8727 if (locspec_
!= nullptr)
8728 locspec
= std::move (locspec_
);
8730 locspec
= new_address_location_spec (this->first_loc ().address
, NULL
, 0);
8731 filter
= std::move (filter_
);
8735 create_breakpoint_sal (struct gdbarch
*gdbarch
,
8736 gdb::array_view
<const symtab_and_line
> sals
,
8737 location_spec_up
&&locspec
,
8738 gdb::unique_xmalloc_ptr
<char> filter
,
8739 gdb::unique_xmalloc_ptr
<char> cond_string
,
8740 gdb::unique_xmalloc_ptr
<char> extra_string
,
8741 enum bptype type
, enum bpdisp disposition
,
8742 int thread
, int task
, int inferior
, int ignore_count
,
8744 int enabled
, int internal
, unsigned flags
,
8745 int display_canonical
)
8747 std::unique_ptr
<code_breakpoint
> b
8748 = new_breakpoint_from_type (gdbarch
,
8751 std::move (locspec
),
8753 std::move (cond_string
),
8754 std::move (extra_string
),
8756 thread
, task
, inferior
, ignore_count
,
8761 install_breakpoint (internal
, std::move (b
), 0);
8764 /* Add SALS.nelts breakpoints to the breakpoint table. For each
8765 SALS.sal[i] breakpoint, include the corresponding ADDR_STRING[i]
8766 value. COND_STRING, if not NULL, specified the condition to be
8767 used for all breakpoints. Essentially the only case where
8768 SALS.nelts is not 1 is when we set a breakpoint on an overloaded
8769 function. In that case, it's still not possible to specify
8770 separate conditions for different overloaded functions, so
8771 we take just a single condition string.
8773 NOTE: If the function succeeds, the caller is expected to cleanup
8774 the arrays ADDR_STRING, COND_STRING, and SALS (but not the
8775 array contents). If the function fails (error() is called), the
8776 caller is expected to cleanups both the ADDR_STRING, COND_STRING,
8777 COND and SALS arrays and each of those arrays contents. */
8780 create_breakpoints_sal (struct gdbarch
*gdbarch
,
8781 struct linespec_result
*canonical
,
8782 gdb::unique_xmalloc_ptr
<char> cond_string
,
8783 gdb::unique_xmalloc_ptr
<char> extra_string
,
8784 enum bptype type
, enum bpdisp disposition
,
8785 int thread
, int task
, int inferior
,
8788 int enabled
, int internal
, unsigned flags
)
8790 if (canonical
->pre_expanded
)
8791 gdb_assert (canonical
->lsals
.size () == 1);
8793 for (const auto &lsal
: canonical
->lsals
)
8795 /* Note that 'location' can be NULL in the case of a plain
8796 'break', without arguments. */
8797 location_spec_up locspec
8798 = (canonical
->locspec
!= nullptr
8799 ? canonical
->locspec
->clone ()
8801 gdb::unique_xmalloc_ptr
<char> filter_string
8802 (lsal
.canonical
!= NULL
? xstrdup (lsal
.canonical
) : NULL
);
8804 create_breakpoint_sal (gdbarch
, lsal
.sals
,
8805 std::move (locspec
),
8806 std::move (filter_string
),
8807 std::move (cond_string
),
8808 std::move (extra_string
),
8810 thread
, task
, inferior
, ignore_count
,
8811 from_tty
, enabled
, internal
, flags
,
8812 canonical
->special_display
);
8816 /* Parse LOCSPEC which is assumed to be a SAL specification possibly
8817 followed by conditionals. On return, SALS contains an array of SAL
8818 addresses found. LOCSPEC points to the end of the SAL (for
8821 The array and the line spec strings are allocated on the heap, it is
8822 the caller's responsibility to free them. */
8825 parse_breakpoint_sals (location_spec
*locspec
,
8826 struct linespec_result
*canonical
)
8828 struct symtab_and_line cursal
;
8830 if (locspec
->type () == LINESPEC_LOCATION_SPEC
)
8833 = as_linespec_location_spec (locspec
)->spec_string
.get ();
8837 /* The last displayed codepoint, if it's valid, is our default
8838 breakpoint address. */
8839 if (last_displayed_sal_is_valid ())
8841 /* Set sal's pspace, pc, symtab, and line to the values
8842 corresponding to the last call to print_frame_info.
8843 Be sure to reinitialize LINE with NOTCURRENT == 0
8844 as the breakpoint line number is inappropriate otherwise.
8845 find_pc_line would adjust PC, re-set it back. */
8846 symtab_and_line sal
= get_last_displayed_sal ();
8847 CORE_ADDR pc
= sal
.pc
;
8849 sal
= find_pc_line (pc
, 0);
8851 /* "break" without arguments is equivalent to "break *PC"
8852 where PC is the last displayed codepoint's address. So
8853 make sure to set sal.explicit_pc to prevent GDB from
8854 trying to expand the list of sals to include all other
8855 instances with the same symtab and line. */
8857 sal
.explicit_pc
= 1;
8859 struct linespec_sals lsal
;
8861 lsal
.canonical
= NULL
;
8863 canonical
->lsals
.push_back (std::move (lsal
));
8867 error (_("No default breakpoint address now."));
8871 /* Force almost all breakpoints to be in terms of the
8872 current_source_symtab (which is decode_line_1's default).
8873 This should produce the results we want almost all of the
8874 time while leaving default_breakpoint_* alone.
8876 ObjC: However, don't match an Objective-C method name which
8877 may have a '+' or '-' succeeded by a '['. */
8878 cursal
= get_current_source_symtab_and_line ();
8879 if (last_displayed_sal_is_valid ())
8881 const char *spec
= NULL
;
8883 if (locspec
->type () == LINESPEC_LOCATION_SPEC
)
8884 spec
= as_linespec_location_spec (locspec
)->spec_string
.get ();
8888 && strchr ("+-", spec
[0]) != NULL
8891 decode_line_full (locspec
, DECODE_LINE_FUNFIRSTLINE
, NULL
,
8892 get_last_displayed_symtab (),
8893 get_last_displayed_line (),
8894 canonical
, NULL
, NULL
);
8899 decode_line_full (locspec
, DECODE_LINE_FUNFIRSTLINE
, NULL
,
8900 cursal
.symtab
, cursal
.line
, canonical
, NULL
, NULL
);
8904 /* Convert each SAL into a real PC. Verify that the PC can be
8905 inserted as a breakpoint. If it can't throw an error. */
8908 breakpoint_sals_to_pc (std::vector
<symtab_and_line
> &sals
)
8910 for (auto &sal
: sals
)
8911 resolve_sal_pc (&sal
);
8914 /* Fast tracepoints may have restrictions on valid locations. For
8915 instance, a fast tracepoint using a jump instead of a trap will
8916 likely have to overwrite more bytes than a trap would, and so can
8917 only be placed where the instruction is longer than the jump, or a
8918 multi-instruction sequence does not have a jump into the middle of
8922 check_fast_tracepoint_sals (struct gdbarch
*gdbarch
,
8923 gdb::array_view
<const symtab_and_line
> sals
)
8925 for (const auto &sal
: sals
)
8927 struct gdbarch
*sarch
;
8929 sarch
= get_sal_arch (sal
);
8930 /* We fall back to GDBARCH if there is no architecture
8931 associated with SAL. */
8935 if (!gdbarch_fast_tracepoint_valid_at (sarch
, sal
.pc
, &msg
))
8936 error (_("May not have a fast tracepoint at %s%s"),
8937 paddress (sarch
, sal
.pc
), msg
.c_str ());
8941 /* Given TOK, a string specification of condition and thread, as accepted
8942 by the 'break' command, extract the condition string into *COND_STRING.
8943 If no condition string is found then *COND_STRING is set to nullptr.
8945 If the breakpoint specification has an associated thread, task, or
8946 inferior, these are extracted into *THREAD, *TASK, and *INFERIOR
8947 respectively, otherwise these arguments are set to -1 (for THREAD and
8948 INFERIOR) or 0 (for TASK).
8950 PC identifies the context at which the condition should be parsed. */
8953 find_condition_and_thread (const char *tok
, CORE_ADDR pc
,
8954 gdb::unique_xmalloc_ptr
<char> *cond_string
,
8955 int *thread
, int *inferior
, int *task
,
8956 gdb::unique_xmalloc_ptr
<char> *rest
)
8958 cond_string
->reset ();
8967 const char *end_tok
;
8969 const char *cond_start
= NULL
;
8970 const char *cond_end
= NULL
;
8972 tok
= skip_spaces (tok
);
8974 if ((*tok
== '"' || *tok
== ',') && rest
)
8976 rest
->reset (savestring (tok
, strlen (tok
)));
8980 end_tok
= skip_to_space (tok
);
8982 toklen
= end_tok
- tok
;
8984 if (toklen
>= 1 && strncmp (tok
, "if", toklen
) == 0)
8986 tok
= cond_start
= end_tok
+ 1;
8989 parse_exp_1 (&tok
, pc
, block_for_pc (pc
), 0);
8991 catch (const gdb_exception_error
&)
8996 tok
= tok
+ strlen (tok
);
8999 cond_string
->reset (savestring (cond_start
, cond_end
- cond_start
));
9001 else if (toklen
>= 1 && strncmp (tok
, "-force-condition", toklen
) == 0)
9006 else if (toklen
>= 1 && strncmp (tok
, "thread", toklen
) == 0)
9009 struct thread_info
*thr
;
9012 error(_("You can specify only one thread."));
9015 error (_("You can specify only one of thread or task."));
9017 if (*inferior
!= -1)
9018 error (_("You can specify only one of inferior or thread."));
9021 thr
= parse_thread_id (tok
, &tmptok
);
9023 error (_("Junk after thread keyword."));
9024 *thread
= thr
->global_num
;
9027 else if (toklen
>= 1 && strncmp (tok
, "inferior", toklen
) == 0)
9029 if (*inferior
!= -1)
9030 error(_("You can specify only one inferior."));
9033 error (_("You can specify only one of inferior or task."));
9036 error (_("You can specify only one of inferior or thread."));
9040 *inferior
= strtol (tok
, &tmptok
, 0);
9042 error (_("Junk after inferior keyword."));
9043 if (!valid_global_inferior_id (*inferior
))
9044 error (_("Unknown inferior number %d."), *inferior
);
9047 else if (toklen
>= 1 && strncmp (tok
, "task", toklen
) == 0)
9052 error(_("You can specify only one task."));
9055 error (_("You can specify only one of thread or task."));
9057 if (*inferior
!= -1)
9058 error (_("You can specify only one of inferior or task."));
9061 *task
= strtol (tok
, &tmptok
, 0);
9063 error (_("Junk after task keyword."));
9064 if (!valid_task_id (*task
))
9065 error (_("Unknown task %d."), *task
);
9070 rest
->reset (savestring (tok
, strlen (tok
)));
9074 error (_("Junk at end of arguments."));
9078 /* Call 'find_condition_and_thread' for each sal in SALS until a parse
9079 succeeds. The parsed values are written to COND_STRING, THREAD,
9080 TASK, and REST. See the comment of 'find_condition_and_thread'
9081 for the description of these parameters and INPUT. */
9084 find_condition_and_thread_for_sals (const std::vector
<symtab_and_line
> &sals
,
9086 gdb::unique_xmalloc_ptr
<char> *cond_string
,
9087 int *thread
, int *inferior
, int *task
,
9088 gdb::unique_xmalloc_ptr
<char> *rest
)
9090 int num_failures
= 0;
9091 for (auto &sal
: sals
)
9093 gdb::unique_xmalloc_ptr
<char> cond
;
9095 int inferior_id
= -1;
9097 gdb::unique_xmalloc_ptr
<char> remaining
;
9099 /* Here we want to parse 'arg' to separate condition from thread
9100 number. But because parsing happens in a context and the
9101 contexts of sals might be different, try each until there is
9102 success. Finding one successful parse is sufficient for our
9103 goal. When setting the breakpoint we'll re-parse the
9104 condition in the context of each sal. */
9107 find_condition_and_thread (input
, sal
.pc
, &cond
, &thread_id
,
9108 &inferior_id
, &task_id
, &remaining
);
9109 *cond_string
= std::move (cond
);
9110 /* A value of -1 indicates that these fields are unset. At most
9111 one of these fields should be set (to a value other than -1)
9113 gdb_assert (((thread_id
== -1 ? 1 : 0)
9114 + (task_id
== -1 ? 1 : 0)
9115 + (inferior_id
== -1 ? 1 : 0)) >= 2);
9116 *thread
= thread_id
;
9117 *inferior
= inferior_id
;
9119 *rest
= std::move (remaining
);
9122 catch (const gdb_exception_error
&e
)
9125 /* If no sal remains, do not continue. */
9126 if (num_failures
== sals
.size ())
9132 /* Decode a static tracepoint marker spec. */
9134 static std::vector
<symtab_and_line
>
9135 decode_static_tracepoint_spec (const char **arg_p
)
9137 const char *p
= &(*arg_p
)[3];
9140 p
= skip_spaces (p
);
9142 endp
= skip_to_space (p
);
9144 std::string
marker_str (p
, endp
- p
);
9146 std::vector
<static_tracepoint_marker
> markers
9147 = target_static_tracepoint_markers_by_strid (marker_str
.c_str ());
9148 if (markers
.empty ())
9149 error (_("No known static tracepoint marker named %s"),
9150 marker_str
.c_str ());
9152 std::vector
<symtab_and_line
> sals
;
9153 sals
.reserve (markers
.size ());
9155 for (const static_tracepoint_marker
&marker
: markers
)
9157 symtab_and_line sal
= find_pc_line (marker
.address
, 0);
9158 sal
.pc
= marker
.address
;
9159 sals
.push_back (sal
);
9166 /* Returns the breakpoint ops appropriate for use with with LOCATION_TYPE and
9167 according to IS_TRACEPOINT. */
9169 static const struct breakpoint_ops
*
9170 breakpoint_ops_for_location_spec_type (enum location_spec_type locspec_type
,
9175 if (locspec_type
== PROBE_LOCATION_SPEC
)
9176 return &tracepoint_probe_breakpoint_ops
;
9178 return &code_breakpoint_ops
;
9182 if (locspec_type
== PROBE_LOCATION_SPEC
)
9183 return &bkpt_probe_breakpoint_ops
;
9185 return &code_breakpoint_ops
;
9189 /* See breakpoint.h. */
9191 const struct breakpoint_ops
*
9192 breakpoint_ops_for_location_spec (const location_spec
*locspec
,
9195 if (locspec
!= nullptr)
9196 return (breakpoint_ops_for_location_spec_type
9197 (locspec
->type (), is_tracepoint
));
9198 return &code_breakpoint_ops
;
9201 /* See breakpoint.h. */
9204 create_breakpoint (struct gdbarch
*gdbarch
,
9205 location_spec
*locspec
,
9206 const char *cond_string
,
9207 int thread
, int inferior
,
9208 const char *extra_string
,
9209 bool force_condition
, int parse_extra
,
9210 int tempflag
, enum bptype type_wanted
,
9212 enum auto_boolean pending_break_support
,
9213 const struct breakpoint_ops
*ops
,
9214 int from_tty
, int enabled
, int internal
,
9217 struct linespec_result canonical
;
9218 bool pending
= false;
9220 int prev_bkpt_count
= breakpoint_count
;
9222 gdb_assert (thread
== -1 || thread
> 0);
9223 gdb_assert (inferior
== -1 || inferior
> 0);
9224 gdb_assert (thread
== -1 || inferior
== -1);
9226 /* If PARSE_EXTRA is true then the thread and inferior details will be
9227 parsed from the EXTRA_STRING, the THREAD and INFERIOR arguments
9229 gdb_assert (!parse_extra
|| thread
== -1);
9230 gdb_assert (!parse_extra
|| inferior
== -1);
9232 gdb_assert (ops
!= NULL
);
9234 /* If extra_string isn't useful, set it to NULL. */
9235 if (extra_string
!= NULL
&& *extra_string
== '\0')
9236 extra_string
= NULL
;
9238 /* A bp_dprintf must always have an accompanying EXTRA_STRING containing
9239 the dprintf format and arguments -- PARSE_EXTRA should always be false
9242 For all other breakpoint types, EXTRA_STRING should be nullptr unless
9243 PARSE_EXTRA is true. */
9244 gdb_assert ((type_wanted
== bp_dprintf
)
9245 ? (extra_string
!= nullptr && !parse_extra
)
9246 : (extra_string
== nullptr || parse_extra
));
9250 ops
->create_sals_from_location_spec (locspec
, &canonical
);
9252 catch (const gdb_exception_error
&e
)
9254 /* If caller is interested in rc value from parse, set
9256 if (e
.error
== NOT_FOUND_ERROR
)
9258 /* If pending breakpoint support is turned off, throw
9261 if (pending_break_support
== AUTO_BOOLEAN_FALSE
)
9264 exception_print (gdb_stderr
, e
);
9266 /* If pending breakpoint support is auto query and the user
9267 selects no, then simply return the error code. */
9268 if (pending_break_support
== AUTO_BOOLEAN_AUTO
9269 && !nquery (_("Make %s pending on future shared library load? "),
9270 bptype_string (type_wanted
)))
9273 /* At this point, either the user was queried about setting
9274 a pending breakpoint and selected yes, or pending
9275 breakpoint behavior is on and thus a pending breakpoint
9276 is defaulted on behalf of the user. */
9283 if (!pending
&& canonical
.lsals
.empty ())
9286 /* Resolve all line numbers to PC's and verify that the addresses
9287 are ok for the target. */
9290 for (auto &lsal
: canonical
.lsals
)
9291 breakpoint_sals_to_pc (lsal
.sals
);
9294 /* Fast tracepoints may have additional restrictions on location. */
9295 if (!pending
&& type_wanted
== bp_fast_tracepoint
)
9297 for (const auto &lsal
: canonical
.lsals
)
9298 check_fast_tracepoint_sals (gdbarch
, lsal
.sals
);
9301 /* Verify that condition can be parsed, before setting any
9302 breakpoints. Allocate a separate condition expression for each
9306 gdb::unique_xmalloc_ptr
<char> cond_string_copy
;
9307 gdb::unique_xmalloc_ptr
<char> extra_string_copy
;
9311 gdb_assert (type_wanted
!= bp_dprintf
);
9313 gdb::unique_xmalloc_ptr
<char> rest
;
9314 gdb::unique_xmalloc_ptr
<char> cond
;
9316 const linespec_sals
&lsal
= canonical
.lsals
[0];
9318 find_condition_and_thread_for_sals (lsal
.sals
, extra_string
,
9319 &cond
, &thread
, &inferior
,
9322 if (rest
.get () != nullptr && *(rest
.get ()) != '\0')
9323 error (_("Garbage '%s' at end of command"), rest
.get ());
9325 cond_string_copy
= std::move (cond
);
9326 extra_string_copy
= std::move (rest
);
9330 /* Check the validity of the condition. We should error out
9331 if the condition is invalid at all of the locations and
9332 if it is not forced. In the PARSE_EXTRA case above, this
9333 check is done when parsing the EXTRA_STRING. */
9334 if (cond_string
!= nullptr && !force_condition
)
9336 int num_failures
= 0;
9337 const linespec_sals
&lsal
= canonical
.lsals
[0];
9338 for (const auto &sal
: lsal
.sals
)
9340 const char *cond
= cond_string
;
9343 parse_exp_1 (&cond
, sal
.pc
, block_for_pc (sal
.pc
), 0);
9344 /* One success is sufficient to keep going. */
9347 catch (const gdb_exception_error
&)
9350 /* If this is the last sal, error out. */
9351 if (num_failures
== lsal
.sals
.size ())
9357 /* Create a private copy of condition string. */
9359 cond_string_copy
.reset (xstrdup (cond_string
));
9360 /* Create a private copy of any extra string. */
9362 extra_string_copy
.reset (xstrdup (extra_string
));
9365 ops
->create_breakpoints_sal (gdbarch
, &canonical
,
9366 std::move (cond_string_copy
),
9367 std::move (extra_string_copy
),
9369 tempflag
? disp_del
: disp_donttouch
,
9370 thread
, task
, inferior
, ignore_count
,
9371 from_tty
, enabled
, internal
, flags
);
9375 std::unique_ptr
<breakpoint
> b
= new_breakpoint_from_type (gdbarch
,
9377 b
->locspec
= locspec
->clone ();
9380 b
->cond_string
= NULL
;
9383 /* Create a private copy of condition string. */
9384 b
->cond_string
.reset (cond_string
!= NULL
9385 ? xstrdup (cond_string
)
9390 /* Create a private copy of any extra string. */
9391 b
->extra_string
.reset (extra_string
!= NULL
9392 ? xstrdup (extra_string
)
9394 b
->ignore_count
= ignore_count
;
9395 b
->disposition
= tempflag
? disp_del
: disp_donttouch
;
9396 b
->condition_not_parsed
= 1;
9397 b
->enable_state
= enabled
? bp_enabled
: bp_disabled
;
9398 if ((type_wanted
!= bp_breakpoint
9399 && type_wanted
!= bp_hardware_breakpoint
) || thread
!= -1)
9400 b
->pspace
= current_program_space
;
9402 install_breakpoint (internal
, std::move (b
), 0);
9405 if (canonical
.lsals
.size () > 1)
9407 warning (_("Multiple breakpoints were set.\nUse the "
9408 "\"delete\" command to delete unwanted breakpoints."));
9409 prev_breakpoint_count
= prev_bkpt_count
;
9412 update_global_location_list (UGLL_MAY_INSERT
);
9417 /* Set a breakpoint.
9418 ARG is a string describing breakpoint address,
9419 condition, and thread.
9420 FLAG specifies if a breakpoint is hardware on,
9421 and if breakpoint is temporary, using BP_HARDWARE_FLAG
9425 break_command_1 (const char *arg
, int flag
, int from_tty
)
9427 int tempflag
= flag
& BP_TEMPFLAG
;
9428 enum bptype type_wanted
= (flag
& BP_HARDWAREFLAG
9429 ? bp_hardware_breakpoint
9432 location_spec_up locspec
= string_to_location_spec (&arg
, current_language
);
9433 const struct breakpoint_ops
*ops
9434 = breakpoint_ops_for_location_spec (locspec
.get (),
9435 false /* is_tracepoint */);
9437 create_breakpoint (get_current_arch (),
9440 -1 /* thread */, -1 /* inferior */,
9441 arg
, false, 1 /* parse arg */,
9442 tempflag
, type_wanted
,
9443 0 /* Ignore count */,
9444 pending_break_support
,
9452 /* Helper function for break_command_1 and disassemble_command. */
9455 resolve_sal_pc (struct symtab_and_line
*sal
)
9459 if (sal
->pc
== 0 && sal
->symtab
!= NULL
)
9461 if (!find_line_pc (sal
->symtab
, sal
->line
, &pc
))
9462 error (_("No line %d in file \"%s\"."),
9463 sal
->line
, symtab_to_filename_for_display (sal
->symtab
));
9466 /* If this SAL corresponds to a breakpoint inserted using a line
9467 number, then skip the function prologue if necessary. */
9468 if (sal
->explicit_line
)
9469 skip_prologue_sal (sal
);
9472 if (sal
->section
== 0 && sal
->symtab
!= NULL
)
9474 const struct blockvector
*bv
;
9475 const struct block
*b
;
9478 bv
= blockvector_for_pc_sect (sal
->pc
, 0, &b
,
9479 sal
->symtab
->compunit ());
9482 sym
= b
->linkage_function ();
9485 = sym
->obj_section (sal
->symtab
->compunit ()->objfile ());
9488 /* It really is worthwhile to have the section, so we'll
9489 just have to look harder. This case can be executed
9490 if we have line numbers but no functions (as can
9491 happen in assembly source). */
9493 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
9494 switch_to_program_space_and_thread (sal
->pspace
);
9496 bound_minimal_symbol msym
= lookup_minimal_symbol_by_pc (sal
->pc
);
9498 sal
->section
= msym
.obj_section ();
9505 break_command (const char *arg
, int from_tty
)
9507 break_command_1 (arg
, 0, from_tty
);
9511 tbreak_command (const char *arg
, int from_tty
)
9513 break_command_1 (arg
, BP_TEMPFLAG
, from_tty
);
9517 hbreak_command (const char *arg
, int from_tty
)
9519 break_command_1 (arg
, BP_HARDWAREFLAG
, from_tty
);
9523 thbreak_command (const char *arg
, int from_tty
)
9525 break_command_1 (arg
, (BP_TEMPFLAG
| BP_HARDWAREFLAG
), from_tty
);
9528 /* The dynamic printf command is mostly like a regular breakpoint, but
9529 with a prewired command list consisting of a single output command,
9530 built from extra arguments supplied on the dprintf command
9534 dprintf_command (const char *arg
, int from_tty
)
9536 location_spec_up locspec
= string_to_location_spec (&arg
, current_language
);
9538 /* If non-NULL, ARG should have been advanced past the location;
9539 the next character must be ','. */
9540 if (arg
== nullptr || arg
[0] != ',' || arg
[1] == '\0')
9541 error (_("Format string required"));
9544 /* Skip the comma. */
9548 create_breakpoint (get_current_arch (),
9551 arg
, false, 0 /* parse arg */,
9553 0 /* Ignore count */,
9554 pending_break_support
,
9555 &code_breakpoint_ops
,
9563 agent_printf_command (const char *arg
, int from_tty
)
9565 error (_("May only run agent-printf on the target"));
9568 /* Implement the "breakpoint_hit" method for ranged breakpoints. */
9571 ranged_breakpoint::breakpoint_hit (const struct bp_location
*bl
,
9572 const address_space
*aspace
,
9574 const target_waitstatus
&ws
)
9576 if (ws
.kind () != TARGET_WAITKIND_STOPPED
9577 || ws
.sig () != GDB_SIGNAL_TRAP
)
9580 return breakpoint_address_match_range (bl
->pspace
->aspace
.get (),
9581 bl
->address
, bl
->length
, aspace
,
9585 /* Implement the "resources_needed" method for ranged breakpoints. */
9588 ranged_breakpoint::resources_needed (const struct bp_location
*bl
)
9590 return target_ranged_break_num_registers ();
9593 /* Implement the "print_it" method for ranged breakpoints. */
9595 enum print_stop_action
9596 ranged_breakpoint::print_it (const bpstat
*bs
) const
9598 struct ui_out
*uiout
= current_uiout
;
9600 gdb_assert (type
== bp_hardware_breakpoint
);
9602 /* Ranged breakpoints have only one location. */
9603 gdb_assert (this->has_single_location ());
9605 annotate_breakpoint (number
);
9607 maybe_print_thread_hit_breakpoint (uiout
);
9609 if (disposition
== disp_del
)
9610 uiout
->text ("Temporary ranged breakpoint ");
9612 uiout
->text ("Ranged breakpoint ");
9613 if (uiout
->is_mi_like_p ())
9615 uiout
->field_string ("reason",
9616 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT
));
9617 uiout
->field_string ("disp", bpdisp_text (disposition
));
9619 print_num_locno (bs
, uiout
);
9622 return PRINT_SRC_AND_LOC
;
9625 /* Implement the "print_one" method for ranged breakpoints. */
9628 ranged_breakpoint::print_one (const bp_location
**last_loc
) const
9630 struct value_print_options opts
;
9631 struct ui_out
*uiout
= current_uiout
;
9633 /* Ranged breakpoints have only one location. */
9634 gdb_assert (this->has_single_location ());
9636 get_user_print_options (&opts
);
9638 if (opts
.addressprint
)
9639 /* We don't print the address range here, it will be printed later
9640 by ranged_breakpoint::print_one_detail. */
9641 uiout
->field_skip ("addr");
9643 print_breakpoint_location (this, &this->first_loc ());
9644 *last_loc
= &this->first_loc ();
9649 /* Implement the "print_one_detail" method for ranged breakpoints. */
9652 ranged_breakpoint::print_one_detail (struct ui_out
*uiout
) const
9654 CORE_ADDR address_start
, address_end
;
9655 const bp_location
&bl
= this->first_loc ();
9658 address_start
= bl
.address
;
9659 address_end
= address_start
+ bl
.length
- 1;
9661 uiout
->text ("\taddress range: ");
9662 stb
.printf ("[%s, %s]",
9663 print_core_address (bl
.gdbarch
, address_start
),
9664 print_core_address (bl
.gdbarch
, address_end
));
9665 uiout
->field_stream ("addr", stb
);
9669 /* Implement the "print_mention" method for ranged breakpoints. */
9672 ranged_breakpoint::print_mention () const
9674 const bp_location
&bl
= this->first_loc ();
9675 struct ui_out
*uiout
= current_uiout
;
9677 gdb_assert (type
== bp_hardware_breakpoint
);
9679 uiout
->message (_("Hardware assisted ranged breakpoint %d from %s to %s."),
9680 number
, paddress (bl
.gdbarch
, bl
.address
),
9681 paddress (bl
.gdbarch
, bl
.address
+ bl
.length
- 1));
9684 /* Implement the "print_recreate" method for ranged breakpoints. */
9687 ranged_breakpoint::print_recreate (struct ui_file
*fp
) const
9689 gdb_printf (fp
, "break-range %s, %s",
9690 locspec
->to_string (),
9691 locspec_range_end
->to_string ());
9692 print_recreate_thread (fp
);
9695 /* Find the address where the end of the breakpoint range should be
9696 placed, given the SAL of the end of the range. This is so that if
9697 the user provides a line number, the end of the range is set to the
9698 last instruction of the given line. */
9701 find_breakpoint_range_end (struct symtab_and_line sal
)
9705 /* If the user provided a PC value, use it. Otherwise,
9706 find the address of the end of the given location. */
9707 if (sal
.explicit_pc
)
9714 ret
= find_line_pc_range (sal
, &start
, &end
);
9716 error (_("Could not find location of the end of the range."));
9718 /* find_line_pc_range returns the start of the next line. */
9725 /* Implement the "break-range" CLI command. */
9728 break_range_command (const char *arg
, int from_tty
)
9730 const char *arg_start
;
9731 struct linespec_result canonical_start
, canonical_end
;
9732 int bp_count
, can_use_bp
, length
;
9735 /* We don't support software ranged breakpoints. */
9736 if (target_ranged_break_num_registers () < 0)
9737 error (_("This target does not support hardware ranged breakpoints."));
9739 bp_count
= hw_breakpoint_used_count ();
9740 bp_count
+= target_ranged_break_num_registers ();
9741 can_use_bp
= target_can_use_hardware_watchpoint (bp_hardware_breakpoint
,
9744 error (_("Hardware breakpoints used exceeds limit."));
9746 arg
= skip_spaces (arg
);
9747 if (arg
== NULL
|| arg
[0] == '\0')
9748 error(_("No address range specified."));
9751 location_spec_up start_locspec
9752 = string_to_location_spec (&arg
, current_language
);
9753 parse_breakpoint_sals (start_locspec
.get (), &canonical_start
);
9756 error (_("Too few arguments."));
9757 else if (canonical_start
.lsals
.empty ())
9758 error (_("Could not find location of the beginning of the range."));
9760 const linespec_sals
&lsal_start
= canonical_start
.lsals
[0];
9762 if (canonical_start
.lsals
.size () > 1
9763 || lsal_start
.sals
.size () != 1)
9764 error (_("Cannot create a ranged breakpoint with multiple locations."));
9766 const symtab_and_line
&sal_start
= lsal_start
.sals
[0];
9767 std::string
addr_string_start (arg_start
, arg
- arg_start
);
9769 arg
++; /* Skip the comma. */
9770 arg
= skip_spaces (arg
);
9772 /* Parse the end location specification. */
9776 /* We call decode_line_full directly here instead of using
9777 parse_breakpoint_sals because we need to specify the start
9778 location spec's symtab and line as the default symtab and line
9779 for the end of the range. This makes it possible to have ranges
9780 like "foo.c:27, +14", where +14 means 14 lines from the start
9782 location_spec_up end_locspec
9783 = string_to_location_spec (&arg
, current_language
);
9784 decode_line_full (end_locspec
.get (), DECODE_LINE_FUNFIRSTLINE
, NULL
,
9785 sal_start
.symtab
, sal_start
.line
,
9786 &canonical_end
, NULL
, NULL
);
9788 if (canonical_end
.lsals
.empty ())
9789 error (_("Could not find location of the end of the range."));
9791 const linespec_sals
&lsal_end
= canonical_end
.lsals
[0];
9792 if (canonical_end
.lsals
.size () > 1
9793 || lsal_end
.sals
.size () != 1)
9794 error (_("Cannot create a ranged breakpoint with multiple locations."));
9796 const symtab_and_line
&sal_end
= lsal_end
.sals
[0];
9798 end
= find_breakpoint_range_end (sal_end
);
9799 if (sal_start
.pc
> end
)
9800 error (_("Invalid address range, end precedes start."));
9802 length
= end
- sal_start
.pc
+ 1;
9804 /* Length overflowed. */
9805 error (_("Address range too large."));
9806 else if (length
== 1)
9808 /* This range is simple enough to be handled by
9809 the `hbreak' command. */
9810 hbreak_command (&addr_string_start
[0], 1);
9815 /* Now set up the breakpoint and install it. */
9817 std::unique_ptr
<breakpoint
> br
9818 (new ranged_breakpoint (get_current_arch (),
9820 std::move (start_locspec
),
9821 std::move (end_locspec
)));
9823 install_breakpoint (false, std::move (br
), true);
9826 /* See breakpoint.h. */
9828 watchpoint::~watchpoint ()
9830 /* Make sure to unlink the destroyed watchpoint from the related
9833 breakpoint
*bpt
= this;
9834 while (bpt
->related_breakpoint
!= this)
9835 bpt
= bpt
->related_breakpoint
;
9837 bpt
->related_breakpoint
= this->related_breakpoint
;
9840 /* Return non-zero if EXP is verified as constant. Returned zero
9841 means EXP is variable. Also the constant detection may fail for
9842 some constant expressions and in such case still falsely return
9846 watchpoint_exp_is_const (const struct expression
*exp
)
9848 return exp
->op
->constant_p ();
9851 /* Implement the "re_set" method for watchpoints. */
9854 watchpoint::re_set ()
9856 /* Watchpoint can be either on expression using entirely global
9857 variables, or it can be on local variables.
9859 Watchpoints of the first kind are never auto-deleted, and even
9860 persist across program restarts. Since they can use variables
9861 from shared libraries, we need to reparse expression as libraries
9862 are loaded and unloaded.
9864 Watchpoints on local variables can also change meaning as result
9865 of solib event. For example, if a watchpoint uses both a local
9866 and a global variables in expression, it's a local watchpoint,
9867 but unloading of a shared library will make the expression
9868 invalid. This is not a very common use case, but we still
9869 re-evaluate expression, to avoid surprises to the user.
9871 Note that for local watchpoints, we re-evaluate it only if
9872 watchpoints frame id is still valid. If it's not, it means the
9873 watchpoint is out of scope and will be deleted soon. In fact,
9874 I'm not sure we'll ever be called in this case.
9876 If a local watchpoint's frame id is still valid, then
9877 exp_valid_block is likewise valid, and we can safely use it.
9879 Don't do anything about disabled watchpoints, since they will be
9880 reevaluated again when enabled. */
9881 update_watchpoint (this, true /* reparse */);
9884 /* Implement the "insert" method for hardware watchpoints. */
9887 watchpoint::insert_location (struct bp_location
*bl
)
9889 int length
= exact
? 1 : bl
->length
;
9891 return target_insert_watchpoint (bl
->address
, length
, bl
->watchpoint_type
,
9895 /* Implement the "remove" method for hardware watchpoints. */
9898 watchpoint::remove_location (struct bp_location
*bl
,
9899 enum remove_bp_reason reason
)
9901 int length
= exact
? 1 : bl
->length
;
9903 return target_remove_watchpoint (bl
->address
, length
, bl
->watchpoint_type
,
9908 watchpoint::breakpoint_hit (const struct bp_location
*bl
,
9909 const address_space
*aspace
, CORE_ADDR bp_addr
,
9910 const target_waitstatus
&ws
)
9912 struct breakpoint
*b
= bl
->owner
;
9914 /* Continuable hardware watchpoints are treated as non-existent if the
9915 reason we stopped wasn't a hardware watchpoint (we didn't stop on
9916 some data address). Otherwise gdb won't stop on a break instruction
9917 in the code (not from a breakpoint) when a hardware watchpoint has
9918 been defined. Also skip watchpoints which we know did not trigger
9919 (did not match the data address). */
9920 if (is_hardware_watchpoint (b
)
9921 && watchpoint_triggered
== watch_triggered_no
)
9928 watchpoint::check_status (bpstat
*bs
)
9930 bpstat_check_watchpoint (bs
);
9933 /* Implement the "resources_needed" method for hardware
9937 watchpoint::resources_needed (const struct bp_location
*bl
)
9939 int length
= exact
? 1 : bl
->length
;
9941 return target_region_ok_for_hw_watchpoint (bl
->address
, length
);
9944 /* Implement the "works_in_software_mode" method for hardware
9948 watchpoint::works_in_software_mode () const
9950 /* Read and access watchpoints only work with hardware support. */
9951 return type
== bp_watchpoint
|| type
== bp_hardware_watchpoint
;
9954 enum print_stop_action
9955 watchpoint::print_it (const bpstat
*bs
) const
9957 enum print_stop_action result
;
9958 struct ui_out
*uiout
= current_uiout
;
9960 gdb_assert (bs
->bp_location_at
!= NULL
);
9962 annotate_watchpoint (this->number
);
9963 maybe_print_thread_hit_breakpoint (uiout
);
9967 std::optional
<ui_out_emit_tuple
> tuple_emitter
;
9971 case bp_hardware_watchpoint
:
9972 if (uiout
->is_mi_like_p ())
9974 ("reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER
));
9976 tuple_emitter
.emplace (uiout
, "value");
9977 uiout
->text ("\nOld value = ");
9978 watchpoint_value_print (bs
->old_val
.get (), &stb
);
9979 uiout
->field_stream ("old", stb
);
9980 uiout
->text ("\nNew value = ");
9981 watchpoint_value_print (val
.get (), &stb
);
9982 uiout
->field_stream ("new", stb
);
9984 /* More than one watchpoint may have been triggered. */
9985 result
= PRINT_UNKNOWN
;
9988 case bp_read_watchpoint
:
9989 if (uiout
->is_mi_like_p ())
9991 ("reason", async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER
));
9993 tuple_emitter
.emplace (uiout
, "value");
9994 uiout
->text ("\nValue = ");
9995 watchpoint_value_print (val
.get (), &stb
);
9996 uiout
->field_stream ("value", stb
);
9998 result
= PRINT_UNKNOWN
;
10001 case bp_access_watchpoint
:
10002 if (bs
->old_val
!= NULL
)
10004 if (uiout
->is_mi_like_p ())
10005 uiout
->field_string
10007 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER
));
10009 tuple_emitter
.emplace (uiout
, "value");
10010 uiout
->text ("\nOld value = ");
10011 watchpoint_value_print (bs
->old_val
.get (), &stb
);
10012 uiout
->field_stream ("old", stb
);
10013 uiout
->text ("\nNew value = ");
10018 if (uiout
->is_mi_like_p ())
10019 uiout
->field_string
10021 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER
));
10022 tuple_emitter
.emplace (uiout
, "value");
10023 uiout
->text ("\nValue = ");
10025 watchpoint_value_print (val
.get (), &stb
);
10026 uiout
->field_stream ("new", stb
);
10027 uiout
->text ("\n");
10028 result
= PRINT_UNKNOWN
;
10031 result
= PRINT_UNKNOWN
;
10037 /* Implement the "print_mention" method for hardware watchpoints. */
10040 watchpoint::print_mention () const
10042 struct ui_out
*uiout
= current_uiout
;
10043 const char *tuple_name
;
10047 case bp_watchpoint
:
10048 uiout
->text ("Watchpoint ");
10049 tuple_name
= "wpt";
10051 case bp_hardware_watchpoint
:
10052 uiout
->text ("Hardware watchpoint ");
10053 tuple_name
= "wpt";
10055 case bp_read_watchpoint
:
10056 uiout
->text ("Hardware read watchpoint ");
10057 tuple_name
= "hw-rwpt";
10059 case bp_access_watchpoint
:
10060 uiout
->text ("Hardware access (read/write) watchpoint ");
10061 tuple_name
= "hw-awpt";
10064 internal_error (_("Invalid hardware watchpoint type."));
10067 ui_out_emit_tuple
tuple_emitter (uiout
, tuple_name
);
10068 uiout
->field_signed ("number", number
);
10069 uiout
->text (": ");
10070 uiout
->field_string ("exp", exp_string
.get ());
10073 /* Implement the "print_recreate" method for watchpoints. */
10076 watchpoint::print_recreate (struct ui_file
*fp
) const
10080 case bp_watchpoint
:
10081 case bp_hardware_watchpoint
:
10082 gdb_printf (fp
, "watch");
10084 case bp_read_watchpoint
:
10085 gdb_printf (fp
, "rwatch");
10087 case bp_access_watchpoint
:
10088 gdb_printf (fp
, "awatch");
10091 internal_error (_("Invalid watchpoint type."));
10094 gdb_printf (fp
, " %s", exp_string
.get ());
10095 print_recreate_thread (fp
);
10098 /* Implement the "explains_signal" method for watchpoints. */
10101 watchpoint::explains_signal (enum gdb_signal sig
)
10103 /* A software watchpoint cannot cause a signal other than
10104 GDB_SIGNAL_TRAP. */
10105 if (type
== bp_watchpoint
&& sig
!= GDB_SIGNAL_TRAP
)
10111 struct masked_watchpoint
: public watchpoint
10113 using watchpoint::watchpoint
;
10115 int insert_location (struct bp_location
*) override
;
10116 int remove_location (struct bp_location
*,
10117 enum remove_bp_reason reason
) override
;
10118 int resources_needed (const struct bp_location
*) override
;
10119 bool works_in_software_mode () const override
;
10120 enum print_stop_action
print_it (const bpstat
*bs
) const override
;
10121 void print_one_detail (struct ui_out
*) const override
;
10122 void print_mention () const override
;
10123 void print_recreate (struct ui_file
*fp
) const override
;
10126 /* Implement the "insert" method for masked hardware watchpoints. */
10129 masked_watchpoint::insert_location (struct bp_location
*bl
)
10131 return target_insert_mask_watchpoint (bl
->address
, hw_wp_mask
,
10132 bl
->watchpoint_type
);
10135 /* Implement the "remove" method for masked hardware watchpoints. */
10138 masked_watchpoint::remove_location (struct bp_location
*bl
,
10139 enum remove_bp_reason reason
)
10141 return target_remove_mask_watchpoint (bl
->address
, hw_wp_mask
,
10142 bl
->watchpoint_type
);
10145 /* Implement the "resources_needed" method for masked hardware
10149 masked_watchpoint::resources_needed (const struct bp_location
*bl
)
10151 return target_masked_watch_num_registers (bl
->address
, hw_wp_mask
);
10154 /* Implement the "works_in_software_mode" method for masked hardware
10158 masked_watchpoint::works_in_software_mode () const
10163 /* Implement the "print_it" method for masked hardware
10166 enum print_stop_action
10167 masked_watchpoint::print_it (const bpstat
*bs
) const
10169 struct ui_out
*uiout
= current_uiout
;
10171 /* Masked watchpoints have only one location. */
10172 gdb_assert (this->has_single_location ());
10174 annotate_watchpoint (this->number
);
10175 maybe_print_thread_hit_breakpoint (uiout
);
10177 switch (this->type
)
10179 case bp_hardware_watchpoint
:
10180 if (uiout
->is_mi_like_p ())
10181 uiout
->field_string
10182 ("reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER
));
10185 case bp_read_watchpoint
:
10186 if (uiout
->is_mi_like_p ())
10187 uiout
->field_string
10188 ("reason", async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER
));
10191 case bp_access_watchpoint
:
10192 if (uiout
->is_mi_like_p ())
10193 uiout
->field_string
10195 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER
));
10198 internal_error (_("Invalid hardware watchpoint type."));
10202 uiout
->text (_("\n\
10203 Check the underlying instruction at PC for the memory\n\
10204 address and value which triggered this watchpoint.\n"));
10205 uiout
->text ("\n");
10207 /* More than one watchpoint may have been triggered. */
10208 return PRINT_UNKNOWN
;
10211 /* Implement the "print_one_detail" method for masked hardware
10215 masked_watchpoint::print_one_detail (struct ui_out
*uiout
) const
10217 /* Masked watchpoints have only one location. */
10218 gdb_assert (this->has_single_location ());
10220 uiout
->text ("\tmask ");
10221 uiout
->field_core_addr ("mask", this->first_loc ().gdbarch
, hw_wp_mask
);
10222 uiout
->text ("\n");
10225 /* Implement the "print_mention" method for masked hardware
10229 masked_watchpoint::print_mention () const
10231 struct ui_out
*uiout
= current_uiout
;
10232 const char *tuple_name
;
10236 case bp_hardware_watchpoint
:
10237 uiout
->text ("Masked hardware watchpoint ");
10238 tuple_name
= "wpt";
10240 case bp_read_watchpoint
:
10241 uiout
->text ("Masked hardware read watchpoint ");
10242 tuple_name
= "hw-rwpt";
10244 case bp_access_watchpoint
:
10245 uiout
->text ("Masked hardware access (read/write) watchpoint ");
10246 tuple_name
= "hw-awpt";
10249 internal_error (_("Invalid hardware watchpoint type."));
10252 ui_out_emit_tuple
tuple_emitter (uiout
, tuple_name
);
10253 uiout
->field_signed ("number", number
);
10254 uiout
->text (": ");
10255 uiout
->field_string ("exp", exp_string
.get ());
10258 /* Implement the "print_recreate" method for masked hardware
10262 masked_watchpoint::print_recreate (struct ui_file
*fp
) const
10266 case bp_hardware_watchpoint
:
10267 gdb_printf (fp
, "watch");
10269 case bp_read_watchpoint
:
10270 gdb_printf (fp
, "rwatch");
10272 case bp_access_watchpoint
:
10273 gdb_printf (fp
, "awatch");
10276 internal_error (_("Invalid hardware watchpoint type."));
10279 gdb_printf (fp
, " %s mask 0x%s", exp_string
.get (),
10280 phex (hw_wp_mask
, sizeof (CORE_ADDR
)));
10281 print_recreate_thread (fp
);
10284 /* Tell whether the given watchpoint is a masked hardware watchpoint. */
10287 is_masked_watchpoint (const struct breakpoint
*b
)
10289 return dynamic_cast<const masked_watchpoint
*> (b
) != nullptr;
10292 /* accessflag: hw_write: watch write,
10293 hw_read: watch read,
10294 hw_access: watch access (read or write) */
10296 watch_command_1 (const char *arg
, int accessflag
, int from_tty
,
10297 bool just_location
, bool internal
)
10299 struct breakpoint
*scope_breakpoint
= NULL
;
10300 const struct block
*exp_valid_block
= NULL
, *cond_exp_valid_block
= NULL
;
10301 struct value
*result
;
10302 int saved_bitpos
= 0, saved_bitsize
= 0;
10303 const char *exp_start
= NULL
;
10304 const char *exp_end
= NULL
;
10305 const char *tok
, *end_tok
;
10307 const char *cond_start
= NULL
;
10308 const char *cond_end
= NULL
;
10309 enum bptype bp_type
;
10312 /* Flag to indicate whether we are going to use masks for
10313 the hardware watchpoint. */
10314 bool use_mask
= false;
10315 CORE_ADDR mask
= 0;
10318 /* Make sure that we actually have parameters to parse. */
10319 if (arg
!= NULL
&& arg
[0] != '\0')
10321 const char *value_start
;
10323 exp_end
= arg
+ strlen (arg
);
10325 /* Look for "parameter value" pairs at the end
10326 of the arguments string. */
10327 for (tok
= exp_end
- 1; tok
> arg
; tok
--)
10329 /* Skip whitespace at the end of the argument list. */
10330 while (tok
> arg
&& (*tok
== ' ' || *tok
== '\t'))
10333 /* Find the beginning of the last token.
10334 This is the value of the parameter. */
10335 while (tok
> arg
&& (*tok
!= ' ' && *tok
!= '\t'))
10337 value_start
= tok
+ 1;
10339 /* Skip whitespace. */
10340 while (tok
> arg
&& (*tok
== ' ' || *tok
== '\t'))
10345 /* Find the beginning of the second to last token.
10346 This is the parameter itself. */
10347 while (tok
> arg
&& (*tok
!= ' ' && *tok
!= '\t'))
10350 toklen
= end_tok
- tok
+ 1;
10352 if (toklen
== 6 && startswith (tok
, "thread"))
10354 struct thread_info
*thr
;
10355 /* At this point we've found a "thread" token, which means
10356 the user is trying to set a watchpoint that triggers
10357 only in a specific thread. */
10361 error(_("You can specify only one thread."));
10364 error (_("You can specify only one of thread or task."));
10366 if (inferior
!= -1)
10367 error (_("You can specify only one of inferior or thread."));
10369 /* Extract the thread ID from the next token. */
10370 thr
= parse_thread_id (value_start
, &endp
);
10371 if (value_start
== endp
)
10372 error (_("Junk after thread keyword."));
10374 thread
= thr
->global_num
;
10376 else if (toklen
== 4 && startswith (tok
, "task"))
10381 error(_("You can specify only one task."));
10384 error (_("You can specify only one of thread or task."));
10386 if (inferior
!= -1)
10387 error (_("You can specify only one of inferior or task."));
10389 task
= strtol (value_start
, &tmp
, 0);
10390 if (tmp
== value_start
)
10391 error (_("Junk after task keyword."));
10392 if (!valid_task_id (task
))
10393 error (_("Unknown task %d."), task
);
10395 else if (toklen
== 8 && startswith (tok
, "inferior"))
10397 /* Support for watchpoints will be added in a later commit. */
10398 error (_("Cannot use 'inferior' keyword with watchpoints"));
10400 else if (toklen
== 4 && startswith (tok
, "mask"))
10402 /* We've found a "mask" token, which means the user wants to
10403 create a hardware watchpoint that is going to have the mask
10405 struct value
*mask_value
;
10408 error(_("You can specify only one mask."));
10410 use_mask
= just_location
= true;
10412 scoped_value_mark mark
;
10413 mask_value
= parse_to_comma_and_eval (&value_start
);
10414 mask
= value_as_address (mask_value
);
10417 /* We didn't recognize what we found. We should stop here. */
10420 /* Truncate the string and get rid of the "parameter value" pair before
10421 the arguments string is parsed by the parse_exp_1 function. */
10428 /* Parse the rest of the arguments. From here on out, everything
10429 is in terms of a newly allocated string instead of the original
10431 std::string
expression (arg
, exp_end
- arg
);
10432 exp_start
= arg
= expression
.c_str ();
10433 innermost_block_tracker tracker
;
10434 expression_up exp
= parse_exp_1 (&arg
, 0, 0, 0, &tracker
);
10436 /* Remove trailing whitespace from the expression before saving it.
10437 This makes the eventual display of the expression string a bit
10439 while (exp_end
> exp_start
&& (exp_end
[-1] == ' ' || exp_end
[-1] == '\t'))
10442 /* Checking if the expression is not constant. */
10443 if (watchpoint_exp_is_const (exp
.get ()))
10447 len
= exp_end
- exp_start
;
10448 while (len
> 0 && isspace (exp_start
[len
- 1]))
10450 error (_("Cannot watch constant value `%.*s'."), len
, exp_start
);
10453 exp_valid_block
= tracker
.block ();
10454 struct value
*mark
= value_mark ();
10455 struct value
*val_as_value
= nullptr;
10456 fetch_subexp_value (exp
.get (), exp
->op
.get (), &val_as_value
, &result
, NULL
,
10459 if (val_as_value
!= NULL
&& just_location
)
10461 saved_bitpos
= val_as_value
->bitpos ();
10462 saved_bitsize
= val_as_value
->bitsize ();
10470 exp_valid_block
= NULL
;
10471 val
= release_value (value_addr (result
));
10472 value_free_to_mark (mark
);
10476 ret
= target_masked_watch_num_registers (value_as_address (val
.get ()),
10479 error (_("This target does not support masked watchpoints."));
10480 else if (ret
== -2)
10481 error (_("Invalid mask or memory region."));
10484 else if (val_as_value
!= NULL
)
10485 val
= release_value (val_as_value
);
10487 tok
= skip_spaces (arg
);
10488 end_tok
= skip_to_space (tok
);
10490 toklen
= end_tok
- tok
;
10491 if (toklen
>= 1 && strncmp (tok
, "if", toklen
) == 0)
10493 tok
= cond_start
= end_tok
+ 1;
10494 innermost_block_tracker if_tracker
;
10495 parse_exp_1 (&tok
, 0, 0, 0, &if_tracker
);
10497 /* The watchpoint expression may not be local, but the condition
10498 may still be. E.g.: `watch global if local > 0'. */
10499 cond_exp_valid_block
= if_tracker
.block ();
10504 error (_("Junk at end of command."));
10506 frame_info_ptr wp_frame
= block_innermost_frame (exp_valid_block
);
10508 /* Save this because create_internal_breakpoint below invalidates
10510 frame_id watchpoint_frame
= get_frame_id (wp_frame
);
10512 /* If the expression is "local", then set up a "watchpoint scope"
10513 breakpoint at the point where we've left the scope of the watchpoint
10514 expression. Create the scope breakpoint before the watchpoint, so
10515 that we will encounter it first in bpstat_stop_status. */
10516 if (exp_valid_block
!= NULL
&& wp_frame
!= NULL
)
10518 frame_id caller_frame_id
= frame_unwind_caller_id (wp_frame
);
10520 if (frame_id_p (caller_frame_id
))
10522 gdbarch
*caller_arch
= frame_unwind_caller_arch (wp_frame
);
10523 CORE_ADDR caller_pc
= frame_unwind_caller_pc (wp_frame
);
10526 = create_internal_breakpoint (caller_arch
, caller_pc
,
10527 bp_watchpoint_scope
);
10529 /* create_internal_breakpoint could invalidate WP_FRAME. */
10532 scope_breakpoint
->enable_state
= bp_enabled
;
10534 /* Automatically delete the breakpoint when it hits. */
10535 scope_breakpoint
->disposition
= disp_del
;
10537 /* Only break in the proper frame (help with recursion). */
10538 scope_breakpoint
->frame_id
= caller_frame_id
;
10540 /* Set the address at which we will stop. */
10541 bp_location
&loc
= scope_breakpoint
->first_loc ();
10542 loc
.gdbarch
= caller_arch
;
10543 loc
.requested_address
= caller_pc
;
10545 = adjust_breakpoint_address (loc
.gdbarch
, loc
.requested_address
,
10546 scope_breakpoint
->type
,
10547 current_program_space
);
10551 /* Now set up the breakpoint. We create all watchpoints as hardware
10552 watchpoints here even if hardware watchpoints are turned off, a call
10553 to update_watchpoint later in this function will cause the type to
10554 drop back to bp_watchpoint (software watchpoint) if required. */
10556 if (accessflag
== hw_read
)
10557 bp_type
= bp_read_watchpoint
;
10558 else if (accessflag
== hw_access
)
10559 bp_type
= bp_access_watchpoint
;
10561 bp_type
= bp_hardware_watchpoint
;
10563 std::unique_ptr
<watchpoint
> w
;
10565 w
.reset (new masked_watchpoint (nullptr, bp_type
));
10567 w
.reset (new watchpoint (nullptr, bp_type
));
10569 /* At most one of thread or task can be set on a watchpoint. */
10570 gdb_assert (thread
== -1 || task
== -1);
10571 w
->thread
= thread
;
10572 w
->inferior
= inferior
;
10574 w
->disposition
= disp_donttouch
;
10575 w
->pspace
= current_program_space
;
10576 w
->exp
= std::move (exp
);
10577 w
->exp_valid_block
= exp_valid_block
;
10578 w
->cond_exp_valid_block
= cond_exp_valid_block
;
10581 struct type
*t
= val
->type ();
10582 CORE_ADDR addr
= value_as_address (val
.get ());
10584 w
->exp_string_reparse
10585 = current_language
->watch_location_expression (t
, addr
);
10587 w
->exp_string
= xstrprintf ("-location %.*s",
10588 (int) (exp_end
- exp_start
), exp_start
);
10591 w
->exp_string
.reset (savestring (exp_start
, exp_end
- exp_start
));
10595 w
->hw_wp_mask
= mask
;
10600 w
->val_bitpos
= saved_bitpos
;
10601 w
->val_bitsize
= saved_bitsize
;
10602 w
->val_valid
= true;
10606 w
->cond_string
.reset (savestring (cond_start
, cond_end
- cond_start
));
10608 w
->cond_string
= 0;
10610 if (frame_id_p (watchpoint_frame
))
10612 w
->watchpoint_frame
= watchpoint_frame
;
10613 w
->watchpoint_thread
= inferior_ptid
;
10617 w
->watchpoint_frame
= null_frame_id
;
10618 w
->watchpoint_thread
= null_ptid
;
10621 if (scope_breakpoint
!= NULL
)
10623 /* The scope breakpoint is related to the watchpoint. We will
10624 need to act on them together. */
10625 w
->related_breakpoint
= scope_breakpoint
;
10626 scope_breakpoint
->related_breakpoint
= w
.get ();
10629 if (!just_location
)
10630 value_free_to_mark (mark
);
10632 /* Finally update the new watchpoint. This creates the locations
10633 that should be inserted. */
10634 update_watchpoint (w
.get (), true /* reparse */);
10636 install_breakpoint (internal
, std::move (w
), 1);
10639 /* Return count of debug registers needed to watch the given expression.
10640 If the watchpoint cannot be handled in hardware return zero. */
10643 can_use_hardware_watchpoint (const std::vector
<value_ref_ptr
> &vals
)
10645 int found_memory_cnt
= 0;
10647 /* Did the user specifically forbid us to use hardware watchpoints? */
10648 if (!can_use_hw_watchpoints
)
10651 gdb_assert (!vals
.empty ());
10652 struct value
*head
= vals
[0].get ();
10654 /* Make sure that the value of the expression depends only upon
10655 memory contents, and values computed from them within GDB. If we
10656 find any register references or function calls, we can't use a
10657 hardware watchpoint.
10659 The idea here is that evaluating an expression generates a series
10660 of values, one holding the value of every subexpression. (The
10661 expression a*b+c has five subexpressions: a, b, a*b, c, and
10662 a*b+c.) GDB's values hold almost enough information to establish
10663 the criteria given above --- they identify memory lvalues,
10664 register lvalues, computed values, etcetera. So we can evaluate
10665 the expression, and then scan the chain of values that leaves
10666 behind to decide whether we can detect any possible change to the
10667 expression's final value using only hardware watchpoints.
10669 However, I don't think that the values returned by inferior
10670 function calls are special in any way. So this function may not
10671 notice that an expression involving an inferior function call
10672 can't be watched with hardware watchpoints. FIXME. */
10673 for (const value_ref_ptr
&iter
: vals
)
10675 struct value
*v
= iter
.get ();
10677 if (v
->lval () == lval_memory
)
10679 if (v
!= head
&& v
->lazy ())
10680 /* A lazy memory lvalue in the chain is one that GDB never
10681 needed to fetch; we either just used its address (e.g.,
10682 `a' in `a.b') or we never needed it at all (e.g., `a'
10683 in `a,b'). This doesn't apply to HEAD; if that is
10684 lazy then it was not readable, but watch it anyway. */
10688 /* Ahh, memory we actually used! Check if we can cover
10689 it with hardware watchpoints. */
10690 struct type
*vtype
= check_typedef (v
->type ());
10692 /* We only watch structs and arrays if user asked for it
10693 explicitly, never if they just happen to appear in a
10694 middle of some value chain. */
10696 || (vtype
->code () != TYPE_CODE_STRUCT
10697 && vtype
->code () != TYPE_CODE_ARRAY
))
10699 CORE_ADDR vaddr
= v
->address ();
10703 len
= (target_exact_watchpoints
10704 && is_scalar_type_recursive (vtype
))?
10705 1 : v
->type ()->length ();
10707 num_regs
= target_region_ok_for_hw_watchpoint (vaddr
, len
);
10711 found_memory_cnt
+= num_regs
;
10715 else if (v
->lval () != not_lval
&& !v
->deprecated_modifiable ())
10716 return 0; /* These are values from the history (e.g., $1). */
10717 else if (v
->lval () == lval_register
)
10718 return 0; /* Cannot watch a register with a HW watchpoint. */
10721 /* The expression itself looks suitable for using a hardware
10722 watchpoint, but give the target machine a chance to reject it. */
10723 return found_memory_cnt
;
10727 watch_command_wrapper (const char *arg
, int from_tty
, bool internal
)
10729 watch_command_1 (arg
, hw_write
, from_tty
, 0, internal
);
10732 /* Options for the watch, awatch, and rwatch commands. */
10734 struct watch_options
10736 /* For -location. */
10737 bool location
= false;
10740 /* Definitions of options for the "watch", "awatch", and "rwatch" commands.
10742 Historically GDB always accepted both '-location' and '-l' flags for
10743 these commands (both flags being synonyms). When converting to the
10744 newer option scheme only '-location' is added here. That's fine (for
10745 backward compatibility) as any non-ambiguous prefix of a flag will be
10746 accepted, so '-l', '-loc', are now all accepted.
10748 What this means is that, if in the future, we add any new flag here
10749 that starts with '-l' then this will break backward compatibility, so
10750 please, don't do that! */
10752 static const gdb::option::option_def watch_option_defs
[] = {
10753 gdb::option::flag_option_def
<watch_options
> {
10755 [] (watch_options
*opt
) { return &opt
->location
; },
10757 This evaluates EXPRESSION and watches the memory to which is refers.\n\
10758 -l can be used as a short form of -location."),
10762 /* Returns the option group used by 'watch', 'awatch', and 'rwatch'
10765 static gdb::option::option_def_group
10766 make_watch_options_def_group (watch_options
*opts
)
10768 return {{watch_option_defs
}, opts
};
10771 /* A helper function that looks for the "-location" argument and then
10772 calls watch_command_1. */
10775 watch_maybe_just_location (const char *arg
, int accessflag
, int from_tty
)
10777 watch_options opts
;
10778 auto grp
= make_watch_options_def_group (&opts
);
10779 gdb::option::process_options
10780 (&arg
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND
, grp
);
10781 if (arg
!= nullptr && *arg
== '\0')
10784 watch_command_1 (arg
, accessflag
, from_tty
, opts
.location
, false);
10787 /* Command completion for 'watch', 'awatch', and 'rwatch' commands. */
10789 watch_command_completer (struct cmd_list_element
*ignore
,
10790 completion_tracker
&tracker
,
10791 const char *text
, const char * /*word*/)
10793 const auto group
= make_watch_options_def_group (nullptr);
10794 if (gdb::option::complete_options
10795 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND
, group
))
10798 const char *word
= advance_to_expression_complete_word_point (tracker
, text
);
10799 expression_completer (ignore
, tracker
, text
, word
);
10803 watch_command (const char *arg
, int from_tty
)
10805 watch_maybe_just_location (arg
, hw_write
, from_tty
);
10809 rwatch_command_wrapper (const char *arg
, int from_tty
, bool internal
)
10811 watch_command_1 (arg
, hw_read
, from_tty
, 0, internal
);
10815 rwatch_command (const char *arg
, int from_tty
)
10817 watch_maybe_just_location (arg
, hw_read
, from_tty
);
10821 awatch_command_wrapper (const char *arg
, int from_tty
, bool internal
)
10823 watch_command_1 (arg
, hw_access
, from_tty
, 0, internal
);
10827 awatch_command (const char *arg
, int from_tty
)
10829 watch_maybe_just_location (arg
, hw_access
, from_tty
);
10833 /* Data for the FSM that manages the until(location)/advance commands
10834 in infcmd.c. Here because it uses the mechanisms of
10837 struct until_break_fsm
: public thread_fsm
10839 /* The thread that was current when the command was executed. */
10842 /* The breakpoint set at the return address in the caller frame,
10843 plus breakpoints at all the destination locations. */
10844 std::vector
<breakpoint_up
> breakpoints
;
10846 until_break_fsm (struct interp
*cmd_interp
, int thread
,
10847 std::vector
<breakpoint_up
> &&breakpoints
)
10848 : thread_fsm (cmd_interp
),
10850 breakpoints (std::move (breakpoints
))
10854 void clean_up (struct thread_info
*thread
) override
;
10855 bool should_stop (struct thread_info
*thread
) override
;
10856 enum async_reply_reason
do_async_reply_reason () override
;
10859 /* Implementation of the 'should_stop' FSM method for the
10860 until(location)/advance commands. */
10863 until_break_fsm::should_stop (struct thread_info
*tp
)
10865 for (const breakpoint_up
&bp
: breakpoints
)
10866 if (bpstat_find_breakpoint (tp
->control
.stop_bpstat
,
10867 bp
.get ()) != NULL
)
10876 /* Implementation of the 'clean_up' FSM method for the
10877 until(location)/advance commands. */
10880 until_break_fsm::clean_up (struct thread_info
*)
10882 /* Clean up our temporary breakpoints. */
10883 breakpoints
.clear ();
10884 delete_longjmp_breakpoint (thread
);
10887 /* Implementation of the 'async_reply_reason' FSM method for the
10888 until(location)/advance commands. */
10890 enum async_reply_reason
10891 until_break_fsm::do_async_reply_reason ()
10893 return EXEC_ASYNC_LOCATION_REACHED
;
10897 until_break_command (const char *arg
, int from_tty
, int anywhere
)
10899 frame_info_ptr frame
;
10900 struct gdbarch
*frame_gdbarch
;
10901 struct frame_id stack_frame_id
;
10902 struct frame_id caller_frame_id
;
10904 struct thread_info
*tp
;
10906 clear_proceed_status (0);
10908 /* Set a breakpoint where the user wants it and at return from
10911 location_spec_up locspec
= string_to_location_spec (&arg
, current_language
);
10913 std::vector
<symtab_and_line
> sals
10914 = (last_displayed_sal_is_valid ()
10915 ? decode_line_1 (locspec
.get (), DECODE_LINE_FUNFIRSTLINE
, NULL
,
10916 get_last_displayed_symtab (),
10917 get_last_displayed_line ())
10918 : decode_line_1 (locspec
.get (), DECODE_LINE_FUNFIRSTLINE
,
10922 error (_("Couldn't get information on specified line."));
10925 error (_("Junk at end of arguments."));
10927 tp
= inferior_thread ();
10928 thread
= tp
->global_num
;
10930 /* Note linespec handling above invalidates the frame chain.
10931 Installing a breakpoint also invalidates the frame chain (as it
10932 may need to switch threads), so do any frame handling before
10935 frame
= get_selected_frame (NULL
);
10936 frame_gdbarch
= get_frame_arch (frame
);
10937 stack_frame_id
= get_stack_frame_id (frame
);
10938 caller_frame_id
= frame_unwind_caller_id (frame
);
10940 /* Keep within the current frame, or in frames called by the current
10943 std::vector
<breakpoint_up
> breakpoints
;
10945 std::optional
<delete_longjmp_breakpoint_cleanup
> lj_deleter
;
10947 if (frame_id_p (caller_frame_id
))
10949 struct symtab_and_line sal2
;
10950 struct gdbarch
*caller_gdbarch
;
10952 sal2
= find_pc_line (frame_unwind_caller_pc (frame
), 0);
10953 sal2
.pc
= frame_unwind_caller_pc (frame
);
10954 caller_gdbarch
= frame_unwind_caller_arch (frame
);
10956 breakpoint_up caller_breakpoint
10957 = set_momentary_breakpoint (caller_gdbarch
, sal2
,
10958 caller_frame_id
, bp_until
);
10959 breakpoints
.emplace_back (std::move (caller_breakpoint
));
10961 set_longjmp_breakpoint (tp
, stack_frame_id
);
10962 lj_deleter
.emplace (thread
);
10965 /* If the user told us to continue until a specified location, we
10966 don't specify a frame at which we need to stop. Otherwise,
10967 specify the selected frame, because we want to stop only at the
10968 very same frame. */
10969 frame_id stop_frame_id
= anywhere
? null_frame_id
: stack_frame_id
;
10971 for (symtab_and_line
&sal
: sals
)
10973 resolve_sal_pc (&sal
);
10975 breakpoint_up location_breakpoint
10976 = set_momentary_breakpoint (frame_gdbarch
, sal
,
10977 stop_frame_id
, bp_until
);
10978 breakpoints
.emplace_back (std::move (location_breakpoint
));
10982 (std::unique_ptr
<thread_fsm
>
10983 (new until_break_fsm (command_interp (), tp
->global_num
,
10984 std::move (breakpoints
))));
10987 lj_deleter
->release ();
10989 proceed (-1, GDB_SIGNAL_DEFAULT
);
10994 /* Compare two breakpoints and return a strcmp-like result. */
10997 compare_breakpoints (const breakpoint
*a
, const breakpoint
*b
)
10999 uintptr_t ua
= (uintptr_t) a
;
11000 uintptr_t ub
= (uintptr_t) b
;
11002 if (a
->number
< b
->number
)
11004 else if (a
->number
> b
->number
)
11007 /* Now sort by address, in case we see, e..g, two breakpoints with
11011 return ua
> ub
? 1 : 0;
11014 /* Delete breakpoints by address or line. */
11017 clear_command (const char *arg
, int from_tty
)
11021 std::vector
<symtab_and_line
> decoded_sals
;
11022 symtab_and_line last_sal
;
11023 gdb::array_view
<symtab_and_line
> sals
;
11027 = decode_line_with_current_source (arg
,
11028 (DECODE_LINE_FUNFIRSTLINE
11029 | DECODE_LINE_LIST_MODE
));
11031 sals
= decoded_sals
;
11035 /* Set sal's line, symtab, pc, and pspace to the values
11036 corresponding to the last call to print_frame_info. If the
11037 codepoint is not valid, this will set all the fields to 0. */
11038 last_sal
= get_last_displayed_sal ();
11039 if (last_sal
.symtab
== 0)
11040 error (_("No source file specified."));
11046 /* We don't call resolve_sal_pc here. That's not as bad as it
11047 seems, because all existing breakpoints typically have both
11048 file/line and pc set. So, if clear is given file/line, we can
11049 match this to existing breakpoint without obtaining pc at all.
11051 We only support clearing given the address explicitly
11052 present in breakpoint table. Say, we've set breakpoint
11053 at file:line. There were several PC values for that file:line,
11054 due to optimization, all in one block.
11056 We've picked one PC value. If "clear" is issued with another
11057 PC corresponding to the same file:line, the breakpoint won't
11058 be cleared. We probably can still clear the breakpoint, but
11059 since the other PC value is never presented to user, user
11060 can only find it by guessing, and it does not seem important
11061 to support that. */
11063 /* For each line spec given, delete bps which correspond to it. Do
11064 it in two passes, solely to preserve the current behavior that
11065 from_tty is forced true if we delete more than one
11068 std::vector
<struct breakpoint
*> found
;
11069 for (const auto &sal
: sals
)
11071 const char *sal_fullname
;
11073 /* If exact pc given, clear bpts at that pc.
11074 If line given (pc == 0), clear all bpts on specified line.
11075 If defaulting, clear all bpts on default line
11078 defaulting sal.pc != 0 tests to do
11083 1 0 <can't happen> */
11085 sal_fullname
= (sal
.symtab
== NULL
11086 ? NULL
: symtab_to_fullname (sal
.symtab
));
11088 /* Find all matching breakpoints and add them to 'found'. */
11089 for (breakpoint
&b
: all_breakpoints ())
11092 /* Are we going to delete b? */
11093 if (b
.type
!= bp_none
&& !is_watchpoint (&b
)
11094 && user_breakpoint_p (&b
))
11096 for (bp_location
&loc
: b
.locations ())
11098 /* If the user specified file:line, don't allow a PC
11099 match. This matches historical gdb behavior. */
11100 int pc_match
= (!sal
.explicit_line
11102 && (loc
.pspace
== sal
.pspace
)
11103 && (loc
.address
== sal
.pc
)
11104 && (!section_is_overlay (loc
.section
)
11105 || loc
.section
== sal
.section
));
11106 int line_match
= 0;
11108 if ((default_match
|| sal
.explicit_line
)
11109 && loc
.symtab
!= NULL
11110 && sal_fullname
!= NULL
11111 && sal
.pspace
== loc
.pspace
11112 && loc
.line_number
== sal
.line
11113 && filename_cmp (symtab_to_fullname (loc
.symtab
),
11114 sal_fullname
) == 0)
11117 if (pc_match
|| line_match
)
11126 found
.push_back (&b
);
11130 /* Now go thru the 'found' chain and delete them. */
11131 if (found
.empty ())
11134 error (_("No breakpoint at %s."), arg
);
11136 error (_("No breakpoint at this line."));
11139 /* Remove duplicates from the vec. */
11140 std::sort (found
.begin (), found
.end (),
11141 [] (const breakpoint
*bp_a
, const breakpoint
*bp_b
)
11143 return compare_breakpoints (bp_a
, bp_b
) < 0;
11145 found
.erase (std::unique (found
.begin (), found
.end (),
11146 [] (const breakpoint
*bp_a
, const breakpoint
*bp_b
)
11148 return compare_breakpoints (bp_a
, bp_b
) == 0;
11152 if (found
.size () > 1)
11153 from_tty
= 1; /* Always report if deleted more than one. */
11156 if (found
.size () == 1)
11157 gdb_printf (_("Deleted breakpoint "));
11159 gdb_printf (_("Deleted breakpoints "));
11162 for (breakpoint
*iter
: found
)
11165 gdb_printf ("%d ", iter
->number
);
11166 delete_breakpoint (iter
);
11172 /* Delete breakpoint in BS if they are `delete' breakpoints and
11173 all breakpoints that are marked for deletion, whether hit or not.
11174 This is called after any breakpoint is hit, or after errors. */
11177 breakpoint_auto_delete (bpstat
*bs
)
11179 for (; bs
; bs
= bs
->next
)
11180 if (bs
->breakpoint_at
11181 && bs
->breakpoint_at
->disposition
== disp_del
11183 delete_breakpoint (bs
->breakpoint_at
);
11185 for (breakpoint
&b
: all_breakpoints_safe ())
11186 if (b
.disposition
== disp_del_at_next_stop
)
11187 delete_breakpoint (&b
);
11190 /* A comparison function for bp_location AP and BP being interfaced to
11191 std::sort. Sort elements primarily by their ADDRESS (no matter what
11192 bl_address_is_meaningful says), secondarily by ordering first
11193 permanent elements and tertiarily just ensuring the array is sorted
11194 stable way despite std::sort being an unstable algorithm. */
11197 bp_location_is_less_than (const bp_location
*a
, const bp_location
*b
)
11199 if (a
->address
!= b
->address
)
11200 return a
->address
< b
->address
;
11202 /* Sort locations at the same address by their pspace number, keeping
11203 locations of the same inferior (in a multi-inferior environment)
11206 if (a
->pspace
->num
!= b
->pspace
->num
)
11207 return a
->pspace
->num
< b
->pspace
->num
;
11209 /* Sort permanent breakpoints first. */
11210 if (a
->permanent
!= b
->permanent
)
11211 return a
->permanent
> b
->permanent
;
11213 /* Sort by type in order to make duplicate determination easier.
11214 See update_global_location_list. This is kept in sync with
11215 breakpoint_locations_match. */
11216 if (a
->loc_type
< b
->loc_type
)
11219 /* Likewise, for range-breakpoints, sort by length. */
11220 if (a
->loc_type
== bp_loc_hardware_breakpoint
11221 && b
->loc_type
== bp_loc_hardware_breakpoint
11222 && a
->length
< b
->length
)
11225 /* Make the internal GDB representation stable across GDB runs
11226 where A and B memory inside GDB can differ. Breakpoint locations of
11227 the same type at the same address can be sorted in arbitrary order. */
11229 if (a
->owner
->number
!= b
->owner
->number
)
11230 return a
->owner
->number
< b
->owner
->number
;
11235 /* Set bp_locations_placed_address_before_address_max and
11236 bp_locations_shadow_len_after_address_max according to the current
11237 content of the bp_locations array. */
11240 bp_locations_target_extensions_update (void)
11242 bp_locations_placed_address_before_address_max
= 0;
11243 bp_locations_shadow_len_after_address_max
= 0;
11245 for (bp_location
*bl
: all_bp_locations ())
11247 CORE_ADDR start
, end
, addr
;
11249 if (!bp_location_has_shadow (bl
))
11252 start
= bl
->target_info
.placed_address
;
11253 end
= start
+ bl
->target_info
.shadow_len
;
11255 gdb_assert (bl
->address
>= start
);
11256 addr
= bl
->address
- start
;
11257 if (addr
> bp_locations_placed_address_before_address_max
)
11258 bp_locations_placed_address_before_address_max
= addr
;
11260 /* Zero SHADOW_LEN would not pass bp_location_has_shadow. */
11262 gdb_assert (bl
->address
< end
);
11263 addr
= end
- bl
->address
;
11264 if (addr
> bp_locations_shadow_len_after_address_max
)
11265 bp_locations_shadow_len_after_address_max
= addr
;
11269 /* Download tracepoint locations if they haven't been. */
11272 download_tracepoint_locations (void)
11274 enum tribool can_download_tracepoint
= TRIBOOL_UNKNOWN
;
11276 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
11278 for (breakpoint
&b
: all_tracepoints ())
11280 bool bp_location_downloaded
= false;
11282 if ((b
.type
== bp_fast_tracepoint
11283 ? !may_insert_fast_tracepoints
11284 : !may_insert_tracepoints
))
11287 if (can_download_tracepoint
== TRIBOOL_UNKNOWN
)
11289 if (target_can_download_tracepoint ())
11290 can_download_tracepoint
= TRIBOOL_TRUE
;
11292 can_download_tracepoint
= TRIBOOL_FALSE
;
11295 if (can_download_tracepoint
== TRIBOOL_FALSE
)
11298 for (bp_location
&bl
: b
.locations ())
11300 /* In tracepoint, locations are _never_ duplicated, so
11301 should_be_inserted is equivalent to
11302 unduplicated_should_be_inserted. */
11303 if (!should_be_inserted (&bl
) || bl
.inserted
)
11306 switch_to_program_space_and_thread (bl
.pspace
);
11308 target_download_tracepoint (&bl
);
11311 bp_location_downloaded
= true;
11314 tracepoint
&t
= gdb::checked_static_cast
<tracepoint
&> (b
);
11315 t
.number_on_target
= b
.number
;
11316 if (bp_location_downloaded
)
11317 notify_breakpoint_modified (&b
);
11321 /* Swap the insertion/duplication state between two locations. */
11324 swap_insertion (struct bp_location
*left
, struct bp_location
*right
)
11326 const int left_inserted
= left
->inserted
;
11327 const int left_duplicate
= left
->duplicate
;
11328 const int left_needs_update
= left
->needs_update
;
11329 const struct bp_target_info left_target_info
= left
->target_info
;
11331 /* Locations of tracepoints can never be duplicated. */
11332 if (is_tracepoint (left
->owner
))
11333 gdb_assert (!left
->duplicate
);
11334 if (is_tracepoint (right
->owner
))
11335 gdb_assert (!right
->duplicate
);
11337 left
->inserted
= right
->inserted
;
11338 left
->duplicate
= right
->duplicate
;
11339 left
->needs_update
= right
->needs_update
;
11340 left
->target_info
= right
->target_info
;
11341 right
->inserted
= left_inserted
;
11342 right
->duplicate
= left_duplicate
;
11343 right
->needs_update
= left_needs_update
;
11344 right
->target_info
= left_target_info
;
11347 /* Force the re-insertion of the locations at ADDRESS. This is called
11348 once a new/deleted/modified duplicate location is found and we are evaluating
11349 conditions on the target's side. Such conditions need to be updated on
11353 force_breakpoint_reinsertion (struct bp_location
*bl
)
11355 CORE_ADDR address
= 0;
11358 address
= bl
->address
;
11359 pspace_num
= bl
->pspace
->num
;
11361 /* This is only meaningful if the target is
11362 evaluating conditions and if the user has
11363 opted for condition evaluation on the target's
11365 if (gdb_evaluates_breakpoint_condition_p ()
11366 || !target_supports_evaluation_of_breakpoint_conditions ())
11369 /* Flag all breakpoint locations with this address and
11370 the same program space as the location
11371 as "its condition has changed". We need to
11372 update the conditions on the target's side. */
11373 for (bp_location
*loc
: all_bp_locations_at_addr (address
))
11375 if (!is_breakpoint (loc
->owner
)
11376 || pspace_num
!= loc
->pspace
->num
)
11379 /* Flag the location appropriately. We use a different state to
11380 let everyone know that we already updated the set of locations
11381 with addr bl->address and program space bl->pspace. This is so
11382 we don't have to keep calling these functions just to mark locations
11383 that have already been marked. */
11384 loc
->condition_changed
= condition_updated
;
11386 /* Free the agent expression bytecode as well. We will compute
11388 loc
->cond_bytecode
.reset ();
11392 /* Called whether new breakpoints are created, or existing breakpoints
11393 deleted, to update the global location list and recompute which
11394 locations are duplicate of which.
11396 The INSERT_MODE flag determines whether locations may not, may, or
11397 shall be inserted now. See 'enum ugll_insert_mode' for more
11401 update_global_location_list (enum ugll_insert_mode insert_mode
)
11403 /* Last breakpoint location address that was marked for update. */
11404 CORE_ADDR last_addr
= 0;
11405 /* Last breakpoint location program space that was marked for update. */
11406 int last_pspace_num
= -1;
11408 breakpoint_debug_printf ("insert_mode = %s",
11409 ugll_insert_mode_text (insert_mode
));
11411 /* Used in the duplicates detection below. When iterating over all
11412 bp_locations, points to the first bp_location of a given address.
11413 Breakpoints and watchpoints of different types are never
11414 duplicates of each other. Keep one pointer for each type of
11415 breakpoint/watchpoint, so we only need to loop over all locations
11417 struct bp_location
*bp_loc_first
; /* breakpoint */
11418 struct bp_location
*wp_loc_first
; /* hardware watchpoint */
11419 struct bp_location
*awp_loc_first
; /* access watchpoint */
11420 struct bp_location
*rwp_loc_first
; /* read watchpoint */
11422 /* Saved former bp_locations array which we compare against the newly
11423 built bp_locations from the current state of ALL_BREAKPOINTS. */
11424 std::vector
<bp_location
*> old_locations
= std::move (bp_locations
);
11425 bp_locations
.clear ();
11427 for (breakpoint
&b
: all_breakpoints ())
11428 for (bp_location
&loc
: b
.locations ())
11429 bp_locations
.push_back (&loc
);
11431 /* See if we need to "upgrade" a software breakpoint to a hardware
11432 breakpoint. Do this before deciding whether locations are
11433 duplicates. Also do this before sorting because sorting order
11434 depends on location type. */
11435 for (bp_location
*loc
: bp_locations
)
11436 if (!loc
->inserted
&& should_be_inserted (loc
))
11437 handle_automatic_hardware_breakpoints (loc
);
11439 std::sort (bp_locations
.begin (), bp_locations
.end (),
11440 bp_location_is_less_than
);
11442 bp_locations_target_extensions_update ();
11444 /* Identify bp_location instances that are no longer present in the
11445 new list, and therefore should be freed. Note that it's not
11446 necessary that those locations should be removed from inferior --
11447 if there's another location at the same address (previously
11448 marked as duplicate), we don't need to remove/insert the
11451 LOCP is kept in sync with OLD_LOCP, each pointing to the current
11452 and former bp_location array state respectively. */
11455 for (bp_location
*old_loc
: old_locations
)
11457 /* Tells if 'old_loc' is found among the new locations. If
11458 not, we have to free it. */
11459 bool found_object
= false;
11460 /* Tells if the location should remain inserted in the target. */
11461 bool keep_in_target
= false;
11462 bool removed
= false;
11464 /* Skip LOCP entries which will definitely never be needed.
11465 Stop either at or being the one matching OLD_LOC. */
11466 while (loc_i
< bp_locations
.size ()
11467 && bp_locations
[loc_i
]->address
< old_loc
->address
)
11470 for (size_t loc2_i
= loc_i
;
11471 (loc2_i
< bp_locations
.size ()
11472 && bp_locations
[loc2_i
]->address
== old_loc
->address
);
11475 /* Check if this is a new/duplicated location or a duplicated
11476 location that had its condition modified. If so, we want to send
11477 its condition to the target if evaluation of conditions is taking
11479 if (bp_locations
[loc2_i
]->condition_changed
== condition_modified
11480 && (last_addr
!= old_loc
->address
11481 || last_pspace_num
!= old_loc
->pspace
->num
))
11483 force_breakpoint_reinsertion (bp_locations
[loc2_i
]);
11484 last_pspace_num
= old_loc
->pspace
->num
;
11487 if (bp_locations
[loc2_i
] == old_loc
)
11488 found_object
= true;
11491 /* We have already handled this address, update it so that we don't
11492 have to go through updates again. */
11493 last_addr
= old_loc
->address
;
11495 /* Target-side condition evaluation: Handle deleted locations. */
11497 force_breakpoint_reinsertion (old_loc
);
11499 /* If this location is no longer present, and inserted, look if
11500 there's maybe a new location at the same address. If so,
11501 mark that one inserted, and don't remove this one. This is
11502 needed so that we don't have a time window where a breakpoint
11503 at certain location is not inserted. */
11505 if (old_loc
->inserted
)
11507 /* If the location is inserted now, we might have to remove
11510 if (found_object
&& should_be_inserted (old_loc
))
11512 /* The location is still present in the location list,
11513 and still should be inserted. Don't do anything. */
11514 keep_in_target
= true;
11518 /* This location still exists, but it won't be kept in the
11519 target since it may have been disabled. We proceed to
11520 remove its target-side condition. */
11522 /* The location is either no longer present, or got
11523 disabled. See if there's another location at the
11524 same address, in which case we don't need to remove
11525 this one from the target. */
11527 /* OLD_LOC comes from existing struct breakpoint. */
11528 if (bl_address_is_meaningful (old_loc
))
11530 for (size_t loc2_i
= loc_i
;
11531 (loc2_i
< bp_locations
.size ()
11532 && bp_locations
[loc2_i
]->address
== old_loc
->address
);
11535 bp_location
*loc2
= bp_locations
[loc2_i
];
11537 if (loc2
== old_loc
)
11540 if (breakpoint_locations_match (loc2
, old_loc
))
11542 /* Read watchpoint locations are switched to
11543 access watchpoints, if the former are not
11544 supported, but the latter are. */
11545 if (is_hardware_watchpoint (old_loc
->owner
))
11547 gdb_assert (is_hardware_watchpoint (loc2
->owner
));
11548 loc2
->watchpoint_type
= old_loc
->watchpoint_type
;
11551 /* loc2 is a duplicated location. We need to check
11552 if it should be inserted in case it will be
11554 if (unduplicated_should_be_inserted (loc2
))
11556 swap_insertion (old_loc
, loc2
);
11557 keep_in_target
= true;
11565 if (!keep_in_target
)
11567 if (remove_breakpoint (old_loc
))
11569 /* This is just about all we can do. We could keep
11570 this location on the global list, and try to
11571 remove it next time, but there's no particular
11572 reason why we will succeed next time.
11574 Note that at this point, old_loc->owner is still
11575 valid, as delete_breakpoint frees the breakpoint
11576 only after calling us. */
11577 warning (_("error removing breakpoint %d at %s"),
11578 old_loc
->owner
->number
,
11579 paddress (old_loc
->gdbarch
, old_loc
->address
));
11587 if (removed
&& target_is_non_stop_p ()
11588 && need_moribund_for_location_type (old_loc
))
11590 /* This location was removed from the target. In
11591 non-stop mode, a race condition is possible where
11592 we've removed a breakpoint, but stop events for that
11593 breakpoint are already queued and will arrive later.
11594 We apply an heuristic to be able to distinguish such
11595 SIGTRAPs from other random SIGTRAPs: we keep this
11596 breakpoint location for a bit, and will retire it
11597 after we see some number of events. The theory here
11598 is that reporting of events should, "on the average",
11599 be fair, so after a while we'll see events from all
11600 threads that have anything of interest, and no longer
11601 need to keep this breakpoint location around. We
11602 don't hold locations forever so to reduce chances of
11603 mistaking a non-breakpoint SIGTRAP for a breakpoint
11606 The heuristic failing can be disastrous on
11607 decr_pc_after_break targets.
11609 On decr_pc_after_break targets, like e.g., x86-linux,
11610 if we fail to recognize a late breakpoint SIGTRAP,
11611 because events_till_retirement has reached 0 too
11612 soon, we'll fail to do the PC adjustment, and report
11613 a random SIGTRAP to the user. When the user resumes
11614 the inferior, it will most likely immediately crash
11615 with SIGILL/SIGBUS/SIGSEGV, or worse, get silently
11616 corrupted, because of being resumed e.g., in the
11617 middle of a multi-byte instruction, or skipped a
11618 one-byte instruction. This was actually seen happen
11619 on native x86-linux, and should be less rare on
11620 targets that do not support new thread events, like
11621 remote, due to the heuristic depending on
11624 Mistaking a random SIGTRAP for a breakpoint trap
11625 causes similar symptoms (PC adjustment applied when
11626 it shouldn't), but then again, playing with SIGTRAPs
11627 behind the debugger's back is asking for trouble.
11629 Since hardware watchpoint traps are always
11630 distinguishable from other traps, so we don't need to
11631 apply keep hardware watchpoint moribund locations
11632 around. We simply always ignore hardware watchpoint
11633 traps we can no longer explain. */
11635 process_stratum_target
*proc_target
= nullptr;
11636 for (inferior
*inf
: all_inferiors ())
11637 if (inf
->pspace
== old_loc
->pspace
)
11639 proc_target
= inf
->process_target ();
11642 if (proc_target
!= nullptr)
11643 old_loc
->events_till_retirement
11644 = 3 * (thread_count (proc_target
) + 1);
11646 old_loc
->events_till_retirement
= 1;
11647 old_loc
->owner
= NULL
;
11649 moribund_locations
.push_back (old_loc
);
11653 old_loc
->owner
= NULL
;
11654 decref_bp_location (&old_loc
);
11659 /* Rescan breakpoints at the same address and section, marking the
11660 first one as "first" and any others as "duplicates". This is so
11661 that the bpt instruction is only inserted once. If we have a
11662 permanent breakpoint at the same place as BPT, make that one the
11663 official one, and the rest as duplicates. Permanent breakpoints
11664 are sorted first for the same address.
11666 Do the same for hardware watchpoints, but also considering the
11667 watchpoint's type (regular/access/read) and length. */
11669 bp_loc_first
= NULL
;
11670 wp_loc_first
= NULL
;
11671 awp_loc_first
= NULL
;
11672 rwp_loc_first
= NULL
;
11674 for (bp_location
*loc
: all_bp_locations ())
11676 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always
11678 struct bp_location
**loc_first_p
;
11679 breakpoint
*b
= loc
->owner
;
11681 if (!unduplicated_should_be_inserted (loc
)
11682 || !bl_address_is_meaningful (loc
)
11683 /* Don't detect duplicate for tracepoint locations because they are
11684 never duplicated. See the comments in field `duplicate' of
11685 `struct bp_location'. */
11686 || is_tracepoint (b
))
11688 /* Clear the condition modification flag. */
11689 loc
->condition_changed
= condition_unchanged
;
11693 if (b
->type
== bp_hardware_watchpoint
)
11694 loc_first_p
= &wp_loc_first
;
11695 else if (b
->type
== bp_read_watchpoint
)
11696 loc_first_p
= &rwp_loc_first
;
11697 else if (b
->type
== bp_access_watchpoint
)
11698 loc_first_p
= &awp_loc_first
;
11700 loc_first_p
= &bp_loc_first
;
11702 if (*loc_first_p
== NULL
11703 || (overlay_debugging
&& loc
->section
!= (*loc_first_p
)->section
)
11704 || !breakpoint_locations_match (loc
, *loc_first_p
))
11706 *loc_first_p
= loc
;
11707 loc
->duplicate
= 0;
11709 if (is_breakpoint (loc
->owner
) && loc
->condition_changed
)
11711 loc
->needs_update
= 1;
11712 /* Clear the condition modification flag. */
11713 loc
->condition_changed
= condition_unchanged
;
11719 /* This and the above ensure the invariant that the first location
11720 is not duplicated, and is the inserted one.
11721 All following are marked as duplicated, and are not inserted. */
11723 swap_insertion (loc
, *loc_first_p
);
11724 loc
->duplicate
= 1;
11726 /* Clear the condition modification flag. */
11727 loc
->condition_changed
= condition_unchanged
;
11730 if (insert_mode
== UGLL_INSERT
|| breakpoints_should_be_inserted_now ())
11732 if (insert_mode
!= UGLL_DONT_INSERT
)
11733 insert_breakpoint_locations ();
11736 /* Even though the caller told us to not insert new
11737 locations, we may still need to update conditions on the
11738 target's side of breakpoints that were already inserted
11739 if the target is evaluating breakpoint conditions. We
11740 only update conditions for locations that are marked
11742 update_inserted_breakpoint_locations ();
11746 if (insert_mode
!= UGLL_DONT_INSERT
)
11747 download_tracepoint_locations ();
11751 breakpoint_retire_moribund (void)
11753 for (int ix
= 0; ix
< moribund_locations
.size (); ++ix
)
11755 struct bp_location
*loc
= moribund_locations
[ix
];
11756 if (--(loc
->events_till_retirement
) == 0)
11758 decref_bp_location (&loc
);
11759 unordered_remove (moribund_locations
, ix
);
11766 update_global_location_list_nothrow (enum ugll_insert_mode insert_mode
)
11771 update_global_location_list (insert_mode
);
11773 catch (const gdb_exception_error
&e
)
11778 /* Clear BKP from a BPS. */
11781 bpstat_remove_bp_location (bpstat
*bps
, struct breakpoint
*bpt
)
11785 for (bs
= bps
; bs
; bs
= bs
->next
)
11786 if (bs
->breakpoint_at
== bpt
)
11788 bs
->breakpoint_at
= NULL
;
11789 bs
->old_val
= NULL
;
11790 /* bs->commands will be freed later. */
11794 /* Callback for iterate_over_threads. */
11796 bpstat_remove_breakpoint_callback (struct thread_info
*th
, void *data
)
11798 struct breakpoint
*bpt
= (struct breakpoint
*) data
;
11800 bpstat_remove_bp_location (th
->control
.stop_bpstat
, bpt
);
11804 /* See breakpoint.h. */
11807 code_breakpoint::say_where () const
11809 struct value_print_options opts
;
11811 get_user_print_options (&opts
);
11813 /* i18n: cagney/2005-02-11: Below needs to be merged into a
11815 if (!this->has_locations ())
11817 /* For pending locations, the output differs slightly based
11818 on extra_string. If this is non-NULL, it contains either
11819 a condition or dprintf arguments. */
11820 if (extra_string
== NULL
)
11822 gdb_printf (_(" (%s) pending."), locspec
->to_string ());
11824 else if (type
== bp_dprintf
)
11826 gdb_printf (_(" (%s,%s) pending."),
11827 locspec
->to_string (),
11828 extra_string
.get ());
11832 gdb_printf (_(" (%s %s) pending."),
11833 locspec
->to_string (),
11834 extra_string
.get ());
11839 const bp_location
&bl
= this->first_loc ();
11840 if (opts
.addressprint
|| bl
.symtab
== nullptr)
11841 gdb_printf (" at %ps",
11842 styled_string (address_style
.style (),
11843 paddress (bl
.gdbarch
,
11845 if (bl
.symtab
!= NULL
)
11847 /* If there is a single location, we can print the location
11849 if (!this->has_multiple_locations ())
11851 const char *filename
11852 = symtab_to_filename_for_display (bl
.symtab
);
11853 gdb_printf (": file %ps, line %d.",
11854 styled_string (file_name_style
.style (),
11859 /* This is not ideal, but each location may have a
11860 different file name, and this at least reflects the
11861 real situation somewhat. */
11862 gdb_printf (": %s.", locspec
->to_string ());
11865 if (this->has_multiple_locations ())
11867 int n
= std::distance (m_locations
.begin (), m_locations
.end ());
11868 gdb_printf (" (%d locations)", n
);
11873 /* See breakpoint.h. */
11875 bp_location_range
breakpoint::locations () const
11877 return bp_location_range (m_locations
.begin (), m_locations
.end ());
11880 struct bp_location
*
11881 breakpoint::allocate_location ()
11883 return new bp_location (this);
11886 /* See breakpoint.h. */
11889 breakpoint::add_location (bp_location
&loc
)
11891 gdb_assert (loc
.owner
== this);
11892 gdb_assert (!loc
.is_linked ());
11894 auto ub
= std::upper_bound (m_locations
.begin (), m_locations
.end (),
11896 [] (const bp_location
&left
,
11897 const bp_location
&right
)
11898 { return left
.address
< right
.address
; });
11899 m_locations
.insert (ub
, loc
);
11902 /* See breakpoint.h. */
11905 breakpoint::unadd_location (bp_location
&loc
)
11907 gdb_assert (loc
.owner
== this);
11908 gdb_assert (loc
.is_linked ());
11910 m_locations
.erase (m_locations
.iterator_to (loc
));
11913 #define internal_error_pure_virtual_called() \
11914 gdb_assert_not_reached ("pure virtual function called")
11917 breakpoint::insert_location (struct bp_location
*bl
)
11919 internal_error_pure_virtual_called ();
11923 breakpoint::remove_location (struct bp_location
*bl
,
11924 enum remove_bp_reason reason
)
11926 internal_error_pure_virtual_called ();
11930 breakpoint::breakpoint_hit (const struct bp_location
*bl
,
11931 const address_space
*aspace
,
11933 const target_waitstatus
&ws
)
11935 internal_error_pure_virtual_called ();
11939 breakpoint::resources_needed (const struct bp_location
*bl
)
11941 internal_error_pure_virtual_called ();
11944 enum print_stop_action
11945 breakpoint::print_it (const bpstat
*bs
) const
11947 internal_error_pure_virtual_called ();
11951 breakpoint::print_mention () const
11953 internal_error_pure_virtual_called ();
11957 breakpoint::print_recreate (struct ui_file
*fp
) const
11959 internal_error_pure_virtual_called ();
11962 /* Default breakpoint_ops methods. */
11965 code_breakpoint::re_set ()
11967 /* FIXME: is this still reachable? */
11968 if (breakpoint_location_spec_empty_p (this))
11970 /* Anything without a location can't be re-set. */
11971 delete_breakpoint (this);
11979 code_breakpoint::insert_location (struct bp_location
*bl
)
11981 CORE_ADDR addr
= bl
->target_info
.reqstd_address
;
11983 bl
->target_info
.kind
= breakpoint_kind (bl
, &addr
);
11984 bl
->target_info
.placed_address
= addr
;
11987 if (bl
->loc_type
== bp_loc_hardware_breakpoint
)
11988 result
= target_insert_hw_breakpoint (bl
->gdbarch
, &bl
->target_info
);
11990 result
= target_insert_breakpoint (bl
->gdbarch
, &bl
->target_info
);
11992 if (result
== 0 && bl
->probe
.prob
!= nullptr)
11994 /* The insertion was successful, now let's set the probe's semaphore
11996 bl
->probe
.prob
->set_semaphore (bl
->probe
.objfile
, bl
->gdbarch
);
12003 code_breakpoint::remove_location (struct bp_location
*bl
,
12004 enum remove_bp_reason reason
)
12006 if (bl
->probe
.prob
!= nullptr)
12008 /* Let's clear the semaphore before removing the location. */
12009 bl
->probe
.prob
->clear_semaphore (bl
->probe
.objfile
, bl
->gdbarch
);
12012 if (bl
->loc_type
== bp_loc_hardware_breakpoint
)
12013 return target_remove_hw_breakpoint (bl
->gdbarch
, &bl
->target_info
);
12015 return target_remove_breakpoint (bl
->gdbarch
, &bl
->target_info
, reason
);
12019 code_breakpoint::breakpoint_hit (const struct bp_location
*bl
,
12020 const address_space
*aspace
,
12022 const target_waitstatus
&ws
)
12024 if (ws
.kind () != TARGET_WAITKIND_STOPPED
12025 || ws
.sig () != GDB_SIGNAL_TRAP
)
12028 if (!breakpoint_address_match (bl
->pspace
->aspace
.get (), bl
->address
,
12032 if (overlay_debugging
/* unmapped overlay section */
12033 && section_is_overlay (bl
->section
)
12034 && !section_is_mapped (bl
->section
))
12041 dprintf_breakpoint::breakpoint_hit (const struct bp_location
*bl
,
12042 const address_space
*aspace
,
12044 const target_waitstatus
&ws
)
12046 if (dprintf_style
== dprintf_style_agent
12047 && target_can_run_breakpoint_commands ())
12049 /* An agent-style dprintf never causes a stop. If we see a trap
12050 for this address it must be for a breakpoint that happens to
12051 be set at the same address. */
12055 return this->ordinary_breakpoint::breakpoint_hit (bl
, aspace
, bp_addr
, ws
);
12059 ordinary_breakpoint::resources_needed (const struct bp_location
*bl
)
12061 gdb_assert (type
== bp_hardware_breakpoint
);
12066 enum print_stop_action
12067 ordinary_breakpoint::print_it (const bpstat
*bs
) const
12069 const struct bp_location
*bl
;
12071 struct ui_out
*uiout
= current_uiout
;
12073 bl
= bs
->bp_location_at
.get ();
12075 bp_temp
= disposition
== disp_del
;
12076 if (bl
->address
!= bl
->requested_address
)
12077 breakpoint_adjustment_warning (bl
->requested_address
,
12080 annotate_breakpoint (number
);
12081 maybe_print_thread_hit_breakpoint (uiout
);
12083 if (uiout
->is_mi_like_p ())
12085 uiout
->field_string ("reason",
12086 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT
));
12087 uiout
->field_string ("disp", bpdisp_text (disposition
));
12091 uiout
->text ("Temporary breakpoint ");
12093 uiout
->text ("Breakpoint ");
12094 print_num_locno (bs
, uiout
);
12095 uiout
->text (", ");
12097 return PRINT_SRC_AND_LOC
;
12101 ordinary_breakpoint::print_mention () const
12103 if (current_uiout
->is_mi_like_p ())
12108 case bp_breakpoint
:
12109 case bp_gnu_ifunc_resolver
:
12110 if (disposition
== disp_del
)
12111 gdb_printf (_("Temporary breakpoint"));
12113 gdb_printf (_("Breakpoint"));
12114 gdb_printf (_(" %d"), number
);
12115 if (type
== bp_gnu_ifunc_resolver
)
12116 gdb_printf (_(" at gnu-indirect-function resolver"));
12118 case bp_hardware_breakpoint
:
12119 gdb_printf (_("Hardware assisted breakpoint %d"), number
);
12122 gdb_printf (_("Dprintf %d"), number
);
12130 ordinary_breakpoint::print_recreate (struct ui_file
*fp
) const
12132 if (type
== bp_breakpoint
&& disposition
== disp_del
)
12133 gdb_printf (fp
, "tbreak");
12134 else if (type
== bp_breakpoint
)
12135 gdb_printf (fp
, "break");
12136 else if (type
== bp_hardware_breakpoint
12137 && disposition
== disp_del
)
12138 gdb_printf (fp
, "thbreak");
12139 else if (type
== bp_hardware_breakpoint
)
12140 gdb_printf (fp
, "hbreak");
12142 internal_error (_("unhandled breakpoint type %d"), (int) type
);
12144 gdb_printf (fp
, " %s", locspec
->to_string ());
12146 /* Print out extra_string if this breakpoint is pending. It might
12147 contain, for example, conditions that were set by the user. */
12148 if (!this->has_locations () && extra_string
!= NULL
)
12149 gdb_printf (fp
, " %s", extra_string
.get ());
12151 print_recreate_thread (fp
);
12154 std::vector
<symtab_and_line
>
12155 code_breakpoint::decode_location_spec (location_spec
*locspec
,
12156 program_space
*search_pspace
)
12158 if (locspec
->type () == PROBE_LOCATION_SPEC
)
12159 return bkpt_probe_decode_location_spec (this, locspec
, search_pspace
);
12161 struct linespec_result canonical
;
12163 decode_line_full (locspec
, DECODE_LINE_FUNFIRSTLINE
, search_pspace
,
12164 NULL
, 0, &canonical
, multiple_symbols_all
,
12167 /* We should get 0 or 1 resulting SALs. */
12168 gdb_assert (canonical
.lsals
.size () < 2);
12170 if (!canonical
.lsals
.empty ())
12172 const linespec_sals
&lsal
= canonical
.lsals
[0];
12173 return std::move (lsal
.sals
);
12178 /* Virtual table for internal breakpoints. */
12181 internal_breakpoint::re_set ()
12185 /* Delete overlay event and longjmp master breakpoints; they
12186 will be reset later by breakpoint_re_set. */
12187 case bp_overlay_event
:
12188 case bp_longjmp_master
:
12189 case bp_std_terminate_master
:
12190 case bp_exception_master
:
12191 delete_breakpoint (this);
12194 /* This breakpoint is special, it's set up when the inferior
12195 starts and we really don't want to touch it. */
12196 case bp_shlib_event
:
12198 /* Like bp_shlib_event, this breakpoint type is special. Once
12199 it is set up, we do not want to touch it. */
12200 case bp_thread_event
:
12206 internal_breakpoint::check_status (bpstat
*bs
)
12208 if (type
== bp_shlib_event
)
12210 /* If requested, stop when the dynamic linker notifies GDB of
12211 events. This allows the user to get control and place
12212 breakpoints in initializer routines for dynamically loaded
12213 objects (among other things). */
12214 bs
->stop
= stop_on_solib_events
!= 0;
12215 bs
->print
= stop_on_solib_events
!= 0;
12221 enum print_stop_action
12222 internal_breakpoint::print_it (const bpstat
*bs
) const
12226 case bp_shlib_event
:
12227 /* Did we stop because the user set the stop_on_solib_events
12228 variable? (If so, we report this as a generic, "Stopped due
12229 to shlib event" message.) */
12230 print_solib_event (false);
12233 case bp_thread_event
:
12234 /* Not sure how we will get here.
12235 GDB should not stop for these breakpoints. */
12236 gdb_printf (_("Thread Event Breakpoint: gdb should not stop!\n"));
12239 case bp_overlay_event
:
12240 /* By analogy with the thread event, GDB should not stop for these. */
12241 gdb_printf (_("Overlay Event Breakpoint: gdb should not stop!\n"));
12244 case bp_longjmp_master
:
12245 /* These should never be enabled. */
12246 gdb_printf (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
12249 case bp_std_terminate_master
:
12250 /* These should never be enabled. */
12251 gdb_printf (_("std::terminate Master Breakpoint: "
12252 "gdb should not stop!\n"));
12255 case bp_exception_master
:
12256 /* These should never be enabled. */
12257 gdb_printf (_("Exception Master Breakpoint: "
12258 "gdb should not stop!\n"));
12262 return PRINT_NOTHING
;
12266 internal_breakpoint::print_mention () const
12268 /* Nothing to mention. These breakpoints are internal. */
12271 /* Virtual table for momentary breakpoints */
12274 momentary_breakpoint::re_set ()
12276 /* Keep temporary breakpoints, which can be encountered when we step
12277 over a dlopen call and solib_add is resetting the breakpoints.
12278 Otherwise these should have been blown away via the cleanup chain
12279 or by breakpoint_init_inferior when we rerun the executable. */
12283 momentary_breakpoint::check_status (bpstat
*bs
)
12285 /* Nothing. The point of these breakpoints is causing a stop. */
12288 enum print_stop_action
12289 momentary_breakpoint::print_it (const bpstat
*bs
) const
12291 return PRINT_UNKNOWN
;
12295 momentary_breakpoint::print_mention () const
12297 /* Nothing to mention. These breakpoints are internal. */
12300 /* Ensure INITIATING_FRAME is cleared when no such breakpoint exists.
12302 It gets cleared already on the removal of the first one of such placed
12303 breakpoints. This is OK as they get all removed altogether. */
12305 longjmp_breakpoint::~longjmp_breakpoint ()
12307 thread_info
*tp
= find_thread_global_id (this->thread
);
12310 tp
->initiating_frame
= null_frame_id
;
12314 bkpt_probe_create_sals_from_location_spec (location_spec
*locspec
,
12315 struct linespec_result
*canonical
)
12318 struct linespec_sals lsal
;
12320 lsal
.sals
= parse_probes (locspec
, NULL
, canonical
);
12321 lsal
.canonical
= xstrdup (canonical
->locspec
->to_string ());
12322 canonical
->lsals
.push_back (std::move (lsal
));
12325 static std::vector
<symtab_and_line
>
12326 bkpt_probe_decode_location_spec (struct breakpoint
*b
,
12327 location_spec
*locspec
,
12328 program_space
*search_pspace
)
12330 std::vector
<symtab_and_line
> sals
12331 = parse_probes (locspec
, search_pspace
, NULL
);
12333 error (_("probe not found"));
12338 tracepoint::breakpoint_hit (const struct bp_location
*bl
,
12339 const address_space
*aspace
, CORE_ADDR bp_addr
,
12340 const target_waitstatus
&ws
)
12342 /* By definition, the inferior does not report stops at
12348 tracepoint::print_one_detail (struct ui_out
*uiout
) const
12350 if (!static_trace_marker_id
.empty ())
12352 gdb_assert (type
== bp_static_tracepoint
12353 || type
== bp_static_marker_tracepoint
);
12355 uiout
->message ("\tmarker id is %pF\n",
12356 string_field ("static-tracepoint-marker-string-id",
12357 static_trace_marker_id
.c_str ()));
12362 tracepoint::print_mention () const
12364 if (current_uiout
->is_mi_like_p ())
12369 case bp_tracepoint
:
12370 gdb_printf (_("Tracepoint"));
12371 gdb_printf (_(" %d"), number
);
12373 case bp_fast_tracepoint
:
12374 gdb_printf (_("Fast tracepoint"));
12375 gdb_printf (_(" %d"), number
);
12377 case bp_static_tracepoint
:
12378 case bp_static_marker_tracepoint
:
12379 gdb_printf (_("Static tracepoint"));
12380 gdb_printf (_(" %d"), number
);
12383 internal_error (_("unhandled tracepoint type %d"), (int) type
);
12390 tracepoint::print_recreate (struct ui_file
*fp
) const
12392 if (type
== bp_fast_tracepoint
)
12393 gdb_printf (fp
, "ftrace");
12394 else if (type
== bp_static_tracepoint
12395 || type
== bp_static_marker_tracepoint
)
12396 gdb_printf (fp
, "strace");
12397 else if (type
== bp_tracepoint
)
12398 gdb_printf (fp
, "trace");
12400 internal_error (_("unhandled tracepoint type %d"), (int) type
);
12402 gdb_printf (fp
, " %s", locspec
->to_string ());
12403 print_recreate_thread (fp
);
12406 gdb_printf (fp
, " passcount %d\n", pass_count
);
12409 /* Virtual table for tracepoints on static probes. */
12412 tracepoint_probe_create_sals_from_location_spec
12413 (location_spec
*locspec
,
12414 struct linespec_result
*canonical
)
12416 /* We use the same method for breakpoint on probes. */
12417 bkpt_probe_create_sals_from_location_spec (locspec
, canonical
);
12421 dprintf_breakpoint::re_set ()
12425 /* 1 - connect to target 1, that can run breakpoint commands.
12426 2 - create a dprintf, which resolves fine.
12427 3 - disconnect from target 1
12428 4 - connect to target 2, that can NOT run breakpoint commands.
12430 After steps #3/#4, you'll want the dprintf command list to
12431 be updated, because target 1 and 2 may well return different
12432 answers for target_can_run_breakpoint_commands().
12433 Given absence of finer grained resetting, we get to do
12434 it all the time. */
12435 update_dprintf_command_list (this);
12438 /* Implement the "print_recreate" method for dprintf. */
12441 dprintf_breakpoint::print_recreate (struct ui_file
*fp
) const
12443 gdb_printf (fp
, "dprintf %s,%s", locspec
->to_string (), extra_string
.get ());
12444 print_recreate_thread (fp
);
12447 /* Implement the "after_condition_true" method for dprintf.
12449 dprintf's are implemented with regular commands in their command
12450 list, but we run the commands here instead of before presenting the
12451 stop to the user, as dprintf's don't actually cause a stop. This
12452 also makes it so that the commands of multiple dprintfs at the same
12453 address are all handled. */
12456 dprintf_breakpoint::after_condition_true (struct bpstat
*bs
)
12458 /* dprintf's never cause a stop. This wasn't set in the
12459 check_status hook instead because that would make the dprintf's
12460 condition not be evaluated. */
12463 /* Run the command list here. Take ownership of it instead of
12464 copying. We never want these commands to run later in
12465 bpstat_do_actions, if a breakpoint that causes a stop happens to
12466 be set at same address as this dprintf, or even if running the
12467 commands here throws. */
12468 counted_command_line cmds
= std::move (bs
->commands
);
12469 gdb_assert (cmds
!= nullptr);
12470 execute_control_commands (cmds
.get (), 0);
12473 /* The breakpoint_ops structure to be used on static tracepoints with
12477 strace_marker_create_sals_from_location_spec (location_spec
*locspec
,
12478 struct linespec_result
*canonical
)
12480 struct linespec_sals lsal
;
12481 const char *arg_start
, *arg
;
12483 arg
= arg_start
= as_linespec_location_spec (locspec
)->spec_string
.get ();
12484 lsal
.sals
= decode_static_tracepoint_spec (&arg
);
12486 std::string
str (arg_start
, arg
- arg_start
);
12487 const char *ptr
= str
.c_str ();
12489 = new_linespec_location_spec (&ptr
, symbol_name_match_type::FULL
);
12491 lsal
.canonical
= xstrdup (canonical
->locspec
->to_string ());
12492 canonical
->lsals
.push_back (std::move (lsal
));
12496 strace_marker_create_breakpoints_sal (struct gdbarch
*gdbarch
,
12497 struct linespec_result
*canonical
,
12498 gdb::unique_xmalloc_ptr
<char> cond_string
,
12499 gdb::unique_xmalloc_ptr
<char> extra_string
,
12500 enum bptype type_wanted
,
12501 enum bpdisp disposition
,
12503 int task
, int inferior
,
12505 int from_tty
, int enabled
,
12506 int internal
, unsigned flags
)
12508 const linespec_sals
&lsal
= canonical
->lsals
[0];
12510 /* If the user is creating a static tracepoint by marker id
12511 (strace -m MARKER_ID), then store the sals index, so that
12512 breakpoint_re_set can try to match up which of the newly
12513 found markers corresponds to this one, and, don't try to
12514 expand multiple locations for each sal, given than SALS
12515 already should contain all sals for MARKER_ID. */
12517 for (size_t i
= 0; i
< lsal
.sals
.size (); i
++)
12519 location_spec_up locspec
= canonical
->locspec
->clone ();
12521 std::unique_ptr
<tracepoint
> tp
12522 (new tracepoint (gdbarch
,
12525 std::move (locspec
),
12527 std::move (cond_string
),
12528 std::move (extra_string
),
12530 thread
, task
, inferior
, ignore_count
,
12531 from_tty
, enabled
, flags
,
12532 canonical
->special_display
));
12534 /* Given that its possible to have multiple markers with
12535 the same string id, if the user is creating a static
12536 tracepoint by marker id ("strace -m MARKER_ID"), then
12537 store the sals index, so that breakpoint_re_set can
12538 try to match up which of the newly found markers
12539 corresponds to this one */
12540 tp
->static_trace_marker_id_idx
= i
;
12542 install_breakpoint (internal
, std::move (tp
), 0);
12546 std::vector
<symtab_and_line
>
12547 static_marker_tracepoint::decode_location_spec (location_spec
*locspec
,
12548 program_space
*search_pspace
)
12550 const char *s
= as_linespec_location_spec (locspec
)->spec_string
.get ();
12552 std::vector
<symtab_and_line
> sals
= decode_static_tracepoint_spec (&s
);
12553 if (sals
.size () > static_trace_marker_id_idx
)
12555 sals
[0] = sals
[static_trace_marker_id_idx
];
12560 error (_("marker %s not found"), static_trace_marker_id
.c_str ());
12563 /* Static tracepoints with marker (`-m'). */
12564 static struct breakpoint_ops strace_marker_breakpoint_ops
=
12566 strace_marker_create_sals_from_location_spec
,
12567 strace_marker_create_breakpoints_sal
,
12571 strace_marker_p (struct breakpoint
*b
)
12573 return b
->type
== bp_static_marker_tracepoint
;
12576 /* Notify interpreters and observers that breakpoint B was deleted. */
12579 notify_breakpoint_deleted (breakpoint
*b
)
12581 interps_notify_breakpoint_deleted (b
);
12582 gdb::observers::breakpoint_deleted
.notify (b
);
12585 /* Delete a breakpoint and clean up all traces of it in the data
12589 delete_breakpoint (struct breakpoint
*bpt
)
12591 gdb_assert (bpt
!= NULL
);
12593 /* Has this bp already been deleted? This can happen because
12594 multiple lists can hold pointers to bp's. bpstat lists are
12597 One example of this happening is a watchpoint's scope bp. When
12598 the scope bp triggers, we notice that the watchpoint is out of
12599 scope, and delete it. We also delete its scope bp. But the
12600 scope bp is marked "auto-deleting", and is already on a bpstat.
12601 That bpstat is then checked for auto-deleting bp's, which are
12604 A real solution to this problem might involve reference counts in
12605 bp's, and/or giving them pointers back to their referencing
12606 bpstat's, and teaching delete_breakpoint to only free a bp's
12607 storage when no more references were extent. A cheaper bandaid
12609 if (bpt
->type
== bp_none
)
12612 /* At least avoid this stale reference until the reference counting
12613 of breakpoints gets resolved. */
12614 if (bpt
->related_breakpoint
!= bpt
)
12616 struct breakpoint
*related
;
12617 struct watchpoint
*w
;
12619 if (bpt
->type
== bp_watchpoint_scope
)
12620 w
= gdb::checked_static_cast
<watchpoint
*> (bpt
->related_breakpoint
);
12621 else if (bpt
->related_breakpoint
->type
== bp_watchpoint_scope
)
12622 w
= gdb::checked_static_cast
<watchpoint
*> (bpt
);
12626 watchpoint_del_at_next_stop (w
);
12628 /* Unlink bpt from the bpt->related_breakpoint ring. */
12629 for (related
= bpt
; related
->related_breakpoint
!= bpt
;
12630 related
= related
->related_breakpoint
);
12631 related
->related_breakpoint
= bpt
->related_breakpoint
;
12632 bpt
->related_breakpoint
= bpt
;
12635 /* watch_command_1 creates a watchpoint but only sets its number if
12636 update_watchpoint succeeds in creating its bp_locations. If there's
12637 a problem in that process, we'll be asked to delete the half-created
12638 watchpoint. In that case, don't announce the deletion. */
12640 notify_breakpoint_deleted (bpt
);
12642 breakpoint_chain
.erase (breakpoint_chain
.iterator_to (*bpt
));
12644 /* Be sure no bpstat's are pointing at the breakpoint after it's
12646 /* FIXME, how can we find all bpstat's? We just check stop_bpstat
12647 in all threads for now. Note that we cannot just remove bpstats
12648 pointing at bpt from the stop_bpstat list entirely, as breakpoint
12649 commands are associated with the bpstat; if we remove it here,
12650 then the later call to bpstat_do_actions (&stop_bpstat); in
12651 event-top.c won't do anything, and temporary breakpoints with
12652 commands won't work. */
12654 iterate_over_threads (bpstat_remove_breakpoint_callback
, bpt
);
12656 /* Now that breakpoint is removed from breakpoint list, update the
12657 global location list. This will remove locations that used to
12658 belong to this breakpoint. Do this before freeing the breakpoint
12659 itself, since remove_breakpoint looks at location's owner. It
12660 might be better design to have location completely
12661 self-contained, but it's not the case now.
12663 Clear the location linked list first, otherwise, the intrusive_list
12664 destructor accesses the locations after they are freed. */
12665 bpt
->clear_locations ();
12666 update_global_location_list (UGLL_DONT_INSERT
);
12668 /* On the chance that someone will soon try again to delete this
12669 same bp, we mark it as deleted before freeing its storage. */
12670 bpt
->type
= bp_none
;
12674 /* Iterator function to call a user-provided callback function once
12675 for each of B and its related breakpoints. */
12678 iterate_over_related_breakpoints (struct breakpoint
*b
,
12679 gdb::function_view
<void (breakpoint
*)> function
)
12681 struct breakpoint
*related
;
12686 struct breakpoint
*next
;
12688 /* FUNCTION may delete RELATED. */
12689 next
= related
->related_breakpoint
;
12691 if (next
== related
)
12693 /* RELATED is the last ring entry. */
12694 function (related
);
12696 /* FUNCTION may have deleted it, so we'd never reach back to
12697 B. There's nothing left to do anyway, so just break
12702 function (related
);
12706 while (related
!= b
);
12710 delete_command (const char *arg
, int from_tty
)
12716 int breaks_to_delete
= 0;
12718 /* Delete all breakpoints, watchpoints, tracepoints, and catchpoints
12719 if no argument. Do not delete internal breakpoints, these have to
12720 be deleted with an explicit breakpoint number argument. */
12721 for (breakpoint
&b
: all_breakpoints ())
12722 if (user_breakpoint_p (&b
))
12724 breaks_to_delete
= 1;
12728 /* Ask user only if there are some breakpoints to delete. */
12730 || (breaks_to_delete
12731 && query (_("Delete all breakpoints, watchpoints, tracepoints, "
12732 "and catchpoints? "))))
12733 for (breakpoint
&b
: all_breakpoints_safe ())
12734 if (user_breakpoint_p (&b
))
12735 delete_breakpoint (&b
);
12738 map_breakpoint_numbers
12739 (arg
, [&] (breakpoint
*br
)
12741 iterate_over_related_breakpoints (br
, delete_breakpoint
);
12745 /* Return true if all locations of B bound to PSPACE are pending. If
12746 PSPACE is NULL, all locations of all program spaces are
12750 all_locations_are_pending (struct breakpoint
*b
, struct program_space
*pspace
)
12752 for (bp_location
&loc
: b
->locations ())
12753 if ((pspace
== NULL
12754 || loc
.pspace
== pspace
)
12755 && !loc
.shlib_disabled
12756 && !loc
.pspace
->executing_startup
)
12761 /* Subroutine of update_breakpoint_locations to simplify it.
12762 Return true if multiple fns in list LOCS have the same name.
12763 Null names are ignored. */
12766 ambiguous_names_p (const bp_location_range
&locs
)
12768 htab_up
htab (htab_create_alloc (13, htab_hash_string
, htab_eq_string
, NULL
,
12771 for (const bp_location
&l
: locs
)
12774 const char *name
= l
.function_name
.get ();
12776 /* Allow for some names to be NULL, ignore them. */
12780 slot
= (const char **) htab_find_slot (htab
.get (), (const void *) name
,
12782 /* NOTE: We can assume slot != NULL here because xcalloc never
12792 /* When symbols change, it probably means the sources changed as well,
12793 and it might mean the static tracepoint markers are no longer at
12794 the same address or line numbers they used to be at last we
12795 checked. Losing your static tracepoints whenever you rebuild is
12796 undesirable. This function tries to resync/rematch gdb static
12797 tracepoints with the markers on the target, for static tracepoints
12798 that have not been set by marker id. Static tracepoint that have
12799 been set by marker id are reset by marker id in breakpoint_re_set.
12802 1) For a tracepoint set at a specific address, look for a marker at
12803 the old PC. If one is found there, assume to be the same marker.
12804 If the name / string id of the marker found is different from the
12805 previous known name, assume that means the user renamed the marker
12806 in the sources, and output a warning.
12808 2) For a tracepoint set at a given line number, look for a marker
12809 at the new address of the old line number. If one is found there,
12810 assume to be the same marker. If the name / string id of the
12811 marker found is different from the previous known name, assume that
12812 means the user renamed the marker in the sources, and output a
12815 3) If a marker is no longer found at the same address or line, it
12816 may mean the marker no longer exists. But it may also just mean
12817 the code changed a bit. Maybe the user added a few lines of code
12818 that made the marker move up or down (in line number terms). Ask
12819 the target for info about the marker with the string id as we knew
12820 it. If found, update line number and address in the matching
12821 static tracepoint. This will get confused if there's more than one
12822 marker with the same ID (possible in UST, although unadvised
12823 precisely because it confuses tools). */
12825 static struct symtab_and_line
12826 update_static_tracepoint (tracepoint
*tp
, struct symtab_and_line sal
)
12828 struct static_tracepoint_marker marker
;
12833 find_line_pc (sal
.symtab
, sal
.line
, &pc
);
12835 if (target_static_tracepoint_marker_at (pc
, &marker
))
12837 if (tp
->static_trace_marker_id
!= marker
.str_id
)
12838 warning (_("static tracepoint %d changed probed marker from %s to %s"),
12839 tp
->number
, tp
->static_trace_marker_id
.c_str (),
12840 marker
.str_id
.c_str ());
12842 tp
->static_trace_marker_id
= std::move (marker
.str_id
);
12847 /* Old marker wasn't found on target at lineno. Try looking it up
12849 if (!sal
.explicit_pc
12851 && sal
.symtab
!= NULL
12852 && !tp
->static_trace_marker_id
.empty ())
12854 std::vector
<static_tracepoint_marker
> markers
12855 = target_static_tracepoint_markers_by_strid
12856 (tp
->static_trace_marker_id
.c_str ());
12858 if (!markers
.empty ())
12860 struct symbol
*sym
;
12861 struct static_tracepoint_marker
*tpmarker
;
12862 struct ui_out
*uiout
= current_uiout
;
12864 tpmarker
= &markers
[0];
12866 tp
->static_trace_marker_id
= std::move (tpmarker
->str_id
);
12868 warning (_("marker for static tracepoint %d (%s) not "
12869 "found at previous line number"),
12870 tp
->number
, tp
->static_trace_marker_id
.c_str ());
12872 symtab_and_line sal2
= find_pc_line (tpmarker
->address
, 0);
12873 sym
= find_pc_sect_function (tpmarker
->address
, NULL
);
12874 uiout
->text ("Now in ");
12877 uiout
->field_string ("func", sym
->print_name (),
12878 function_name_style
.style ());
12879 uiout
->text (" at ");
12881 uiout
->field_string ("file",
12882 symtab_to_filename_for_display (sal2
.symtab
),
12883 file_name_style
.style ());
12886 if (uiout
->is_mi_like_p ())
12888 const char *fullname
= symtab_to_fullname (sal2
.symtab
);
12890 uiout
->field_string ("fullname", fullname
);
12893 uiout
->field_signed ("line", sal2
.line
);
12894 uiout
->text ("\n");
12896 tp
->first_loc ().line_number
= sal2
.line
;
12897 tp
->first_loc ().symtab
= sym
!= NULL
? sal2
.symtab
: NULL
;
12899 std::unique_ptr
<explicit_location_spec
> els
12900 (new explicit_location_spec
12901 (symtab_to_filename_for_display (sal2
.symtab
)));
12902 els
->line_offset
.offset
= tp
->first_loc ().line_number
;
12903 els
->line_offset
.sign
= LINE_OFFSET_NONE
;
12905 tp
->locspec
= std::move (els
);
12907 /* Might be nice to check if function changed, and warn if
12914 /* Returns true iff location lists A and B are sufficiently same that
12915 we don't need to report breakpoint as changed. */
12918 locations_are_equal (const bp_location_list
&a
, const bp_location_range
&b
)
12920 auto a_iter
= a
.begin ();
12921 auto b_iter
= b
.begin ();
12923 for (; a_iter
!= a
.end () && b_iter
!= b
.end (); ++a_iter
, ++b_iter
)
12925 if (a_iter
->address
!= b_iter
->address
)
12928 if (a_iter
->shlib_disabled
!= b_iter
->shlib_disabled
)
12931 if (a_iter
->enabled
!= b_iter
->enabled
)
12934 if (a_iter
->disabled_by_cond
!= b_iter
->disabled_by_cond
)
12938 return (a_iter
== a
.end ()) == (b_iter
== b
.end ());
12941 /* See breakpoint.h. */
12944 breakpoint::steal_locations (program_space
*pspace
)
12946 if (pspace
== NULL
)
12947 return std::move (m_locations
);
12949 bp_location_list ret
;
12951 for (auto it
= m_locations
.begin (); it
!= m_locations
.end (); )
12953 if (it
->pspace
== pspace
)
12955 bp_location
&loc
= *it
;
12956 it
= m_locations
.erase (it
);
12957 ret
.push_back (loc
);
12966 /* Create new breakpoint locations for B (a hardware or software
12967 breakpoint) based on SALS and SALS_END. If SALS_END.NELTS is not
12968 zero, then B is a ranged breakpoint. Only recreates locations for
12969 FILTER_PSPACE. Locations of other program spaces are left
12973 update_breakpoint_locations (code_breakpoint
*b
,
12974 struct program_space
*filter_pspace
,
12975 gdb::array_view
<const symtab_and_line
> sals
,
12976 gdb::array_view
<const symtab_and_line
> sals_end
)
12978 if (!sals_end
.empty () && (sals
.size () != 1 || sals_end
.size () != 1))
12980 /* Ranged breakpoints have only one start location and one end
12982 b
->enable_state
= bp_disabled
;
12983 gdb_printf (gdb_stderr
,
12984 _("Could not reset ranged breakpoint %d: "
12985 "multiple locations found\n"),
12990 /* If there's no new locations, and all existing locations are
12991 pending, don't do anything. This optimizes the common case where
12992 all locations are in the same shared library, that was unloaded.
12993 We'd like to retain the location, so that when the library is
12994 loaded again, we don't loose the enabled/disabled status of the
12995 individual locations. */
12996 if (all_locations_are_pending (b
, filter_pspace
) && sals
.empty ())
12999 bp_location_list existing_locations
= b
->steal_locations (filter_pspace
);
13001 for (const auto &sal
: sals
)
13003 struct bp_location
*new_loc
;
13005 switch_to_program_space_and_thread (sal
.pspace
);
13007 new_loc
= b
->add_location (sal
);
13009 /* Reparse conditions, they might contain references to the
13011 if (b
->cond_string
!= NULL
)
13015 s
= b
->cond_string
.get ();
13018 new_loc
->cond
= parse_exp_1 (&s
, sal
.pc
,
13019 block_for_pc (sal
.pc
),
13022 catch (const gdb_exception_error
&e
)
13024 new_loc
->disabled_by_cond
= true;
13028 if (!sals_end
.empty ())
13030 CORE_ADDR end
= find_breakpoint_range_end (sals_end
[0]);
13032 new_loc
->length
= end
- sals
[0].pc
+ 1;
13036 /* If possible, carry over 'disable' status from existing
13039 /* If there are multiple breakpoints with the same function name,
13040 e.g. for inline functions, comparing function names won't work.
13041 Instead compare pc addresses; this is just a heuristic as things
13042 may have moved, but in practice it gives the correct answer
13043 often enough until a better solution is found. */
13044 int have_ambiguous_names
= ambiguous_names_p (b
->locations ());
13046 for (const bp_location
&e
: existing_locations
)
13048 if ((!e
.enabled
|| e
.disabled_by_cond
) && e
.function_name
)
13050 if (have_ambiguous_names
)
13052 for (bp_location
&l
: b
->locations ())
13054 /* Ignore software vs hardware location type at
13055 this point, because with "set breakpoint
13056 auto-hw", after a re-set, locations that were
13057 hardware can end up as software, or vice versa.
13058 As mentioned above, this is an heuristic and in
13059 practice should give the correct answer often
13061 if (breakpoint_locations_match (&e
, &l
, true))
13063 l
.enabled
= e
.enabled
;
13064 l
.disabled_by_cond
= e
.disabled_by_cond
;
13071 for (bp_location
&l
: b
->locations ())
13072 if (l
.function_name
13073 && strcmp (e
.function_name
.get (),
13074 l
.function_name
.get ()) == 0)
13076 l
.enabled
= e
.enabled
;
13077 l
.disabled_by_cond
= e
.disabled_by_cond
;
13085 if (!locations_are_equal (existing_locations
, b
->locations ()))
13086 notify_breakpoint_modified (b
);
13089 /* Find the SaL locations corresponding to the given LOCSPEC.
13090 On return, FOUND will be 1 if any SaL was found, zero otherwise. */
13092 std::vector
<symtab_and_line
>
13093 code_breakpoint::location_spec_to_sals (location_spec
*locspec
,
13094 struct program_space
*search_pspace
,
13097 struct gdb_exception exception
;
13099 std::vector
<symtab_and_line
> sals
;
13103 sals
= decode_location_spec (locspec
, search_pspace
);
13105 catch (gdb_exception_error
&e
)
13107 int not_found_and_ok
= false;
13109 /* For pending breakpoints, it's expected that parsing will
13110 fail until the right shared library is loaded. User has
13111 already told to create pending breakpoints and don't need
13112 extra messages. If breakpoint is in bp_shlib_disabled
13113 state, then user already saw the message about that
13114 breakpoint being disabled, and don't want to see more
13116 if (e
.error
== NOT_FOUND_ERROR
13117 && (condition_not_parsed
13118 || (this->has_locations ()
13119 && search_pspace
!= NULL
13120 && this->first_loc ().pspace
!= search_pspace
)
13121 || (this->has_locations () && this->first_loc ().shlib_disabled
)
13122 || (this->has_locations ()
13123 && this->first_loc ().pspace
->executing_startup
)
13124 || enable_state
== bp_disabled
))
13125 not_found_and_ok
= true;
13127 if (!not_found_and_ok
)
13129 /* We surely don't want to warn about the same breakpoint
13130 10 times. One solution, implemented here, is disable
13131 the breakpoint on error. Another solution would be to
13132 have separate 'warning emitted' flag. Since this
13133 happens only when a binary has changed, I don't know
13134 which approach is better. */
13135 enable_state
= bp_disabled
;
13139 exception
= std::move (e
);
13142 if (exception
.reason
== 0 || exception
.error
!= NOT_FOUND_ERROR
)
13144 for (auto &sal
: sals
)
13145 resolve_sal_pc (&sal
);
13146 if (condition_not_parsed
&& extra_string
!= NULL
)
13148 gdb::unique_xmalloc_ptr
<char> local_cond
, local_extra
;
13149 int local_thread
, local_task
, local_inferior
;
13151 find_condition_and_thread_for_sals (sals
, extra_string
.get (),
13152 &local_cond
, &local_thread
,
13154 &local_task
, &local_extra
);
13155 gdb_assert (cond_string
== nullptr);
13156 if (local_cond
!= nullptr)
13157 cond_string
= std::move (local_cond
);
13158 thread
= local_thread
;
13160 if (local_extra
!= nullptr)
13161 extra_string
= std::move (local_extra
);
13162 condition_not_parsed
= 0;
13165 if (type
== bp_static_tracepoint
)
13167 tracepoint
*t
= gdb::checked_static_cast
<tracepoint
*> (this);
13168 sals
[0] = update_static_tracepoint (t
, sals
[0]);
13179 /* The default re_set method, for typical hardware or software
13180 breakpoints. Reevaluate the breakpoint and recreate its
13184 code_breakpoint::re_set_default ()
13186 struct program_space
*filter_pspace
= current_program_space
;
13187 std::vector
<symtab_and_line
> expanded
, expanded_end
;
13190 std::vector
<symtab_and_line
> sals
= location_spec_to_sals (locspec
.get (),
13194 expanded
= std::move (sals
);
13196 if (locspec_range_end
!= nullptr)
13198 std::vector
<symtab_and_line
> sals_end
13199 = location_spec_to_sals (locspec_range_end
.get (),
13200 filter_pspace
, &found
);
13202 expanded_end
= std::move (sals_end
);
13205 update_breakpoint_locations (this, filter_pspace
, expanded
, expanded_end
);
13208 /* Default method for creating SALs from an address string. It basically
13209 calls parse_breakpoint_sals. Return 1 for success, zero for failure. */
13212 create_sals_from_location_spec_default (location_spec
*locspec
,
13213 struct linespec_result
*canonical
)
13215 parse_breakpoint_sals (locspec
, canonical
);
13218 /* Reset a breakpoint. */
13221 breakpoint_re_set_one (breakpoint
*b
)
13223 input_radix
= b
->input_radix
;
13224 set_language (b
->language
);
13229 /* Re-set breakpoint locations for the current program space.
13230 Locations bound to other program spaces are left untouched. */
13233 breakpoint_re_set (void)
13236 scoped_restore_current_language save_language
;
13237 scoped_restore save_input_radix
= make_scoped_restore (&input_radix
);
13238 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
13240 /* breakpoint_re_set_one sets the current_language to the language
13241 of the breakpoint it is resetting (see prepare_re_set_context)
13242 before re-evaluating the breakpoint's location. This change can
13243 unfortunately get undone by accident if the language_mode is set
13244 to auto, and we either switch frames, or more likely in this context,
13245 we select the current frame.
13247 We prevent this by temporarily turning the language_mode to
13248 language_mode_manual. We restore it once all breakpoints
13249 have been reset. */
13250 scoped_restore save_language_mode
= make_scoped_restore (&language_mode
);
13251 language_mode
= language_mode_manual
;
13253 /* Note: we must not try to insert locations until after all
13254 breakpoints have been re-set. Otherwise, e.g., when re-setting
13255 breakpoint 1, we'd insert the locations of breakpoint 2, which
13256 hadn't been re-set yet, and thus may have stale locations. */
13258 for (breakpoint
&b
: all_breakpoints_safe ())
13262 breakpoint_re_set_one (&b
);
13264 catch (const gdb_exception
&ex
)
13266 exception_fprintf (gdb_stderr
, ex
,
13267 "Error in re-setting breakpoint %d: ",
13272 jit_breakpoint_re_set ();
13275 create_overlay_event_breakpoint ();
13276 create_longjmp_master_breakpoint ();
13277 create_std_terminate_master_breakpoint ();
13278 create_exception_master_breakpoint ();
13280 /* Now we can insert. */
13281 update_global_location_list (UGLL_MAY_INSERT
);
13284 /* Reset the thread number of this breakpoint:
13286 - If the breakpoint is for all threads, leave it as-is.
13287 - Else, reset it to the current thread for inferior_ptid. */
13289 breakpoint_re_set_thread (struct breakpoint
*b
)
13291 if (b
->thread
!= -1)
13293 b
->thread
= inferior_thread ()->global_num
;
13295 /* We're being called after following a fork. The new fork is
13296 selected as current, and unless this was a vfork will have a
13297 different program space from the original thread. Reset that
13299 b
->first_loc ().pspace
= current_program_space
;
13303 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
13304 If from_tty is nonzero, it prints a message to that effect,
13305 which ends with a period (no newline). */
13308 set_ignore_count (int bptnum
, int count
, int from_tty
)
13313 for (breakpoint
&b
: all_breakpoints ())
13314 if (b
.number
== bptnum
)
13316 if (is_tracepoint (&b
))
13318 if (from_tty
&& count
!= 0)
13319 gdb_printf (_("Ignore count ignored for tracepoint %d."),
13324 b
.ignore_count
= count
;
13328 gdb_printf (_("Will stop next time "
13329 "breakpoint %d is reached."),
13331 else if (count
== 1)
13332 gdb_printf (_("Will ignore next crossing of breakpoint %d."),
13335 gdb_printf (_("Will ignore next %d "
13336 "crossings of breakpoint %d."),
13339 notify_breakpoint_modified (&b
);
13343 error (_("No breakpoint number %d."), bptnum
);
13346 /* Command to set ignore-count of breakpoint N to COUNT. */
13349 ignore_command (const char *args
, int from_tty
)
13351 const char *p
= args
;
13355 error_no_arg (_("a breakpoint number"));
13357 num
= get_number (&p
);
13359 error (_("bad breakpoint number: '%s'"), args
);
13361 error (_("Second argument (specified ignore-count) is missing."));
13363 set_ignore_count (num
,
13364 longest_to_int (value_as_long (parse_and_eval (p
))),
13371 /* Call FUNCTION on each of the breakpoints with numbers in the range
13372 defined by BP_NUM_RANGE (an inclusive range). */
13375 map_breakpoint_number_range (std::pair
<int, int> bp_num_range
,
13376 gdb::function_view
<void (breakpoint
*)> function
)
13378 if (bp_num_range
.first
== 0)
13380 warning (_("bad breakpoint number at or near '%d'"),
13381 bp_num_range
.first
);
13385 for (int i
= bp_num_range
.first
; i
<= bp_num_range
.second
; i
++)
13387 bool match
= false;
13389 for (breakpoint
&b
: all_breakpoints_safe ())
13397 gdb_printf (_("No breakpoint number %d.\n"), i
);
13402 /* Call FUNCTION on each of the breakpoints whose numbers are given in
13406 map_breakpoint_numbers (const char *args
,
13407 gdb::function_view
<void (breakpoint
*)> function
)
13409 if (args
== NULL
|| *args
== '\0')
13410 error_no_arg (_("one or more breakpoint numbers"));
13412 number_or_range_parser
parser (args
);
13414 while (!parser
.finished ())
13416 int num
= parser
.get_number ();
13417 map_breakpoint_number_range (std::make_pair (num
, num
), function
);
13421 /* Return the breakpoint location structure corresponding to the
13422 BP_NUM and LOC_NUM values. */
13424 static struct bp_location
*
13425 find_location_by_number (int bp_num
, int loc_num
)
13427 breakpoint
*b
= get_breakpoint (bp_num
);
13429 if (!b
|| b
->number
!= bp_num
)
13430 error (_("Bad breakpoint number '%d'"), bp_num
);
13433 error (_("Bad breakpoint location number '%d'"), loc_num
);
13436 for (bp_location
&loc
: b
->locations ())
13437 if (++n
== loc_num
)
13440 error (_("Bad breakpoint location number '%d'"), loc_num
);
13443 /* Modes of operation for extract_bp_num. */
13444 enum class extract_bp_kind
13446 /* Extracting a breakpoint number. */
13449 /* Extracting a location number. */
13453 /* Extract a breakpoint or location number (as determined by KIND)
13454 from the string starting at START. TRAILER is a character which
13455 can be found after the number. If you don't want a trailer, use
13456 '\0'. If END_OUT is not NULL, it is set to point after the parsed
13457 string. This always returns a positive integer. */
13460 extract_bp_num (extract_bp_kind kind
, const char *start
,
13461 int trailer
, const char **end_out
= NULL
)
13463 const char *end
= start
;
13464 int num
= get_number_trailer (&end
, trailer
);
13466 error (kind
== extract_bp_kind::bp
13467 ? _("Negative breakpoint number '%.*s'")
13468 : _("Negative breakpoint location number '%.*s'"),
13469 int (end
- start
), start
);
13471 error (kind
== extract_bp_kind::bp
13472 ? _("Bad breakpoint number '%.*s'")
13473 : _("Bad breakpoint location number '%.*s'"),
13474 int (end
- start
), start
);
13476 if (end_out
!= NULL
)
13481 /* Extract a breakpoint or location range (as determined by KIND) in
13482 the form NUM1-NUM2 stored at &ARG[arg_offset]. Returns a std::pair
13483 representing the (inclusive) range. The returned pair's elements
13484 are always positive integers. */
13486 static std::pair
<int, int>
13487 extract_bp_or_bp_range (extract_bp_kind kind
,
13488 const std::string
&arg
,
13489 std::string::size_type arg_offset
)
13491 std::pair
<int, int> range
;
13492 const char *bp_loc
= &arg
[arg_offset
];
13493 std::string::size_type dash
= arg
.find ('-', arg_offset
);
13494 if (dash
!= std::string::npos
)
13496 /* bp_loc is a range (x-z). */
13497 if (arg
.length () == dash
+ 1)
13498 error (kind
== extract_bp_kind::bp
13499 ? _("Bad breakpoint number at or near: '%s'")
13500 : _("Bad breakpoint location number at or near: '%s'"),
13504 const char *start_first
= bp_loc
;
13505 const char *start_second
= &arg
[dash
+ 1];
13506 range
.first
= extract_bp_num (kind
, start_first
, '-');
13507 range
.second
= extract_bp_num (kind
, start_second
, '\0', &end
);
13509 if (range
.first
> range
.second
)
13510 error (kind
== extract_bp_kind::bp
13511 ? _("Inverted breakpoint range at '%.*s'")
13512 : _("Inverted breakpoint location range at '%.*s'"),
13513 int (end
- start_first
), start_first
);
13517 /* bp_loc is a single value. */
13518 range
.first
= extract_bp_num (kind
, bp_loc
, '\0');
13519 range
.second
= range
.first
;
13524 /* Extract the breakpoint/location range specified by ARG. Returns
13525 the breakpoint range in BP_NUM_RANGE, and the location range in
13528 ARG may be in any of the following forms:
13530 x where 'x' is a breakpoint number.
13531 x-y where 'x' and 'y' specify a breakpoint numbers range.
13532 x.y where 'x' is a breakpoint number and 'y' a location number.
13533 x.y-z where 'x' is a breakpoint number and 'y' and 'z' specify a
13534 location number range.
13538 extract_bp_number_and_location (const std::string
&arg
,
13539 std::pair
<int, int> &bp_num_range
,
13540 std::pair
<int, int> &bp_loc_range
)
13542 std::string::size_type dot
= arg
.find ('.');
13544 if (dot
!= std::string::npos
)
13546 /* Handle 'x.y' and 'x.y-z' cases. */
13548 if (arg
.length () == dot
+ 1 || dot
== 0)
13549 error (_("Bad breakpoint number at or near: '%s'"), arg
.c_str ());
13552 = extract_bp_num (extract_bp_kind::bp
, arg
.c_str (), '.');
13553 bp_num_range
.second
= bp_num_range
.first
;
13555 bp_loc_range
= extract_bp_or_bp_range (extract_bp_kind::loc
,
13560 /* Handle x and x-y cases. */
13562 bp_num_range
= extract_bp_or_bp_range (extract_bp_kind::bp
, arg
, 0);
13563 bp_loc_range
.first
= 0;
13564 bp_loc_range
.second
= 0;
13568 /* Enable or disable a breakpoint location BP_NUM.LOC_NUM. ENABLE
13569 specifies whether to enable or disable. */
13572 enable_disable_bp_num_loc (int bp_num
, int loc_num
, bool enable
)
13574 struct bp_location
*loc
= find_location_by_number (bp_num
, loc_num
);
13577 if (loc
->disabled_by_cond
&& enable
)
13578 error (_("Breakpoint %d's condition is invalid at location %d, "
13579 "cannot enable."), bp_num
, loc_num
);
13581 if (loc
->enabled
!= enable
)
13583 loc
->enabled
= enable
;
13584 mark_breakpoint_location_modified (loc
);
13586 if (target_supports_enable_disable_tracepoint ()
13587 && current_trace_status ()->running
&& loc
->owner
13588 && is_tracepoint (loc
->owner
))
13589 target_disable_tracepoint (loc
);
13591 update_global_location_list (UGLL_DONT_INSERT
);
13593 notify_breakpoint_modified (loc
->owner
);
13596 /* Calculates LOC_NUM for LOC by traversing the bp_location chain of LOC's
13597 owner. 1-based indexing. -1 signals NOT FOUND. */
13600 find_loc_num_by_location (const bp_location
*loc
)
13602 if (loc
!= nullptr && loc
->owner
!= nullptr)
13604 /* Locations use 1-based indexing. */
13606 for (bp_location
&it
: loc
->owner
->locations ())
13616 /* Enable or disable a breakpoint location LOC. ENABLE
13617 specifies whether to enable or disable. */
13620 enable_disable_bp_location (bp_location
*loc
, bool enable
)
13622 if (loc
== nullptr)
13623 error (_("Breakpoint location is invalid."));
13625 if (loc
->owner
== nullptr)
13626 error (_("Breakpoint location does not have an owner breakpoint."));
13628 if (loc
->disabled_by_cond
&& enable
)
13630 int loc_num
= find_loc_num_by_location (loc
);
13632 error (_("Breakpoint location LOC_NUM could not be found."));
13634 error (_("Breakpoint %d's condition is invalid at location %d, "
13635 "cannot enable."), loc
->owner
->number
, loc_num
);
13638 if (loc
->enabled
!= enable
)
13640 loc
->enabled
= enable
;
13641 mark_breakpoint_location_modified (loc
);
13644 if (target_supports_enable_disable_tracepoint ()
13645 && current_trace_status ()->running
&& loc
->owner
13646 && is_tracepoint (loc
->owner
))
13647 target_disable_tracepoint (loc
);
13649 update_global_location_list (UGLL_DONT_INSERT
);
13650 notify_breakpoint_modified (loc
->owner
);
13653 /* Enable or disable a range of breakpoint locations. BP_NUM is the
13654 number of the breakpoint, and BP_LOC_RANGE specifies the
13655 (inclusive) range of location numbers of that breakpoint to
13656 enable/disable. ENABLE specifies whether to enable or disable the
13660 enable_disable_breakpoint_location_range (int bp_num
,
13661 std::pair
<int, int> &bp_loc_range
,
13664 for (int i
= bp_loc_range
.first
; i
<= bp_loc_range
.second
; i
++)
13665 enable_disable_bp_num_loc (bp_num
, i
, enable
);
13668 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
13669 If from_tty is nonzero, it prints a message to that effect,
13670 which ends with a period (no newline). */
13673 disable_breakpoint (struct breakpoint
*bpt
)
13675 /* Never disable a watchpoint scope breakpoint; we want to
13676 hit them when we leave scope so we can delete both the
13677 watchpoint and its scope breakpoint at that time. */
13678 if (bpt
->type
== bp_watchpoint_scope
)
13681 bpt
->enable_state
= bp_disabled
;
13683 /* Mark breakpoint locations modified. */
13684 mark_breakpoint_modified (bpt
);
13686 if (target_supports_enable_disable_tracepoint ()
13687 && current_trace_status ()->running
&& is_tracepoint (bpt
))
13689 for (bp_location
&location
: bpt
->locations ())
13690 target_disable_tracepoint (&location
);
13693 update_global_location_list (UGLL_DONT_INSERT
);
13695 notify_breakpoint_modified (bpt
);
13698 /* Enable or disable the breakpoint(s) or breakpoint location(s)
13699 specified in ARGS. ARGS may be in any of the formats handled by
13700 extract_bp_number_and_location. ENABLE specifies whether to enable
13701 or disable the breakpoints/locations. */
13704 enable_disable_command (const char *args
, int from_tty
, bool enable
)
13708 for (breakpoint
&bpt
: all_breakpoints ())
13709 if (user_breakpoint_p (&bpt
))
13712 enable_breakpoint (&bpt
);
13714 disable_breakpoint (&bpt
);
13719 std::string num
= extract_arg (&args
);
13721 while (!num
.empty ())
13723 std::pair
<int, int> bp_num_range
, bp_loc_range
;
13725 extract_bp_number_and_location (num
, bp_num_range
, bp_loc_range
);
13727 if (bp_loc_range
.first
== bp_loc_range
.second
13728 && (bp_loc_range
.first
== 0
13729 || (bp_loc_range
.first
== 1
13730 && bp_num_range
.first
== bp_num_range
.second
13731 && !has_multiple_locations (bp_num_range
.first
))))
13733 /* Handle breakpoint ids with formats 'x' or 'x-z'
13734 or 'y.1' where y has only one code location. */
13735 map_breakpoint_number_range (bp_num_range
,
13737 ? enable_breakpoint
13738 : disable_breakpoint
);
13742 /* Handle breakpoint ids with formats 'x.y' or
13744 enable_disable_breakpoint_location_range
13745 (bp_num_range
.first
, bp_loc_range
, enable
);
13747 num
= extract_arg (&args
);
13752 /* The disable command disables the specified breakpoints/locations
13753 (or all defined breakpoints) so they're no longer effective in
13754 stopping the inferior. ARGS may be in any of the forms defined in
13755 extract_bp_number_and_location. */
13758 disable_command (const char *args
, int from_tty
)
13760 enable_disable_command (args
, from_tty
, false);
13764 enable_breakpoint_disp (struct breakpoint
*bpt
, enum bpdisp disposition
,
13767 int target_resources_ok
;
13769 if (bpt
->type
== bp_hardware_breakpoint
)
13772 i
= hw_breakpoint_used_count ();
13773 target_resources_ok
=
13774 target_can_use_hardware_watchpoint (bp_hardware_breakpoint
,
13776 if (target_resources_ok
== 0)
13777 error (_("No hardware breakpoint support in the target."));
13778 else if (target_resources_ok
< 0)
13779 error (_("Hardware breakpoints used exceeds limit."));
13782 if (is_watchpoint (bpt
))
13784 /* Initialize it just to avoid a GCC false warning. */
13785 enum enable_state orig_enable_state
= bp_disabled
;
13789 watchpoint
*w
= gdb::checked_static_cast
<watchpoint
*> (bpt
);
13791 orig_enable_state
= bpt
->enable_state
;
13792 bpt
->enable_state
= bp_enabled
;
13793 update_watchpoint (w
, true /* reparse */);
13795 catch (const gdb_exception_error
&e
)
13797 bpt
->enable_state
= orig_enable_state
;
13798 exception_fprintf (gdb_stderr
, e
, _("Cannot enable watchpoint %d: "),
13804 bpt
->enable_state
= bp_enabled
;
13806 /* Mark breakpoint locations modified. */
13807 mark_breakpoint_modified (bpt
);
13809 if (target_supports_enable_disable_tracepoint ()
13810 && current_trace_status ()->running
&& is_tracepoint (bpt
))
13812 for (bp_location
&location
: bpt
->locations ())
13813 target_enable_tracepoint (&location
);
13816 bpt
->disposition
= disposition
;
13817 bpt
->enable_count
= count
;
13818 update_global_location_list (UGLL_MAY_INSERT
);
13820 notify_breakpoint_modified (bpt
);
13825 enable_breakpoint (struct breakpoint
*bpt
)
13827 enable_breakpoint_disp (bpt
, bpt
->disposition
, 0);
13830 /* The enable command enables the specified breakpoints/locations (or
13831 all defined breakpoints) so they once again become (or continue to
13832 be) effective in stopping the inferior. ARGS may be in any of the
13833 forms defined in extract_bp_number_and_location. */
13836 enable_command (const char *args
, int from_tty
)
13838 enable_disable_command (args
, from_tty
, true);
13842 enable_once_command (const char *args
, int from_tty
)
13844 map_breakpoint_numbers
13845 (args
, [&] (breakpoint
*b
)
13847 iterate_over_related_breakpoints
13848 (b
, [&] (breakpoint
*bpt
)
13850 enable_breakpoint_disp (bpt
, disp_disable
, 1);
13856 enable_count_command (const char *args
, int from_tty
)
13861 error_no_arg (_("hit count"));
13863 count
= get_number (&args
);
13865 map_breakpoint_numbers
13866 (args
, [&] (breakpoint
*b
)
13868 iterate_over_related_breakpoints
13869 (b
, [&] (breakpoint
*bpt
)
13871 enable_breakpoint_disp (bpt
, disp_disable
, count
);
13877 enable_delete_command (const char *args
, int from_tty
)
13879 map_breakpoint_numbers
13880 (args
, [&] (breakpoint
*b
)
13882 iterate_over_related_breakpoints
13883 (b
, [&] (breakpoint
*bpt
)
13885 enable_breakpoint_disp (bpt
, disp_del
, 1);
13890 /* Invalidate last known value of any hardware watchpoint if
13891 the memory which that value represents has been written to by
13895 invalidate_bp_value_on_memory_change (struct inferior
*inferior
,
13896 CORE_ADDR addr
, ssize_t len
,
13897 const bfd_byte
*data
)
13899 for (breakpoint
&bp
: all_breakpoints ())
13900 if (bp
.enable_state
== bp_enabled
13901 && bp
.type
== bp_hardware_watchpoint
)
13903 watchpoint
&wp
= gdb::checked_static_cast
<watchpoint
&> (bp
);
13905 if (wp
.val_valid
&& wp
.val
!= nullptr)
13907 for (bp_location
&loc
: bp
.locations ())
13908 if (loc
.loc_type
== bp_loc_hardware_watchpoint
13909 && loc
.address
+ loc
.length
> addr
13910 && addr
+ len
> loc
.address
)
13913 wp
.val_valid
= false;
13919 /* Create and insert a breakpoint for software single step. */
13922 insert_single_step_breakpoint (struct gdbarch
*gdbarch
,
13923 const address_space
*aspace
,
13926 struct thread_info
*tp
= inferior_thread ();
13927 struct symtab_and_line sal
;
13928 CORE_ADDR pc
= next_pc
;
13930 if (tp
->control
.single_step_breakpoints
== NULL
)
13932 std::unique_ptr
<breakpoint
> b
13933 (new momentary_breakpoint (gdbarch
, bp_single_step
,
13934 current_program_space
,
13938 tp
->control
.single_step_breakpoints
13939 = add_to_breakpoint_chain (std::move (b
));
13942 sal
= find_pc_line (pc
, 0);
13944 sal
.section
= find_pc_overlay (pc
);
13945 sal
.explicit_pc
= 1;
13948 = (gdb::checked_static_cast
<momentary_breakpoint
*>
13949 (tp
->control
.single_step_breakpoints
));
13950 ss_bp
->add_location (sal
);
13952 update_global_location_list (UGLL_INSERT
);
13955 /* Insert single step breakpoints according to the current state. */
13958 insert_single_step_breakpoints (struct gdbarch
*gdbarch
)
13960 regcache
*regcache
= get_thread_regcache (inferior_thread ());
13961 std::vector
<CORE_ADDR
> next_pcs
;
13963 next_pcs
= gdbarch_software_single_step (gdbarch
, regcache
);
13965 if (!next_pcs
.empty ())
13967 frame_info_ptr frame
= get_current_frame ();
13968 const address_space
*aspace
= get_frame_address_space (frame
);
13970 for (CORE_ADDR pc
: next_pcs
)
13971 insert_single_step_breakpoint (gdbarch
, aspace
, pc
);
13979 /* See breakpoint.h. */
13982 breakpoint_has_location_inserted_here (struct breakpoint
*bp
,
13983 const address_space
*aspace
,
13986 for (bp_location
&loc
: bp
->locations ())
13988 && breakpoint_location_address_match (&loc
, aspace
, pc
))
13994 /* Check whether a software single-step breakpoint is inserted at
13998 single_step_breakpoint_inserted_here_p (const address_space
*aspace
,
14001 for (breakpoint
&bpt
: all_breakpoints ())
14003 if (bpt
.type
== bp_single_step
14004 && breakpoint_has_location_inserted_here (&bpt
, aspace
, pc
))
14010 /* Tracepoint-specific operations. */
14012 /* Set tracepoint count to NUM. */
14014 set_tracepoint_count (int num
)
14016 tracepoint_count
= num
;
14017 set_internalvar_integer (lookup_internalvar ("tpnum"), num
);
14021 trace_command (const char *arg
, int from_tty
)
14023 location_spec_up locspec
= string_to_location_spec (&arg
,
14025 const struct breakpoint_ops
*ops
= breakpoint_ops_for_location_spec
14026 (locspec
.get (), true /* is_tracepoint */);
14028 create_breakpoint (get_current_arch (),
14030 NULL
, -1, -1, arg
, false, 1 /* parse arg */,
14032 bp_tracepoint
/* type_wanted */,
14033 0 /* Ignore count */,
14034 pending_break_support
,
14038 0 /* internal */, 0);
14042 ftrace_command (const char *arg
, int from_tty
)
14044 location_spec_up locspec
= string_to_location_spec (&arg
,
14046 create_breakpoint (get_current_arch (),
14048 NULL
, -1, -1, arg
, false, 1 /* parse arg */,
14050 bp_fast_tracepoint
/* type_wanted */,
14051 0 /* Ignore count */,
14052 pending_break_support
,
14053 &code_breakpoint_ops
,
14056 0 /* internal */, 0);
14059 /* strace command implementation. Creates a static tracepoint. */
14062 strace_command (const char *arg
, int from_tty
)
14064 const struct breakpoint_ops
*ops
;
14065 location_spec_up locspec
;
14068 /* Decide if we are dealing with a static tracepoint marker (`-m'),
14069 or with a normal static tracepoint. */
14070 if (arg
&& startswith (arg
, "-m") && isspace (arg
[2]))
14072 ops
= &strace_marker_breakpoint_ops
;
14073 locspec
= new_linespec_location_spec (&arg
,
14074 symbol_name_match_type::FULL
);
14075 type
= bp_static_marker_tracepoint
;
14079 ops
= &code_breakpoint_ops
;
14080 locspec
= string_to_location_spec (&arg
, current_language
);
14081 type
= bp_static_tracepoint
;
14084 create_breakpoint (get_current_arch (),
14086 NULL
, -1, -1, arg
, false, 1 /* parse arg */,
14088 type
/* type_wanted */,
14089 0 /* Ignore count */,
14090 pending_break_support
,
14094 0 /* internal */, 0);
14097 /* Set up a fake reader function that gets command lines from a linked
14098 list that was acquired during tracepoint uploading. */
14100 static struct uploaded_tp
*this_utp
;
14101 static int next_cmd
;
14103 static const char *
14104 read_uploaded_action (std::string
&buffer
)
14106 char *rslt
= nullptr;
14108 if (next_cmd
< this_utp
->cmd_strings
.size ())
14110 rslt
= this_utp
->cmd_strings
[next_cmd
].get ();
14117 /* Given information about a tracepoint as recorded on a target (which
14118 can be either a live system or a trace file), attempt to create an
14119 equivalent GDB tracepoint. This is not a reliable process, since
14120 the target does not necessarily have all the information used when
14121 the tracepoint was originally defined. */
14123 struct tracepoint
*
14124 create_tracepoint_from_upload (struct uploaded_tp
*utp
)
14126 const char *addr_str
;
14127 char small_buf
[100];
14128 struct tracepoint
*tp
;
14130 if (utp
->at_string
)
14131 addr_str
= utp
->at_string
.get ();
14134 /* In the absence of a source location, fall back to raw
14135 address. Since there is no way to confirm that the address
14136 means the same thing as when the trace was started, warn the
14138 warning (_("Uploaded tracepoint %d has no "
14139 "source location, using raw address"),
14141 xsnprintf (small_buf
, sizeof (small_buf
), "*%s", hex_string (utp
->addr
));
14142 addr_str
= small_buf
;
14145 /* There's not much we can do with a sequence of bytecodes. */
14146 if (utp
->cond
&& !utp
->cond_string
)
14147 warning (_("Uploaded tracepoint %d condition "
14148 "has no source form, ignoring it"),
14151 location_spec_up locspec
= string_to_location_spec (&addr_str
,
14155 gdb_assert (addr_str
!= nullptr);
14156 if (*addr_str
!= '\0')
14157 error (_("Garbage '%s' at end of location"), addr_str
);
14159 if (!create_breakpoint (get_current_arch (),
14161 utp
->cond_string
.get (), -1, -1, addr_str
,
14162 false /* force_condition */,
14163 0 /* parse cond/thread */,
14165 utp
->type
/* type_wanted */,
14166 0 /* Ignore count */,
14167 pending_break_support
,
14168 &code_breakpoint_ops
,
14170 utp
->enabled
/* enabled */,
14172 CREATE_BREAKPOINT_FLAGS_INSERTED
))
14175 /* Get the tracepoint we just created. */
14176 tp
= get_tracepoint (tracepoint_count
);
14177 gdb_assert (tp
!= NULL
);
14181 xsnprintf (small_buf
, sizeof (small_buf
), "%d %d", utp
->pass
,
14184 trace_pass_command (small_buf
, 0);
14187 /* If we have uploaded versions of the original commands, set up a
14188 special-purpose "reader" function and call the usual command line
14189 reader, then pass the result to the breakpoint command-setting
14191 if (!utp
->cmd_strings
.empty ())
14193 counted_command_line cmd_list
;
14198 cmd_list
= read_command_lines_1 (read_uploaded_action
, 1, NULL
);
14200 breakpoint_set_commands (tp
, std::move (cmd_list
));
14202 else if (!utp
->actions
.empty ()
14203 || !utp
->step_actions
.empty ())
14204 warning (_("Uploaded tracepoint %d actions "
14205 "have no source form, ignoring them"),
14208 /* Copy any status information that might be available. */
14209 tp
->hit_count
= utp
->hit_count
;
14210 tp
->traceframe_usage
= utp
->traceframe_usage
;
14215 /* Print information on tracepoint number TPNUM_EXP, or all if
14219 info_tracepoints_command (const char *args
, int from_tty
)
14221 struct ui_out
*uiout
= current_uiout
;
14224 num_printed
= breakpoint_1 (args
, false, is_tracepoint
);
14226 if (num_printed
== 0)
14228 if (args
== NULL
|| *args
== '\0')
14229 uiout
->message ("No tracepoints.\n");
14231 uiout
->message ("No tracepoint matching '%s'.\n", args
);
14234 default_collect_info ();
14237 /* The 'enable trace' command enables tracepoints.
14238 Not supported by all targets. */
14240 enable_trace_command (const char *args
, int from_tty
)
14242 enable_command (args
, from_tty
);
14245 /* The 'disable trace' command disables tracepoints.
14246 Not supported by all targets. */
14248 disable_trace_command (const char *args
, int from_tty
)
14250 disable_command (args
, from_tty
);
14253 /* Remove a tracepoint (or all if no argument). */
14255 delete_trace_command (const char *arg
, int from_tty
)
14261 int breaks_to_delete
= 0;
14263 /* Delete all tracepoints if no argument.
14264 Do not delete internal or call-dummy breakpoints, these
14265 have to be deleted with an explicit breakpoint number
14267 for (breakpoint
&tp
: all_tracepoints ())
14268 if (is_tracepoint (&tp
) && user_breakpoint_p (&tp
))
14270 breaks_to_delete
= 1;
14274 /* Ask user only if there are some breakpoints to delete. */
14276 || (breaks_to_delete
&& query (_("Delete all tracepoints? "))))
14278 for (breakpoint
&b
: all_breakpoints_safe ())
14279 if (is_tracepoint (&b
) && user_breakpoint_p (&b
))
14280 delete_breakpoint (&b
);
14284 map_breakpoint_numbers
14285 (arg
, [&] (breakpoint
*br
)
14287 iterate_over_related_breakpoints (br
, delete_breakpoint
);
14291 /* Helper function for trace_pass_command. */
14294 trace_pass_set_count (struct tracepoint
*tp
, int count
, int from_tty
)
14296 tp
->pass_count
= count
;
14297 notify_breakpoint_modified (tp
);
14299 gdb_printf (_("Setting tracepoint %d's passcount to %d\n"),
14300 tp
->number
, count
);
14303 /* Set passcount for tracepoint.
14305 First command argument is passcount, second is tracepoint number.
14306 If tracepoint number omitted, apply to most recently defined.
14307 Also accepts special argument "all". */
14310 trace_pass_command (const char *args
, int from_tty
)
14314 if (args
== 0 || *args
== 0)
14315 error (_("passcount command requires an "
14316 "argument (count + optional TP num)"));
14318 count
= strtoulst (args
, &args
, 10); /* Count comes first, then TP num. */
14320 args
= skip_spaces (args
);
14321 if (*args
&& strncasecmp (args
, "all", 3) == 0)
14323 args
+= 3; /* Skip special argument "all". */
14325 error (_("Junk at end of arguments."));
14327 for (breakpoint
&b
: all_tracepoints ())
14329 tracepoint
&t1
= gdb::checked_static_cast
<tracepoint
&> (b
);
14330 trace_pass_set_count (&t1
, count
, from_tty
);
14333 else if (*args
== '\0')
14335 tracepoint
*t1
= get_tracepoint_by_number (&args
, NULL
);
14337 trace_pass_set_count (t1
, count
, from_tty
);
14341 number_or_range_parser
parser (args
);
14342 while (!parser
.finished ())
14344 tracepoint
*t1
= get_tracepoint_by_number (&args
, &parser
);
14346 trace_pass_set_count (t1
, count
, from_tty
);
14351 struct tracepoint
*
14352 get_tracepoint (int num
)
14354 for (breakpoint
&t
: all_tracepoints ())
14355 if (t
.number
== num
)
14356 return gdb::checked_static_cast
<tracepoint
*> (&t
);
14361 /* Find the tracepoint with the given target-side number (which may be
14362 different from the tracepoint number after disconnecting and
14365 struct tracepoint
*
14366 get_tracepoint_by_number_on_target (int num
)
14368 for (breakpoint
&b
: all_tracepoints ())
14370 tracepoint
&t
= gdb::checked_static_cast
<tracepoint
&> (b
);
14372 if (t
.number_on_target
== num
)
14379 /* Utility: parse a tracepoint number and look it up in the list.
14380 If STATE is not NULL, use, get_number_or_range_state and ignore ARG.
14381 If the argument is missing, the most recent tracepoint
14382 (tracepoint_count) is returned. */
14384 struct tracepoint
*
14385 get_tracepoint_by_number (const char **arg
,
14386 number_or_range_parser
*parser
)
14389 const char *instring
= arg
== NULL
? NULL
: *arg
;
14391 if (parser
!= NULL
)
14393 gdb_assert (!parser
->finished ());
14394 tpnum
= parser
->get_number ();
14396 else if (arg
== NULL
|| *arg
== NULL
|| ! **arg
)
14397 tpnum
= tracepoint_count
;
14399 tpnum
= get_number (arg
);
14403 if (instring
&& *instring
)
14404 gdb_printf (_("bad tracepoint number at or near '%s'\n"),
14407 gdb_printf (_("No previous tracepoint\n"));
14411 for (breakpoint
&t
: all_tracepoints ())
14412 if (t
.number
== tpnum
)
14413 return gdb::checked_static_cast
<tracepoint
*> (&t
);
14415 gdb_printf ("No tracepoint number %d.\n", tpnum
);
14420 breakpoint::print_recreate_thread (struct ui_file
*fp
) const
14424 struct thread_info
*thr
= find_thread_global_id (thread
);
14425 gdb_printf (fp
, " thread %s", print_full_thread_id (thr
));
14429 gdb_printf (fp
, " task %d", task
);
14431 gdb_printf (fp
, "\n");
14434 /* Save information on user settable breakpoints (watchpoints, etc) to
14435 a new script file named FILENAME. If FILTER is non-NULL, call it
14436 on each breakpoint and only include the ones for which it returns
14440 save_breakpoints (const char *filename
, int from_tty
,
14441 bool (*filter
) (const struct breakpoint
*))
14444 int extra_trace_bits
= 0;
14446 if (filename
== 0 || *filename
== 0)
14447 error (_("Argument required (file name in which to save)"));
14449 /* See if we have anything to save. */
14450 for (breakpoint
&tp
: all_breakpoints ())
14452 /* Skip internal and momentary breakpoints. */
14453 if (!user_breakpoint_p (&tp
))
14456 /* If we have a filter, only save the breakpoints it accepts. */
14457 if (filter
&& !filter (&tp
))
14462 if (is_tracepoint (&tp
))
14464 extra_trace_bits
= 1;
14466 /* We can stop searching. */
14473 warning (_("Nothing to save."));
14477 gdb::unique_xmalloc_ptr
<char> expanded_filename (tilde_expand (filename
));
14481 if (!fp
.open (expanded_filename
.get (), "w"))
14482 error (_("Unable to open file '%s' for saving (%s)"),
14483 expanded_filename
.get (), safe_strerror (errno
));
14485 if (extra_trace_bits
)
14486 save_trace_state_variables (&fp
);
14488 for (breakpoint
&tp
: all_breakpoints ())
14490 /* Skip internal and momentary breakpoints. */
14491 if (!user_breakpoint_p (&tp
))
14494 /* If we have a filter, only save the breakpoints it accepts. */
14495 if (filter
&& !filter (&tp
))
14498 tp
.print_recreate (&fp
);
14500 /* Note, we can't rely on tp->number for anything, as we can't
14501 assume the recreated breakpoint numbers will match. Use $bpnum
14504 if (tp
.cond_string
)
14505 fp
.printf (" condition $bpnum %s\n", tp
.cond_string
.get ());
14507 if (tp
.ignore_count
)
14508 fp
.printf (" ignore $bpnum %d\n", tp
.ignore_count
);
14510 if (tp
.type
!= bp_dprintf
&& tp
.commands
)
14512 fp
.puts (" commands\n");
14514 ui_out_redirect_pop
redir (current_uiout
, &fp
);
14515 print_command_lines (current_uiout
, tp
.commands
.get (), 2);
14517 fp
.puts (" end\n");
14520 if (tp
.enable_state
== bp_disabled
)
14521 fp
.puts ("disable $bpnum\n");
14523 /* If this is a multi-location breakpoint, check if the locations
14524 should be individually disabled. Watchpoint locations are
14525 special, and not user visible. */
14526 if (!is_watchpoint (&tp
) && tp
.has_multiple_locations ())
14530 for (bp_location
&loc
: tp
.locations ())
14533 fp
.printf ("disable $bpnum.%d\n", n
);
14540 if (extra_trace_bits
&& !default_collect
.empty ())
14541 fp
.printf ("set default-collect %s\n", default_collect
.c_str ());
14544 gdb_printf (_("Saved to file '%s'.\n"), expanded_filename
.get ());
14547 /* The `save breakpoints' command. */
14550 save_breakpoints_command (const char *args
, int from_tty
)
14552 save_breakpoints (args
, from_tty
, NULL
);
14555 /* The `save tracepoints' command. */
14558 save_tracepoints_command (const char *args
, int from_tty
)
14560 save_breakpoints (args
, from_tty
, is_tracepoint
);
14564 /* This help string is used to consolidate all the help string for specifying
14565 locations used by several commands. */
14567 #define LOCATION_SPEC_HELP_STRING \
14568 "Linespecs are colon-separated lists of location parameters, such as\n\
14569 source filename, function name, label name, and line number.\n\
14570 Example: To specify the start of a label named \"the_top\" in the\n\
14571 function \"fact\" in the file \"factorial.c\", use\n\
14572 \"factorial.c:fact:the_top\".\n\
14574 Address locations begin with \"*\" and specify an exact address in the\n\
14575 program. Example: To specify the fourth byte past the start function\n\
14576 \"main\", use \"*main + 4\".\n\
14578 Explicit locations are similar to linespecs but use an option/argument\n\
14579 syntax to specify location parameters.\n\
14580 Example: To specify the start of the label named \"the_top\" in the\n\
14581 function \"fact\" in the file \"factorial.c\", use \"-source factorial.c\n\
14582 -function fact -label the_top\".\n\
14584 By default, a specified function is matched against the program's\n\
14585 functions in all scopes. For C++, this means in all namespaces and\n\
14586 classes. For Ada, this means in all packages. E.g., in C++,\n\
14587 \"func()\" matches \"A::func()\", \"A::B::func()\", etc. The\n\
14588 \"-qualified\" flag overrides this behavior, making GDB interpret the\n\
14589 specified name as a complete fully-qualified name instead."
14591 /* This help string is used for the break, hbreak, tbreak and thbreak
14592 commands. It is defined as a macro to prevent duplication.
14593 COMMAND should be a string constant containing the name of the
14596 #define BREAK_ARGS_HELP(command) \
14597 command" [PROBE_MODIFIER] [LOCATION] [thread THREADNUM]\n\
14598 \t[-force-condition] [if CONDITION]\n\
14599 PROBE_MODIFIER shall be present if the command is to be placed in a\n\
14600 probe point. Accepted values are `-probe' (for a generic, automatically\n\
14601 guessed probe type), `-probe-stap' (for a SystemTap probe) or \n\
14602 `-probe-dtrace' (for a DTrace probe).\n\
14603 LOCATION may be a linespec, address, or explicit location as described\n\
14606 With no LOCATION, uses current execution address of the selected\n\
14607 stack frame. This is useful for breaking on return to a stack frame.\n\
14609 THREADNUM is the number from \"info threads\".\n\
14610 CONDITION is a boolean expression.\n\
14612 With the \"-force-condition\" flag, the condition is defined even when\n\
14613 it is invalid for all current locations.\n\
14614 \n" LOCATION_SPEC_HELP_STRING "\n\n\
14615 Multiple breakpoints at one place are permitted, and useful if their\n\
14616 conditions are different.\n\
14618 Do \"help breakpoints\" for info on other commands dealing with breakpoints."
14620 /* List of subcommands for "catch". */
14621 static struct cmd_list_element
*catch_cmdlist
;
14623 /* List of subcommands for "tcatch". */
14624 static struct cmd_list_element
*tcatch_cmdlist
;
14627 add_catch_command (const char *name
, const char *docstring
,
14628 cmd_func_ftype
*func
,
14629 completer_ftype
*completer
,
14630 void *user_data_catch
,
14631 void *user_data_tcatch
)
14633 struct cmd_list_element
*command
;
14635 command
= add_cmd (name
, class_breakpoint
, docstring
,
14637 command
->func
= func
;
14638 command
->set_context (user_data_catch
);
14639 set_cmd_completer (command
, completer
);
14641 command
= add_cmd (name
, class_breakpoint
, docstring
,
14643 command
->func
= func
;
14644 command
->set_context (user_data_tcatch
);
14645 set_cmd_completer (command
, completer
);
14648 /* False if any of the breakpoint's locations could be a location where
14649 functions have been inlined, true otherwise. */
14652 is_non_inline_function (struct breakpoint
*b
)
14654 /* The shared library event breakpoint is set on the address of a
14655 non-inline function. */
14656 return (b
->type
== bp_shlib_event
);
14659 /* Nonzero if the specified PC cannot be a location where functions
14660 have been inlined. */
14663 pc_at_non_inline_function (const address_space
*aspace
, CORE_ADDR pc
,
14664 const target_waitstatus
&ws
)
14666 for (breakpoint
&b
: all_breakpoints ())
14668 if (!is_non_inline_function (&b
))
14671 for (bp_location
&bl
: b
.locations ())
14673 if (!bl
.shlib_disabled
14674 && bpstat_check_location (&bl
, aspace
, pc
, ws
))
14682 /* Remove any references to OBJFILE which is going to be freed. */
14685 breakpoint_free_objfile (struct objfile
*objfile
)
14687 for (bp_location
*loc
: all_bp_locations ())
14688 if (loc
->symtab
!= NULL
&& loc
->symtab
->compunit ()->objfile () == objfile
)
14689 loc
->symtab
= NULL
;
14692 /* Chain containing all defined "enable breakpoint" subcommands. */
14694 static struct cmd_list_element
*enablebreaklist
= NULL
;
14696 /* See breakpoint.h. */
14698 cmd_list_element
*commands_cmd_element
= nullptr;
14700 void _initialize_breakpoint ();
14702 _initialize_breakpoint ()
14704 struct cmd_list_element
*c
;
14706 gdb::observers::solib_unloaded
.attach (disable_breakpoints_in_unloaded_shlib
,
14708 gdb::observers::free_objfile
.attach (disable_breakpoints_in_freed_objfile
,
14710 gdb::observers::memory_changed
.attach (invalidate_bp_value_on_memory_change
,
14713 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
14714 before a breakpoint is set. */
14715 breakpoint_count
= 0;
14717 tracepoint_count
= 0;
14719 add_com ("ignore", class_breakpoint
, ignore_command
, _("\
14720 Set ignore-count of breakpoint number N to COUNT.\n\
14721 Usage is `ignore N COUNT'."));
14723 commands_cmd_element
= add_com ("commands", class_breakpoint
,
14724 commands_command
, _("\
14725 Set commands to be executed when the given breakpoints are hit.\n\
14726 Give a space-separated breakpoint list as argument after \"commands\".\n\
14727 A list element can be a breakpoint number (e.g. `5') or a range of numbers\n\
14729 With no argument, the targeted breakpoint is the last one set.\n\
14730 The commands themselves follow starting on the next line.\n\
14731 Type a line containing \"end\" to indicate the end of them.\n\
14732 Give \"silent\" as the first line to make the breakpoint silent;\n\
14733 then no output is printed when it is hit, except what the commands print."));
14735 const auto cc_opts
= make_condition_command_options_def_group (nullptr);
14736 static std::string condition_command_help
14737 = gdb::option::build_help (_("\
14738 Specify breakpoint number N to break only if COND is true.\n\
14739 Usage is `condition [OPTION] N COND', where N is an integer and COND\n\
14740 is an expression to be evaluated whenever breakpoint N is reached.\n\
14743 %OPTIONS%"), cc_opts
);
14745 c
= add_com ("condition", class_breakpoint
, condition_command
,
14746 condition_command_help
.c_str ());
14747 set_cmd_completer_handle_brkchars (c
, condition_completer
);
14749 c
= add_com ("tbreak", class_breakpoint
, tbreak_command
, _("\
14750 Set a temporary breakpoint.\n\
14751 Like \"break\" except the breakpoint is only temporary,\n\
14752 so it will be deleted when hit. Equivalent to \"break\" followed\n\
14753 by using \"enable delete\" on the breakpoint number.\n\
14755 BREAK_ARGS_HELP ("tbreak")));
14756 set_cmd_completer (c
, location_completer
);
14758 c
= add_com ("hbreak", class_breakpoint
, hbreak_command
, _("\
14759 Set a hardware assisted breakpoint.\n\
14760 Like \"break\" except the breakpoint requires hardware support,\n\
14761 some target hardware may not have this support.\n\
14763 BREAK_ARGS_HELP ("hbreak")));
14764 set_cmd_completer (c
, location_completer
);
14766 c
= add_com ("thbreak", class_breakpoint
, thbreak_command
, _("\
14767 Set a temporary hardware assisted breakpoint.\n\
14768 Like \"hbreak\" except the breakpoint is only temporary,\n\
14769 so it will be deleted when hit.\n\
14771 BREAK_ARGS_HELP ("thbreak")));
14772 set_cmd_completer (c
, location_completer
);
14774 cmd_list_element
*enable_cmd
14775 = add_prefix_cmd ("enable", class_breakpoint
, enable_command
, _("\
14776 Enable all or some breakpoints.\n\
14777 Usage: enable [BREAKPOINTNUM]...\n\
14778 Give breakpoint numbers (separated by spaces) as arguments.\n\
14779 With no subcommand, breakpoints are enabled until you command otherwise.\n\
14780 This is used to cancel the effect of the \"disable\" command.\n\
14781 With a subcommand you can enable temporarily."),
14782 &enablelist
, 1, &cmdlist
);
14784 add_com_alias ("en", enable_cmd
, class_breakpoint
, 1);
14786 add_prefix_cmd ("breakpoints", class_breakpoint
, enable_command
, _("\
14787 Enable all or some breakpoints.\n\
14788 Usage: enable breakpoints [BREAKPOINTNUM]...\n\
14789 Give breakpoint numbers (separated by spaces) as arguments.\n\
14790 This is used to cancel the effect of the \"disable\" command.\n\
14791 May be abbreviated to simply \"enable\"."),
14792 &enablebreaklist
, 1, &enablelist
);
14794 add_cmd ("once", no_class
, enable_once_command
, _("\
14795 Enable some breakpoints for one hit.\n\
14796 Usage: enable breakpoints once BREAKPOINTNUM...\n\
14797 If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
14800 add_cmd ("delete", no_class
, enable_delete_command
, _("\
14801 Enable some breakpoints and delete when hit.\n\
14802 Usage: enable breakpoints delete BREAKPOINTNUM...\n\
14803 If a breakpoint is hit while enabled in this fashion, it is deleted."),
14806 add_cmd ("count", no_class
, enable_count_command
, _("\
14807 Enable some breakpoints for COUNT hits.\n\
14808 Usage: enable breakpoints count COUNT BREAKPOINTNUM...\n\
14809 If a breakpoint is hit while enabled in this fashion,\n\
14810 the count is decremented; when it reaches zero, the breakpoint is disabled."),
14813 add_cmd ("delete", no_class
, enable_delete_command
, _("\
14814 Enable some breakpoints and delete when hit.\n\
14815 Usage: enable delete BREAKPOINTNUM...\n\
14816 If a breakpoint is hit while enabled in this fashion, it is deleted."),
14819 add_cmd ("once", no_class
, enable_once_command
, _("\
14820 Enable some breakpoints for one hit.\n\
14821 Usage: enable once BREAKPOINTNUM...\n\
14822 If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
14825 add_cmd ("count", no_class
, enable_count_command
, _("\
14826 Enable some breakpoints for COUNT hits.\n\
14827 Usage: enable count COUNT BREAKPOINTNUM...\n\
14828 If a breakpoint is hit while enabled in this fashion,\n\
14829 the count is decremented; when it reaches zero, the breakpoint is disabled."),
14832 cmd_list_element
*disable_cmd
14833 = add_prefix_cmd ("disable", class_breakpoint
, disable_command
, _("\
14834 Disable all or some breakpoints.\n\
14835 Usage: disable [BREAKPOINTNUM]...\n\
14836 Arguments are breakpoint numbers with spaces in between.\n\
14837 To disable all breakpoints, give no argument.\n\
14838 A disabled breakpoint is not forgotten, but has no effect until re-enabled."),
14839 &disablelist
, 1, &cmdlist
);
14840 add_com_alias ("dis", disable_cmd
, class_breakpoint
, 1);
14841 add_com_alias ("disa", disable_cmd
, class_breakpoint
, 1);
14843 add_cmd ("breakpoints", class_breakpoint
, disable_command
, _("\
14844 Disable all or some breakpoints.\n\
14845 Usage: disable breakpoints [BREAKPOINTNUM]...\n\
14846 Arguments are breakpoint numbers with spaces in between.\n\
14847 To disable all breakpoints, give no argument.\n\
14848 A disabled breakpoint is not forgotten, but has no effect until re-enabled.\n\
14849 This command may be abbreviated \"disable\"."),
14852 cmd_list_element
*delete_cmd
14853 = add_prefix_cmd ("delete", class_breakpoint
, delete_command
, _("\
14854 Delete all or some breakpoints.\n\
14855 Usage: delete [BREAKPOINTNUM]...\n\
14856 Arguments are breakpoint numbers with spaces in between.\n\
14857 To delete all breakpoints, watchpoints, tracepoints, and catchpoints,\n\
14858 give no argument.\n\
14860 Also a prefix command for deletion of other GDB objects."),
14861 &deletelist
, 1, &cmdlist
);
14862 add_com_alias ("d", delete_cmd
, class_breakpoint
, 1);
14863 add_com_alias ("del", delete_cmd
, class_breakpoint
, 1);
14865 add_cmd ("breakpoints", class_breakpoint
, delete_command
, _("\
14866 Delete all or some breakpoints or auto-display expressions.\n\
14867 Usage: delete breakpoints [BREAKPOINTNUM]...\n\
14868 Arguments are breakpoint numbers with spaces in between.\n\
14869 To delete all breakpoints, watchpoints, tracepoints, and catchpoints,\n\
14870 give no argument.\n\
14871 This command may be abbreviated \"delete\"."),
14874 cmd_list_element
*clear_cmd
14875 = add_com ("clear", class_breakpoint
, clear_command
, _("\
14876 Clear breakpoint at specified location.\n\
14877 Argument may be a linespec, explicit, or address location as described below.\n\
14879 With no argument, clears all breakpoints in the line that the selected frame\n\
14880 is executing in.\n"
14881 "\n" LOCATION_SPEC_HELP_STRING
"\n\n\
14882 See also the \"delete\" command which clears breakpoints by number."));
14883 add_com_alias ("cl", clear_cmd
, class_breakpoint
, 1);
14885 cmd_list_element
*break_cmd
14886 = add_com ("break", class_breakpoint
, break_command
, _("\
14887 Set breakpoint at specified location.\n"
14888 BREAK_ARGS_HELP ("break")));
14889 set_cmd_completer (break_cmd
, location_completer
);
14891 add_com_alias ("b", break_cmd
, class_run
, 1);
14892 add_com_alias ("br", break_cmd
, class_run
, 1);
14893 add_com_alias ("bre", break_cmd
, class_run
, 1);
14894 add_com_alias ("brea", break_cmd
, class_run
, 1);
14896 cmd_list_element
*info_breakpoints_cmd
14897 = add_info ("breakpoints", info_breakpoints_command
, _("\
14898 Status of specified breakpoints (all user-settable breakpoints if no argument).\n\
14899 The \"Type\" column indicates one of:\n\
14900 \tbreakpoint - normal breakpoint\n\
14901 \twatchpoint - watchpoint\n\
14902 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
14903 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
14904 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
14905 address and file/line number respectively.\n\
14907 Convenience variable \"$_\" and default examine address for \"x\"\n\
14908 are set to the address of the last breakpoint listed unless the command\n\
14909 is prefixed with \"server \".\n\n\
14910 Convenience variable \"$bpnum\" contains the number of the last\n\
14911 breakpoint set."));
14913 add_info_alias ("b", info_breakpoints_cmd
, 1);
14915 add_cmd ("breakpoints", class_maintenance
, maintenance_info_breakpoints
, _("\
14916 Status of all breakpoints, or breakpoint number NUMBER.\n\
14917 The \"Type\" column indicates one of:\n\
14918 \tbreakpoint - normal breakpoint\n\
14919 \twatchpoint - watchpoint\n\
14920 \tlongjmp - internal breakpoint used to step through longjmp()\n\
14921 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
14922 \tuntil - internal breakpoint used by the \"until\" command\n\
14923 \tfinish - internal breakpoint used by the \"finish\" command\n\
14924 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
14925 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
14926 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
14927 address and file/line number respectively.\n\
14929 Convenience variable \"$_\" and default examine address for \"x\"\n\
14930 are set to the address of the last breakpoint listed unless the command\n\
14931 is prefixed with \"server \".\n\n\
14932 Convenience variable \"$bpnum\" contains the number of the last\n\
14934 &maintenanceinfolist
);
14936 add_basic_prefix_cmd ("catch", class_breakpoint
, _("\
14937 Set catchpoints to catch events."),
14939 0/*allow-unknown*/, &cmdlist
);
14941 add_basic_prefix_cmd ("tcatch", class_breakpoint
, _("\
14942 Set temporary catchpoints to catch events."),
14944 0/*allow-unknown*/, &cmdlist
);
14946 const auto opts
= make_watch_options_def_group (nullptr);
14948 static const std::string watch_help
= gdb::option::build_help (_("\
14949 Set a watchpoint for EXPRESSION.\n\
14950 Usage: watch [-location] EXPRESSION\n\
14955 A watchpoint stops execution of your program whenever the value of\n\
14956 an expression changes."), opts
);
14957 c
= add_com ("watch", class_breakpoint
, watch_command
,
14958 watch_help
.c_str ());
14959 set_cmd_completer_handle_brkchars (c
, watch_command_completer
);
14961 static const std::string rwatch_help
= gdb::option::build_help (_("\
14962 Set a read watchpoint for EXPRESSION.\n\
14963 Usage: rwatch [-location] EXPRESSION\n\
14968 A read watchpoint stops execution of your program whenever the value of\n\
14969 an expression is read."), opts
);
14970 c
= add_com ("rwatch", class_breakpoint
, rwatch_command
,
14971 rwatch_help
.c_str ());
14972 set_cmd_completer_handle_brkchars (c
, watch_command_completer
);
14974 static const std::string awatch_help
= gdb::option::build_help (_("\
14975 Set an access watchpoint for EXPRESSION.\n\
14976 Usage: awatch [-location] EXPRESSION\n\
14981 An access watchpoint stops execution of your program whenever the value\n\
14982 of an expression is either read or written."), opts
);
14983 c
= add_com ("awatch", class_breakpoint
, awatch_command
,
14984 awatch_help
.c_str ());
14985 set_cmd_completer_handle_brkchars (c
, watch_command_completer
);
14987 add_info ("watchpoints", info_watchpoints_command
, _("\
14988 Status of specified watchpoints (all watchpoints if no argument)."));
14990 /* XXX: cagney/2005-02-23: This should be a boolean, and should
14991 respond to changes - contrary to the description. */
14992 add_setshow_zinteger_cmd ("can-use-hw-watchpoints", class_support
,
14993 &can_use_hw_watchpoints
, _("\
14994 Set debugger's willingness to use watchpoint hardware."), _("\
14995 Show debugger's willingness to use watchpoint hardware."), _("\
14996 If zero, gdb will not use hardware for new watchpoints, even if\n\
14997 such is available. (However, any hardware watchpoints that were\n\
14998 created before setting this to nonzero, will continue to use watchpoint\n\
15001 show_can_use_hw_watchpoints
,
15002 &setlist
, &showlist
);
15004 can_use_hw_watchpoints
= 1;
15006 /* Tracepoint manipulation commands. */
15008 cmd_list_element
*trace_cmd
15009 = add_com ("trace", class_breakpoint
, trace_command
, _("\
15010 Set a tracepoint at specified location.\n\
15012 BREAK_ARGS_HELP ("trace") "\n\
15013 Do \"help tracepoints\" for info on other tracepoint commands."));
15014 set_cmd_completer (trace_cmd
, location_completer
);
15016 add_com_alias ("tp", trace_cmd
, class_breakpoint
, 0);
15017 add_com_alias ("tr", trace_cmd
, class_breakpoint
, 1);
15018 add_com_alias ("tra", trace_cmd
, class_breakpoint
, 1);
15019 add_com_alias ("trac", trace_cmd
, class_breakpoint
, 1);
15021 c
= add_com ("ftrace", class_breakpoint
, ftrace_command
, _("\
15022 Set a fast tracepoint at specified location.\n\
15024 BREAK_ARGS_HELP ("ftrace") "\n\
15025 Do \"help tracepoints\" for info on other tracepoint commands."));
15026 set_cmd_completer (c
, location_completer
);
15028 c
= add_com ("strace", class_breakpoint
, strace_command
, _("\
15029 Set a static tracepoint at location or marker.\n\
15031 strace [LOCATION] [if CONDITION]\n\
15032 LOCATION may be a linespec, explicit, or address location (described below) \n\
15033 or -m MARKER_ID.\n\n\
15034 If a marker id is specified, probe the marker with that name. With\n\
15035 no LOCATION, uses current execution address of the selected stack frame.\n\
15036 Static tracepoints accept an extra collect action -- ``collect $_sdata''.\n\
15037 This collects arbitrary user data passed in the probe point call to the\n\
15038 tracing library. You can inspect it when analyzing the trace buffer,\n\
15039 by printing the $_sdata variable like any other convenience variable.\n\
15041 CONDITION is a boolean expression.\n\
15042 \n" LOCATION_SPEC_HELP_STRING
"\n\n\
15043 Multiple tracepoints at one place are permitted, and useful if their\n\
15044 conditions are different.\n\
15046 Do \"help breakpoints\" for info on other commands dealing with breakpoints.\n\
15047 Do \"help tracepoints\" for info on other tracepoint commands."));
15048 set_cmd_completer (c
, location_completer
);
15050 cmd_list_element
*info_tracepoints_cmd
15051 = add_info ("tracepoints", info_tracepoints_command
, _("\
15052 Status of specified tracepoints (all tracepoints if no argument).\n\
15053 Convenience variable \"$tpnum\" contains the number of the\n\
15054 last tracepoint set."));
15056 add_info_alias ("tp", info_tracepoints_cmd
, 1);
15058 cmd_list_element
*delete_tracepoints_cmd
15059 = add_cmd ("tracepoints", class_trace
, delete_trace_command
, _("\
15060 Delete specified tracepoints.\n\
15061 Arguments are tracepoint numbers, separated by spaces.\n\
15062 No argument means delete all tracepoints."),
15064 add_alias_cmd ("tr", delete_tracepoints_cmd
, class_trace
, 1, &deletelist
);
15066 c
= add_cmd ("tracepoints", class_trace
, disable_trace_command
, _("\
15067 Disable specified tracepoints.\n\
15068 Arguments are tracepoint numbers, separated by spaces.\n\
15069 No argument means disable all tracepoints."),
15071 deprecate_cmd (c
, "disable");
15073 c
= add_cmd ("tracepoints", class_trace
, enable_trace_command
, _("\
15074 Enable specified tracepoints.\n\
15075 Arguments are tracepoint numbers, separated by spaces.\n\
15076 No argument means enable all tracepoints."),
15078 deprecate_cmd (c
, "enable");
15080 add_com ("passcount", class_trace
, trace_pass_command
, _("\
15081 Set the passcount for a tracepoint.\n\
15082 The trace will end when the tracepoint has been passed 'count' times.\n\
15083 Usage: passcount COUNT TPNUM, where TPNUM may also be \"all\";\n\
15084 if TPNUM is omitted, passcount refers to the last tracepoint defined."));
15086 add_basic_prefix_cmd ("save", class_breakpoint
,
15087 _("Save breakpoint definitions as a script."),
15089 0/*allow-unknown*/, &cmdlist
);
15091 c
= add_cmd ("breakpoints", class_breakpoint
, save_breakpoints_command
, _("\
15092 Save current breakpoint definitions as a script.\n\
15093 This includes all types of breakpoints (breakpoints, watchpoints,\n\
15094 catchpoints, tracepoints). Use the 'source' command in another debug\n\
15095 session to restore them."),
15097 set_cmd_completer (c
, filename_completer
);
15099 cmd_list_element
*save_tracepoints_cmd
15100 = add_cmd ("tracepoints", class_trace
, save_tracepoints_command
, _("\
15101 Save current tracepoint definitions as a script.\n\
15102 Use the 'source' command in another debug session to restore them."),
15104 set_cmd_completer (save_tracepoints_cmd
, filename_completer
);
15106 c
= add_com_alias ("save-tracepoints", save_tracepoints_cmd
, class_trace
, 0);
15107 deprecate_cmd (c
, "save tracepoints");
15109 add_setshow_prefix_cmd ("breakpoint", class_maintenance
,
15111 Breakpoint specific settings.\n\
15112 Configure various breakpoint-specific variables such as\n\
15113 pending breakpoint behavior."),
15115 Breakpoint specific settings.\n\
15116 Configure various breakpoint-specific variables such as\n\
15117 pending breakpoint behavior."),
15118 &breakpoint_set_cmdlist
, &breakpoint_show_cmdlist
,
15119 &setlist
, &showlist
);
15121 add_setshow_auto_boolean_cmd ("pending", no_class
,
15122 &pending_break_support
, _("\
15123 Set debugger's behavior regarding pending breakpoints."), _("\
15124 Show debugger's behavior regarding pending breakpoints."), _("\
15125 If on, an unrecognized breakpoint location will cause gdb to create a\n\
15126 pending breakpoint. If off, an unrecognized breakpoint location results in\n\
15127 an error. If auto, an unrecognized breakpoint location results in a\n\
15128 user-query to see if a pending breakpoint should be created."),
15130 show_pending_break_support
,
15131 &breakpoint_set_cmdlist
,
15132 &breakpoint_show_cmdlist
);
15134 pending_break_support
= AUTO_BOOLEAN_AUTO
;
15136 add_setshow_boolean_cmd ("auto-hw", no_class
,
15137 &automatic_hardware_breakpoints
, _("\
15138 Set automatic usage of hardware breakpoints."), _("\
15139 Show automatic usage of hardware breakpoints."), _("\
15140 If set, the debugger will automatically use hardware breakpoints for\n\
15141 breakpoints set with \"break\" but falling in read-only memory. If not set,\n\
15142 a warning will be emitted for such breakpoints."),
15144 show_automatic_hardware_breakpoints
,
15145 &breakpoint_set_cmdlist
,
15146 &breakpoint_show_cmdlist
);
15148 add_setshow_boolean_cmd ("always-inserted", class_support
,
15149 &always_inserted_mode
, _("\
15150 Set mode for inserting breakpoints."), _("\
15151 Show mode for inserting breakpoints."), _("\
15152 When this mode is on, breakpoints are inserted immediately as soon as\n\
15153 they're created, kept inserted even when execution stops, and removed\n\
15154 only when the user deletes them. When this mode is off (the default),\n\
15155 breakpoints are inserted only when execution continues, and removed\n\
15156 when execution stops."),
15158 &show_always_inserted_mode
,
15159 &breakpoint_set_cmdlist
,
15160 &breakpoint_show_cmdlist
);
15162 add_setshow_boolean_cmd ("breakpoint", class_maintenance
,
15163 &debug_breakpoint
, _("\
15164 Set breakpoint location debugging."), _("\
15165 Show breakpoint location debugging."), _("\
15166 When on, breakpoint location specific debugging is enabled."),
15168 show_debug_breakpoint
,
15169 &setdebuglist
, &showdebuglist
);
15171 add_setshow_enum_cmd ("condition-evaluation", class_breakpoint
,
15172 condition_evaluation_enums
,
15173 &condition_evaluation_mode_1
, _("\
15174 Set mode of breakpoint condition evaluation."), _("\
15175 Show mode of breakpoint condition evaluation."), _("\
15176 When this is set to \"host\", breakpoint conditions will be\n\
15177 evaluated on the host's side by GDB. When it is set to \"target\",\n\
15178 breakpoint conditions will be downloaded to the target (if the target\n\
15179 supports such feature) and conditions will be evaluated on the target's side.\n\
15180 If this is set to \"auto\" (default), this will be automatically set to\n\
15181 \"target\" if it supports condition evaluation, otherwise it will\n\
15182 be set to \"host\"."),
15183 &set_condition_evaluation_mode
,
15184 &show_condition_evaluation_mode
,
15185 &breakpoint_set_cmdlist
,
15186 &breakpoint_show_cmdlist
);
15188 add_com ("break-range", class_breakpoint
, break_range_command
, _("\
15189 Set a breakpoint for an address range.\n\
15190 break-range START-LOCATION, END-LOCATION\n\
15191 where START-LOCATION and END-LOCATION can be one of the following:\n\
15192 LINENUM, for that line in the current file,\n\
15193 FILE:LINENUM, for that line in that file,\n\
15194 +OFFSET, for that number of lines after the current line\n\
15195 or the start of the range\n\
15196 FUNCTION, for the first line in that function,\n\
15197 FILE:FUNCTION, to distinguish among like-named static functions.\n\
15198 *ADDRESS, for the instruction at that address.\n\
15200 The breakpoint will stop execution of the inferior whenever it executes\n\
15201 an instruction at any address within the [START-LOCATION, END-LOCATION]\n\
15202 range (including START-LOCATION and END-LOCATION)."));
15204 c
= add_com ("dprintf", class_breakpoint
, dprintf_command
, _("\
15205 Set a dynamic printf at specified location.\n\
15206 dprintf location,format string,arg1,arg2,...\n\
15207 location may be a linespec, explicit, or address location.\n"
15208 "\n" LOCATION_SPEC_HELP_STRING
));
15209 set_cmd_completer (c
, location_completer
);
15211 add_setshow_enum_cmd ("dprintf-style", class_support
,
15212 dprintf_style_enums
, &dprintf_style
, _("\
15213 Set the style of usage for dynamic printf."), _("\
15214 Show the style of usage for dynamic printf."), _("\
15215 This setting chooses how GDB will do a dynamic printf.\n\
15216 If the value is \"gdb\", then the printing is done by GDB to its own\n\
15217 console, as with the \"printf\" command.\n\
15218 If the value is \"call\", the print is done by calling a function in your\n\
15219 program; by default printf(), but you can choose a different function or\n\
15220 output stream by setting dprintf-function and dprintf-channel."),
15221 update_dprintf_commands
, NULL
,
15222 &setlist
, &showlist
);
15224 add_setshow_string_cmd ("dprintf-function", class_support
,
15225 &dprintf_function
, _("\
15226 Set the function to use for dynamic printf."), _("\
15227 Show the function to use for dynamic printf."), NULL
,
15228 update_dprintf_commands
, NULL
,
15229 &setlist
, &showlist
);
15231 add_setshow_string_cmd ("dprintf-channel", class_support
,
15232 &dprintf_channel
, _("\
15233 Set the channel to use for dynamic printf."), _("\
15234 Show the channel to use for dynamic printf."), NULL
,
15235 update_dprintf_commands
, NULL
,
15236 &setlist
, &showlist
);
15238 add_setshow_boolean_cmd ("disconnected-dprintf", no_class
,
15239 &disconnected_dprintf
, _("\
15240 Set whether dprintf continues after GDB disconnects."), _("\
15241 Show whether dprintf continues after GDB disconnects."), _("\
15242 Use this to let dprintf commands continue to hit and produce output\n\
15243 even if GDB disconnects or detaches from the target."),
15246 &setlist
, &showlist
);
15248 add_com ("agent-printf", class_vars
, agent_printf_command
, _("\
15249 Target agent only formatted printing, like the C \"printf\" function.\n\
15250 Usage: agent-printf \"format string\", ARG1, ARG2, ARG3, ..., ARGN\n\
15251 This supports most C printf format specifications, like %s, %d, etc.\n\
15252 This is useful for formatted output in user-defined commands."));
15254 automatic_hardware_breakpoints
= true;
15256 gdb::observers::about_to_proceed
.attach (breakpoint_about_to_proceed
,
15258 gdb::observers::thread_exit
.attach (remove_threaded_breakpoints
,
15260 gdb::observers::inferior_removed
.attach (remove_inferior_breakpoints
,