Convert generic probe interface to C++ (and perform some cleanups)
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
CommitLineData
c906108c 1/* Everything about breakpoints, for GDB.
8926118c 2
61baf725 3 Copyright (C) 1986-2017 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
a6d9a66e 21#include "arch-utils.h"
c906108c 22#include <ctype.h>
776592bf 23#include "hashtab.h"
c906108c
SS
24#include "symtab.h"
25#include "frame.h"
26#include "breakpoint.h"
1042e4c0 27#include "tracepoint.h"
c906108c
SS
28#include "gdbtypes.h"
29#include "expression.h"
30#include "gdbcore.h"
31#include "gdbcmd.h"
32#include "value.h"
33#include "command.h"
34#include "inferior.h"
45741a9c 35#include "infrun.h"
c906108c
SS
36#include "gdbthread.h"
37#include "target.h"
38#include "language.h"
50f182aa 39#include "gdb-demangle.h"
0ba1096a 40#include "filenames.h"
c906108c
SS
41#include "annotate.h"
42#include "symfile.h"
43#include "objfiles.h"
0378c332 44#include "source.h"
c5f0f3d0 45#include "linespec.h"
c94fdfd0 46#include "completer.h"
8b93c638 47#include "ui-out.h"
e1507482 48#include "cli/cli-script.h"
fe898f56 49#include "block.h"
a77053c2 50#include "solib.h"
84acb35a
JJ
51#include "solist.h"
52#include "observer.h"
765dc015 53#include "memattr.h"
f7f9143b 54#include "ada-lang.h"
d1aa2f50 55#include "top.h"
79a45b7d 56#include "valprint.h"
4efc6507 57#include "jit.h"
65d79d4b 58#include "parser-defs.h"
55aa24fb
SDJ
59#include "gdb_regex.h"
60#include "probe.h"
e9cafbcc 61#include "cli/cli-utils.h"
be34f849 62#include "continuations.h"
1bfeeb0f
JL
63#include "stack.h"
64#include "skip.h"
b775012e 65#include "ax-gdb.h"
e2e4d78b 66#include "dummy-frame.h"
5589af0e 67#include "interps.h"
d3ce09f5 68#include "format.h"
cfc31633 69#include "thread-fsm.h"
5d5658a1 70#include "tid-parse.h"
d3ce09f5 71
1042e4c0
SS
72/* readline include files */
73#include "readline/readline.h"
74#include "readline/history.h"
75
76/* readline defines this. */
77#undef savestring
78
034dad6f 79#include "mi/mi-common.h"
6dddc817 80#include "extension.h"
325fac50 81#include <algorithm>
5ed8105e 82#include "progspace-and-thread.h"
6c5b2ebe 83#include "common/array-view.h"
76f9c9cf 84#include "common/gdb_optional.h"
104c1213 85
e7e8980f
YQ
86/* Enums for exception-handling support. */
87enum exception_event_kind
88{
89 EX_EVENT_THROW,
591f19e8 90 EX_EVENT_RETHROW,
e7e8980f
YQ
91 EX_EVENT_CATCH
92};
93
4a64f543 94/* Prototypes for local functions. */
c906108c 95
896b6bda 96static void map_breakpoint_numbers (const char *,
48649e1b 97 gdb::function_view<void (breakpoint *)>);
c906108c 98
348d480f
PA
99static void breakpoint_re_set_default (struct breakpoint *);
100
f00aae0f
KS
101static void
102 create_sals_from_location_default (const struct event_location *location,
103 struct linespec_result *canonical,
104 enum bptype type_wanted);
983af33b
SDJ
105
106static void create_breakpoints_sal_default (struct gdbarch *,
107 struct linespec_result *,
e1e01040
PA
108 gdb::unique_xmalloc_ptr<char>,
109 gdb::unique_xmalloc_ptr<char>,
110 enum bptype,
983af33b
SDJ
111 enum bpdisp, int, int,
112 int,
113 const struct breakpoint_ops *,
44f238bb 114 int, int, int, unsigned);
983af33b 115
6c5b2ebe
PA
116static std::vector<symtab_and_line> decode_location_default
117 (struct breakpoint *b, const struct event_location *location,
118 struct program_space *search_pspace);
983af33b 119
a9634178 120static int can_use_hardware_watchpoint (struct value *);
c906108c 121
a14ed312 122static void mention (struct breakpoint *);
c906108c 123
348d480f
PA
124static struct breakpoint *set_raw_breakpoint_without_location (struct gdbarch *,
125 enum bptype,
c0a91b2b 126 const struct breakpoint_ops *);
3742cc8b
YQ
127static struct bp_location *add_location_to_breakpoint (struct breakpoint *,
128 const struct symtab_and_line *);
129
4a64f543
MS
130/* This function is used in gdbtk sources and thus can not be made
131 static. */
63c252f8 132struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch,
348d480f 133 struct symtab_and_line,
c0a91b2b
TT
134 enum bptype,
135 const struct breakpoint_ops *);
c906108c 136
06edf0c0
PA
137static struct breakpoint *
138 momentary_breakpoint_from_master (struct breakpoint *orig,
139 enum bptype type,
a1aa2221
LM
140 const struct breakpoint_ops *ops,
141 int loc_enabled);
06edf0c0 142
76897487
KB
143static void breakpoint_adjustment_warning (CORE_ADDR, CORE_ADDR, int, int);
144
a6d9a66e
UW
145static CORE_ADDR adjust_breakpoint_address (struct gdbarch *gdbarch,
146 CORE_ADDR bpaddr,
88f7da05 147 enum bptype bptype);
76897487 148
6c95b8df
PA
149static void describe_other_breakpoints (struct gdbarch *,
150 struct program_space *, CORE_ADDR,
5af949e3 151 struct obj_section *, int);
c906108c 152
85d721b8
PA
153static int watchpoint_locations_match (struct bp_location *loc1,
154 struct bp_location *loc2);
155
f1310107 156static int breakpoint_location_address_match (struct bp_location *bl,
accd0bcd 157 const struct address_space *aspace,
f1310107
TJB
158 CORE_ADDR addr);
159
d35ae833 160static int breakpoint_location_address_range_overlap (struct bp_location *,
accd0bcd 161 const address_space *,
d35ae833
PA
162 CORE_ADDR, int);
163
834c0d03 164static int remove_breakpoint (struct bp_location *);
b2b6a7da 165static int remove_breakpoint_1 (struct bp_location *, enum remove_bp_reason);
c906108c 166
e514a9d6 167static enum print_stop_action print_bp_stop_message (bpstat bs);
c906108c 168
a14ed312 169static int hw_breakpoint_used_count (void);
c906108c 170
a1398e0c
PA
171static int hw_watchpoint_use_count (struct breakpoint *);
172
173static int hw_watchpoint_used_count_others (struct breakpoint *except,
174 enum bptype type,
175 int *other_type_used);
c906108c 176
816338b5
SS
177static void enable_breakpoint_disp (struct breakpoint *, enum bpdisp,
178 int count);
c906108c 179
fe3f5fa8 180static void free_bp_location (struct bp_location *loc);
f431efe5
PA
181static void incref_bp_location (struct bp_location *loc);
182static void decref_bp_location (struct bp_location **loc);
fe3f5fa8 183
39d61571 184static struct bp_location *allocate_bp_location (struct breakpoint *bpt);
a5606eee 185
44702360
PA
186/* update_global_location_list's modes of operation wrt to whether to
187 insert locations now. */
188enum ugll_insert_mode
189{
190 /* Don't insert any breakpoint locations into the inferior, only
191 remove already-inserted locations that no longer should be
192 inserted. Functions that delete a breakpoint or breakpoints
193 should specify this mode, so that deleting a breakpoint doesn't
194 have the side effect of inserting the locations of other
195 breakpoints that are marked not-inserted, but should_be_inserted
196 returns true on them.
197
198 This behavior is useful is situations close to tear-down -- e.g.,
199 after an exec, while the target still has execution, but
200 breakpoint shadows of the previous executable image should *NOT*
201 be restored to the new image; or before detaching, where the
202 target still has execution and wants to delete breakpoints from
203 GDB's lists, and all breakpoints had already been removed from
204 the inferior. */
205 UGLL_DONT_INSERT,
206
a25a5a45
PA
207 /* May insert breakpoints iff breakpoints_should_be_inserted_now
208 claims breakpoints should be inserted now. */
04086b45
PA
209 UGLL_MAY_INSERT,
210
a25a5a45
PA
211 /* Insert locations now, irrespective of
212 breakpoints_should_be_inserted_now. E.g., say all threads are
213 stopped right now, and the user did "continue". We need to
214 insert breakpoints _before_ resuming the target, but
215 UGLL_MAY_INSERT wouldn't insert them, because
216 breakpoints_should_be_inserted_now returns false at that point,
217 as no thread is running yet. */
04086b45 218 UGLL_INSERT
44702360
PA
219};
220
221static void update_global_location_list (enum ugll_insert_mode);
a5606eee 222
44702360 223static void update_global_location_list_nothrow (enum ugll_insert_mode);
74960c60 224
d77f58be 225static int is_hardware_watchpoint (const struct breakpoint *bpt);
74960c60
VP
226
227static void insert_breakpoint_locations (void);
a5606eee 228
0b39b52e 229static void trace_pass_command (const char *, int);
1042e4c0 230
558a9d82
YQ
231static void set_tracepoint_count (int num);
232
9c06b0b4
TJB
233static int is_masked_watchpoint (const struct breakpoint *b);
234
b775012e
LM
235static struct bp_location **get_first_locp_gte_addr (CORE_ADDR address);
236
983af33b
SDJ
237/* Return 1 if B refers to a static tracepoint set by marker ("-m"), zero
238 otherwise. */
239
240static int strace_marker_p (struct breakpoint *b);
0fb4aa4b 241
2060206e
PA
242/* The breakpoint_ops structure to be inherited by all breakpoint_ops
243 that are implemented on top of software or hardware breakpoints
244 (user breakpoints, internal and momentary breakpoints, etc.). */
245static struct breakpoint_ops bkpt_base_breakpoint_ops;
246
247/* Internal breakpoints class type. */
06edf0c0 248static struct breakpoint_ops internal_breakpoint_ops;
2060206e
PA
249
250/* Momentary breakpoints class type. */
06edf0c0
PA
251static struct breakpoint_ops momentary_breakpoint_ops;
252
2060206e
PA
253/* The breakpoint_ops structure to be used in regular user created
254 breakpoints. */
255struct breakpoint_ops bkpt_breakpoint_ops;
256
55aa24fb
SDJ
257/* Breakpoints set on probes. */
258static struct breakpoint_ops bkpt_probe_breakpoint_ops;
259
e7e0cddf 260/* Dynamic printf class type. */
c5867ab6 261struct breakpoint_ops dprintf_breakpoint_ops;
e7e0cddf 262
d3ce09f5
SS
263/* The style in which to perform a dynamic printf. This is a user
264 option because different output options have different tradeoffs;
265 if GDB does the printing, there is better error handling if there
266 is a problem with any of the arguments, but using an inferior
267 function lets you have special-purpose printers and sending of
268 output to the same place as compiled-in print functions. */
269
270static const char dprintf_style_gdb[] = "gdb";
271static const char dprintf_style_call[] = "call";
272static const char dprintf_style_agent[] = "agent";
273static const char *const dprintf_style_enums[] = {
274 dprintf_style_gdb,
275 dprintf_style_call,
276 dprintf_style_agent,
277 NULL
278};
279static const char *dprintf_style = dprintf_style_gdb;
280
281/* The function to use for dynamic printf if the preferred style is to
282 call into the inferior. The value is simply a string that is
283 copied into the command, so it can be anything that GDB can
284 evaluate to a callable address, not necessarily a function name. */
285
bde6261a 286static char *dprintf_function;
d3ce09f5
SS
287
288/* The channel to use for dynamic printf if the preferred style is to
289 call into the inferior; if a nonempty string, it will be passed to
290 the call as the first argument, with the format string as the
291 second. As with the dprintf function, this can be anything that
292 GDB knows how to evaluate, so in addition to common choices like
293 "stderr", this could be an app-specific expression like
294 "mystreams[curlogger]". */
295
bde6261a 296static char *dprintf_channel;
d3ce09f5
SS
297
298/* True if dprintf commands should continue to operate even if GDB
299 has disconnected. */
300static int disconnected_dprintf = 1;
301
5cea2a26
PA
302struct command_line *
303breakpoint_commands (struct breakpoint *b)
304{
d1b0a7bf 305 return b->commands ? b->commands.get () : NULL;
5cea2a26 306}
3daf8fe5 307
f3b1572e
PA
308/* Flag indicating that a command has proceeded the inferior past the
309 current breakpoint. */
310
311static int breakpoint_proceeded;
312
956a9fb9 313const char *
2cec12e5
AR
314bpdisp_text (enum bpdisp disp)
315{
4a64f543
MS
316 /* NOTE: the following values are a part of MI protocol and
317 represent values of 'disp' field returned when inferior stops at
318 a breakpoint. */
bc043ef3 319 static const char * const bpdisps[] = {"del", "dstp", "dis", "keep"};
cc59ec59 320
2cec12e5
AR
321 return bpdisps[(int) disp];
322}
c906108c 323
4a64f543 324/* Prototypes for exported functions. */
c906108c 325/* If FALSE, gdb will not use hardware support for watchpoints, even
4a64f543 326 if such is available. */
c906108c
SS
327static int can_use_hw_watchpoints;
328
920d2a44
AC
329static void
330show_can_use_hw_watchpoints (struct ui_file *file, int from_tty,
331 struct cmd_list_element *c,
332 const char *value)
333{
3e43a32a
MS
334 fprintf_filtered (file,
335 _("Debugger's willingness to use "
336 "watchpoint hardware is %s.\n"),
920d2a44
AC
337 value);
338}
339
fa8d40ab
JJ
340/* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
341 If AUTO_BOOLEAN_TRUE, gdb will automatically create pending breakpoints
4a64f543 342 for unrecognized breakpoint locations.
fa8d40ab
JJ
343 If AUTO_BOOLEAN_AUTO, gdb will query when breakpoints are unrecognized. */
344static enum auto_boolean pending_break_support;
920d2a44
AC
345static void
346show_pending_break_support (struct ui_file *file, int from_tty,
347 struct cmd_list_element *c,
348 const char *value)
349{
3e43a32a
MS
350 fprintf_filtered (file,
351 _("Debugger's behavior regarding "
352 "pending breakpoints is %s.\n"),
920d2a44
AC
353 value);
354}
fa8d40ab 355
765dc015 356/* If 1, gdb will automatically use hardware breakpoints for breakpoints
4a64f543 357 set with "break" but falling in read-only memory.
765dc015
VP
358 If 0, gdb will warn about such breakpoints, but won't automatically
359 use hardware breakpoints. */
360static int automatic_hardware_breakpoints;
361static void
362show_automatic_hardware_breakpoints (struct ui_file *file, int from_tty,
363 struct cmd_list_element *c,
364 const char *value)
365{
3e43a32a
MS
366 fprintf_filtered (file,
367 _("Automatic usage of hardware breakpoints is %s.\n"),
765dc015
VP
368 value);
369}
370
a25a5a45
PA
371/* If on, GDB keeps breakpoints inserted even if the inferior is
372 stopped, and immediately inserts any new breakpoints as soon as
373 they're created. If off (default), GDB keeps breakpoints off of
374 the target as long as possible. That is, it delays inserting
375 breakpoints until the next resume, and removes them again when the
376 target fully stops. This is a bit safer in case GDB crashes while
377 processing user input. */
378static int always_inserted_mode = 0;
72d0e2c5 379
33e5cbd6 380static void
74960c60 381show_always_inserted_mode (struct ui_file *file, int from_tty,
33e5cbd6 382 struct cmd_list_element *c, const char *value)
74960c60 383{
a25a5a45
PA
384 fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"),
385 value);
74960c60
VP
386}
387
b57bacec
PA
388/* See breakpoint.h. */
389
33e5cbd6 390int
a25a5a45 391breakpoints_should_be_inserted_now (void)
33e5cbd6 392{
a25a5a45
PA
393 if (gdbarch_has_global_breakpoints (target_gdbarch ()))
394 {
395 /* If breakpoints are global, they should be inserted even if no
396 thread under gdb's control is running, or even if there are
397 no threads under GDB's control yet. */
398 return 1;
399 }
400 else if (target_has_execution)
401 {
372316f1
PA
402 struct thread_info *tp;
403
a25a5a45
PA
404 if (always_inserted_mode)
405 {
406 /* The user wants breakpoints inserted even if all threads
407 are stopped. */
408 return 1;
409 }
410
b57bacec
PA
411 if (threads_are_executing ())
412 return 1;
372316f1
PA
413
414 /* Don't remove breakpoints yet if, even though all threads are
415 stopped, we still have events to process. */
416 ALL_NON_EXITED_THREADS (tp)
417 if (tp->resumed
418 && tp->suspend.waitstatus_pending_p)
419 return 1;
a25a5a45
PA
420 }
421 return 0;
33e5cbd6 422}
765dc015 423
b775012e
LM
424static const char condition_evaluation_both[] = "host or target";
425
426/* Modes for breakpoint condition evaluation. */
427static const char condition_evaluation_auto[] = "auto";
428static const char condition_evaluation_host[] = "host";
429static const char condition_evaluation_target[] = "target";
430static const char *const condition_evaluation_enums[] = {
431 condition_evaluation_auto,
432 condition_evaluation_host,
433 condition_evaluation_target,
434 NULL
435};
436
437/* Global that holds the current mode for breakpoint condition evaluation. */
438static const char *condition_evaluation_mode_1 = condition_evaluation_auto;
439
440/* Global that we use to display information to the user (gets its value from
441 condition_evaluation_mode_1. */
442static const char *condition_evaluation_mode = condition_evaluation_auto;
443
444/* Translate a condition evaluation mode MODE into either "host"
445 or "target". This is used mostly to translate from "auto" to the
446 real setting that is being used. It returns the translated
447 evaluation mode. */
448
449static const char *
450translate_condition_evaluation_mode (const char *mode)
451{
452 if (mode == condition_evaluation_auto)
453 {
454 if (target_supports_evaluation_of_breakpoint_conditions ())
455 return condition_evaluation_target;
456 else
457 return condition_evaluation_host;
458 }
459 else
460 return mode;
461}
462
463/* Discovers what condition_evaluation_auto translates to. */
464
465static const char *
466breakpoint_condition_evaluation_mode (void)
467{
468 return translate_condition_evaluation_mode (condition_evaluation_mode);
469}
470
471/* Return true if GDB should evaluate breakpoint conditions or false
472 otherwise. */
473
474static int
475gdb_evaluates_breakpoint_condition_p (void)
476{
477 const char *mode = breakpoint_condition_evaluation_mode ();
478
479 return (mode == condition_evaluation_host);
480}
481
c906108c
SS
482/* Are we executing breakpoint commands? */
483static int executing_breakpoint_commands;
484
c02f5703
MS
485/* Are overlay event breakpoints enabled? */
486static int overlay_events_enabled;
487
e09342b5
TJB
488/* See description in breakpoint.h. */
489int target_exact_watchpoints = 0;
490
c906108c 491/* Walk the following statement or block through all breakpoints.
e5dd4106 492 ALL_BREAKPOINTS_SAFE does so even if the statement deletes the
4a64f543 493 current breakpoint. */
c906108c 494
5c44784c 495#define ALL_BREAKPOINTS(B) for (B = breakpoint_chain; B; B = B->next)
c906108c 496
5c44784c
JM
497#define ALL_BREAKPOINTS_SAFE(B,TMP) \
498 for (B = breakpoint_chain; \
499 B ? (TMP=B->next, 1): 0; \
500 B = TMP)
c906108c 501
4a64f543
MS
502/* Similar iterator for the low-level breakpoints. SAFE variant is
503 not provided so update_global_location_list must not be called
504 while executing the block of ALL_BP_LOCATIONS. */
7cc221ef 505
876fa593 506#define ALL_BP_LOCATIONS(B,BP_TMP) \
f5336ca5
PA
507 for (BP_TMP = bp_locations; \
508 BP_TMP < bp_locations + bp_locations_count && (B = *BP_TMP);\
876fa593 509 BP_TMP++)
7cc221ef 510
b775012e
LM
511/* Iterates through locations with address ADDRESS for the currently selected
512 program space. BP_LOCP_TMP points to each object. BP_LOCP_START points
513 to where the loop should start from.
514 If BP_LOCP_START is a NULL pointer, the macro automatically seeks the
515 appropriate location to start with. */
516
517#define ALL_BP_LOCATIONS_AT_ADDR(BP_LOCP_TMP, BP_LOCP_START, ADDRESS) \
518 for (BP_LOCP_START = BP_LOCP_START == NULL ? get_first_locp_gte_addr (ADDRESS) : BP_LOCP_START, \
519 BP_LOCP_TMP = BP_LOCP_START; \
520 BP_LOCP_START \
f5336ca5 521 && (BP_LOCP_TMP < bp_locations + bp_locations_count \
b775012e
LM
522 && (*BP_LOCP_TMP)->address == ADDRESS); \
523 BP_LOCP_TMP++)
524
1042e4c0
SS
525/* Iterator for tracepoints only. */
526
527#define ALL_TRACEPOINTS(B) \
528 for (B = breakpoint_chain; B; B = B->next) \
d77f58be 529 if (is_tracepoint (B))
1042e4c0 530
7cc221ef 531/* Chains of all breakpoints defined. */
c906108c
SS
532
533struct breakpoint *breakpoint_chain;
534
f5336ca5 535/* Array is sorted by bp_locations_compare - primarily by the ADDRESS. */
876fa593 536
f5336ca5 537static struct bp_location **bp_locations;
876fa593 538
f5336ca5 539/* Number of elements of BP_LOCATIONS. */
876fa593 540
f5336ca5 541static unsigned bp_locations_count;
876fa593 542
4a64f543 543/* Maximum alignment offset between bp_target_info.PLACED_ADDRESS and
f5336ca5 544 ADDRESS for the current elements of BP_LOCATIONS which get a valid
4a64f543 545 result from bp_location_has_shadow. You can use it for roughly
f5336ca5 546 limiting the subrange of BP_LOCATIONS to scan for shadow bytes for
4a64f543 547 an address you need to read. */
876fa593 548
f5336ca5 549static CORE_ADDR bp_locations_placed_address_before_address_max;
876fa593 550
4a64f543
MS
551/* Maximum offset plus alignment between bp_target_info.PLACED_ADDRESS
552 + bp_target_info.SHADOW_LEN and ADDRESS for the current elements of
f5336ca5
PA
553 BP_LOCATIONS which get a valid result from bp_location_has_shadow.
554 You can use it for roughly limiting the subrange of BP_LOCATIONS to
4a64f543 555 scan for shadow bytes for an address you need to read. */
876fa593 556
f5336ca5 557static CORE_ADDR bp_locations_shadow_len_after_address_max;
7cc221ef 558
4a64f543 559/* The locations that no longer correspond to any breakpoint, unlinked
f5336ca5
PA
560 from the bp_locations array, but for which a hit may still be
561 reported by a target. */
20874c92
VP
562VEC(bp_location_p) *moribund_locations = NULL;
563
c906108c
SS
564/* Number of last breakpoint made. */
565
95a42b64
TT
566static int breakpoint_count;
567
86b17b60
PA
568/* The value of `breakpoint_count' before the last command that
569 created breakpoints. If the last (break-like) command created more
570 than one breakpoint, then the difference between BREAKPOINT_COUNT
571 and PREV_BREAKPOINT_COUNT is more than one. */
572static int prev_breakpoint_count;
c906108c 573
1042e4c0
SS
574/* Number of last tracepoint made. */
575
95a42b64 576static int tracepoint_count;
1042e4c0 577
6149aea9
PA
578static struct cmd_list_element *breakpoint_set_cmdlist;
579static struct cmd_list_element *breakpoint_show_cmdlist;
9291a0cd 580struct cmd_list_element *save_cmdlist;
6149aea9 581
badd37ce
SDJ
582/* See declaration at breakpoint.h. */
583
584struct breakpoint *
585breakpoint_find_if (int (*func) (struct breakpoint *b, void *d),
586 void *user_data)
587{
588 struct breakpoint *b = NULL;
589
590 ALL_BREAKPOINTS (b)
591 {
592 if (func (b, user_data) != 0)
593 break;
594 }
595
596 return b;
597}
598
468d015d
JJ
599/* Return whether a breakpoint is an active enabled breakpoint. */
600static int
601breakpoint_enabled (struct breakpoint *b)
602{
0d381245 603 return (b->enable_state == bp_enabled);
468d015d
JJ
604}
605
c906108c
SS
606/* Set breakpoint count to NUM. */
607
95a42b64 608static void
fba45db2 609set_breakpoint_count (int num)
c906108c 610{
86b17b60 611 prev_breakpoint_count = breakpoint_count;
c906108c 612 breakpoint_count = num;
4fa62494 613 set_internalvar_integer (lookup_internalvar ("bpnum"), num);
c906108c
SS
614}
615
86b17b60
PA
616/* Used by `start_rbreak_breakpoints' below, to record the current
617 breakpoint count before "rbreak" creates any breakpoint. */
618static int rbreak_start_breakpoint_count;
619
95a42b64
TT
620/* Called at the start an "rbreak" command to record the first
621 breakpoint made. */
86b17b60 622
c80049d3 623scoped_rbreak_breakpoints::scoped_rbreak_breakpoints ()
95a42b64 624{
86b17b60 625 rbreak_start_breakpoint_count = breakpoint_count;
95a42b64
TT
626}
627
628/* Called at the end of an "rbreak" command to record the last
629 breakpoint made. */
86b17b60 630
c80049d3 631scoped_rbreak_breakpoints::~scoped_rbreak_breakpoints ()
95a42b64 632{
86b17b60 633 prev_breakpoint_count = rbreak_start_breakpoint_count;
95a42b64
TT
634}
635
4a64f543 636/* Used in run_command to zero the hit count when a new run starts. */
c906108c
SS
637
638void
fba45db2 639clear_breakpoint_hit_counts (void)
c906108c
SS
640{
641 struct breakpoint *b;
642
643 ALL_BREAKPOINTS (b)
644 b->hit_count = 0;
645}
646
c906108c 647\f
48cb2d85
VP
648/* Return the breakpoint with the specified number, or NULL
649 if the number does not refer to an existing breakpoint. */
650
651struct breakpoint *
652get_breakpoint (int num)
653{
654 struct breakpoint *b;
655
656 ALL_BREAKPOINTS (b)
657 if (b->number == num)
658 return b;
659
660 return NULL;
661}
5c44784c 662
c906108c 663\f
adc36818 664
b775012e
LM
665/* Mark locations as "conditions have changed" in case the target supports
666 evaluating conditions on its side. */
667
668static void
669mark_breakpoint_modified (struct breakpoint *b)
670{
671 struct bp_location *loc;
672
673 /* This is only meaningful if the target is
674 evaluating conditions and if the user has
675 opted for condition evaluation on the target's
676 side. */
677 if (gdb_evaluates_breakpoint_condition_p ()
678 || !target_supports_evaluation_of_breakpoint_conditions ())
679 return;
680
681 if (!is_breakpoint (b))
682 return;
683
684 for (loc = b->loc; loc; loc = loc->next)
685 loc->condition_changed = condition_modified;
686}
687
688/* Mark location as "conditions have changed" in case the target supports
689 evaluating conditions on its side. */
690
691static void
692mark_breakpoint_location_modified (struct bp_location *loc)
693{
694 /* This is only meaningful if the target is
695 evaluating conditions and if the user has
696 opted for condition evaluation on the target's
697 side. */
698 if (gdb_evaluates_breakpoint_condition_p ()
699 || !target_supports_evaluation_of_breakpoint_conditions ())
700
701 return;
702
703 if (!is_breakpoint (loc->owner))
704 return;
705
706 loc->condition_changed = condition_modified;
707}
708
709/* Sets the condition-evaluation mode using the static global
710 condition_evaluation_mode. */
711
712static void
eb4c3f4a 713set_condition_evaluation_mode (const char *args, int from_tty,
b775012e
LM
714 struct cmd_list_element *c)
715{
b775012e
LM
716 const char *old_mode, *new_mode;
717
718 if ((condition_evaluation_mode_1 == condition_evaluation_target)
719 && !target_supports_evaluation_of_breakpoint_conditions ())
720 {
721 condition_evaluation_mode_1 = condition_evaluation_mode;
722 warning (_("Target does not support breakpoint condition evaluation.\n"
723 "Using host evaluation mode instead."));
724 return;
725 }
726
727 new_mode = translate_condition_evaluation_mode (condition_evaluation_mode_1);
728 old_mode = translate_condition_evaluation_mode (condition_evaluation_mode);
729
abf1152a
JK
730 /* Flip the switch. Flip it even if OLD_MODE == NEW_MODE as one of the
731 settings was "auto". */
732 condition_evaluation_mode = condition_evaluation_mode_1;
733
b775012e
LM
734 /* Only update the mode if the user picked a different one. */
735 if (new_mode != old_mode)
736 {
737 struct bp_location *loc, **loc_tmp;
738 /* If the user switched to a different evaluation mode, we
739 need to synch the changes with the target as follows:
740
741 "host" -> "target": Send all (valid) conditions to the target.
742 "target" -> "host": Remove all the conditions from the target.
743 */
744
b775012e
LM
745 if (new_mode == condition_evaluation_target)
746 {
747 /* Mark everything modified and synch conditions with the
748 target. */
749 ALL_BP_LOCATIONS (loc, loc_tmp)
750 mark_breakpoint_location_modified (loc);
751 }
752 else
753 {
754 /* Manually mark non-duplicate locations to synch conditions
755 with the target. We do this to remove all the conditions the
756 target knows about. */
757 ALL_BP_LOCATIONS (loc, loc_tmp)
758 if (is_breakpoint (loc->owner) && loc->inserted)
759 loc->needs_update = 1;
760 }
761
762 /* Do the update. */
44702360 763 update_global_location_list (UGLL_MAY_INSERT);
b775012e
LM
764 }
765
766 return;
767}
768
769/* Shows the current mode of breakpoint condition evaluation. Explicitly shows
770 what "auto" is translating to. */
771
772static void
773show_condition_evaluation_mode (struct ui_file *file, int from_tty,
774 struct cmd_list_element *c, const char *value)
775{
776 if (condition_evaluation_mode == condition_evaluation_auto)
777 fprintf_filtered (file,
778 _("Breakpoint condition evaluation "
779 "mode is %s (currently %s).\n"),
780 value,
781 breakpoint_condition_evaluation_mode ());
782 else
783 fprintf_filtered (file, _("Breakpoint condition evaluation mode is %s.\n"),
784 value);
785}
786
787/* A comparison function for bp_location AP and BP that is used by
788 bsearch. This comparison function only cares about addresses, unlike
f5336ca5 789 the more general bp_locations_compare function. */
b775012e
LM
790
791static int
f5336ca5 792bp_locations_compare_addrs (const void *ap, const void *bp)
b775012e 793{
9a3c8263
SM
794 const struct bp_location *a = *(const struct bp_location **) ap;
795 const struct bp_location *b = *(const struct bp_location **) bp;
b775012e
LM
796
797 if (a->address == b->address)
798 return 0;
799 else
800 return ((a->address > b->address) - (a->address < b->address));
801}
802
803/* Helper function to skip all bp_locations with addresses
804 less than ADDRESS. It returns the first bp_location that
805 is greater than or equal to ADDRESS. If none is found, just
806 return NULL. */
807
808static struct bp_location **
809get_first_locp_gte_addr (CORE_ADDR address)
810{
811 struct bp_location dummy_loc;
812 struct bp_location *dummy_locp = &dummy_loc;
813 struct bp_location **locp_found = NULL;
814
815 /* Initialize the dummy location's address field. */
b775012e
LM
816 dummy_loc.address = address;
817
818 /* Find a close match to the first location at ADDRESS. */
9a3c8263 819 locp_found = ((struct bp_location **)
f5336ca5 820 bsearch (&dummy_locp, bp_locations, bp_locations_count,
9a3c8263 821 sizeof (struct bp_location **),
f5336ca5 822 bp_locations_compare_addrs));
b775012e
LM
823
824 /* Nothing was found, nothing left to do. */
825 if (locp_found == NULL)
826 return NULL;
827
828 /* We may have found a location that is at ADDRESS but is not the first in the
829 location's list. Go backwards (if possible) and locate the first one. */
f5336ca5 830 while ((locp_found - 1) >= bp_locations
b775012e
LM
831 && (*(locp_found - 1))->address == address)
832 locp_found--;
833
834 return locp_found;
835}
836
adc36818 837void
7a26bd4d 838set_breakpoint_condition (struct breakpoint *b, const char *exp,
adc36818
PM
839 int from_tty)
840{
3a5c3e22
PA
841 xfree (b->cond_string);
842 b->cond_string = NULL;
adc36818 843
3a5c3e22 844 if (is_watchpoint (b))
adc36818 845 {
3a5c3e22
PA
846 struct watchpoint *w = (struct watchpoint *) b;
847
4d01a485 848 w->cond_exp.reset ();
3a5c3e22
PA
849 }
850 else
851 {
852 struct bp_location *loc;
853
854 for (loc = b->loc; loc; loc = loc->next)
855 {
4d01a485 856 loc->cond.reset ();
b775012e
LM
857
858 /* No need to free the condition agent expression
859 bytecode (if we have one). We will handle this
860 when we go through update_global_location_list. */
3a5c3e22 861 }
adc36818 862 }
adc36818
PM
863
864 if (*exp == 0)
865 {
866 if (from_tty)
867 printf_filtered (_("Breakpoint %d now unconditional.\n"), b->number);
868 }
869 else
870 {
bbc13ae3 871 const char *arg = exp;
cc59ec59 872
adc36818
PM
873 /* I don't know if it matters whether this is the string the user
874 typed in or the decompiled expression. */
875 b->cond_string = xstrdup (arg);
876 b->condition_not_parsed = 0;
877
878 if (is_watchpoint (b))
879 {
3a5c3e22
PA
880 struct watchpoint *w = (struct watchpoint *) b;
881
adc36818
PM
882 innermost_block = NULL;
883 arg = exp;
1bb9788d 884 w->cond_exp = parse_exp_1 (&arg, 0, 0, 0);
adc36818
PM
885 if (*arg)
886 error (_("Junk at end of expression"));
3a5c3e22 887 w->cond_exp_valid_block = innermost_block;
adc36818
PM
888 }
889 else
890 {
3a5c3e22
PA
891 struct bp_location *loc;
892
adc36818
PM
893 for (loc = b->loc; loc; loc = loc->next)
894 {
895 arg = exp;
896 loc->cond =
1bb9788d
TT
897 parse_exp_1 (&arg, loc->address,
898 block_for_pc (loc->address), 0);
adc36818
PM
899 if (*arg)
900 error (_("Junk at end of expression"));
901 }
902 }
903 }
b775012e
LM
904 mark_breakpoint_modified (b);
905
8d3788bd 906 observer_notify_breakpoint_modified (b);
adc36818
PM
907}
908
d55637df
TT
909/* Completion for the "condition" command. */
910
eb3ff9a5 911static void
6f937416 912condition_completer (struct cmd_list_element *cmd,
eb3ff9a5 913 completion_tracker &tracker,
6f937416 914 const char *text, const char *word)
d55637df 915{
6f937416 916 const char *space;
d55637df 917
f1735a53
TT
918 text = skip_spaces (text);
919 space = skip_to_space (text);
d55637df
TT
920 if (*space == '\0')
921 {
922 int len;
923 struct breakpoint *b;
924 VEC (char_ptr) *result = NULL;
925
926 if (text[0] == '$')
927 {
928 /* We don't support completion of history indices. */
eb3ff9a5
PA
929 if (!isdigit (text[1]))
930 complete_internalvar (tracker, &text[1]);
931 return;
d55637df
TT
932 }
933
934 /* We're completing the breakpoint number. */
935 len = strlen (text);
936
937 ALL_BREAKPOINTS (b)
58ce7251
SDJ
938 {
939 char number[50];
940
941 xsnprintf (number, sizeof (number), "%d", b->number);
942
943 if (strncmp (number, text, len) == 0)
eb3ff9a5
PA
944 {
945 gdb::unique_xmalloc_ptr<char> copy (xstrdup (number));
946 tracker.add_completion (std::move (copy));
947 }
58ce7251 948 }
d55637df 949
eb3ff9a5 950 return;
d55637df
TT
951 }
952
953 /* We're completing the expression part. */
f1735a53 954 text = skip_spaces (space);
eb3ff9a5 955 expression_completer (cmd, tracker, text, word);
d55637df
TT
956}
957
c906108c
SS
958/* condition N EXP -- set break condition of breakpoint N to EXP. */
959
960static void
0b39b52e 961condition_command (const char *arg, int from_tty)
c906108c 962{
52f0bd74 963 struct breakpoint *b;
0b39b52e 964 const char *p;
52f0bd74 965 int bnum;
c906108c
SS
966
967 if (arg == 0)
e2e0b3e5 968 error_no_arg (_("breakpoint number"));
c906108c
SS
969
970 p = arg;
971 bnum = get_number (&p);
5c44784c 972 if (bnum == 0)
8a3fe4f8 973 error (_("Bad breakpoint argument: '%s'"), arg);
c906108c
SS
974
975 ALL_BREAKPOINTS (b)
976 if (b->number == bnum)
2f069f6f 977 {
6dddc817
DE
978 /* Check if this breakpoint has a "stop" method implemented in an
979 extension language. This method and conditions entered into GDB
980 from the CLI are mutually exclusive. */
981 const struct extension_language_defn *extlang
982 = get_breakpoint_cond_ext_lang (b, EXT_LANG_NONE);
983
984 if (extlang != NULL)
985 {
986 error (_("Only one stop condition allowed. There is currently"
987 " a %s stop condition defined for this breakpoint."),
988 ext_lang_capitalized_name (extlang));
989 }
2566ad2d 990 set_breakpoint_condition (b, p, from_tty);
b775012e
LM
991
992 if (is_breakpoint (b))
44702360 993 update_global_location_list (UGLL_MAY_INSERT);
b775012e 994
2f069f6f
JB
995 return;
996 }
c906108c 997
8a3fe4f8 998 error (_("No breakpoint number %d."), bnum);
c906108c
SS
999}
1000
a7bdde9e
VP
1001/* Check that COMMAND do not contain commands that are suitable
1002 only for tracepoints and not suitable for ordinary breakpoints.
4a64f543
MS
1003 Throw if any such commands is found. */
1004
a7bdde9e
VP
1005static void
1006check_no_tracepoint_commands (struct command_line *commands)
1007{
1008 struct command_line *c;
cc59ec59 1009
a7bdde9e
VP
1010 for (c = commands; c; c = c->next)
1011 {
1012 int i;
1013
1014 if (c->control_type == while_stepping_control)
3e43a32a
MS
1015 error (_("The 'while-stepping' command can "
1016 "only be used for tracepoints"));
a7bdde9e
VP
1017
1018 for (i = 0; i < c->body_count; ++i)
1019 check_no_tracepoint_commands ((c->body_list)[i]);
1020
1021 /* Not that command parsing removes leading whitespace and comment
4a64f543 1022 lines and also empty lines. So, we only need to check for
a7bdde9e
VP
1023 command directly. */
1024 if (strstr (c->line, "collect ") == c->line)
1025 error (_("The 'collect' command can only be used for tracepoints"));
1026
51661e93
VP
1027 if (strstr (c->line, "teval ") == c->line)
1028 error (_("The 'teval' command can only be used for tracepoints"));
a7bdde9e
VP
1029 }
1030}
1031
c1fc2657 1032struct longjmp_breakpoint : public breakpoint
3b0871f4 1033{
c1fc2657 1034 ~longjmp_breakpoint () override;
3b0871f4
SM
1035};
1036
d77f58be
SS
1037/* Encapsulate tests for different types of tracepoints. */
1038
3b0871f4
SM
1039static bool
1040is_tracepoint_type (bptype type)
d9b3f62e
PA
1041{
1042 return (type == bp_tracepoint
1043 || type == bp_fast_tracepoint
1044 || type == bp_static_tracepoint);
1045}
1046
3b0871f4
SM
1047static bool
1048is_longjmp_type (bptype type)
1049{
1050 return type == bp_longjmp || type == bp_exception;
1051}
1052
a7bdde9e 1053int
d77f58be 1054is_tracepoint (const struct breakpoint *b)
a7bdde9e 1055{
d9b3f62e 1056 return is_tracepoint_type (b->type);
a7bdde9e 1057}
d9b3f62e 1058
a5e364af
SM
1059/* Factory function to create an appropriate instance of breakpoint given
1060 TYPE. */
1061
1062static std::unique_ptr<breakpoint>
1063new_breakpoint_from_type (bptype type)
1064{
1065 breakpoint *b;
1066
1067 if (is_tracepoint_type (type))
c1fc2657 1068 b = new tracepoint ();
3b0871f4 1069 else if (is_longjmp_type (type))
c1fc2657 1070 b = new longjmp_breakpoint ();
a5e364af
SM
1071 else
1072 b = new breakpoint ();
1073
1074 return std::unique_ptr<breakpoint> (b);
1075}
1076
e5dd4106 1077/* A helper function that validates that COMMANDS are valid for a
95a42b64
TT
1078 breakpoint. This function will throw an exception if a problem is
1079 found. */
48cb2d85 1080
95a42b64
TT
1081static void
1082validate_commands_for_breakpoint (struct breakpoint *b,
1083 struct command_line *commands)
48cb2d85 1084{
d77f58be 1085 if (is_tracepoint (b))
a7bdde9e 1086 {
c9a6ce02 1087 struct tracepoint *t = (struct tracepoint *) b;
a7bdde9e
VP
1088 struct command_line *c;
1089 struct command_line *while_stepping = 0;
c9a6ce02
PA
1090
1091 /* Reset the while-stepping step count. The previous commands
1092 might have included a while-stepping action, while the new
1093 ones might not. */
1094 t->step_count = 0;
1095
1096 /* We need to verify that each top-level element of commands is
1097 valid for tracepoints, that there's at most one
1098 while-stepping element, and that the while-stepping's body
1099 has valid tracing commands excluding nested while-stepping.
1100 We also need to validate the tracepoint action line in the
1101 context of the tracepoint --- validate_actionline actually
1102 has side effects, like setting the tracepoint's
1103 while-stepping STEP_COUNT, in addition to checking if the
1104 collect/teval actions parse and make sense in the
1105 tracepoint's context. */
a7bdde9e
VP
1106 for (c = commands; c; c = c->next)
1107 {
a7bdde9e
VP
1108 if (c->control_type == while_stepping_control)
1109 {
1110 if (b->type == bp_fast_tracepoint)
3e43a32a
MS
1111 error (_("The 'while-stepping' command "
1112 "cannot be used for fast tracepoint"));
0fb4aa4b 1113 else if (b->type == bp_static_tracepoint)
3e43a32a
MS
1114 error (_("The 'while-stepping' command "
1115 "cannot be used for static tracepoint"));
a7bdde9e
VP
1116
1117 if (while_stepping)
3e43a32a
MS
1118 error (_("The 'while-stepping' command "
1119 "can be used only once"));
a7bdde9e
VP
1120 else
1121 while_stepping = c;
1122 }
c9a6ce02
PA
1123
1124 validate_actionline (c->line, b);
a7bdde9e
VP
1125 }
1126 if (while_stepping)
1127 {
1128 struct command_line *c2;
1129
1130 gdb_assert (while_stepping->body_count == 1);
1131 c2 = while_stepping->body_list[0];
1132 for (; c2; c2 = c2->next)
1133 {
a7bdde9e
VP
1134 if (c2->control_type == while_stepping_control)
1135 error (_("The 'while-stepping' command cannot be nested"));
1136 }
1137 }
1138 }
1139 else
1140 {
1141 check_no_tracepoint_commands (commands);
1142 }
95a42b64
TT
1143}
1144
0fb4aa4b
PA
1145/* Return a vector of all the static tracepoints set at ADDR. The
1146 caller is responsible for releasing the vector. */
1147
1148VEC(breakpoint_p) *
1149static_tracepoints_here (CORE_ADDR addr)
1150{
1151 struct breakpoint *b;
1152 VEC(breakpoint_p) *found = 0;
1153 struct bp_location *loc;
1154
1155 ALL_BREAKPOINTS (b)
1156 if (b->type == bp_static_tracepoint)
1157 {
1158 for (loc = b->loc; loc; loc = loc->next)
1159 if (loc->address == addr)
1160 VEC_safe_push(breakpoint_p, found, b);
1161 }
1162
1163 return found;
1164}
1165
95a42b64 1166/* Set the command list of B to COMMANDS. If breakpoint is tracepoint,
4a64f543 1167 validate that only allowed commands are included. */
95a42b64
TT
1168
1169void
4a64f543 1170breakpoint_set_commands (struct breakpoint *b,
93921405 1171 command_line_up &&commands)
95a42b64 1172{
93921405 1173 validate_commands_for_breakpoint (b, commands.get ());
a7bdde9e 1174
d1b0a7bf 1175 b->commands = std::move (commands);
8d3788bd 1176 observer_notify_breakpoint_modified (b);
48cb2d85
VP
1177}
1178
45a43567
TT
1179/* Set the internal `silent' flag on the breakpoint. Note that this
1180 is not the same as the "silent" that may appear in the breakpoint's
1181 commands. */
1182
1183void
1184breakpoint_set_silent (struct breakpoint *b, int silent)
1185{
1186 int old_silent = b->silent;
1187
1188 b->silent = silent;
1189 if (old_silent != silent)
8d3788bd 1190 observer_notify_breakpoint_modified (b);
45a43567
TT
1191}
1192
1193/* Set the thread for this breakpoint. If THREAD is -1, make the
1194 breakpoint work for any thread. */
1195
1196void
1197breakpoint_set_thread (struct breakpoint *b, int thread)
1198{
1199 int old_thread = b->thread;
1200
1201 b->thread = thread;
1202 if (old_thread != thread)
8d3788bd 1203 observer_notify_breakpoint_modified (b);
45a43567
TT
1204}
1205
1206/* Set the task for this breakpoint. If TASK is 0, make the
1207 breakpoint work for any task. */
1208
1209void
1210breakpoint_set_task (struct breakpoint *b, int task)
1211{
1212 int old_task = b->task;
1213
1214 b->task = task;
1215 if (old_task != task)
8d3788bd 1216 observer_notify_breakpoint_modified (b);
45a43567
TT
1217}
1218
95a42b64
TT
1219void
1220check_tracepoint_command (char *line, void *closure)
a7bdde9e 1221{
9a3c8263 1222 struct breakpoint *b = (struct breakpoint *) closure;
cc59ec59 1223
6f937416 1224 validate_actionline (line, b);
a7bdde9e
VP
1225}
1226
95a42b64 1227static void
896b6bda 1228commands_command_1 (const char *arg, int from_tty,
4a64f543 1229 struct command_line *control)
95a42b64 1230{
d1b0a7bf 1231 counted_command_line cmd;
95a42b64 1232
896b6bda
PA
1233 std::string new_arg;
1234
95a42b64
TT
1235 if (arg == NULL || !*arg)
1236 {
86b17b60 1237 if (breakpoint_count - prev_breakpoint_count > 1)
896b6bda
PA
1238 new_arg = string_printf ("%d-%d", prev_breakpoint_count + 1,
1239 breakpoint_count);
95a42b64 1240 else if (breakpoint_count > 0)
896b6bda 1241 new_arg = string_printf ("%d", breakpoint_count);
48649e1b
TT
1242 arg = new_arg.c_str ();
1243 }
1244
1245 map_breakpoint_numbers
1246 (arg, [&] (breakpoint *b)
1247 {
1248 if (cmd == NULL)
1249 {
48649e1b 1250 if (control != NULL)
d1b0a7bf 1251 cmd = copy_command_lines (control->body_list[0]);
48649e1b
TT
1252 else
1253 {
81b1e71c
TT
1254 std::string str
1255 = string_printf (_("Type commands for breakpoint(s) "
1256 "%s, one per line."),
1257 arg);
48649e1b 1258
81b1e71c 1259 cmd = read_command_lines (&str[0],
d1b0a7bf
TT
1260 from_tty, 1,
1261 (is_tracepoint (b)
1262 ? check_tracepoint_command : 0),
1263 b);
48649e1b 1264 }
48649e1b
TT
1265 }
1266
1267 /* If a breakpoint was on the list more than once, we don't need to
1268 do anything. */
1269 if (b->commands != cmd)
1270 {
d1b0a7bf 1271 validate_commands_for_breakpoint (b, cmd.get ());
48649e1b
TT
1272 b->commands = cmd;
1273 observer_notify_breakpoint_modified (b);
1274 }
1275 });
95a42b64 1276
48649e1b 1277 if (cmd == NULL)
95a42b64 1278 error (_("No breakpoints specified."));
95a42b64
TT
1279}
1280
1281static void
0b39b52e 1282commands_command (const char *arg, int from_tty)
95a42b64
TT
1283{
1284 commands_command_1 (arg, from_tty, NULL);
c906108c 1285}
40c03ae8
EZ
1286
1287/* Like commands_command, but instead of reading the commands from
1288 input stream, takes them from an already parsed command structure.
1289
1290 This is used by cli-script.c to DTRT with breakpoint commands
1291 that are part of if and while bodies. */
1292enum command_control_type
896b6bda 1293commands_from_control_command (const char *arg, struct command_line *cmd)
40c03ae8 1294{
95a42b64
TT
1295 commands_command_1 (arg, 0, cmd);
1296 return simple_control;
40c03ae8 1297}
876fa593
JK
1298
1299/* Return non-zero if BL->TARGET_INFO contains valid information. */
1300
1301static int
1302bp_location_has_shadow (struct bp_location *bl)
1303{
1304 if (bl->loc_type != bp_loc_software_breakpoint)
1305 return 0;
1306 if (!bl->inserted)
1307 return 0;
1308 if (bl->target_info.shadow_len == 0)
e5dd4106 1309 /* BL isn't valid, or doesn't shadow memory. */
876fa593
JK
1310 return 0;
1311 return 1;
1312}
1313
9d497a19
PA
1314/* Update BUF, which is LEN bytes read from the target address
1315 MEMADDR, by replacing a memory breakpoint with its shadowed
1316 contents.
1317
1318 If READBUF is not NULL, this buffer must not overlap with the of
1319 the breakpoint location's shadow_contents buffer. Otherwise, a
1320 failed assertion internal error will be raised. */
1321
1322static void
1323one_breakpoint_xfer_memory (gdb_byte *readbuf, gdb_byte *writebuf,
1324 const gdb_byte *writebuf_org,
1325 ULONGEST memaddr, LONGEST len,
1326 struct bp_target_info *target_info,
1327 struct gdbarch *gdbarch)
1328{
1329 /* Now do full processing of the found relevant range of elements. */
1330 CORE_ADDR bp_addr = 0;
1331 int bp_size = 0;
1332 int bptoffset = 0;
1333
1334 if (!breakpoint_address_match (target_info->placed_address_space, 0,
1335 current_program_space->aspace, 0))
1336 {
1337 /* The breakpoint is inserted in a different address space. */
1338 return;
1339 }
1340
1341 /* Addresses and length of the part of the breakpoint that
1342 we need to copy. */
1343 bp_addr = target_info->placed_address;
1344 bp_size = target_info->shadow_len;
1345
1346 if (bp_addr + bp_size <= memaddr)
1347 {
1348 /* The breakpoint is entirely before the chunk of memory we are
1349 reading. */
1350 return;
1351 }
1352
1353 if (bp_addr >= memaddr + len)
1354 {
1355 /* The breakpoint is entirely after the chunk of memory we are
1356 reading. */
1357 return;
1358 }
1359
1360 /* Offset within shadow_contents. */
1361 if (bp_addr < memaddr)
1362 {
1363 /* Only copy the second part of the breakpoint. */
1364 bp_size -= memaddr - bp_addr;
1365 bptoffset = memaddr - bp_addr;
1366 bp_addr = memaddr;
1367 }
1368
1369 if (bp_addr + bp_size > memaddr + len)
1370 {
1371 /* Only copy the first part of the breakpoint. */
1372 bp_size -= (bp_addr + bp_size) - (memaddr + len);
1373 }
1374
1375 if (readbuf != NULL)
1376 {
1377 /* Verify that the readbuf buffer does not overlap with the
1378 shadow_contents buffer. */
1379 gdb_assert (target_info->shadow_contents >= readbuf + len
1380 || readbuf >= (target_info->shadow_contents
1381 + target_info->shadow_len));
1382
1383 /* Update the read buffer with this inserted breakpoint's
1384 shadow. */
1385 memcpy (readbuf + bp_addr - memaddr,
1386 target_info->shadow_contents + bptoffset, bp_size);
1387 }
1388 else
1389 {
1390 const unsigned char *bp;
0d5ed153
MR
1391 CORE_ADDR addr = target_info->reqstd_address;
1392 int placed_size;
9d497a19
PA
1393
1394 /* Update the shadow with what we want to write to memory. */
1395 memcpy (target_info->shadow_contents + bptoffset,
1396 writebuf_org + bp_addr - memaddr, bp_size);
1397
1398 /* Determine appropriate breakpoint contents and size for this
1399 address. */
0d5ed153 1400 bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &placed_size);
9d497a19
PA
1401
1402 /* Update the final write buffer with this inserted
1403 breakpoint's INSN. */
1404 memcpy (writebuf + bp_addr - memaddr, bp + bptoffset, bp_size);
1405 }
1406}
1407
8defab1a 1408/* Update BUF, which is LEN bytes read from the target address MEMADDR,
876fa593
JK
1409 by replacing any memory breakpoints with their shadowed contents.
1410
35c63cd8
JB
1411 If READBUF is not NULL, this buffer must not overlap with any of
1412 the breakpoint location's shadow_contents buffers. Otherwise,
1413 a failed assertion internal error will be raised.
1414
876fa593 1415 The range of shadowed area by each bp_location is:
f5336ca5
PA
1416 bl->address - bp_locations_placed_address_before_address_max
1417 up to bl->address + bp_locations_shadow_len_after_address_max
876fa593
JK
1418 The range we were requested to resolve shadows for is:
1419 memaddr ... memaddr + len
1420 Thus the safe cutoff boundaries for performance optimization are
35df4500 1421 memaddr + len <= (bl->address
f5336ca5 1422 - bp_locations_placed_address_before_address_max)
876fa593 1423 and:
f5336ca5 1424 bl->address + bp_locations_shadow_len_after_address_max <= memaddr */
c906108c 1425
8defab1a 1426void
f0ba3972
PA
1427breakpoint_xfer_memory (gdb_byte *readbuf, gdb_byte *writebuf,
1428 const gdb_byte *writebuf_org,
1429 ULONGEST memaddr, LONGEST len)
c906108c 1430{
4a64f543
MS
1431 /* Left boundary, right boundary and median element of our binary
1432 search. */
876fa593
JK
1433 unsigned bc_l, bc_r, bc;
1434
4a64f543
MS
1435 /* Find BC_L which is a leftmost element which may affect BUF
1436 content. It is safe to report lower value but a failure to
1437 report higher one. */
876fa593
JK
1438
1439 bc_l = 0;
f5336ca5 1440 bc_r = bp_locations_count;
876fa593
JK
1441 while (bc_l + 1 < bc_r)
1442 {
35df4500 1443 struct bp_location *bl;
876fa593
JK
1444
1445 bc = (bc_l + bc_r) / 2;
f5336ca5 1446 bl = bp_locations[bc];
876fa593 1447
4a64f543
MS
1448 /* Check first BL->ADDRESS will not overflow due to the added
1449 constant. Then advance the left boundary only if we are sure
1450 the BC element can in no way affect the BUF content (MEMADDR
1451 to MEMADDR + LEN range).
876fa593 1452
f5336ca5 1453 Use the BP_LOCATIONS_SHADOW_LEN_AFTER_ADDRESS_MAX safety
4a64f543
MS
1454 offset so that we cannot miss a breakpoint with its shadow
1455 range tail still reaching MEMADDR. */
c5aa993b 1456
f5336ca5 1457 if ((bl->address + bp_locations_shadow_len_after_address_max
35df4500 1458 >= bl->address)
f5336ca5 1459 && (bl->address + bp_locations_shadow_len_after_address_max
35df4500 1460 <= memaddr))
876fa593
JK
1461 bc_l = bc;
1462 else
1463 bc_r = bc;
1464 }
1465
128070bb
PA
1466 /* Due to the binary search above, we need to make sure we pick the
1467 first location that's at BC_L's address. E.g., if there are
1468 multiple locations at the same address, BC_L may end up pointing
1469 at a duplicate location, and miss the "master"/"inserted"
1470 location. Say, given locations L1, L2 and L3 at addresses A and
1471 B:
1472
1473 L1@A, L2@A, L3@B, ...
1474
1475 BC_L could end up pointing at location L2, while the "master"
1476 location could be L1. Since the `loc->inserted' flag is only set
1477 on "master" locations, we'd forget to restore the shadow of L1
1478 and L2. */
1479 while (bc_l > 0
f5336ca5 1480 && bp_locations[bc_l]->address == bp_locations[bc_l - 1]->address)
128070bb
PA
1481 bc_l--;
1482
876fa593
JK
1483 /* Now do full processing of the found relevant range of elements. */
1484
f5336ca5 1485 for (bc = bc_l; bc < bp_locations_count; bc++)
c5aa993b 1486 {
f5336ca5 1487 struct bp_location *bl = bp_locations[bc];
876fa593 1488
35df4500
TJB
1489 /* bp_location array has BL->OWNER always non-NULL. */
1490 if (bl->owner->type == bp_none)
8a3fe4f8 1491 warning (_("reading through apparently deleted breakpoint #%d?"),
35df4500 1492 bl->owner->number);
ffce0d52 1493
e5dd4106 1494 /* Performance optimization: any further element can no longer affect BUF
876fa593
JK
1495 content. */
1496
f5336ca5
PA
1497 if (bl->address >= bp_locations_placed_address_before_address_max
1498 && memaddr + len <= (bl->address
1499 - bp_locations_placed_address_before_address_max))
876fa593
JK
1500 break;
1501
35df4500 1502 if (!bp_location_has_shadow (bl))
c5aa993b 1503 continue;
6c95b8df 1504
9d497a19
PA
1505 one_breakpoint_xfer_memory (readbuf, writebuf, writebuf_org,
1506 memaddr, len, &bl->target_info, bl->gdbarch);
1507 }
c906108c 1508}
9d497a19 1509
c906108c 1510\f
c5aa993b 1511
b775012e
LM
1512/* Return true if BPT is either a software breakpoint or a hardware
1513 breakpoint. */
1514
1515int
1516is_breakpoint (const struct breakpoint *bpt)
1517{
1518 return (bpt->type == bp_breakpoint
e7e0cddf
SS
1519 || bpt->type == bp_hardware_breakpoint
1520 || bpt->type == bp_dprintf);
b775012e
LM
1521}
1522
60e1c644
PA
1523/* Return true if BPT is of any hardware watchpoint kind. */
1524
a5606eee 1525static int
d77f58be 1526is_hardware_watchpoint (const struct breakpoint *bpt)
a5606eee
VP
1527{
1528 return (bpt->type == bp_hardware_watchpoint
1529 || bpt->type == bp_read_watchpoint
1530 || bpt->type == bp_access_watchpoint);
1531}
7270d8f2 1532
60e1c644
PA
1533/* Return true if BPT is of any watchpoint kind, hardware or
1534 software. */
1535
3a5c3e22 1536int
d77f58be 1537is_watchpoint (const struct breakpoint *bpt)
60e1c644
PA
1538{
1539 return (is_hardware_watchpoint (bpt)
1540 || bpt->type == bp_watchpoint);
1541}
1542
3a5c3e22
PA
1543/* Returns true if the current thread and its running state are safe
1544 to evaluate or update watchpoint B. Watchpoints on local
1545 expressions need to be evaluated in the context of the thread that
1546 was current when the watchpoint was created, and, that thread needs
1547 to be stopped to be able to select the correct frame context.
1548 Watchpoints on global expressions can be evaluated on any thread,
1549 and in any state. It is presently left to the target allowing
1550 memory accesses when threads are running. */
f6bc2008
PA
1551
1552static int
3a5c3e22 1553watchpoint_in_thread_scope (struct watchpoint *b)
f6bc2008 1554{
c1fc2657 1555 return (b->pspace == current_program_space
d0d8b0c6
JK
1556 && (ptid_equal (b->watchpoint_thread, null_ptid)
1557 || (ptid_equal (inferior_ptid, b->watchpoint_thread)
1558 && !is_executing (inferior_ptid))));
f6bc2008
PA
1559}
1560
d0fb5eae
JK
1561/* Set watchpoint B to disp_del_at_next_stop, even including its possible
1562 associated bp_watchpoint_scope breakpoint. */
1563
1564static void
3a5c3e22 1565watchpoint_del_at_next_stop (struct watchpoint *w)
d0fb5eae 1566{
c1fc2657 1567 if (w->related_breakpoint != w)
d0fb5eae 1568 {
c1fc2657
SM
1569 gdb_assert (w->related_breakpoint->type == bp_watchpoint_scope);
1570 gdb_assert (w->related_breakpoint->related_breakpoint == w);
1571 w->related_breakpoint->disposition = disp_del_at_next_stop;
1572 w->related_breakpoint->related_breakpoint = w->related_breakpoint;
1573 w->related_breakpoint = w;
d0fb5eae 1574 }
c1fc2657 1575 w->disposition = disp_del_at_next_stop;
d0fb5eae
JK
1576}
1577
bb9d5f81
PP
1578/* Extract a bitfield value from value VAL using the bit parameters contained in
1579 watchpoint W. */
1580
1581static struct value *
1582extract_bitfield_from_watchpoint_value (struct watchpoint *w, struct value *val)
1583{
1584 struct value *bit_val;
1585
1586 if (val == NULL)
1587 return NULL;
1588
1589 bit_val = allocate_value (value_type (val));
1590
1591 unpack_value_bitfield (bit_val,
1592 w->val_bitpos,
1593 w->val_bitsize,
1594 value_contents_for_printing (val),
1595 value_offset (val),
1596 val);
1597
1598 return bit_val;
1599}
1600
c6d81124
PA
1601/* Allocate a dummy location and add it to B, which must be a software
1602 watchpoint. This is required because even if a software watchpoint
1603 is not watching any memory, bpstat_stop_status requires a location
1604 to be able to report stops. */
1605
1606static void
1607software_watchpoint_add_no_memory_location (struct breakpoint *b,
1608 struct program_space *pspace)
1609{
1610 gdb_assert (b->type == bp_watchpoint && b->loc == NULL);
1611
1612 b->loc = allocate_bp_location (b);
1613 b->loc->pspace = pspace;
1614 b->loc->address = -1;
1615 b->loc->length = -1;
1616}
1617
1618/* Returns true if B is a software watchpoint that is not watching any
1619 memory (e.g., "watch $pc"). */
1620
1621static int
1622is_no_memory_software_watchpoint (struct breakpoint *b)
1623{
1624 return (b->type == bp_watchpoint
1625 && b->loc != NULL
1626 && b->loc->next == NULL
1627 && b->loc->address == -1
1628 && b->loc->length == -1);
1629}
1630
567e1b4e
JB
1631/* Assuming that B is a watchpoint:
1632 - Reparse watchpoint expression, if REPARSE is non-zero
a5606eee 1633 - Evaluate expression and store the result in B->val
567e1b4e
JB
1634 - Evaluate the condition if there is one, and store the result
1635 in b->loc->cond.
a5606eee
VP
1636 - Update the list of values that must be watched in B->loc.
1637
4a64f543
MS
1638 If the watchpoint disposition is disp_del_at_next_stop, then do
1639 nothing. If this is local watchpoint that is out of scope, delete
1640 it.
1641
1642 Even with `set breakpoint always-inserted on' the watchpoints are
1643 removed + inserted on each stop here. Normal breakpoints must
1644 never be removed because they might be missed by a running thread
1645 when debugging in non-stop mode. On the other hand, hardware
1646 watchpoints (is_hardware_watchpoint; processed here) are specific
1647 to each LWP since they are stored in each LWP's hardware debug
1648 registers. Therefore, such LWP must be stopped first in order to
1649 be able to modify its hardware watchpoints.
1650
1651 Hardware watchpoints must be reset exactly once after being
1652 presented to the user. It cannot be done sooner, because it would
1653 reset the data used to present the watchpoint hit to the user. And
1654 it must not be done later because it could display the same single
1655 watchpoint hit during multiple GDB stops. Note that the latter is
1656 relevant only to the hardware watchpoint types bp_read_watchpoint
1657 and bp_access_watchpoint. False hit by bp_hardware_watchpoint is
1658 not user-visible - its hit is suppressed if the memory content has
1659 not changed.
1660
1661 The following constraints influence the location where we can reset
1662 hardware watchpoints:
1663
1664 * target_stopped_by_watchpoint and target_stopped_data_address are
1665 called several times when GDB stops.
1666
1667 [linux]
1668 * Multiple hardware watchpoints can be hit at the same time,
1669 causing GDB to stop. GDB only presents one hardware watchpoint
1670 hit at a time as the reason for stopping, and all the other hits
1671 are presented later, one after the other, each time the user
1672 requests the execution to be resumed. Execution is not resumed
1673 for the threads still having pending hit event stored in
1674 LWP_INFO->STATUS. While the watchpoint is already removed from
1675 the inferior on the first stop the thread hit event is kept being
1676 reported from its cached value by linux_nat_stopped_data_address
1677 until the real thread resume happens after the watchpoint gets
1678 presented and thus its LWP_INFO->STATUS gets reset.
1679
1680 Therefore the hardware watchpoint hit can get safely reset on the
1681 watchpoint removal from inferior. */
a79d3c27 1682
b40ce68a 1683static void
3a5c3e22 1684update_watchpoint (struct watchpoint *b, int reparse)
7270d8f2 1685{
a5606eee 1686 int within_current_scope;
a5606eee 1687 struct frame_id saved_frame_id;
66076460 1688 int frame_saved;
a5606eee 1689
f6bc2008
PA
1690 /* If this is a local watchpoint, we only want to check if the
1691 watchpoint frame is in scope if the current thread is the thread
1692 that was used to create the watchpoint. */
1693 if (!watchpoint_in_thread_scope (b))
1694 return;
1695
c1fc2657 1696 if (b->disposition == disp_del_at_next_stop)
a5606eee
VP
1697 return;
1698
66076460 1699 frame_saved = 0;
a5606eee
VP
1700
1701 /* Determine if the watchpoint is within scope. */
1702 if (b->exp_valid_block == NULL)
1703 within_current_scope = 1;
1704 else
1705 {
b5db5dfc
UW
1706 struct frame_info *fi = get_current_frame ();
1707 struct gdbarch *frame_arch = get_frame_arch (fi);
1708 CORE_ADDR frame_pc = get_frame_pc (fi);
1709
c9cf6e20
MG
1710 /* If we're at a point where the stack has been destroyed
1711 (e.g. in a function epilogue), unwinding may not work
1712 properly. Do not attempt to recreate locations at this
b5db5dfc 1713 point. See similar comments in watchpoint_check. */
c9cf6e20 1714 if (gdbarch_stack_frame_destroyed_p (frame_arch, frame_pc))
b5db5dfc 1715 return;
66076460
DJ
1716
1717 /* Save the current frame's ID so we can restore it after
1718 evaluating the watchpoint expression on its own frame. */
1719 /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
1720 took a frame parameter, so that we didn't have to change the
1721 selected frame. */
1722 frame_saved = 1;
1723 saved_frame_id = get_frame_id (get_selected_frame (NULL));
1724
a5606eee
VP
1725 fi = frame_find_by_id (b->watchpoint_frame);
1726 within_current_scope = (fi != NULL);
1727 if (within_current_scope)
1728 select_frame (fi);
1729 }
1730
b5db5dfc
UW
1731 /* We don't free locations. They are stored in the bp_location array
1732 and update_global_location_list will eventually delete them and
1733 remove breakpoints if needed. */
c1fc2657 1734 b->loc = NULL;
b5db5dfc 1735
a5606eee
VP
1736 if (within_current_scope && reparse)
1737 {
bbc13ae3 1738 const char *s;
d63d0675 1739
4d01a485 1740 b->exp.reset ();
d63d0675 1741 s = b->exp_string_reparse ? b->exp_string_reparse : b->exp_string;
1bb9788d 1742 b->exp = parse_exp_1 (&s, 0, b->exp_valid_block, 0);
a5606eee
VP
1743 /* If the meaning of expression itself changed, the old value is
1744 no longer relevant. We don't want to report a watchpoint hit
1745 to the user when the old value and the new value may actually
1746 be completely different objects. */
1747 value_free (b->val);
fa4727a6
DJ
1748 b->val = NULL;
1749 b->val_valid = 0;
60e1c644
PA
1750
1751 /* Note that unlike with breakpoints, the watchpoint's condition
1752 expression is stored in the breakpoint object, not in the
1753 locations (re)created below. */
c1fc2657 1754 if (b->cond_string != NULL)
60e1c644 1755 {
4d01a485 1756 b->cond_exp.reset ();
60e1c644 1757
c1fc2657 1758 s = b->cond_string;
1bb9788d 1759 b->cond_exp = parse_exp_1 (&s, 0, b->cond_exp_valid_block, 0);
60e1c644 1760 }
a5606eee 1761 }
a5606eee
VP
1762
1763 /* If we failed to parse the expression, for example because
1764 it refers to a global variable in a not-yet-loaded shared library,
1765 don't try to insert watchpoint. We don't automatically delete
1766 such watchpoint, though, since failure to parse expression
1767 is different from out-of-scope watchpoint. */
e8369a73 1768 if (!target_has_execution)
2d134ed3
PA
1769 {
1770 /* Without execution, memory can't change. No use to try and
1771 set watchpoint locations. The watchpoint will be reset when
1772 the target gains execution, through breakpoint_re_set. */
e8369a73
AB
1773 if (!can_use_hw_watchpoints)
1774 {
c1fc2657
SM
1775 if (b->ops->works_in_software_mode (b))
1776 b->type = bp_watchpoint;
e8369a73 1777 else
638aa5a1
AB
1778 error (_("Can't set read/access watchpoint when "
1779 "hardware watchpoints are disabled."));
e8369a73 1780 }
2d134ed3
PA
1781 }
1782 else if (within_current_scope && b->exp)
a5606eee 1783 {
0cf6dd15 1784 int pc = 0;
fa4727a6 1785 struct value *val_chain, *v, *result, *next;
2d134ed3 1786 struct program_space *frame_pspace;
a5606eee 1787
4d01a485 1788 fetch_subexp_value (b->exp.get (), &pc, &v, &result, &val_chain, 0);
a5606eee 1789
a5606eee
VP
1790 /* Avoid setting b->val if it's already set. The meaning of
1791 b->val is 'the last value' user saw, and we should update
1792 it only if we reported that last value to user. As it
9c06b0b4
TJB
1793 happens, the code that reports it updates b->val directly.
1794 We don't keep track of the memory value for masked
1795 watchpoints. */
c1fc2657 1796 if (!b->val_valid && !is_masked_watchpoint (b))
fa4727a6 1797 {
bb9d5f81
PP
1798 if (b->val_bitsize != 0)
1799 {
1800 v = extract_bitfield_from_watchpoint_value (b, v);
1801 if (v != NULL)
1802 release_value (v);
1803 }
fa4727a6
DJ
1804 b->val = v;
1805 b->val_valid = 1;
1806 }
a5606eee 1807
2d134ed3
PA
1808 frame_pspace = get_frame_program_space (get_selected_frame (NULL));
1809
a5606eee 1810 /* Look at each value on the value chain. */
9fa40276 1811 for (v = val_chain; v; v = value_next (v))
a5606eee
VP
1812 {
1813 /* If it's a memory location, and GDB actually needed
1814 its contents to evaluate the expression, then we
fa4727a6
DJ
1815 must watch it. If the first value returned is
1816 still lazy, that means an error occurred reading it;
1817 watch it anyway in case it becomes readable. */
a5606eee 1818 if (VALUE_LVAL (v) == lval_memory
fa4727a6 1819 && (v == val_chain || ! value_lazy (v)))
a5606eee
VP
1820 {
1821 struct type *vtype = check_typedef (value_type (v));
7270d8f2 1822
a5606eee
VP
1823 /* We only watch structs and arrays if user asked
1824 for it explicitly, never if they just happen to
1825 appear in the middle of some value chain. */
fa4727a6 1826 if (v == result
a5606eee
VP
1827 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
1828 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
1829 {
1830 CORE_ADDR addr;
f486487f 1831 enum target_hw_bp_type type;
a5606eee 1832 struct bp_location *loc, **tmp;
bb9d5f81
PP
1833 int bitpos = 0, bitsize = 0;
1834
1835 if (value_bitsize (v) != 0)
1836 {
1837 /* Extract the bit parameters out from the bitfield
1838 sub-expression. */
1839 bitpos = value_bitpos (v);
1840 bitsize = value_bitsize (v);
1841 }
1842 else if (v == result && b->val_bitsize != 0)
1843 {
1844 /* If VAL_BITSIZE != 0 then RESULT is actually a bitfield
1845 lvalue whose bit parameters are saved in the fields
1846 VAL_BITPOS and VAL_BITSIZE. */
1847 bitpos = b->val_bitpos;
1848 bitsize = b->val_bitsize;
1849 }
a5606eee 1850
42ae5230 1851 addr = value_address (v);
bb9d5f81
PP
1852 if (bitsize != 0)
1853 {
1854 /* Skip the bytes that don't contain the bitfield. */
1855 addr += bitpos / 8;
1856 }
1857
a5606eee 1858 type = hw_write;
c1fc2657 1859 if (b->type == bp_read_watchpoint)
a5606eee 1860 type = hw_read;
c1fc2657 1861 else if (b->type == bp_access_watchpoint)
a5606eee 1862 type = hw_access;
3a5c3e22 1863
c1fc2657
SM
1864 loc = allocate_bp_location (b);
1865 for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
a5606eee
VP
1866 ;
1867 *tmp = loc;
a6d9a66e 1868 loc->gdbarch = get_type_arch (value_type (v));
6c95b8df
PA
1869
1870 loc->pspace = frame_pspace;
a5606eee 1871 loc->address = addr;
bb9d5f81
PP
1872
1873 if (bitsize != 0)
1874 {
1875 /* Just cover the bytes that make up the bitfield. */
1876 loc->length = ((bitpos % 8) + bitsize + 7) / 8;
1877 }
1878 else
1879 loc->length = TYPE_LENGTH (value_type (v));
1880
a5606eee
VP
1881 loc->watchpoint_type = type;
1882 }
1883 }
9fa40276
TJB
1884 }
1885
1886 /* Change the type of breakpoint between hardware assisted or
1887 an ordinary watchpoint depending on the hardware support
1888 and free hardware slots. REPARSE is set when the inferior
1889 is started. */
a9634178 1890 if (reparse)
9fa40276 1891 {
e09342b5 1892 int reg_cnt;
9fa40276
TJB
1893 enum bp_loc_type loc_type;
1894 struct bp_location *bl;
a5606eee 1895
a9634178 1896 reg_cnt = can_use_hardware_watchpoint (val_chain);
e09342b5
TJB
1897
1898 if (reg_cnt)
9fa40276
TJB
1899 {
1900 int i, target_resources_ok, other_type_used;
a1398e0c 1901 enum bptype type;
9fa40276 1902
a9634178
TJB
1903 /* Use an exact watchpoint when there's only one memory region to be
1904 watched, and only one debug register is needed to watch it. */
1905 b->exact = target_exact_watchpoints && reg_cnt == 1;
1906
9fa40276 1907 /* We need to determine how many resources are already
e09342b5
TJB
1908 used for all other hardware watchpoints plus this one
1909 to see if we still have enough resources to also fit
a1398e0c
PA
1910 this watchpoint in as well. */
1911
1912 /* If this is a software watchpoint, we try to turn it
1913 to a hardware one -- count resources as if B was of
1914 hardware watchpoint type. */
c1fc2657 1915 type = b->type;
a1398e0c
PA
1916 if (type == bp_watchpoint)
1917 type = bp_hardware_watchpoint;
1918
1919 /* This watchpoint may or may not have been placed on
1920 the list yet at this point (it won't be in the list
1921 if we're trying to create it for the first time,
1922 through watch_command), so always account for it
1923 manually. */
1924
1925 /* Count resources used by all watchpoints except B. */
c1fc2657 1926 i = hw_watchpoint_used_count_others (b, type, &other_type_used);
a1398e0c
PA
1927
1928 /* Add in the resources needed for B. */
c1fc2657 1929 i += hw_watchpoint_use_count (b);
a1398e0c
PA
1930
1931 target_resources_ok
1932 = target_can_use_hardware_watchpoint (type, i, other_type_used);
e09342b5 1933 if (target_resources_ok <= 0)
a9634178 1934 {
c1fc2657 1935 int sw_mode = b->ops->works_in_software_mode (b);
9c06b0b4
TJB
1936
1937 if (target_resources_ok == 0 && !sw_mode)
a9634178
TJB
1938 error (_("Target does not support this type of "
1939 "hardware watchpoint."));
9c06b0b4
TJB
1940 else if (target_resources_ok < 0 && !sw_mode)
1941 error (_("There are not enough available hardware "
1942 "resources for this watchpoint."));
a1398e0c
PA
1943
1944 /* Downgrade to software watchpoint. */
c1fc2657 1945 b->type = bp_watchpoint;
a1398e0c
PA
1946 }
1947 else
1948 {
1949 /* If this was a software watchpoint, we've just
1950 found we have enough resources to turn it to a
1951 hardware watchpoint. Otherwise, this is a
1952 nop. */
c1fc2657 1953 b->type = type;
a9634178 1954 }
9fa40276 1955 }
c1fc2657 1956 else if (!b->ops->works_in_software_mode (b))
638aa5a1
AB
1957 {
1958 if (!can_use_hw_watchpoints)
1959 error (_("Can't set read/access watchpoint when "
1960 "hardware watchpoints are disabled."));
1961 else
1962 error (_("Expression cannot be implemented with "
1963 "read/access watchpoint."));
1964 }
9fa40276 1965 else
c1fc2657 1966 b->type = bp_watchpoint;
9fa40276 1967
c1fc2657 1968 loc_type = (b->type == bp_watchpoint? bp_loc_other
9fa40276 1969 : bp_loc_hardware_watchpoint);
c1fc2657 1970 for (bl = b->loc; bl; bl = bl->next)
9fa40276
TJB
1971 bl->loc_type = loc_type;
1972 }
1973
1974 for (v = val_chain; v; v = next)
1975 {
a5606eee
VP
1976 next = value_next (v);
1977 if (v != b->val)
1978 value_free (v);
1979 }
1980
c7437ca6
PA
1981 /* If a software watchpoint is not watching any memory, then the
1982 above left it without any location set up. But,
1983 bpstat_stop_status requires a location to be able to report
1984 stops, so make sure there's at least a dummy one. */
c1fc2657
SM
1985 if (b->type == bp_watchpoint && b->loc == NULL)
1986 software_watchpoint_add_no_memory_location (b, frame_pspace);
a5606eee
VP
1987 }
1988 else if (!within_current_scope)
7270d8f2 1989 {
ac74f770
MS
1990 printf_filtered (_("\
1991Watchpoint %d deleted because the program has left the block\n\
1992in which its expression is valid.\n"),
c1fc2657 1993 b->number);
d0fb5eae 1994 watchpoint_del_at_next_stop (b);
7270d8f2 1995 }
a5606eee
VP
1996
1997 /* Restore the selected frame. */
66076460
DJ
1998 if (frame_saved)
1999 select_frame (frame_find_by_id (saved_frame_id));
7270d8f2
OF
2000}
2001
a5606eee 2002
74960c60 2003/* Returns 1 iff breakpoint location should be
1e4d1764
YQ
2004 inserted in the inferior. We don't differentiate the type of BL's owner
2005 (breakpoint vs. tracepoint), although insert_location in tracepoint's
2006 breakpoint_ops is not defined, because in insert_bp_location,
2007 tracepoint's insert_location will not be called. */
74960c60 2008static int
35df4500 2009should_be_inserted (struct bp_location *bl)
74960c60 2010{
35df4500 2011 if (bl->owner == NULL || !breakpoint_enabled (bl->owner))
74960c60
VP
2012 return 0;
2013
35df4500 2014 if (bl->owner->disposition == disp_del_at_next_stop)
74960c60
VP
2015 return 0;
2016
35df4500 2017 if (!bl->enabled || bl->shlib_disabled || bl->duplicate)
74960c60
VP
2018 return 0;
2019
f8eba3c6
TT
2020 if (user_breakpoint_p (bl->owner) && bl->pspace->executing_startup)
2021 return 0;
2022
56710373
PA
2023 /* This is set for example, when we're attached to the parent of a
2024 vfork, and have detached from the child. The child is running
2025 free, and we expect it to do an exec or exit, at which point the
2026 OS makes the parent schedulable again (and the target reports
2027 that the vfork is done). Until the child is done with the shared
2028 memory region, do not insert breakpoints in the parent, otherwise
2029 the child could still trip on the parent's breakpoints. Since
2030 the parent is blocked anyway, it won't miss any breakpoint. */
35df4500 2031 if (bl->pspace->breakpoints_not_allowed)
56710373
PA
2032 return 0;
2033
31e77af2 2034 /* Don't insert a breakpoint if we're trying to step past its
21edc42f
YQ
2035 location, except if the breakpoint is a single-step breakpoint,
2036 and the breakpoint's thread is the thread which is stepping past
2037 a breakpoint. */
31e77af2
PA
2038 if ((bl->loc_type == bp_loc_software_breakpoint
2039 || bl->loc_type == bp_loc_hardware_breakpoint)
2040 && stepping_past_instruction_at (bl->pspace->aspace,
21edc42f
YQ
2041 bl->address)
2042 /* The single-step breakpoint may be inserted at the location
2043 we're trying to step if the instruction branches to itself.
2044 However, the instruction won't be executed at all and it may
2045 break the semantics of the instruction, for example, the
2046 instruction is a conditional branch or updates some flags.
2047 We can't fix it unless GDB is able to emulate the instruction
2048 or switch to displaced stepping. */
2049 && !(bl->owner->type == bp_single_step
2050 && thread_is_stepping_over_breakpoint (bl->owner->thread)))
e558d7c1
PA
2051 {
2052 if (debug_infrun)
2053 {
2054 fprintf_unfiltered (gdb_stdlog,
2055 "infrun: skipping breakpoint: "
2056 "stepping past insn at: %s\n",
2057 paddress (bl->gdbarch, bl->address));
2058 }
2059 return 0;
2060 }
31e77af2 2061
963f9c80
PA
2062 /* Don't insert watchpoints if we're trying to step past the
2063 instruction that triggered one. */
2064 if ((bl->loc_type == bp_loc_hardware_watchpoint)
2065 && stepping_past_nonsteppable_watchpoint ())
2066 {
2067 if (debug_infrun)
2068 {
2069 fprintf_unfiltered (gdb_stdlog,
2070 "infrun: stepping past non-steppable watchpoint. "
2071 "skipping watchpoint at %s:%d\n",
2072 paddress (bl->gdbarch, bl->address),
2073 bl->length);
2074 }
2075 return 0;
2076 }
2077
74960c60
VP
2078 return 1;
2079}
2080
934709f0
PW
2081/* Same as should_be_inserted but does the check assuming
2082 that the location is not duplicated. */
2083
2084static int
2085unduplicated_should_be_inserted (struct bp_location *bl)
2086{
2087 int result;
2088 const int save_duplicate = bl->duplicate;
2089
2090 bl->duplicate = 0;
2091 result = should_be_inserted (bl);
2092 bl->duplicate = save_duplicate;
2093 return result;
2094}
2095
b775012e
LM
2096/* Parses a conditional described by an expression COND into an
2097 agent expression bytecode suitable for evaluation
2098 by the bytecode interpreter. Return NULL if there was
2099 any error during parsing. */
2100
833177a4 2101static agent_expr_up
b775012e
LM
2102parse_cond_to_aexpr (CORE_ADDR scope, struct expression *cond)
2103{
833177a4 2104 if (cond == NULL)
b775012e
LM
2105 return NULL;
2106
833177a4
PA
2107 agent_expr_up aexpr;
2108
b775012e
LM
2109 /* We don't want to stop processing, so catch any errors
2110 that may show up. */
492d29ea 2111 TRY
b775012e 2112 {
036e657b 2113 aexpr = gen_eval_for_expr (scope, cond);
b775012e
LM
2114 }
2115
492d29ea 2116 CATCH (ex, RETURN_MASK_ERROR)
b775012e
LM
2117 {
2118 /* If we got here, it means the condition could not be parsed to a valid
2119 bytecode expression and thus can't be evaluated on the target's side.
2120 It's no use iterating through the conditions. */
b775012e 2121 }
492d29ea 2122 END_CATCH
b775012e
LM
2123
2124 /* We have a valid agent expression. */
2125 return aexpr;
2126}
2127
2128/* Based on location BL, create a list of breakpoint conditions to be
2129 passed on to the target. If we have duplicated locations with different
2130 conditions, we will add such conditions to the list. The idea is that the
2131 target will evaluate the list of conditions and will only notify GDB when
2132 one of them is true. */
2133
2134static void
2135build_target_condition_list (struct bp_location *bl)
2136{
2137 struct bp_location **locp = NULL, **loc2p;
2138 int null_condition_or_parse_error = 0;
2139 int modified = bl->needs_update;
2140 struct bp_location *loc;
2141
8b4f3082 2142 /* Release conditions left over from a previous insert. */
3cde5c42 2143 bl->target_info.conditions.clear ();
8b4f3082 2144
b775012e
LM
2145 /* This is only meaningful if the target is
2146 evaluating conditions and if the user has
2147 opted for condition evaluation on the target's
2148 side. */
2149 if (gdb_evaluates_breakpoint_condition_p ()
2150 || !target_supports_evaluation_of_breakpoint_conditions ())
2151 return;
2152
2153 /* Do a first pass to check for locations with no assigned
2154 conditions or conditions that fail to parse to a valid agent expression
2155 bytecode. If any of these happen, then it's no use to send conditions
2156 to the target since this location will always trigger and generate a
2157 response back to GDB. */
2158 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2159 {
2160 loc = (*loc2p);
2161 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2162 {
2163 if (modified)
2164 {
b775012e
LM
2165 /* Re-parse the conditions since something changed. In that
2166 case we already freed the condition bytecodes (see
2167 force_breakpoint_reinsertion). We just
2168 need to parse the condition to bytecodes again. */
833177a4
PA
2169 loc->cond_bytecode = parse_cond_to_aexpr (bl->address,
2170 loc->cond.get ());
b775012e
LM
2171 }
2172
2173 /* If we have a NULL bytecode expression, it means something
2174 went wrong or we have a null condition expression. */
2175 if (!loc->cond_bytecode)
2176 {
2177 null_condition_or_parse_error = 1;
2178 break;
2179 }
2180 }
2181 }
2182
2183 /* If any of these happened, it means we will have to evaluate the conditions
2184 for the location's address on gdb's side. It is no use keeping bytecodes
2185 for all the other duplicate locations, thus we free all of them here.
2186
2187 This is so we have a finer control over which locations' conditions are
2188 being evaluated by GDB or the remote stub. */
2189 if (null_condition_or_parse_error)
2190 {
2191 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2192 {
2193 loc = (*loc2p);
2194 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2195 {
2196 /* Only go as far as the first NULL bytecode is
2197 located. */
2198 if (!loc->cond_bytecode)
2199 return;
2200
833177a4 2201 loc->cond_bytecode.reset ();
b775012e
LM
2202 }
2203 }
2204 }
2205
2206 /* No NULL conditions or failed bytecode generation. Build a condition list
2207 for this location's address. */
2208 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2209 {
2210 loc = (*loc2p);
2211 if (loc->cond
2212 && is_breakpoint (loc->owner)
2213 && loc->pspace->num == bl->pspace->num
2214 && loc->owner->enable_state == bp_enabled
2215 && loc->enabled)
3cde5c42
PA
2216 {
2217 /* Add the condition to the vector. This will be used later
2218 to send the conditions to the target. */
2219 bl->target_info.conditions.push_back (loc->cond_bytecode.get ());
2220 }
b775012e
LM
2221 }
2222
2223 return;
2224}
2225
d3ce09f5
SS
2226/* Parses a command described by string CMD into an agent expression
2227 bytecode suitable for evaluation by the bytecode interpreter.
2228 Return NULL if there was any error during parsing. */
2229
833177a4 2230static agent_expr_up
d3ce09f5
SS
2231parse_cmd_to_aexpr (CORE_ADDR scope, char *cmd)
2232{
2233 struct cleanup *old_cleanups = 0;
4d01a485 2234 struct expression **argvec;
bbc13ae3
KS
2235 const char *cmdrest;
2236 const char *format_start, *format_end;
d3ce09f5
SS
2237 struct format_piece *fpieces;
2238 int nargs;
2239 struct gdbarch *gdbarch = get_current_arch ();
2240
833177a4 2241 if (cmd == NULL)
d3ce09f5
SS
2242 return NULL;
2243
2244 cmdrest = cmd;
2245
2246 if (*cmdrest == ',')
2247 ++cmdrest;
f1735a53 2248 cmdrest = skip_spaces (cmdrest);
d3ce09f5
SS
2249
2250 if (*cmdrest++ != '"')
2251 error (_("No format string following the location"));
2252
2253 format_start = cmdrest;
2254
2255 fpieces = parse_format_string (&cmdrest);
2256
2257 old_cleanups = make_cleanup (free_format_pieces_cleanup, &fpieces);
2258
2259 format_end = cmdrest;
2260
2261 if (*cmdrest++ != '"')
2262 error (_("Bad format string, non-terminated '\"'."));
2263
f1735a53 2264 cmdrest = skip_spaces (cmdrest);
d3ce09f5
SS
2265
2266 if (!(*cmdrest == ',' || *cmdrest == '\0'))
2267 error (_("Invalid argument syntax"));
2268
2269 if (*cmdrest == ',')
2270 cmdrest++;
f1735a53 2271 cmdrest = skip_spaces (cmdrest);
d3ce09f5
SS
2272
2273 /* For each argument, make an expression. */
2274
2275 argvec = (struct expression **) alloca (strlen (cmd)
2276 * sizeof (struct expression *));
2277
2278 nargs = 0;
2279 while (*cmdrest != '\0')
2280 {
bbc13ae3 2281 const char *cmd1;
d3ce09f5
SS
2282
2283 cmd1 = cmdrest;
4d01a485
PA
2284 expression_up expr = parse_exp_1 (&cmd1, scope, block_for_pc (scope), 1);
2285 argvec[nargs++] = expr.release ();
d3ce09f5
SS
2286 cmdrest = cmd1;
2287 if (*cmdrest == ',')
2288 ++cmdrest;
2289 }
2290
833177a4
PA
2291 agent_expr_up aexpr;
2292
d3ce09f5
SS
2293 /* We don't want to stop processing, so catch any errors
2294 that may show up. */
492d29ea 2295 TRY
d3ce09f5 2296 {
036e657b
JB
2297 aexpr = gen_printf (scope, gdbarch, 0, 0,
2298 format_start, format_end - format_start,
2299 fpieces, nargs, argvec);
d3ce09f5 2300 }
492d29ea 2301 CATCH (ex, RETURN_MASK_ERROR)
d3ce09f5
SS
2302 {
2303 /* If we got here, it means the command could not be parsed to a valid
2304 bytecode expression and thus can't be evaluated on the target's side.
2305 It's no use iterating through the other commands. */
d3ce09f5 2306 }
492d29ea
PA
2307 END_CATCH
2308
2309 do_cleanups (old_cleanups);
d3ce09f5 2310
d3ce09f5
SS
2311 /* We have a valid agent expression, return it. */
2312 return aexpr;
2313}
2314
2315/* Based on location BL, create a list of breakpoint commands to be
2316 passed on to the target. If we have duplicated locations with
2317 different commands, we will add any such to the list. */
2318
2319static void
2320build_target_command_list (struct bp_location *bl)
2321{
2322 struct bp_location **locp = NULL, **loc2p;
2323 int null_command_or_parse_error = 0;
2324 int modified = bl->needs_update;
2325 struct bp_location *loc;
2326
3cde5c42
PA
2327 /* Clear commands left over from a previous insert. */
2328 bl->target_info.tcommands.clear ();
8b4f3082 2329
41fac0cf 2330 if (!target_can_run_breakpoint_commands ())
d3ce09f5
SS
2331 return;
2332
41fac0cf
PA
2333 /* For now, limit to agent-style dprintf breakpoints. */
2334 if (dprintf_style != dprintf_style_agent)
d3ce09f5
SS
2335 return;
2336
41fac0cf
PA
2337 /* For now, if we have any duplicate location that isn't a dprintf,
2338 don't install the target-side commands, as that would make the
2339 breakpoint not be reported to the core, and we'd lose
2340 control. */
2341 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2342 {
2343 loc = (*loc2p);
2344 if (is_breakpoint (loc->owner)
2345 && loc->pspace->num == bl->pspace->num
2346 && loc->owner->type != bp_dprintf)
2347 return;
2348 }
2349
d3ce09f5
SS
2350 /* Do a first pass to check for locations with no assigned
2351 conditions or conditions that fail to parse to a valid agent expression
2352 bytecode. If any of these happen, then it's no use to send conditions
2353 to the target since this location will always trigger and generate a
2354 response back to GDB. */
2355 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2356 {
2357 loc = (*loc2p);
2358 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2359 {
2360 if (modified)
2361 {
d3ce09f5
SS
2362 /* Re-parse the commands since something changed. In that
2363 case we already freed the command bytecodes (see
2364 force_breakpoint_reinsertion). We just
2365 need to parse the command to bytecodes again. */
833177a4
PA
2366 loc->cmd_bytecode
2367 = parse_cmd_to_aexpr (bl->address,
2368 loc->owner->extra_string);
d3ce09f5
SS
2369 }
2370
2371 /* If we have a NULL bytecode expression, it means something
2372 went wrong or we have a null command expression. */
2373 if (!loc->cmd_bytecode)
2374 {
2375 null_command_or_parse_error = 1;
2376 break;
2377 }
2378 }
2379 }
2380
2381 /* If anything failed, then we're not doing target-side commands,
2382 and so clean up. */
2383 if (null_command_or_parse_error)
2384 {
2385 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2386 {
2387 loc = (*loc2p);
2388 if (is_breakpoint (loc->owner)
2389 && loc->pspace->num == bl->pspace->num)
2390 {
2391 /* Only go as far as the first NULL bytecode is
2392 located. */
40fb6c5e 2393 if (loc->cmd_bytecode == NULL)
d3ce09f5
SS
2394 return;
2395
833177a4 2396 loc->cmd_bytecode.reset ();
d3ce09f5
SS
2397 }
2398 }
2399 }
2400
2401 /* No NULL commands or failed bytecode generation. Build a command list
2402 for this location's address. */
2403 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2404 {
2405 loc = (*loc2p);
2406 if (loc->owner->extra_string
2407 && is_breakpoint (loc->owner)
2408 && loc->pspace->num == bl->pspace->num
2409 && loc->owner->enable_state == bp_enabled
2410 && loc->enabled)
3cde5c42
PA
2411 {
2412 /* Add the command to the vector. This will be used later
2413 to send the commands to the target. */
2414 bl->target_info.tcommands.push_back (loc->cmd_bytecode.get ());
2415 }
d3ce09f5
SS
2416 }
2417
2418 bl->target_info.persist = 0;
2419 /* Maybe flag this location as persistent. */
2420 if (bl->owner->type == bp_dprintf && disconnected_dprintf)
2421 bl->target_info.persist = 1;
2422}
2423
833b7ab5
YQ
2424/* Return the kind of breakpoint on address *ADDR. Get the kind
2425 of breakpoint according to ADDR except single-step breakpoint.
2426 Get the kind of single-step breakpoint according to the current
2427 registers state. */
cd6c3b4f
YQ
2428
2429static int
2430breakpoint_kind (struct bp_location *bl, CORE_ADDR *addr)
2431{
833b7ab5
YQ
2432 if (bl->owner->type == bp_single_step)
2433 {
2434 struct thread_info *thr = find_thread_global_id (bl->owner->thread);
2435 struct regcache *regcache;
2436
2437 regcache = get_thread_regcache (thr->ptid);
2438
2439 return gdbarch_breakpoint_kind_from_current_state (bl->gdbarch,
2440 regcache, addr);
2441 }
2442 else
2443 return gdbarch_breakpoint_kind_from_pc (bl->gdbarch, addr);
cd6c3b4f
YQ
2444}
2445
35df4500
TJB
2446/* Insert a low-level "breakpoint" of some type. BL is the breakpoint
2447 location. Any error messages are printed to TMP_ERROR_STREAM; and
3fbb6ffa 2448 DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems.
c30eee59
TJB
2449 Returns 0 for success, 1 if the bp_location type is not supported or
2450 -1 for failure.
879bfdc2 2451
4a64f543
MS
2452 NOTE drow/2003-09-09: This routine could be broken down to an
2453 object-style method for each breakpoint or catchpoint type. */
26bb91f3 2454static int
35df4500 2455insert_bp_location (struct bp_location *bl,
26bb91f3 2456 struct ui_file *tmp_error_stream,
3fbb6ffa 2457 int *disabled_breaks,
dd61ec5c
MW
2458 int *hw_breakpoint_error,
2459 int *hw_bp_error_explained_already)
879bfdc2 2460{
688fca4f 2461 gdb_exception bp_excpt = exception_none;
879bfdc2 2462
b775012e 2463 if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
879bfdc2
DJ
2464 return 0;
2465
35c63cd8
JB
2466 /* Note we don't initialize bl->target_info, as that wipes out
2467 the breakpoint location's shadow_contents if the breakpoint
2468 is still inserted at that location. This in turn breaks
2469 target_read_memory which depends on these buffers when
2470 a memory read is requested at the breakpoint location:
2471 Once the target_info has been wiped, we fail to see that
2472 we have a breakpoint inserted at that address and thus
2473 read the breakpoint instead of returning the data saved in
2474 the breakpoint location's shadow contents. */
0d5ed153 2475 bl->target_info.reqstd_address = bl->address;
35df4500 2476 bl->target_info.placed_address_space = bl->pspace->aspace;
f1310107 2477 bl->target_info.length = bl->length;
8181d85f 2478
b775012e
LM
2479 /* When working with target-side conditions, we must pass all the conditions
2480 for the same breakpoint address down to the target since GDB will not
2481 insert those locations. With a list of breakpoint conditions, the target
2482 can decide when to stop and notify GDB. */
2483
2484 if (is_breakpoint (bl->owner))
2485 {
2486 build_target_condition_list (bl);
d3ce09f5
SS
2487 build_target_command_list (bl);
2488 /* Reset the modification marker. */
b775012e
LM
2489 bl->needs_update = 0;
2490 }
2491
35df4500
TJB
2492 if (bl->loc_type == bp_loc_software_breakpoint
2493 || bl->loc_type == bp_loc_hardware_breakpoint)
879bfdc2 2494 {
35df4500 2495 if (bl->owner->type != bp_hardware_breakpoint)
765dc015
VP
2496 {
2497 /* If the explicitly specified breakpoint type
2498 is not hardware breakpoint, check the memory map to see
2499 if the breakpoint address is in read only memory or not.
4a64f543 2500
765dc015
VP
2501 Two important cases are:
2502 - location type is not hardware breakpoint, memory
2503 is readonly. We change the type of the location to
2504 hardware breakpoint.
4a64f543
MS
2505 - location type is hardware breakpoint, memory is
2506 read-write. This means we've previously made the
2507 location hardware one, but then the memory map changed,
2508 so we undo.
765dc015 2509
4a64f543
MS
2510 When breakpoints are removed, remove_breakpoints will use
2511 location types we've just set here, the only possible
2512 problem is that memory map has changed during running
2513 program, but it's not going to work anyway with current
2514 gdb. */
765dc015 2515 struct mem_region *mr
0d5ed153 2516 = lookup_mem_region (bl->target_info.reqstd_address);
765dc015
VP
2517
2518 if (mr)
2519 {
2520 if (automatic_hardware_breakpoints)
2521 {
765dc015
VP
2522 enum bp_loc_type new_type;
2523
2524 if (mr->attrib.mode != MEM_RW)
2525 new_type = bp_loc_hardware_breakpoint;
2526 else
2527 new_type = bp_loc_software_breakpoint;
2528
35df4500 2529 if (new_type != bl->loc_type)
765dc015
VP
2530 {
2531 static int said = 0;
cc59ec59 2532
35df4500 2533 bl->loc_type = new_type;
765dc015
VP
2534 if (!said)
2535 {
3e43a32a
MS
2536 fprintf_filtered (gdb_stdout,
2537 _("Note: automatically using "
2538 "hardware breakpoints for "
2539 "read-only addresses.\n"));
765dc015
VP
2540 said = 1;
2541 }
2542 }
2543 }
35df4500 2544 else if (bl->loc_type == bp_loc_software_breakpoint
0fec99e8
PA
2545 && mr->attrib.mode != MEM_RW)
2546 {
2547 fprintf_unfiltered (tmp_error_stream,
2548 _("Cannot insert breakpoint %d.\n"
2549 "Cannot set software breakpoint "
2550 "at read-only address %s\n"),
2551 bl->owner->number,
2552 paddress (bl->gdbarch, bl->address));
2553 return 1;
2554 }
765dc015
VP
2555 }
2556 }
2557
879bfdc2
DJ
2558 /* First check to see if we have to handle an overlay. */
2559 if (overlay_debugging == ovly_off
35df4500
TJB
2560 || bl->section == NULL
2561 || !(section_is_overlay (bl->section)))
879bfdc2
DJ
2562 {
2563 /* No overlay handling: just set the breakpoint. */
492d29ea 2564 TRY
dd61ec5c 2565 {
0000e5cc
PA
2566 int val;
2567
dd61ec5c 2568 val = bl->owner->ops->insert_location (bl);
0000e5cc 2569 if (val)
688fca4f 2570 bp_excpt = gdb_exception {RETURN_ERROR, GENERIC_ERROR};
dd61ec5c 2571 }
492d29ea 2572 CATCH (e, RETURN_MASK_ALL)
dd61ec5c 2573 {
688fca4f 2574 bp_excpt = e;
dd61ec5c 2575 }
492d29ea 2576 END_CATCH
879bfdc2
DJ
2577 }
2578 else
2579 {
4a64f543 2580 /* This breakpoint is in an overlay section.
879bfdc2
DJ
2581 Shall we set a breakpoint at the LMA? */
2582 if (!overlay_events_enabled)
2583 {
2584 /* Yes -- overlay event support is not active,
2585 so we must try to set a breakpoint at the LMA.
2586 This will not work for a hardware breakpoint. */
35df4500 2587 if (bl->loc_type == bp_loc_hardware_breakpoint)
8a3fe4f8 2588 warning (_("hardware breakpoint %d not supported in overlay!"),
35df4500 2589 bl->owner->number);
879bfdc2
DJ
2590 else
2591 {
35df4500
TJB
2592 CORE_ADDR addr = overlay_unmapped_address (bl->address,
2593 bl->section);
879bfdc2 2594 /* Set a software (trap) breakpoint at the LMA. */
35df4500 2595 bl->overlay_target_info = bl->target_info;
0d5ed153 2596 bl->overlay_target_info.reqstd_address = addr;
0000e5cc
PA
2597
2598 /* No overlay handling: just set the breakpoint. */
492d29ea 2599 TRY
0000e5cc
PA
2600 {
2601 int val;
2602
579c6ad9 2603 bl->overlay_target_info.kind
cd6c3b4f
YQ
2604 = breakpoint_kind (bl, &addr);
2605 bl->overlay_target_info.placed_address = addr;
0000e5cc
PA
2606 val = target_insert_breakpoint (bl->gdbarch,
2607 &bl->overlay_target_info);
2608 if (val)
688fca4f
PA
2609 bp_excpt
2610 = gdb_exception {RETURN_ERROR, GENERIC_ERROR};
0000e5cc 2611 }
492d29ea 2612 CATCH (e, RETURN_MASK_ALL)
0000e5cc 2613 {
688fca4f 2614 bp_excpt = e;
0000e5cc 2615 }
492d29ea 2616 END_CATCH
0000e5cc 2617
688fca4f 2618 if (bp_excpt.reason != 0)
99361f52 2619 fprintf_unfiltered (tmp_error_stream,
3e43a32a
MS
2620 "Overlay breakpoint %d "
2621 "failed: in ROM?\n",
35df4500 2622 bl->owner->number);
879bfdc2
DJ
2623 }
2624 }
2625 /* Shall we set a breakpoint at the VMA? */
35df4500 2626 if (section_is_mapped (bl->section))
879bfdc2
DJ
2627 {
2628 /* Yes. This overlay section is mapped into memory. */
492d29ea 2629 TRY
dd61ec5c 2630 {
0000e5cc
PA
2631 int val;
2632
dd61ec5c 2633 val = bl->owner->ops->insert_location (bl);
0000e5cc 2634 if (val)
688fca4f 2635 bp_excpt = gdb_exception {RETURN_ERROR, GENERIC_ERROR};
dd61ec5c 2636 }
492d29ea 2637 CATCH (e, RETURN_MASK_ALL)
dd61ec5c 2638 {
688fca4f 2639 bp_excpt = e;
dd61ec5c 2640 }
492d29ea 2641 END_CATCH
879bfdc2
DJ
2642 }
2643 else
2644 {
2645 /* No. This breakpoint will not be inserted.
2646 No error, but do not mark the bp as 'inserted'. */
2647 return 0;
2648 }
2649 }
2650
688fca4f 2651 if (bp_excpt.reason != 0)
879bfdc2
DJ
2652 {
2653 /* Can't set the breakpoint. */
0000e5cc
PA
2654
2655 /* In some cases, we might not be able to insert a
2656 breakpoint in a shared library that has already been
2657 removed, but we have not yet processed the shlib unload
2658 event. Unfortunately, some targets that implement
076855f9
PA
2659 breakpoint insertion themselves can't tell why the
2660 breakpoint insertion failed (e.g., the remote target
2661 doesn't define error codes), so we must treat generic
2662 errors as memory errors. */
688fca4f
PA
2663 if (bp_excpt.reason == RETURN_ERROR
2664 && (bp_excpt.error == GENERIC_ERROR
2665 || bp_excpt.error == MEMORY_ERROR)
076855f9 2666 && bl->loc_type == bp_loc_software_breakpoint
08351840 2667 && (solib_name_from_address (bl->pspace, bl->address)
d03de421
PA
2668 || shared_objfile_contains_address_p (bl->pspace,
2669 bl->address)))
879bfdc2 2670 {
4a64f543 2671 /* See also: disable_breakpoints_in_shlibs. */
35df4500 2672 bl->shlib_disabled = 1;
8d3788bd 2673 observer_notify_breakpoint_modified (bl->owner);
3fbb6ffa
TJB
2674 if (!*disabled_breaks)
2675 {
2676 fprintf_unfiltered (tmp_error_stream,
2677 "Cannot insert breakpoint %d.\n",
2678 bl->owner->number);
2679 fprintf_unfiltered (tmp_error_stream,
2680 "Temporarily disabling shared "
2681 "library breakpoints:\n");
2682 }
2683 *disabled_breaks = 1;
879bfdc2 2684 fprintf_unfiltered (tmp_error_stream,
35df4500 2685 "breakpoint #%d\n", bl->owner->number);
0000e5cc 2686 return 0;
879bfdc2
DJ
2687 }
2688 else
879bfdc2 2689 {
35df4500 2690 if (bl->loc_type == bp_loc_hardware_breakpoint)
879bfdc2 2691 {
0000e5cc 2692 *hw_breakpoint_error = 1;
688fca4f 2693 *hw_bp_error_explained_already = bp_excpt.message != NULL;
dd61ec5c
MW
2694 fprintf_unfiltered (tmp_error_stream,
2695 "Cannot insert hardware breakpoint %d%s",
688fca4f
PA
2696 bl->owner->number,
2697 bp_excpt.message ? ":" : ".\n");
2698 if (bp_excpt.message != NULL)
2699 fprintf_unfiltered (tmp_error_stream, "%s.\n",
2700 bp_excpt.message);
879bfdc2
DJ
2701 }
2702 else
2703 {
688fca4f 2704 if (bp_excpt.message == NULL)
0000e5cc 2705 {
1ccbe998 2706 std::string message
0000e5cc
PA
2707 = memory_error_message (TARGET_XFER_E_IO,
2708 bl->gdbarch, bl->address);
0000e5cc
PA
2709
2710 fprintf_unfiltered (tmp_error_stream,
2711 "Cannot insert breakpoint %d.\n"
2712 "%s\n",
1ccbe998 2713 bl->owner->number, message.c_str ());
0000e5cc
PA
2714 }
2715 else
2716 {
2717 fprintf_unfiltered (tmp_error_stream,
2718 "Cannot insert breakpoint %d: %s\n",
2719 bl->owner->number,
688fca4f 2720 bp_excpt.message);
0000e5cc 2721 }
879bfdc2 2722 }
0000e5cc 2723 return 1;
879bfdc2
DJ
2724
2725 }
2726 }
2727 else
35df4500 2728 bl->inserted = 1;
879bfdc2 2729
0000e5cc 2730 return 0;
879bfdc2
DJ
2731 }
2732
35df4500 2733 else if (bl->loc_type == bp_loc_hardware_watchpoint
879bfdc2 2734 /* NOTE drow/2003-09-08: This state only exists for removing
4a64f543 2735 watchpoints. It's not clear that it's necessary... */
35df4500 2736 && bl->owner->disposition != disp_del_at_next_stop)
879bfdc2 2737 {
0000e5cc
PA
2738 int val;
2739
77b06cd7
TJB
2740 gdb_assert (bl->owner->ops != NULL
2741 && bl->owner->ops->insert_location != NULL);
2742
2743 val = bl->owner->ops->insert_location (bl);
85d721b8
PA
2744
2745 /* If trying to set a read-watchpoint, and it turns out it's not
2746 supported, try emulating one with an access watchpoint. */
35df4500 2747 if (val == 1 && bl->watchpoint_type == hw_read)
85d721b8
PA
2748 {
2749 struct bp_location *loc, **loc_temp;
2750
2751 /* But don't try to insert it, if there's already another
2752 hw_access location that would be considered a duplicate
2753 of this one. */
2754 ALL_BP_LOCATIONS (loc, loc_temp)
35df4500 2755 if (loc != bl
85d721b8 2756 && loc->watchpoint_type == hw_access
35df4500 2757 && watchpoint_locations_match (bl, loc))
85d721b8 2758 {
35df4500
TJB
2759 bl->duplicate = 1;
2760 bl->inserted = 1;
2761 bl->target_info = loc->target_info;
2762 bl->watchpoint_type = hw_access;
85d721b8
PA
2763 val = 0;
2764 break;
2765 }
2766
2767 if (val == 1)
2768 {
77b06cd7
TJB
2769 bl->watchpoint_type = hw_access;
2770 val = bl->owner->ops->insert_location (bl);
2771
2772 if (val)
2773 /* Back to the original value. */
2774 bl->watchpoint_type = hw_read;
85d721b8
PA
2775 }
2776 }
2777
35df4500 2778 bl->inserted = (val == 0);
879bfdc2
DJ
2779 }
2780
35df4500 2781 else if (bl->owner->type == bp_catchpoint)
879bfdc2 2782 {
0000e5cc
PA
2783 int val;
2784
77b06cd7
TJB
2785 gdb_assert (bl->owner->ops != NULL
2786 && bl->owner->ops->insert_location != NULL);
2787
2788 val = bl->owner->ops->insert_location (bl);
2789 if (val)
2790 {
2791 bl->owner->enable_state = bp_disabled;
2792
2793 if (val == 1)
2794 warning (_("\
2795Error inserting catchpoint %d: Your system does not support this type\n\
2796of catchpoint."), bl->owner->number);
2797 else
2798 warning (_("Error inserting catchpoint %d."), bl->owner->number);
2799 }
2800
2801 bl->inserted = (val == 0);
1640b821
DJ
2802
2803 /* We've already printed an error message if there was a problem
2804 inserting this catchpoint, and we've disabled the catchpoint,
2805 so just return success. */
2806 return 0;
879bfdc2
DJ
2807 }
2808
2809 return 0;
2810}
2811
6c95b8df
PA
2812/* This function is called when program space PSPACE is about to be
2813 deleted. It takes care of updating breakpoints to not reference
2814 PSPACE anymore. */
2815
2816void
2817breakpoint_program_space_exit (struct program_space *pspace)
2818{
2819 struct breakpoint *b, *b_temp;
876fa593 2820 struct bp_location *loc, **loc_temp;
6c95b8df
PA
2821
2822 /* Remove any breakpoint that was set through this program space. */
2823 ALL_BREAKPOINTS_SAFE (b, b_temp)
2824 {
2825 if (b->pspace == pspace)
2826 delete_breakpoint (b);
2827 }
2828
2829 /* Breakpoints set through other program spaces could have locations
2830 bound to PSPACE as well. Remove those. */
876fa593 2831 ALL_BP_LOCATIONS (loc, loc_temp)
6c95b8df
PA
2832 {
2833 struct bp_location *tmp;
2834
2835 if (loc->pspace == pspace)
2836 {
2bdf28a0 2837 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
6c95b8df
PA
2838 if (loc->owner->loc == loc)
2839 loc->owner->loc = loc->next;
2840 else
2841 for (tmp = loc->owner->loc; tmp->next != NULL; tmp = tmp->next)
2842 if (tmp->next == loc)
2843 {
2844 tmp->next = loc->next;
2845 break;
2846 }
2847 }
2848 }
2849
2850 /* Now update the global location list to permanently delete the
2851 removed locations above. */
44702360 2852 update_global_location_list (UGLL_DONT_INSERT);
6c95b8df
PA
2853}
2854
74960c60
VP
2855/* Make sure all breakpoints are inserted in inferior.
2856 Throws exception on any error.
2857 A breakpoint that is already inserted won't be inserted
2858 again, so calling this function twice is safe. */
2859void
2860insert_breakpoints (void)
2861{
2862 struct breakpoint *bpt;
2863
2864 ALL_BREAKPOINTS (bpt)
2865 if (is_hardware_watchpoint (bpt))
3a5c3e22
PA
2866 {
2867 struct watchpoint *w = (struct watchpoint *) bpt;
2868
2869 update_watchpoint (w, 0 /* don't reparse. */);
2870 }
74960c60 2871
04086b45
PA
2872 /* Updating watchpoints creates new locations, so update the global
2873 location list. Explicitly tell ugll to insert locations and
2874 ignore breakpoints_always_inserted_mode. */
2875 update_global_location_list (UGLL_INSERT);
74960c60
VP
2876}
2877
20388dd6
YQ
2878/* Invoke CALLBACK for each of bp_location. */
2879
2880void
2881iterate_over_bp_locations (walk_bp_location_callback callback)
2882{
2883 struct bp_location *loc, **loc_tmp;
2884
2885 ALL_BP_LOCATIONS (loc, loc_tmp)
2886 {
2887 callback (loc, NULL);
2888 }
2889}
2890
b775012e
LM
2891/* This is used when we need to synch breakpoint conditions between GDB and the
2892 target. It is the case with deleting and disabling of breakpoints when using
2893 always-inserted mode. */
2894
2895static void
2896update_inserted_breakpoint_locations (void)
2897{
2898 struct bp_location *bl, **blp_tmp;
2899 int error_flag = 0;
2900 int val = 0;
2901 int disabled_breaks = 0;
2902 int hw_breakpoint_error = 0;
dd61ec5c 2903 int hw_bp_details_reported = 0;
b775012e 2904
d7e74731 2905 string_file tmp_error_stream;
b775012e
LM
2906
2907 /* Explicitly mark the warning -- this will only be printed if
2908 there was an error. */
d7e74731 2909 tmp_error_stream.puts ("Warning:\n");
b775012e 2910
5ed8105e 2911 scoped_restore_current_pspace_and_thread restore_pspace_thread;
b775012e
LM
2912
2913 ALL_BP_LOCATIONS (bl, blp_tmp)
2914 {
2915 /* We only want to update software breakpoints and hardware
2916 breakpoints. */
2917 if (!is_breakpoint (bl->owner))
2918 continue;
2919
2920 /* We only want to update locations that are already inserted
2921 and need updating. This is to avoid unwanted insertion during
2922 deletion of breakpoints. */
2923 if (!bl->inserted || (bl->inserted && !bl->needs_update))
2924 continue;
2925
2926 switch_to_program_space_and_thread (bl->pspace);
2927
2928 /* For targets that support global breakpoints, there's no need
2929 to select an inferior to insert breakpoint to. In fact, even
2930 if we aren't attached to any process yet, we should still
2931 insert breakpoints. */
f5656ead 2932 if (!gdbarch_has_global_breakpoints (target_gdbarch ())
b775012e
LM
2933 && ptid_equal (inferior_ptid, null_ptid))
2934 continue;
2935
d7e74731 2936 val = insert_bp_location (bl, &tmp_error_stream, &disabled_breaks,
dd61ec5c 2937 &hw_breakpoint_error, &hw_bp_details_reported);
b775012e
LM
2938 if (val)
2939 error_flag = val;
2940 }
2941
2942 if (error_flag)
2943 {
223ffa71 2944 target_terminal::ours_for_output ();
b775012e
LM
2945 error_stream (tmp_error_stream);
2946 }
b775012e
LM
2947}
2948
c30eee59 2949/* Used when starting or continuing the program. */
c906108c 2950
74960c60
VP
2951static void
2952insert_breakpoint_locations (void)
c906108c 2953{
a5606eee 2954 struct breakpoint *bpt;
35df4500 2955 struct bp_location *bl, **blp_tmp;
eacd795a 2956 int error_flag = 0;
c906108c 2957 int val = 0;
3fbb6ffa 2958 int disabled_breaks = 0;
81d0cc19 2959 int hw_breakpoint_error = 0;
dd61ec5c 2960 int hw_bp_error_explained_already = 0;
c906108c 2961
d7e74731
PA
2962 string_file tmp_error_stream;
2963
81d0cc19
GS
2964 /* Explicitly mark the warning -- this will only be printed if
2965 there was an error. */
d7e74731 2966 tmp_error_stream.puts ("Warning:\n");
6c95b8df 2967
5ed8105e 2968 scoped_restore_current_pspace_and_thread restore_pspace_thread;
6c95b8df 2969
35df4500 2970 ALL_BP_LOCATIONS (bl, blp_tmp)
879bfdc2 2971 {
b775012e 2972 if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
879bfdc2
DJ
2973 continue;
2974
4a64f543
MS
2975 /* There is no point inserting thread-specific breakpoints if
2976 the thread no longer exists. ALL_BP_LOCATIONS bp_location
2977 has BL->OWNER always non-NULL. */
35df4500 2978 if (bl->owner->thread != -1
5d5658a1 2979 && !valid_global_thread_id (bl->owner->thread))
f365de73
AS
2980 continue;
2981
35df4500 2982 switch_to_program_space_and_thread (bl->pspace);
6c95b8df
PA
2983
2984 /* For targets that support global breakpoints, there's no need
2985 to select an inferior to insert breakpoint to. In fact, even
2986 if we aren't attached to any process yet, we should still
2987 insert breakpoints. */
f5656ead 2988 if (!gdbarch_has_global_breakpoints (target_gdbarch ())
6c95b8df
PA
2989 && ptid_equal (inferior_ptid, null_ptid))
2990 continue;
2991
d7e74731 2992 val = insert_bp_location (bl, &tmp_error_stream, &disabled_breaks,
dd61ec5c 2993 &hw_breakpoint_error, &hw_bp_error_explained_already);
879bfdc2 2994 if (val)
eacd795a 2995 error_flag = val;
879bfdc2 2996 }
c906108c 2997
4a64f543
MS
2998 /* If we failed to insert all locations of a watchpoint, remove
2999 them, as half-inserted watchpoint is of limited use. */
a5606eee
VP
3000 ALL_BREAKPOINTS (bpt)
3001 {
3002 int some_failed = 0;
3003 struct bp_location *loc;
3004
3005 if (!is_hardware_watchpoint (bpt))
3006 continue;
3007
d6b74ac4 3008 if (!breakpoint_enabled (bpt))
a5606eee 3009 continue;
74960c60
VP
3010
3011 if (bpt->disposition == disp_del_at_next_stop)
3012 continue;
a5606eee
VP
3013
3014 for (loc = bpt->loc; loc; loc = loc->next)
56710373 3015 if (!loc->inserted && should_be_inserted (loc))
a5606eee
VP
3016 {
3017 some_failed = 1;
3018 break;
3019 }
3020 if (some_failed)
3021 {
3022 for (loc = bpt->loc; loc; loc = loc->next)
3023 if (loc->inserted)
834c0d03 3024 remove_breakpoint (loc);
a5606eee
VP
3025
3026 hw_breakpoint_error = 1;
d7e74731
PA
3027 tmp_error_stream.printf ("Could not insert "
3028 "hardware watchpoint %d.\n",
3029 bpt->number);
eacd795a 3030 error_flag = -1;
a5606eee
VP
3031 }
3032 }
3033
eacd795a 3034 if (error_flag)
81d0cc19
GS
3035 {
3036 /* If a hardware breakpoint or watchpoint was inserted, add a
3037 message about possibly exhausted resources. */
dd61ec5c 3038 if (hw_breakpoint_error && !hw_bp_error_explained_already)
81d0cc19 3039 {
d7e74731 3040 tmp_error_stream.printf ("Could not insert hardware breakpoints:\n\
c6510018 3041You may have requested too many hardware breakpoints/watchpoints.\n");
81d0cc19 3042 }
223ffa71 3043 target_terminal::ours_for_output ();
81d0cc19
GS
3044 error_stream (tmp_error_stream);
3045 }
c906108c
SS
3046}
3047
c30eee59
TJB
3048/* Used when the program stops.
3049 Returns zero if successful, or non-zero if there was a problem
3050 removing a breakpoint location. */
3051
c906108c 3052int
fba45db2 3053remove_breakpoints (void)
c906108c 3054{
35df4500 3055 struct bp_location *bl, **blp_tmp;
3a1bae8e 3056 int val = 0;
c906108c 3057
35df4500 3058 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 3059 {
1e4d1764 3060 if (bl->inserted && !is_tracepoint (bl->owner))
834c0d03 3061 val |= remove_breakpoint (bl);
c5aa993b 3062 }
3a1bae8e 3063 return val;
c906108c
SS
3064}
3065
49fa26b0
PA
3066/* When a thread exits, remove breakpoints that are related to
3067 that thread. */
3068
3069static void
3070remove_threaded_breakpoints (struct thread_info *tp, int silent)
3071{
3072 struct breakpoint *b, *b_tmp;
3073
3074 ALL_BREAKPOINTS_SAFE (b, b_tmp)
3075 {
5d5658a1 3076 if (b->thread == tp->global_num && user_breakpoint_p (b))
49fa26b0
PA
3077 {
3078 b->disposition = disp_del_at_next_stop;
3079
3080 printf_filtered (_("\
43792cf0
PA
3081Thread-specific breakpoint %d deleted - thread %s no longer in the thread list.\n"),
3082 b->number, print_thread_id (tp));
49fa26b0
PA
3083
3084 /* Hide it from the user. */
3085 b->number = 0;
3086 }
3087 }
3088}
3089
6c95b8df
PA
3090/* Remove breakpoints of process PID. */
3091
3092int
3093remove_breakpoints_pid (int pid)
3094{
35df4500 3095 struct bp_location *bl, **blp_tmp;
6c95b8df
PA
3096 int val;
3097 struct inferior *inf = find_inferior_pid (pid);
3098
35df4500 3099 ALL_BP_LOCATIONS (bl, blp_tmp)
6c95b8df 3100 {
35df4500 3101 if (bl->pspace != inf->pspace)
6c95b8df
PA
3102 continue;
3103
fc126975 3104 if (bl->inserted && !bl->target_info.persist)
6c95b8df 3105 {
834c0d03 3106 val = remove_breakpoint (bl);
6c95b8df
PA
3107 if (val != 0)
3108 return val;
3109 }
3110 }
3111 return 0;
3112}
3113
e58b0e63
PA
3114static int internal_breakpoint_number = -1;
3115
84f4c1fe
PM
3116/* Set the breakpoint number of B, depending on the value of INTERNAL.
3117 If INTERNAL is non-zero, the breakpoint number will be populated
3118 from internal_breakpoint_number and that variable decremented.
e5dd4106 3119 Otherwise the breakpoint number will be populated from
84f4c1fe
PM
3120 breakpoint_count and that value incremented. Internal breakpoints
3121 do not set the internal var bpnum. */
3122static void
3123set_breakpoint_number (int internal, struct breakpoint *b)
3124{
3125 if (internal)
3126 b->number = internal_breakpoint_number--;
3127 else
3128 {
3129 set_breakpoint_count (breakpoint_count + 1);
3130 b->number = breakpoint_count;
3131 }
3132}
3133
e62c965a 3134static struct breakpoint *
a6d9a66e 3135create_internal_breakpoint (struct gdbarch *gdbarch,
06edf0c0 3136 CORE_ADDR address, enum bptype type,
c0a91b2b 3137 const struct breakpoint_ops *ops)
e62c965a 3138{
51abb421 3139 symtab_and_line sal;
e62c965a
PP
3140 sal.pc = address;
3141 sal.section = find_pc_overlay (sal.pc);
6c95b8df 3142 sal.pspace = current_program_space;
e62c965a 3143
51abb421 3144 breakpoint *b = set_raw_breakpoint (gdbarch, sal, type, ops);
e62c965a
PP
3145 b->number = internal_breakpoint_number--;
3146 b->disposition = disp_donttouch;
3147
3148 return b;
3149}
3150
17450429
PP
3151static const char *const longjmp_names[] =
3152 {
3153 "longjmp", "_longjmp", "siglongjmp", "_siglongjmp"
3154 };
3155#define NUM_LONGJMP_NAMES ARRAY_SIZE(longjmp_names)
3156
3157/* Per-objfile data private to breakpoint.c. */
3158struct breakpoint_objfile_data
3159{
3160 /* Minimal symbol for "_ovly_debug_event" (if any). */
43dce439 3161 struct bound_minimal_symbol overlay_msym {};
17450429
PP
3162
3163 /* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any). */
43dce439 3164 struct bound_minimal_symbol longjmp_msym[NUM_LONGJMP_NAMES] {};
17450429 3165
28106bc2 3166 /* True if we have looked for longjmp probes. */
43dce439 3167 int longjmp_searched = 0;
28106bc2 3168
45461e0d
SM
3169 /* SystemTap probe points for longjmp (if any). These are non-owning
3170 references. */
3171 std::vector<probe *> longjmp_probes;
28106bc2 3172
17450429 3173 /* Minimal symbol for "std::terminate()" (if any). */
43dce439 3174 struct bound_minimal_symbol terminate_msym {};
17450429
PP
3175
3176 /* Minimal symbol for "_Unwind_DebugHook" (if any). */
43dce439 3177 struct bound_minimal_symbol exception_msym {};
28106bc2
SDJ
3178
3179 /* True if we have looked for exception probes. */
43dce439 3180 int exception_searched = 0;
28106bc2 3181
45461e0d
SM
3182 /* SystemTap probe points for unwinding (if any). These are non-owning
3183 references. */
3184 std::vector<probe *> exception_probes;
17450429
PP
3185};
3186
3187static const struct objfile_data *breakpoint_objfile_key;
3188
3189/* Minimal symbol not found sentinel. */
3190static struct minimal_symbol msym_not_found;
3191
3192/* Returns TRUE if MSYM point to the "not found" sentinel. */
3193
3194static int
3195msym_not_found_p (const struct minimal_symbol *msym)
3196{
3197 return msym == &msym_not_found;
3198}
3199
3200/* Return per-objfile data needed by breakpoint.c.
3201 Allocate the data if necessary. */
3202
3203static struct breakpoint_objfile_data *
3204get_breakpoint_objfile_data (struct objfile *objfile)
3205{
3206 struct breakpoint_objfile_data *bp_objfile_data;
3207
9a3c8263
SM
3208 bp_objfile_data = ((struct breakpoint_objfile_data *)
3209 objfile_data (objfile, breakpoint_objfile_key));
17450429
PP
3210 if (bp_objfile_data == NULL)
3211 {
43dce439 3212 bp_objfile_data = new breakpoint_objfile_data ();
17450429
PP
3213 set_objfile_data (objfile, breakpoint_objfile_key, bp_objfile_data);
3214 }
3215 return bp_objfile_data;
3216}
3217
28106bc2 3218static void
43dce439 3219free_breakpoint_objfile_data (struct objfile *obj, void *data)
28106bc2 3220{
9a3c8263
SM
3221 struct breakpoint_objfile_data *bp_objfile_data
3222 = (struct breakpoint_objfile_data *) data;
28106bc2 3223
43dce439 3224 delete bp_objfile_data;
28106bc2
SDJ
3225}
3226
e62c965a 3227static void
af02033e 3228create_overlay_event_breakpoint (void)
e62c965a 3229{
69de3c6a 3230 struct objfile *objfile;
af02033e 3231 const char *const func_name = "_ovly_debug_event";
e62c965a 3232
69de3c6a
PP
3233 ALL_OBJFILES (objfile)
3234 {
3235 struct breakpoint *b;
17450429
PP
3236 struct breakpoint_objfile_data *bp_objfile_data;
3237 CORE_ADDR addr;
67994074 3238 struct explicit_location explicit_loc;
69de3c6a 3239
17450429
PP
3240 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3241
3b7344d5 3242 if (msym_not_found_p (bp_objfile_data->overlay_msym.minsym))
17450429
PP
3243 continue;
3244
3b7344d5 3245 if (bp_objfile_data->overlay_msym.minsym == NULL)
17450429 3246 {
3b7344d5 3247 struct bound_minimal_symbol m;
17450429
PP
3248
3249 m = lookup_minimal_symbol_text (func_name, objfile);
3b7344d5 3250 if (m.minsym == NULL)
17450429
PP
3251 {
3252 /* Avoid future lookups in this objfile. */
3b7344d5 3253 bp_objfile_data->overlay_msym.minsym = &msym_not_found;
17450429
PP
3254 continue;
3255 }
3256 bp_objfile_data->overlay_msym = m;
3257 }
e62c965a 3258
77e371c0 3259 addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym);
17450429 3260 b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
06edf0c0
PA
3261 bp_overlay_event,
3262 &internal_breakpoint_ops);
67994074
KS
3263 initialize_explicit_location (&explicit_loc);
3264 explicit_loc.function_name = ASTRDUP (func_name);
d28cd78a 3265 b->location = new_explicit_location (&explicit_loc);
e62c965a 3266
69de3c6a
PP
3267 if (overlay_debugging == ovly_auto)
3268 {
3269 b->enable_state = bp_enabled;
3270 overlay_events_enabled = 1;
3271 }
3272 else
3273 {
3274 b->enable_state = bp_disabled;
3275 overlay_events_enabled = 0;
3276 }
e62c965a 3277 }
e62c965a
PP
3278}
3279
0fd8e87f 3280static void
af02033e 3281create_longjmp_master_breakpoint (void)
0fd8e87f 3282{
6c95b8df 3283 struct program_space *pspace;
6c95b8df 3284
5ed8105e 3285 scoped_restore_current_program_space restore_pspace;
0fd8e87f 3286
6c95b8df 3287 ALL_PSPACES (pspace)
af02033e
PP
3288 {
3289 struct objfile *objfile;
3290
3291 set_current_program_space (pspace);
3292
3293 ALL_OBJFILES (objfile)
0fd8e87f 3294 {
af02033e
PP
3295 int i;
3296 struct gdbarch *gdbarch;
17450429 3297 struct breakpoint_objfile_data *bp_objfile_data;
0fd8e87f 3298
af02033e 3299 gdbarch = get_objfile_arch (objfile);
0fd8e87f 3300
17450429
PP
3301 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3302
28106bc2
SDJ
3303 if (!bp_objfile_data->longjmp_searched)
3304 {
45461e0d
SM
3305 std::vector<probe *> ret
3306 = find_probes_in_objfile (objfile, "libc", "longjmp");
25f9533e 3307
45461e0d 3308 if (!ret.empty ())
25f9533e
SDJ
3309 {
3310 /* We are only interested in checking one element. */
45461e0d 3311 probe *p = ret[0];
25f9533e 3312
935676c9 3313 if (!p->can_evaluate_arguments ())
25f9533e
SDJ
3314 {
3315 /* We cannot use the probe interface here, because it does
3316 not know how to evaluate arguments. */
45461e0d 3317 ret.clear ();
25f9533e
SDJ
3318 }
3319 }
3320 bp_objfile_data->longjmp_probes = ret;
28106bc2
SDJ
3321 bp_objfile_data->longjmp_searched = 1;
3322 }
3323
45461e0d 3324 if (!bp_objfile_data->longjmp_probes.empty ())
28106bc2 3325 {
28106bc2
SDJ
3326 struct gdbarch *gdbarch = get_objfile_arch (objfile);
3327
45461e0d 3328 for (probe *p : bp_objfile_data->longjmp_probes)
28106bc2
SDJ
3329 {
3330 struct breakpoint *b;
3331
729662a5 3332 b = create_internal_breakpoint (gdbarch,
935676c9 3333 p->get_relocated_address (objfile),
28106bc2
SDJ
3334 bp_longjmp_master,
3335 &internal_breakpoint_ops);
d28cd78a 3336 b->location = new_probe_location ("-probe-stap libc:longjmp");
28106bc2
SDJ
3337 b->enable_state = bp_disabled;
3338 }
3339
3340 continue;
3341 }
3342
0569175e
TSD
3343 if (!gdbarch_get_longjmp_target_p (gdbarch))
3344 continue;
3345
17450429 3346 for (i = 0; i < NUM_LONGJMP_NAMES; i++)
af02033e
PP
3347 {
3348 struct breakpoint *b;
af02033e 3349 const char *func_name;
17450429 3350 CORE_ADDR addr;
67994074 3351 struct explicit_location explicit_loc;
6c95b8df 3352
3b7344d5 3353 if (msym_not_found_p (bp_objfile_data->longjmp_msym[i].minsym))
af02033e 3354 continue;
0fd8e87f 3355
17450429 3356 func_name = longjmp_names[i];
3b7344d5 3357 if (bp_objfile_data->longjmp_msym[i].minsym == NULL)
17450429 3358 {
3b7344d5 3359 struct bound_minimal_symbol m;
17450429
PP
3360
3361 m = lookup_minimal_symbol_text (func_name, objfile);
3b7344d5 3362 if (m.minsym == NULL)
17450429
PP
3363 {
3364 /* Prevent future lookups in this objfile. */
3b7344d5 3365 bp_objfile_data->longjmp_msym[i].minsym = &msym_not_found;
17450429
PP
3366 continue;
3367 }
3368 bp_objfile_data->longjmp_msym[i] = m;
3369 }
3370
77e371c0 3371 addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]);
06edf0c0
PA
3372 b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master,
3373 &internal_breakpoint_ops);
67994074
KS
3374 initialize_explicit_location (&explicit_loc);
3375 explicit_loc.function_name = ASTRDUP (func_name);
d28cd78a 3376 b->location = new_explicit_location (&explicit_loc);
af02033e
PP
3377 b->enable_state = bp_disabled;
3378 }
0fd8e87f 3379 }
af02033e 3380 }
0fd8e87f
UW
3381}
3382
af02033e 3383/* Create a master std::terminate breakpoint. */
aa7d318d 3384static void
af02033e 3385create_std_terminate_master_breakpoint (void)
aa7d318d
TT
3386{
3387 struct program_space *pspace;
af02033e 3388 const char *const func_name = "std::terminate()";
aa7d318d 3389
5ed8105e 3390 scoped_restore_current_program_space restore_pspace;
aa7d318d
TT
3391
3392 ALL_PSPACES (pspace)
17450429
PP
3393 {
3394 struct objfile *objfile;
3395 CORE_ADDR addr;
3396
3397 set_current_program_space (pspace);
3398
aa7d318d
TT
3399 ALL_OBJFILES (objfile)
3400 {
3401 struct breakpoint *b;
17450429 3402 struct breakpoint_objfile_data *bp_objfile_data;
67994074 3403 struct explicit_location explicit_loc;
aa7d318d 3404
17450429 3405 bp_objfile_data = get_breakpoint_objfile_data (objfile);
aa7d318d 3406
3b7344d5 3407 if (msym_not_found_p (bp_objfile_data->terminate_msym.minsym))
17450429
PP
3408 continue;
3409
3b7344d5 3410 if (bp_objfile_data->terminate_msym.minsym == NULL)
17450429 3411 {
3b7344d5 3412 struct bound_minimal_symbol m;
17450429
PP
3413
3414 m = lookup_minimal_symbol (func_name, NULL, objfile);
3b7344d5
TT
3415 if (m.minsym == NULL || (MSYMBOL_TYPE (m.minsym) != mst_text
3416 && MSYMBOL_TYPE (m.minsym) != mst_file_text))
17450429
PP
3417 {
3418 /* Prevent future lookups in this objfile. */
3b7344d5 3419 bp_objfile_data->terminate_msym.minsym = &msym_not_found;
17450429
PP
3420 continue;
3421 }
3422 bp_objfile_data->terminate_msym = m;
3423 }
aa7d318d 3424
77e371c0 3425 addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym);
17450429 3426 b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
06edf0c0
PA
3427 bp_std_terminate_master,
3428 &internal_breakpoint_ops);
67994074
KS
3429 initialize_explicit_location (&explicit_loc);
3430 explicit_loc.function_name = ASTRDUP (func_name);
d28cd78a 3431 b->location = new_explicit_location (&explicit_loc);
aa7d318d
TT
3432 b->enable_state = bp_disabled;
3433 }
17450429 3434 }
aa7d318d
TT
3435}
3436
186c406b
TT
3437/* Install a master breakpoint on the unwinder's debug hook. */
3438
70221824 3439static void
186c406b
TT
3440create_exception_master_breakpoint (void)
3441{
3442 struct objfile *objfile;
17450429 3443 const char *const func_name = "_Unwind_DebugHook";
186c406b
TT
3444
3445 ALL_OBJFILES (objfile)
3446 {
17450429
PP
3447 struct breakpoint *b;
3448 struct gdbarch *gdbarch;
3449 struct breakpoint_objfile_data *bp_objfile_data;
3450 CORE_ADDR addr;
67994074 3451 struct explicit_location explicit_loc;
17450429
PP
3452
3453 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3454
28106bc2
SDJ
3455 /* We prefer the SystemTap probe point if it exists. */
3456 if (!bp_objfile_data->exception_searched)
3457 {
45461e0d
SM
3458 std::vector<probe *> ret
3459 = find_probes_in_objfile (objfile, "libgcc", "unwind");
25f9533e 3460
45461e0d 3461 if (!ret.empty ())
25f9533e
SDJ
3462 {
3463 /* We are only interested in checking one element. */
45461e0d 3464 probe *p = ret[0];
25f9533e 3465
935676c9 3466 if (!p->can_evaluate_arguments ())
25f9533e
SDJ
3467 {
3468 /* We cannot use the probe interface here, because it does
3469 not know how to evaluate arguments. */
45461e0d 3470 ret.clear ();
25f9533e
SDJ
3471 }
3472 }
3473 bp_objfile_data->exception_probes = ret;
28106bc2
SDJ
3474 bp_objfile_data->exception_searched = 1;
3475 }
3476
45461e0d 3477 if (!bp_objfile_data->exception_probes.empty ())
28106bc2
SDJ
3478 {
3479 struct gdbarch *gdbarch = get_objfile_arch (objfile);
45461e0d
SM
3480
3481 for (probe *p : bp_objfile_data->exception_probes)
28106bc2
SDJ
3482 {
3483 struct breakpoint *b;
3484
729662a5 3485 b = create_internal_breakpoint (gdbarch,
935676c9 3486 p->get_relocated_address (objfile),
28106bc2
SDJ
3487 bp_exception_master,
3488 &internal_breakpoint_ops);
d28cd78a 3489 b->location = new_probe_location ("-probe-stap libgcc:unwind");
28106bc2
SDJ
3490 b->enable_state = bp_disabled;
3491 }
3492
3493 continue;
3494 }
3495
3496 /* Otherwise, try the hook function. */
3497
3b7344d5 3498 if (msym_not_found_p (bp_objfile_data->exception_msym.minsym))
17450429
PP
3499 continue;
3500
3501 gdbarch = get_objfile_arch (objfile);
186c406b 3502
3b7344d5 3503 if (bp_objfile_data->exception_msym.minsym == NULL)
186c406b 3504 {
3b7344d5 3505 struct bound_minimal_symbol debug_hook;
186c406b 3506
17450429 3507 debug_hook = lookup_minimal_symbol (func_name, NULL, objfile);
3b7344d5 3508 if (debug_hook.minsym == NULL)
17450429 3509 {
3b7344d5 3510 bp_objfile_data->exception_msym.minsym = &msym_not_found;
17450429
PP
3511 continue;
3512 }
3513
3514 bp_objfile_data->exception_msym = debug_hook;
186c406b 3515 }
17450429 3516
77e371c0 3517 addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
17450429
PP
3518 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
3519 &current_target);
06edf0c0
PA
3520 b = create_internal_breakpoint (gdbarch, addr, bp_exception_master,
3521 &internal_breakpoint_ops);
67994074
KS
3522 initialize_explicit_location (&explicit_loc);
3523 explicit_loc.function_name = ASTRDUP (func_name);
d28cd78a 3524 b->location = new_explicit_location (&explicit_loc);
17450429 3525 b->enable_state = bp_disabled;
186c406b 3526 }
186c406b
TT
3527}
3528
9ef9e6a6
KS
3529/* Does B have a location spec? */
3530
3531static int
3532breakpoint_event_location_empty_p (const struct breakpoint *b)
3533{
d28cd78a 3534 return b->location != NULL && event_location_empty_p (b->location.get ());
9ef9e6a6
KS
3535}
3536
c906108c 3537void
fba45db2 3538update_breakpoints_after_exec (void)
c906108c 3539{
35df4500 3540 struct breakpoint *b, *b_tmp;
876fa593 3541 struct bp_location *bploc, **bplocp_tmp;
c906108c 3542
25b22b0a
PA
3543 /* We're about to delete breakpoints from GDB's lists. If the
3544 INSERTED flag is true, GDB will try to lift the breakpoints by
3545 writing the breakpoints' "shadow contents" back into memory. The
3546 "shadow contents" are NOT valid after an exec, so GDB should not
3547 do that. Instead, the target is responsible from marking
3548 breakpoints out as soon as it detects an exec. We don't do that
3549 here instead, because there may be other attempts to delete
3550 breakpoints after detecting an exec and before reaching here. */
876fa593 3551 ALL_BP_LOCATIONS (bploc, bplocp_tmp)
6c95b8df
PA
3552 if (bploc->pspace == current_program_space)
3553 gdb_assert (!bploc->inserted);
c906108c 3554
35df4500 3555 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 3556 {
6c95b8df
PA
3557 if (b->pspace != current_program_space)
3558 continue;
3559
4a64f543 3560 /* Solib breakpoints must be explicitly reset after an exec(). */
c5aa993b
JM
3561 if (b->type == bp_shlib_event)
3562 {
3563 delete_breakpoint (b);
3564 continue;
3565 }
c906108c 3566
4a64f543 3567 /* JIT breakpoints must be explicitly reset after an exec(). */
4efc6507
DE
3568 if (b->type == bp_jit_event)
3569 {
3570 delete_breakpoint (b);
3571 continue;
3572 }
3573
1900040c 3574 /* Thread event breakpoints must be set anew after an exec(),
0fd8e87f
UW
3575 as must overlay event and longjmp master breakpoints. */
3576 if (b->type == bp_thread_event || b->type == bp_overlay_event
186c406b
TT
3577 || b->type == bp_longjmp_master || b->type == bp_std_terminate_master
3578 || b->type == bp_exception_master)
c4093a6a
JM
3579 {
3580 delete_breakpoint (b);
3581 continue;
3582 }
3583
4a64f543 3584 /* Step-resume breakpoints are meaningless after an exec(). */
2c03e5be 3585 if (b->type == bp_step_resume || b->type == bp_hp_step_resume)
c5aa993b
JM
3586 {
3587 delete_breakpoint (b);
3588 continue;
3589 }
3590
7c16b83e
PA
3591 /* Just like single-step breakpoints. */
3592 if (b->type == bp_single_step)
3593 {
3594 delete_breakpoint (b);
3595 continue;
3596 }
3597
611c83ae
PA
3598 /* Longjmp and longjmp-resume breakpoints are also meaningless
3599 after an exec. */
186c406b 3600 if (b->type == bp_longjmp || b->type == bp_longjmp_resume
e2e4d78b 3601 || b->type == bp_longjmp_call_dummy
186c406b 3602 || b->type == bp_exception || b->type == bp_exception_resume)
611c83ae
PA
3603 {
3604 delete_breakpoint (b);
3605 continue;
3606 }
3607
ce78b96d
JB
3608 if (b->type == bp_catchpoint)
3609 {
3610 /* For now, none of the bp_catchpoint breakpoints need to
3611 do anything at this point. In the future, if some of
3612 the catchpoints need to something, we will need to add
3613 a new method, and call this method from here. */
3614 continue;
3615 }
3616
c5aa993b
JM
3617 /* bp_finish is a special case. The only way we ought to be able
3618 to see one of these when an exec() has happened, is if the user
3619 caught a vfork, and then said "finish". Ordinarily a finish just
3620 carries them to the call-site of the current callee, by setting
3621 a temporary bp there and resuming. But in this case, the finish
3622 will carry them entirely through the vfork & exec.
3623
3624 We don't want to allow a bp_finish to remain inserted now. But
3625 we can't safely delete it, 'cause finish_command has a handle to
3626 the bp on a bpstat, and will later want to delete it. There's a
3627 chance (and I've seen it happen) that if we delete the bp_finish
3628 here, that its storage will get reused by the time finish_command
3629 gets 'round to deleting the "use to be a bp_finish" breakpoint.
3630 We really must allow finish_command to delete a bp_finish.
3631
e5dd4106 3632 In the absence of a general solution for the "how do we know
53a5351d
JM
3633 it's safe to delete something others may have handles to?"
3634 problem, what we'll do here is just uninsert the bp_finish, and
3635 let finish_command delete it.
3636
3637 (We know the bp_finish is "doomed" in the sense that it's
3638 momentary, and will be deleted as soon as finish_command sees
3639 the inferior stopped. So it doesn't matter that the bp's
3640 address is probably bogus in the new a.out, unlike e.g., the
3641 solib breakpoints.) */
c5aa993b 3642
c5aa993b
JM
3643 if (b->type == bp_finish)
3644 {
3645 continue;
3646 }
3647
3648 /* Without a symbolic address, we have little hope of the
3649 pre-exec() address meaning the same thing in the post-exec()
4a64f543 3650 a.out. */
9ef9e6a6 3651 if (breakpoint_event_location_empty_p (b))
c5aa993b
JM
3652 {
3653 delete_breakpoint (b);
3654 continue;
3655 }
c5aa993b 3656 }
c906108c
SS
3657}
3658
3659int
d80ee84f 3660detach_breakpoints (ptid_t ptid)
c906108c 3661{
35df4500 3662 struct bp_location *bl, **blp_tmp;
3a1bae8e 3663 int val = 0;
2989a365 3664 scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
6c95b8df 3665 struct inferior *inf = current_inferior ();
c5aa993b 3666
dfd4cc63 3667 if (ptid_get_pid (ptid) == ptid_get_pid (inferior_ptid))
8a3fe4f8 3668 error (_("Cannot detach breakpoints of inferior_ptid"));
c5aa993b 3669
6c95b8df 3670 /* Set inferior_ptid; remove_breakpoint_1 uses this global. */
d80ee84f 3671 inferior_ptid = ptid;
35df4500 3672 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 3673 {
35df4500 3674 if (bl->pspace != inf->pspace)
6c95b8df
PA
3675 continue;
3676
bd9673a4
PW
3677 /* This function must physically remove breakpoints locations
3678 from the specified ptid, without modifying the breakpoint
3679 package's state. Locations of type bp_loc_other are only
3680 maintained at GDB side. So, there is no need to remove
3681 these bp_loc_other locations. Moreover, removing these
3682 would modify the breakpoint package's state. */
3683 if (bl->loc_type == bp_loc_other)
3684 continue;
3685
35df4500 3686 if (bl->inserted)
b2b6a7da 3687 val |= remove_breakpoint_1 (bl, DETACH_BREAKPOINT);
c5aa993b 3688 }
d03285ec 3689
3a1bae8e 3690 return val;
c906108c
SS
3691}
3692
35df4500 3693/* Remove the breakpoint location BL from the current address space.
6c95b8df
PA
3694 Note that this is used to detach breakpoints from a child fork.
3695 When we get here, the child isn't in the inferior list, and neither
3696 do we have objects to represent its address space --- we should
35df4500 3697 *not* look at bl->pspace->aspace here. */
6c95b8df 3698
c906108c 3699static int
b2b6a7da 3700remove_breakpoint_1 (struct bp_location *bl, enum remove_bp_reason reason)
c906108c
SS
3701{
3702 int val;
c5aa993b 3703
35df4500
TJB
3704 /* BL is never in moribund_locations by our callers. */
3705 gdb_assert (bl->owner != NULL);
2bdf28a0 3706
74960c60
VP
3707 /* The type of none suggests that owner is actually deleted.
3708 This should not ever happen. */
35df4500 3709 gdb_assert (bl->owner->type != bp_none);
0bde7532 3710
35df4500
TJB
3711 if (bl->loc_type == bp_loc_software_breakpoint
3712 || bl->loc_type == bp_loc_hardware_breakpoint)
c906108c 3713 {
c02f5703
MS
3714 /* "Normal" instruction breakpoint: either the standard
3715 trap-instruction bp (bp_breakpoint), or a
3716 bp_hardware_breakpoint. */
3717
3718 /* First check to see if we have to handle an overlay. */
3719 if (overlay_debugging == ovly_off
35df4500
TJB
3720 || bl->section == NULL
3721 || !(section_is_overlay (bl->section)))
c02f5703
MS
3722 {
3723 /* No overlay handling: just remove the breakpoint. */
08351840
PA
3724
3725 /* If we're trying to uninsert a memory breakpoint that we
3726 know is set in a dynamic object that is marked
3727 shlib_disabled, then either the dynamic object was
3728 removed with "remove-symbol-file" or with
3729 "nosharedlibrary". In the former case, we don't know
3730 whether another dynamic object might have loaded over the
3731 breakpoint's address -- the user might well let us know
3732 about it next with add-symbol-file (the whole point of
d03de421 3733 add-symbol-file is letting the user manually maintain a
08351840
PA
3734 list of dynamically loaded objects). If we have the
3735 breakpoint's shadow memory, that is, this is a software
3736 breakpoint managed by GDB, check whether the breakpoint
3737 is still inserted in memory, to avoid overwriting wrong
3738 code with stale saved shadow contents. Note that HW
3739 breakpoints don't have shadow memory, as they're
3740 implemented using a mechanism that is not dependent on
3741 being able to modify the target's memory, and as such
3742 they should always be removed. */
3743 if (bl->shlib_disabled
3744 && bl->target_info.shadow_len != 0
3745 && !memory_validate_breakpoint (bl->gdbarch, &bl->target_info))
3746 val = 0;
3747 else
73971819 3748 val = bl->owner->ops->remove_location (bl, reason);
c02f5703 3749 }
c906108c
SS
3750 else
3751 {
4a64f543 3752 /* This breakpoint is in an overlay section.
c02f5703
MS
3753 Did we set a breakpoint at the LMA? */
3754 if (!overlay_events_enabled)
3755 {
3756 /* Yes -- overlay event support is not active, so we
3757 should have set a breakpoint at the LMA. Remove it.
3758 */
c02f5703
MS
3759 /* Ignore any failures: if the LMA is in ROM, we will
3760 have already warned when we failed to insert it. */
35df4500
TJB
3761 if (bl->loc_type == bp_loc_hardware_breakpoint)
3762 target_remove_hw_breakpoint (bl->gdbarch,
3763 &bl->overlay_target_info);
c02f5703 3764 else
35df4500 3765 target_remove_breakpoint (bl->gdbarch,
73971819
PA
3766 &bl->overlay_target_info,
3767 reason);
c02f5703
MS
3768 }
3769 /* Did we set a breakpoint at the VMA?
3770 If so, we will have marked the breakpoint 'inserted'. */
35df4500 3771 if (bl->inserted)
c906108c 3772 {
c02f5703
MS
3773 /* Yes -- remove it. Previously we did not bother to
3774 remove the breakpoint if the section had been
3775 unmapped, but let's not rely on that being safe. We
3776 don't know what the overlay manager might do. */
aa67235e
UW
3777
3778 /* However, we should remove *software* breakpoints only
3779 if the section is still mapped, or else we overwrite
3780 wrong code with the saved shadow contents. */
348d480f
PA
3781 if (bl->loc_type == bp_loc_hardware_breakpoint
3782 || section_is_mapped (bl->section))
73971819 3783 val = bl->owner->ops->remove_location (bl, reason);
aa67235e
UW
3784 else
3785 val = 0;
c906108c 3786 }
c02f5703
MS
3787 else
3788 {
3789 /* No -- not inserted, so no need to remove. No error. */
3790 val = 0;
3791 }
c906108c 3792 }
879d1e6b 3793
08351840
PA
3794 /* In some cases, we might not be able to remove a breakpoint in
3795 a shared library that has already been removed, but we have
3796 not yet processed the shlib unload event. Similarly for an
3797 unloaded add-symbol-file object - the user might not yet have
3798 had the chance to remove-symbol-file it. shlib_disabled will
3799 be set if the library/object has already been removed, but
3800 the breakpoint hasn't been uninserted yet, e.g., after
3801 "nosharedlibrary" or "remove-symbol-file" with breakpoints
3802 always-inserted mode. */
076855f9 3803 if (val
08351840
PA
3804 && (bl->loc_type == bp_loc_software_breakpoint
3805 && (bl->shlib_disabled
3806 || solib_name_from_address (bl->pspace, bl->address)
d03de421
PA
3807 || shared_objfile_contains_address_p (bl->pspace,
3808 bl->address))))
879d1e6b
UW
3809 val = 0;
3810
c906108c
SS
3811 if (val)
3812 return val;
b2b6a7da 3813 bl->inserted = (reason == DETACH_BREAKPOINT);
c906108c 3814 }
35df4500 3815 else if (bl->loc_type == bp_loc_hardware_watchpoint)
c906108c 3816 {
77b06cd7
TJB
3817 gdb_assert (bl->owner->ops != NULL
3818 && bl->owner->ops->remove_location != NULL);
3819
b2b6a7da 3820 bl->inserted = (reason == DETACH_BREAKPOINT);
73971819 3821 bl->owner->ops->remove_location (bl, reason);
2e70b7b9 3822
c906108c 3823 /* Failure to remove any of the hardware watchpoints comes here. */
b2b6a7da 3824 if (reason == REMOVE_BREAKPOINT && bl->inserted)
8a3fe4f8 3825 warning (_("Could not remove hardware watchpoint %d."),
35df4500 3826 bl->owner->number);
c906108c 3827 }
35df4500
TJB
3828 else if (bl->owner->type == bp_catchpoint
3829 && breakpoint_enabled (bl->owner)
3830 && !bl->duplicate)
ce78b96d 3831 {
77b06cd7
TJB
3832 gdb_assert (bl->owner->ops != NULL
3833 && bl->owner->ops->remove_location != NULL);
ce78b96d 3834
73971819 3835 val = bl->owner->ops->remove_location (bl, reason);
ce78b96d
JB
3836 if (val)
3837 return val;
77b06cd7 3838
b2b6a7da 3839 bl->inserted = (reason == DETACH_BREAKPOINT);
ce78b96d 3840 }
c906108c
SS
3841
3842 return 0;
3843}
3844
6c95b8df 3845static int
834c0d03 3846remove_breakpoint (struct bp_location *bl)
6c95b8df 3847{
35df4500
TJB
3848 /* BL is never in moribund_locations by our callers. */
3849 gdb_assert (bl->owner != NULL);
2bdf28a0 3850
6c95b8df
PA
3851 /* The type of none suggests that owner is actually deleted.
3852 This should not ever happen. */
35df4500 3853 gdb_assert (bl->owner->type != bp_none);
6c95b8df 3854
5ed8105e 3855 scoped_restore_current_pspace_and_thread restore_pspace_thread;
6c95b8df 3856
35df4500 3857 switch_to_program_space_and_thread (bl->pspace);
6c95b8df 3858
5ed8105e 3859 return remove_breakpoint_1 (bl, REMOVE_BREAKPOINT);
6c95b8df
PA
3860}
3861
c906108c
SS
3862/* Clear the "inserted" flag in all breakpoints. */
3863
25b22b0a 3864void
fba45db2 3865mark_breakpoints_out (void)
c906108c 3866{
35df4500 3867 struct bp_location *bl, **blp_tmp;
c906108c 3868
35df4500 3869 ALL_BP_LOCATIONS (bl, blp_tmp)
66c4b3e8 3870 if (bl->pspace == current_program_space)
35df4500 3871 bl->inserted = 0;
c906108c
SS
3872}
3873
53a5351d
JM
3874/* Clear the "inserted" flag in all breakpoints and delete any
3875 breakpoints which should go away between runs of the program.
c906108c
SS
3876
3877 Plus other such housekeeping that has to be done for breakpoints
3878 between runs.
3879
53a5351d
JM
3880 Note: this function gets called at the end of a run (by
3881 generic_mourn_inferior) and when a run begins (by
4a64f543 3882 init_wait_for_inferior). */
c906108c
SS
3883
3884
3885
3886void
fba45db2 3887breakpoint_init_inferior (enum inf_context context)
c906108c 3888{
35df4500 3889 struct breakpoint *b, *b_tmp;
870f88f7 3890 struct bp_location *bl;
1c5cfe86 3891 int ix;
6c95b8df 3892 struct program_space *pspace = current_program_space;
c906108c 3893
50c71eaf
PA
3894 /* If breakpoint locations are shared across processes, then there's
3895 nothing to do. */
f5656ead 3896 if (gdbarch_has_global_breakpoints (target_gdbarch ()))
50c71eaf
PA
3897 return;
3898
1a853c52 3899 mark_breakpoints_out ();
075f6582 3900
35df4500 3901 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 3902 {
6c95b8df
PA
3903 if (b->loc && b->loc->pspace != pspace)
3904 continue;
3905
c5aa993b
JM
3906 switch (b->type)
3907 {
3908 case bp_call_dummy:
e2e4d78b 3909 case bp_longjmp_call_dummy:
c906108c 3910
c5aa993b 3911 /* If the call dummy breakpoint is at the entry point it will
ab92d69b
PA
3912 cause problems when the inferior is rerun, so we better get
3913 rid of it. */
3914
3915 case bp_watchpoint_scope:
3916
3917 /* Also get rid of scope breakpoints. */
3918
3919 case bp_shlib_event:
3920
3921 /* Also remove solib event breakpoints. Their addresses may
3922 have changed since the last time we ran the program.
3923 Actually we may now be debugging against different target;
3924 and so the solib backend that installed this breakpoint may
3925 not be used in by the target. E.g.,
3926
3927 (gdb) file prog-linux
3928 (gdb) run # native linux target
3929 ...
3930 (gdb) kill
3931 (gdb) file prog-win.exe
3932 (gdb) tar rem :9999 # remote Windows gdbserver.
3933 */
c906108c 3934
f59f708a
PA
3935 case bp_step_resume:
3936
3937 /* Also remove step-resume breakpoints. */
3938
7c16b83e
PA
3939 case bp_single_step:
3940
3941 /* Also remove single-step breakpoints. */
3942
c5aa993b
JM
3943 delete_breakpoint (b);
3944 break;
c906108c 3945
c5aa993b
JM
3946 case bp_watchpoint:
3947 case bp_hardware_watchpoint:
3948 case bp_read_watchpoint:
3949 case bp_access_watchpoint:
3a5c3e22
PA
3950 {
3951 struct watchpoint *w = (struct watchpoint *) b;
c906108c 3952
3a5c3e22
PA
3953 /* Likewise for watchpoints on local expressions. */
3954 if (w->exp_valid_block != NULL)
3955 delete_breakpoint (b);
63000888 3956 else
3a5c3e22 3957 {
63000888
PA
3958 /* Get rid of existing locations, which are no longer
3959 valid. New ones will be created in
3960 update_watchpoint, when the inferior is restarted.
3961 The next update_global_location_list call will
3962 garbage collect them. */
3963 b->loc = NULL;
3964
3965 if (context == inf_starting)
3966 {
3967 /* Reset val field to force reread of starting value in
3968 insert_breakpoints. */
3969 if (w->val)
3970 value_free (w->val);
3971 w->val = NULL;
3972 w->val_valid = 0;
3973 }
3974 }
3a5c3e22 3975 }
c5aa993b
JM
3976 break;
3977 default:
c5aa993b
JM
3978 break;
3979 }
3980 }
1c5cfe86
PA
3981
3982 /* Get rid of the moribund locations. */
35df4500
TJB
3983 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, bl); ++ix)
3984 decref_bp_location (&bl);
1c5cfe86 3985 VEC_free (bp_location_p, moribund_locations);
c906108c
SS
3986}
3987
6c95b8df
PA
3988/* These functions concern about actual breakpoints inserted in the
3989 target --- to e.g. check if we need to do decr_pc adjustment or if
3990 we need to hop over the bkpt --- so we check for address space
3991 match, not program space. */
3992
c2c6d25f
JM
3993/* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint
3994 exists at PC. It returns ordinary_breakpoint_here if it's an
3995 ordinary breakpoint, or permanent_breakpoint_here if it's a
3996 permanent breakpoint.
3997 - When continuing from a location with an ordinary breakpoint, we
3998 actually single step once before calling insert_breakpoints.
e5dd4106 3999 - When continuing from a location with a permanent breakpoint, we
c2c6d25f
JM
4000 need to use the `SKIP_PERMANENT_BREAKPOINT' macro, provided by
4001 the target, to advance the PC past the breakpoint. */
c906108c 4002
c2c6d25f 4003enum breakpoint_here
accd0bcd 4004breakpoint_here_p (const address_space *aspace, CORE_ADDR pc)
c906108c 4005{
35df4500 4006 struct bp_location *bl, **blp_tmp;
c2c6d25f 4007 int any_breakpoint_here = 0;
c906108c 4008
35df4500 4009 ALL_BP_LOCATIONS (bl, blp_tmp)
075f6582 4010 {
35df4500
TJB
4011 if (bl->loc_type != bp_loc_software_breakpoint
4012 && bl->loc_type != bp_loc_hardware_breakpoint)
075f6582
DJ
4013 continue;
4014
f1310107 4015 /* ALL_BP_LOCATIONS bp_location has BL->OWNER always non-NULL. */
35df4500 4016 if ((breakpoint_enabled (bl->owner)
1a853c52 4017 || bl->permanent)
f1310107 4018 && breakpoint_location_address_match (bl, aspace, pc))
075f6582
DJ
4019 {
4020 if (overlay_debugging
35df4500
TJB
4021 && section_is_overlay (bl->section)
4022 && !section_is_mapped (bl->section))
075f6582 4023 continue; /* unmapped overlay -- can't be a match */
1a853c52 4024 else if (bl->permanent)
075f6582
DJ
4025 return permanent_breakpoint_here;
4026 else
4027 any_breakpoint_here = 1;
4028 }
4029 }
c906108c 4030
f486487f 4031 return any_breakpoint_here ? ordinary_breakpoint_here : no_breakpoint_here;
c906108c
SS
4032}
4033
d35ae833
PA
4034/* See breakpoint.h. */
4035
4036int
accd0bcd 4037breakpoint_in_range_p (const address_space *aspace,
d35ae833
PA
4038 CORE_ADDR addr, ULONGEST len)
4039{
4040 struct bp_location *bl, **blp_tmp;
4041
4042 ALL_BP_LOCATIONS (bl, blp_tmp)
4043 {
4044 if (bl->loc_type != bp_loc_software_breakpoint
4045 && bl->loc_type != bp_loc_hardware_breakpoint)
4046 continue;
4047
4048 if ((breakpoint_enabled (bl->owner)
4049 || bl->permanent)
4050 && breakpoint_location_address_range_overlap (bl, aspace,
4051 addr, len))
4052 {
4053 if (overlay_debugging
4054 && section_is_overlay (bl->section)
4055 && !section_is_mapped (bl->section))
4056 {
4057 /* Unmapped overlay -- can't be a match. */
4058 continue;
4059 }
4060
4061 return 1;
4062 }
4063 }
4064
4065 return 0;
4066}
4067
1c5cfe86
PA
4068/* Return true if there's a moribund breakpoint at PC. */
4069
4070int
accd0bcd 4071moribund_breakpoint_here_p (const address_space *aspace, CORE_ADDR pc)
1c5cfe86
PA
4072{
4073 struct bp_location *loc;
4074 int ix;
4075
4076 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
f1310107 4077 if (breakpoint_location_address_match (loc, aspace, pc))
1c5cfe86
PA
4078 return 1;
4079
4080 return 0;
4081}
c2c6d25f 4082
f7ce857f
PA
4083/* Returns non-zero iff BL is inserted at PC, in address space
4084 ASPACE. */
4085
4086static int
4087bp_location_inserted_here_p (struct bp_location *bl,
accd0bcd 4088 const address_space *aspace, CORE_ADDR pc)
f7ce857f
PA
4089{
4090 if (bl->inserted
4091 && breakpoint_address_match (bl->pspace->aspace, bl->address,
4092 aspace, pc))
4093 {
4094 if (overlay_debugging
4095 && section_is_overlay (bl->section)
4096 && !section_is_mapped (bl->section))
4097 return 0; /* unmapped overlay -- can't be a match */
4098 else
4099 return 1;
4100 }
4101 return 0;
4102}
4103
a1fd2fa5 4104/* Returns non-zero iff there's a breakpoint inserted at PC. */
c906108c
SS
4105
4106int
accd0bcd 4107breakpoint_inserted_here_p (const address_space *aspace, CORE_ADDR pc)
c906108c 4108{
f7ce857f 4109 struct bp_location **blp, **blp_tmp = NULL;
c906108c 4110
f7ce857f 4111 ALL_BP_LOCATIONS_AT_ADDR (blp, blp_tmp, pc)
c5aa993b 4112 {
f7ce857f
PA
4113 struct bp_location *bl = *blp;
4114
35df4500
TJB
4115 if (bl->loc_type != bp_loc_software_breakpoint
4116 && bl->loc_type != bp_loc_hardware_breakpoint)
075f6582
DJ
4117 continue;
4118
f7ce857f
PA
4119 if (bp_location_inserted_here_p (bl, aspace, pc))
4120 return 1;
c5aa993b 4121 }
c36b740a
VP
4122 return 0;
4123}
4124
a1fd2fa5
PA
4125/* This function returns non-zero iff there is a software breakpoint
4126 inserted at PC. */
c36b740a
VP
4127
4128int
accd0bcd 4129software_breakpoint_inserted_here_p (const address_space *aspace,
a1fd2fa5 4130 CORE_ADDR pc)
4fa8626c 4131{
f7ce857f 4132 struct bp_location **blp, **blp_tmp = NULL;
4fa8626c 4133
f7ce857f 4134 ALL_BP_LOCATIONS_AT_ADDR (blp, blp_tmp, pc)
4fa8626c 4135 {
f7ce857f
PA
4136 struct bp_location *bl = *blp;
4137
35df4500 4138 if (bl->loc_type != bp_loc_software_breakpoint)
4fa8626c
DJ
4139 continue;
4140
f7ce857f
PA
4141 if (bp_location_inserted_here_p (bl, aspace, pc))
4142 return 1;
4fa8626c
DJ
4143 }
4144
4145 return 0;
9c02b525
PA
4146}
4147
4148/* See breakpoint.h. */
4149
4150int
accd0bcd 4151hardware_breakpoint_inserted_here_p (const address_space *aspace,
9c02b525
PA
4152 CORE_ADDR pc)
4153{
4154 struct bp_location **blp, **blp_tmp = NULL;
9c02b525
PA
4155
4156 ALL_BP_LOCATIONS_AT_ADDR (blp, blp_tmp, pc)
4157 {
4158 struct bp_location *bl = *blp;
4159
4160 if (bl->loc_type != bp_loc_hardware_breakpoint)
4161 continue;
4162
4163 if (bp_location_inserted_here_p (bl, aspace, pc))
4164 return 1;
4165 }
4166
4167 return 0;
4fa8626c
DJ
4168}
4169
9093389c 4170int
accd0bcd 4171hardware_watchpoint_inserted_in_range (const address_space *aspace,
9093389c
PA
4172 CORE_ADDR addr, ULONGEST len)
4173{
4174 struct breakpoint *bpt;
4175
4176 ALL_BREAKPOINTS (bpt)
4177 {
4178 struct bp_location *loc;
4179
4180 if (bpt->type != bp_hardware_watchpoint
4181 && bpt->type != bp_access_watchpoint)
4182 continue;
4183
4184 if (!breakpoint_enabled (bpt))
4185 continue;
4186
4187 for (loc = bpt->loc; loc; loc = loc->next)
4188 if (loc->pspace->aspace == aspace && loc->inserted)
4189 {
4190 CORE_ADDR l, h;
4191
4192 /* Check for intersection. */
768adc05
PA
4193 l = std::max<CORE_ADDR> (loc->address, addr);
4194 h = std::min<CORE_ADDR> (loc->address + loc->length, addr + len);
9093389c
PA
4195 if (l < h)
4196 return 1;
4197 }
4198 }
4199 return 0;
4200}
c906108c 4201\f
c5aa993b 4202
c906108c
SS
4203/* bpstat stuff. External routines' interfaces are documented
4204 in breakpoint.h. */
4205
4206int
c326b90e 4207is_catchpoint (struct breakpoint *ep)
c906108c 4208{
533be4dd 4209 return (ep->type == bp_catchpoint);
c906108c
SS
4210}
4211
f431efe5
PA
4212/* Frees any storage that is part of a bpstat. Does not walk the
4213 'next' chain. */
4214
04afa70c 4215bpstats::~bpstats ()
198757a8 4216{
04afa70c
TT
4217 if (old_val != NULL)
4218 value_free (old_val);
04afa70c
TT
4219 if (bp_location_at != NULL)
4220 decref_bp_location (&bp_location_at);
198757a8
VP
4221}
4222
c906108c
SS
4223/* Clear a bpstat so that it says we are not at any breakpoint.
4224 Also free any storage that is part of a bpstat. */
4225
4226void
fba45db2 4227bpstat_clear (bpstat *bsp)
c906108c
SS
4228{
4229 bpstat p;
4230 bpstat q;
4231
4232 if (bsp == 0)
4233 return;
4234 p = *bsp;
4235 while (p != NULL)
4236 {
4237 q = p->next;
04afa70c 4238 delete p;
c906108c
SS
4239 p = q;
4240 }
4241 *bsp = NULL;
4242}
4243
04afa70c
TT
4244bpstats::bpstats (const bpstats &other)
4245 : next (NULL),
4246 bp_location_at (other.bp_location_at),
4247 breakpoint_at (other.breakpoint_at),
4248 commands (other.commands),
4249 old_val (other.old_val),
4250 print (other.print),
4251 stop (other.stop),
4252 print_it (other.print_it)
4253{
4254 if (old_val != NULL)
4255 {
4256 old_val = value_copy (old_val);
4257 release_value (old_val);
4258 }
4259 incref_bp_location (bp_location_at);
04afa70c
TT
4260}
4261
c906108c
SS
4262/* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
4263 is part of the bpstat is copied as well. */
4264
4265bpstat
fba45db2 4266bpstat_copy (bpstat bs)
c906108c
SS
4267{
4268 bpstat p = NULL;
4269 bpstat tmp;
4270 bpstat retval = NULL;
4271
4272 if (bs == NULL)
4273 return bs;
4274
4275 for (; bs != NULL; bs = bs->next)
4276 {
04afa70c 4277 tmp = new bpstats (*bs);
31cc81e9 4278
c906108c
SS
4279 if (p == NULL)
4280 /* This is the first thing in the chain. */
4281 retval = tmp;
4282 else
4283 p->next = tmp;
4284 p = tmp;
4285 }
4286 p->next = NULL;
4287 return retval;
4288}
4289
4a64f543 4290/* Find the bpstat associated with this breakpoint. */
c906108c
SS
4291
4292bpstat
fba45db2 4293bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
c906108c 4294{
c5aa993b
JM
4295 if (bsp == NULL)
4296 return NULL;
c906108c 4297
c5aa993b
JM
4298 for (; bsp != NULL; bsp = bsp->next)
4299 {
f431efe5 4300 if (bsp->breakpoint_at == breakpoint)
c5aa993b
JM
4301 return bsp;
4302 }
c906108c
SS
4303 return NULL;
4304}
4305
ab04a2af
TT
4306/* See breakpoint.h. */
4307
47591c29 4308int
427cd150 4309bpstat_explains_signal (bpstat bsp, enum gdb_signal sig)
ab04a2af 4310{
ab04a2af
TT
4311 for (; bsp != NULL; bsp = bsp->next)
4312 {
427cd150
TT
4313 if (bsp->breakpoint_at == NULL)
4314 {
4315 /* A moribund location can never explain a signal other than
4316 GDB_SIGNAL_TRAP. */
4317 if (sig == GDB_SIGNAL_TRAP)
47591c29 4318 return 1;
427cd150
TT
4319 }
4320 else
47591c29
PA
4321 {
4322 if (bsp->breakpoint_at->ops->explains_signal (bsp->breakpoint_at,
4323 sig))
4324 return 1;
4325 }
ab04a2af
TT
4326 }
4327
47591c29 4328 return 0;
ab04a2af
TT
4329}
4330
4a64f543
MS
4331/* Put in *NUM the breakpoint number of the first breakpoint we are
4332 stopped at. *BSP upon return is a bpstat which points to the
4333 remaining breakpoints stopped at (but which is not guaranteed to be
4334 good for anything but further calls to bpstat_num).
4335
8671a17b
PA
4336 Return 0 if passed a bpstat which does not indicate any breakpoints.
4337 Return -1 if stopped at a breakpoint that has been deleted since
4338 we set it.
4339 Return 1 otherwise. */
c906108c
SS
4340
4341int
8671a17b 4342bpstat_num (bpstat *bsp, int *num)
c906108c
SS
4343{
4344 struct breakpoint *b;
4345
4346 if ((*bsp) == NULL)
4347 return 0; /* No more breakpoint values */
8671a17b 4348
4a64f543
MS
4349 /* We assume we'll never have several bpstats that correspond to a
4350 single breakpoint -- otherwise, this function might return the
4351 same number more than once and this will look ugly. */
f431efe5 4352 b = (*bsp)->breakpoint_at;
8671a17b
PA
4353 *bsp = (*bsp)->next;
4354 if (b == NULL)
4355 return -1; /* breakpoint that's been deleted since */
4356
4357 *num = b->number; /* We have its number */
4358 return 1;
c906108c
SS
4359}
4360
e93ca019 4361/* See breakpoint.h. */
c906108c
SS
4362
4363void
e93ca019 4364bpstat_clear_actions (void)
c906108c 4365{
e93ca019
JK
4366 struct thread_info *tp;
4367 bpstat bs;
4368
4369 if (ptid_equal (inferior_ptid, null_ptid))
4370 return;
4371
4372 tp = find_thread_ptid (inferior_ptid);
4373 if (tp == NULL)
4374 return;
4375
4376 for (bs = tp->control.stop_bpstat; bs != NULL; bs = bs->next)
c906108c 4377 {
d1b0a7bf 4378 bs->commands = NULL;
abf85f46 4379
c906108c
SS
4380 if (bs->old_val != NULL)
4381 {
4382 value_free (bs->old_val);
4383 bs->old_val = NULL;
4384 }
4385 }
4386}
4387
f3b1572e
PA
4388/* Called when a command is about to proceed the inferior. */
4389
4390static void
4391breakpoint_about_to_proceed (void)
4392{
4393 if (!ptid_equal (inferior_ptid, null_ptid))
4394 {
4395 struct thread_info *tp = inferior_thread ();
4396
4397 /* Allow inferior function calls in breakpoint commands to not
4398 interrupt the command list. When the call finishes
4399 successfully, the inferior will be standing at the same
4400 breakpoint as if nothing happened. */
16c381f0 4401 if (tp->control.in_infcall)
f3b1572e
PA
4402 return;
4403 }
4404
4405 breakpoint_proceeded = 1;
4406}
4407
abf85f46
JK
4408/* Return non-zero iff CMD as the first line of a command sequence is `silent'
4409 or its equivalent. */
4410
4411static int
4412command_line_is_silent (struct command_line *cmd)
4413{
4f45d445 4414 return cmd && (strcmp ("silent", cmd->line) == 0);
abf85f46
JK
4415}
4416
4a64f543
MS
4417/* Execute all the commands associated with all the breakpoints at
4418 this location. Any of these commands could cause the process to
4419 proceed beyond this point, etc. We look out for such changes by
4420 checking the global "breakpoint_proceeded" after each command.
c906108c 4421
347bddb7
PA
4422 Returns true if a breakpoint command resumed the inferior. In that
4423 case, it is the caller's responsibility to recall it again with the
4424 bpstat of the current thread. */
4425
4426static int
4427bpstat_do_actions_1 (bpstat *bsp)
c906108c
SS
4428{
4429 bpstat bs;
347bddb7 4430 int again = 0;
c906108c
SS
4431
4432 /* Avoid endless recursion if a `source' command is contained
4433 in bs->commands. */
4434 if (executing_breakpoint_commands)
347bddb7 4435 return 0;
c906108c 4436
81b1e71c
TT
4437 scoped_restore save_executing
4438 = make_scoped_restore (&executing_breakpoint_commands, 1);
c906108c 4439
1ac32117 4440 scoped_restore preventer = prevent_dont_repeat ();
cf6c5ffb 4441
4a64f543 4442 /* This pointer will iterate over the list of bpstat's. */
c906108c
SS
4443 bs = *bsp;
4444
4445 breakpoint_proceeded = 0;
4446 for (; bs != NULL; bs = bs->next)
4447 {
d1b0a7bf 4448 struct command_line *cmd = NULL;
6c50ab1c
JB
4449
4450 /* Take ownership of the BSP's command tree, if it has one.
4451
4452 The command tree could legitimately contain commands like
4453 'step' and 'next', which call clear_proceed_status, which
4454 frees stop_bpstat's command tree. To make sure this doesn't
4455 free the tree we're executing out from under us, we need to
4456 take ownership of the tree ourselves. Since a given bpstat's
4457 commands are only executed once, we don't need to copy it; we
4458 can clear the pointer in the bpstat, and make sure we free
4459 the tree when we're done. */
d1b0a7bf 4460 counted_command_line ccmd = bs->commands;
9add0f1b 4461 bs->commands = NULL;
d1b0a7bf
TT
4462 if (ccmd != NULL)
4463 cmd = ccmd.get ();
abf85f46
JK
4464 if (command_line_is_silent (cmd))
4465 {
4466 /* The action has been already done by bpstat_stop_status. */
4467 cmd = cmd->next;
4468 }
6c50ab1c 4469
c906108c
SS
4470 while (cmd != NULL)
4471 {
4472 execute_control_command (cmd);
4473
4474 if (breakpoint_proceeded)
4475 break;
4476 else
4477 cmd = cmd->next;
4478 }
6c50ab1c 4479
c906108c 4480 if (breakpoint_proceeded)
32c1e744 4481 {
cb814510 4482 if (current_ui->async)
347bddb7
PA
4483 /* If we are in async mode, then the target might be still
4484 running, not stopped at any breakpoint, so nothing for
4485 us to do here -- just return to the event loop. */
4486 ;
32c1e744
VP
4487 else
4488 /* In sync mode, when execute_control_command returns
4489 we're already standing on the next breakpoint.
347bddb7
PA
4490 Breakpoint commands for that stop were not run, since
4491 execute_command does not run breakpoint commands --
4492 only command_line_handler does, but that one is not
4493 involved in execution of breakpoint commands. So, we
4494 can now execute breakpoint commands. It should be
4495 noted that making execute_command do bpstat actions is
4496 not an option -- in this case we'll have recursive
4497 invocation of bpstat for each breakpoint with a
4498 command, and can easily blow up GDB stack. Instead, we
4499 return true, which will trigger the caller to recall us
4500 with the new stop_bpstat. */
4501 again = 1;
4502 break;
32c1e744 4503 }
c906108c 4504 }
347bddb7
PA
4505 return again;
4506}
4507
4508void
4509bpstat_do_actions (void)
4510{
353d1d73
JK
4511 struct cleanup *cleanup_if_error = make_bpstat_clear_actions_cleanup ();
4512
347bddb7
PA
4513 /* Do any commands attached to breakpoint we are stopped at. */
4514 while (!ptid_equal (inferior_ptid, null_ptid)
4515 && target_has_execution
4516 && !is_exited (inferior_ptid)
4517 && !is_executing (inferior_ptid))
4518 /* Since in sync mode, bpstat_do_actions may resume the inferior,
4519 and only return when it is stopped at the next breakpoint, we
4520 keep doing breakpoint actions until it returns false to
4521 indicate the inferior was not resumed. */
16c381f0 4522 if (!bpstat_do_actions_1 (&inferior_thread ()->control.stop_bpstat))
347bddb7 4523 break;
353d1d73
JK
4524
4525 discard_cleanups (cleanup_if_error);
c906108c
SS
4526}
4527
fa4727a6
DJ
4528/* Print out the (old or new) value associated with a watchpoint. */
4529
4530static void
4531watchpoint_value_print (struct value *val, struct ui_file *stream)
4532{
4533 if (val == NULL)
4534 fprintf_unfiltered (stream, _("<unreadable>"));
4535 else
79a45b7d
TT
4536 {
4537 struct value_print_options opts;
4538 get_user_print_options (&opts);
4539 value_print (val, stream, &opts);
4540 }
fa4727a6
DJ
4541}
4542
f303dbd6
PA
4543/* Print the "Thread ID hit" part of "Thread ID hit Breakpoint N" if
4544 debugging multiple threads. */
4545
4546void
4547maybe_print_thread_hit_breakpoint (struct ui_out *uiout)
4548{
112e8700 4549 if (uiout->is_mi_like_p ())
f303dbd6
PA
4550 return;
4551
112e8700 4552 uiout->text ("\n");
f303dbd6
PA
4553
4554 if (show_thread_that_caused_stop ())
4555 {
4556 const char *name;
4557 struct thread_info *thr = inferior_thread ();
4558
112e8700
SM
4559 uiout->text ("Thread ");
4560 uiout->field_fmt ("thread-id", "%s", print_thread_id (thr));
f303dbd6
PA
4561
4562 name = thr->name != NULL ? thr->name : target_thread_name (thr);
4563 if (name != NULL)
4564 {
112e8700
SM
4565 uiout->text (" \"");
4566 uiout->field_fmt ("name", "%s", name);
4567 uiout->text ("\"");
f303dbd6
PA
4568 }
4569
112e8700 4570 uiout->text (" hit ");
f303dbd6
PA
4571 }
4572}
4573
e514a9d6 4574/* Generic routine for printing messages indicating why we
4a64f543 4575 stopped. The behavior of this function depends on the value
e514a9d6
JM
4576 'print_it' in the bpstat structure. Under some circumstances we
4577 may decide not to print anything here and delegate the task to
4a64f543 4578 normal_stop(). */
e514a9d6
JM
4579
4580static enum print_stop_action
4581print_bp_stop_message (bpstat bs)
4582{
4583 switch (bs->print_it)
4584 {
4585 case print_it_noop:
4a64f543 4586 /* Nothing should be printed for this bpstat entry. */
e514a9d6
JM
4587 return PRINT_UNKNOWN;
4588 break;
4589
4590 case print_it_done:
4591 /* We still want to print the frame, but we already printed the
4a64f543 4592 relevant messages. */
e514a9d6
JM
4593 return PRINT_SRC_AND_LOC;
4594 break;
4595
4596 case print_it_normal:
4f8d1dc6 4597 {
f431efe5
PA
4598 struct breakpoint *b = bs->breakpoint_at;
4599
1a6a67de
TJB
4600 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
4601 which has since been deleted. */
4602 if (b == NULL)
4603 return PRINT_UNKNOWN;
4604
348d480f
PA
4605 /* Normal case. Call the breakpoint's print_it method. */
4606 return b->ops->print_it (bs);
4f8d1dc6 4607 }
348d480f 4608 break;
3086aeae 4609
e514a9d6 4610 default:
8e65ff28 4611 internal_error (__FILE__, __LINE__,
e2e0b3e5 4612 _("print_bp_stop_message: unrecognized enum value"));
e514a9d6 4613 break;
c906108c 4614 }
c906108c
SS
4615}
4616
edcc5120
TT
4617/* A helper function that prints a shared library stopped event. */
4618
4619static void
4620print_solib_event (int is_catchpoint)
4621{
4622 int any_deleted
4623 = !VEC_empty (char_ptr, current_program_space->deleted_solibs);
4624 int any_added
4625 = !VEC_empty (so_list_ptr, current_program_space->added_solibs);
4626
4627 if (!is_catchpoint)
4628 {
4629 if (any_added || any_deleted)
112e8700 4630 current_uiout->text (_("Stopped due to shared library event:\n"));
edcc5120 4631 else
112e8700
SM
4632 current_uiout->text (_("Stopped due to shared library event (no "
4633 "libraries added or removed)\n"));
edcc5120
TT
4634 }
4635
112e8700
SM
4636 if (current_uiout->is_mi_like_p ())
4637 current_uiout->field_string ("reason",
4638 async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
edcc5120
TT
4639
4640 if (any_deleted)
4641 {
edcc5120
TT
4642 char *name;
4643 int ix;
4644
112e8700 4645 current_uiout->text (_(" Inferior unloaded "));
10f489e5 4646 ui_out_emit_list list_emitter (current_uiout, "removed");
edcc5120
TT
4647 for (ix = 0;
4648 VEC_iterate (char_ptr, current_program_space->deleted_solibs,
4649 ix, name);
4650 ++ix)
4651 {
4652 if (ix > 0)
112e8700
SM
4653 current_uiout->text (" ");
4654 current_uiout->field_string ("library", name);
4655 current_uiout->text ("\n");
edcc5120 4656 }
edcc5120
TT
4657 }
4658
4659 if (any_added)
4660 {
4661 struct so_list *iter;
4662 int ix;
edcc5120 4663
112e8700 4664 current_uiout->text (_(" Inferior loaded "));
10f489e5 4665 ui_out_emit_list list_emitter (current_uiout, "added");
edcc5120
TT
4666 for (ix = 0;
4667 VEC_iterate (so_list_ptr, current_program_space->added_solibs,
4668 ix, iter);
4669 ++ix)
4670 {
4671 if (ix > 0)
112e8700
SM
4672 current_uiout->text (" ");
4673 current_uiout->field_string ("library", iter->so_name);
4674 current_uiout->text ("\n");
edcc5120 4675 }
edcc5120
TT
4676 }
4677}
4678
e514a9d6
JM
4679/* Print a message indicating what happened. This is called from
4680 normal_stop(). The input to this routine is the head of the bpstat
36dfb11c
TT
4681 list - a list of the eventpoints that caused this stop. KIND is
4682 the target_waitkind for the stopping event. This
e514a9d6
JM
4683 routine calls the generic print routine for printing a message
4684 about reasons for stopping. This will print (for example) the
4685 "Breakpoint n," part of the output. The return value of this
4686 routine is one of:
c906108c 4687
4a64f543 4688 PRINT_UNKNOWN: Means we printed nothing.
917317f4 4689 PRINT_SRC_AND_LOC: Means we printed something, and expect subsequent
4a64f543 4690 code to print the location. An example is
c5aa993b
JM
4691 "Breakpoint 1, " which should be followed by
4692 the location.
917317f4 4693 PRINT_SRC_ONLY: Means we printed something, but there is no need
c5aa993b
JM
4694 to also print the location part of the message.
4695 An example is the catch/throw messages, which
4a64f543 4696 don't require a location appended to the end.
917317f4 4697 PRINT_NOTHING: We have done some printing and we don't need any
4a64f543 4698 further info to be printed. */
c906108c 4699
917317f4 4700enum print_stop_action
36dfb11c 4701bpstat_print (bpstat bs, int kind)
c906108c 4702{
f486487f 4703 enum print_stop_action val;
c5aa993b 4704
c906108c 4705 /* Maybe another breakpoint in the chain caused us to stop.
53a5351d
JM
4706 (Currently all watchpoints go on the bpstat whether hit or not.
4707 That probably could (should) be changed, provided care is taken
c906108c 4708 with respect to bpstat_explains_signal). */
e514a9d6
JM
4709 for (; bs; bs = bs->next)
4710 {
4711 val = print_bp_stop_message (bs);
4712 if (val == PRINT_SRC_ONLY
4713 || val == PRINT_SRC_AND_LOC
4714 || val == PRINT_NOTHING)
4715 return val;
4716 }
c906108c 4717
36dfb11c
TT
4718 /* If we had hit a shared library event breakpoint,
4719 print_bp_stop_message would print out this message. If we hit an
4720 OS-level shared library event, do the same thing. */
4721 if (kind == TARGET_WAITKIND_LOADED)
4722 {
edcc5120 4723 print_solib_event (0);
36dfb11c
TT
4724 return PRINT_NOTHING;
4725 }
4726
e514a9d6 4727 /* We reached the end of the chain, or we got a null BS to start
4a64f543 4728 with and nothing was printed. */
917317f4 4729 return PRINT_UNKNOWN;
c906108c
SS
4730}
4731
bf469271 4732/* Evaluate the boolean expression EXP and return the result. */
c906108c 4733
bf469271
PA
4734static bool
4735breakpoint_cond_eval (expression *exp)
c906108c 4736{
278cd55f 4737 struct value *mark = value_mark ();
bf469271 4738 bool res = value_true (evaluate_expression (exp));
cc59ec59 4739
c906108c 4740 value_free_to_mark (mark);
bf469271 4741 return res;
c906108c
SS
4742}
4743
5760d0ab 4744/* Allocate a new bpstat. Link it to the FIFO list by BS_LINK_POINTER. */
c906108c 4745
04afa70c
TT
4746bpstats::bpstats (struct bp_location *bl, bpstat **bs_link_pointer)
4747 : next (NULL),
4748 bp_location_at (bl),
4749 breakpoint_at (bl->owner),
4750 commands (NULL),
4751 old_val (NULL),
4752 print (0),
4753 stop (0),
4754 print_it (print_it_normal)
c906108c 4755{
f431efe5 4756 incref_bp_location (bl);
04afa70c
TT
4757 **bs_link_pointer = this;
4758 *bs_link_pointer = &next;
4759}
4760
4761bpstats::bpstats ()
4762 : next (NULL),
4763 bp_location_at (NULL),
4764 breakpoint_at (NULL),
4765 commands (NULL),
4766 old_val (NULL),
4767 print (0),
4768 stop (0),
4769 print_it (print_it_normal)
4770{
c906108c
SS
4771}
4772\f
d983da9c
DJ
4773/* The target has stopped with waitstatus WS. Check if any hardware
4774 watchpoints have triggered, according to the target. */
4775
4776int
4777watchpoints_triggered (struct target_waitstatus *ws)
4778{
d92524f1 4779 int stopped_by_watchpoint = target_stopped_by_watchpoint ();
d983da9c
DJ
4780 CORE_ADDR addr;
4781 struct breakpoint *b;
4782
4783 if (!stopped_by_watchpoint)
4784 {
4785 /* We were not stopped by a watchpoint. Mark all watchpoints
4786 as not triggered. */
4787 ALL_BREAKPOINTS (b)
cc60f2e3 4788 if (is_hardware_watchpoint (b))
3a5c3e22
PA
4789 {
4790 struct watchpoint *w = (struct watchpoint *) b;
4791
4792 w->watchpoint_triggered = watch_triggered_no;
4793 }
d983da9c
DJ
4794
4795 return 0;
4796 }
4797
4798 if (!target_stopped_data_address (&current_target, &addr))
4799 {
4800 /* We were stopped by a watchpoint, but we don't know where.
4801 Mark all watchpoints as unknown. */
4802 ALL_BREAKPOINTS (b)
cc60f2e3 4803 if (is_hardware_watchpoint (b))
3a5c3e22
PA
4804 {
4805 struct watchpoint *w = (struct watchpoint *) b;
4806
4807 w->watchpoint_triggered = watch_triggered_unknown;
4808 }
d983da9c 4809
3c4797ba 4810 return 1;
d983da9c
DJ
4811 }
4812
4813 /* The target could report the data address. Mark watchpoints
4814 affected by this data address as triggered, and all others as not
4815 triggered. */
4816
4817 ALL_BREAKPOINTS (b)
cc60f2e3 4818 if (is_hardware_watchpoint (b))
d983da9c 4819 {
3a5c3e22 4820 struct watchpoint *w = (struct watchpoint *) b;
a5606eee 4821 struct bp_location *loc;
d983da9c 4822
3a5c3e22 4823 w->watchpoint_triggered = watch_triggered_no;
a5606eee 4824 for (loc = b->loc; loc; loc = loc->next)
9c06b0b4 4825 {
3a5c3e22 4826 if (is_masked_watchpoint (b))
9c06b0b4 4827 {
3a5c3e22
PA
4828 CORE_ADDR newaddr = addr & w->hw_wp_mask;
4829 CORE_ADDR start = loc->address & w->hw_wp_mask;
9c06b0b4
TJB
4830
4831 if (newaddr == start)
4832 {
3a5c3e22 4833 w->watchpoint_triggered = watch_triggered_yes;
9c06b0b4
TJB
4834 break;
4835 }
4836 }
4837 /* Exact match not required. Within range is sufficient. */
4838 else if (target_watchpoint_addr_within_range (&current_target,
4839 addr, loc->address,
4840 loc->length))
4841 {
3a5c3e22 4842 w->watchpoint_triggered = watch_triggered_yes;
9c06b0b4
TJB
4843 break;
4844 }
4845 }
d983da9c
DJ
4846 }
4847
4848 return 1;
4849}
4850
bf469271
PA
4851/* Possible return values for watchpoint_check. */
4852enum wp_check_result
4853 {
4854 /* The watchpoint has been deleted. */
4855 WP_DELETED = 1,
4856
4857 /* The value has changed. */
4858 WP_VALUE_CHANGED = 2,
4859
4860 /* The value has not changed. */
4861 WP_VALUE_NOT_CHANGED = 3,
4862
4863 /* Ignore this watchpoint, no matter if the value changed or not. */
4864 WP_IGNORE = 4,
4865 };
c906108c
SS
4866
4867#define BP_TEMPFLAG 1
4868#define BP_HARDWAREFLAG 2
4869
4a64f543 4870/* Evaluate watchpoint condition expression and check if its value
bf469271 4871 changed. */
553e4c11 4872
bf469271
PA
4873static wp_check_result
4874watchpoint_check (bpstat bs)
c906108c 4875{
3a5c3e22 4876 struct watchpoint *b;
c906108c
SS
4877 struct frame_info *fr;
4878 int within_current_scope;
4879
f431efe5 4880 /* BS is built from an existing struct breakpoint. */
2bdf28a0 4881 gdb_assert (bs->breakpoint_at != NULL);
3a5c3e22 4882 b = (struct watchpoint *) bs->breakpoint_at;
d0fb5eae 4883
f6bc2008
PA
4884 /* If this is a local watchpoint, we only want to check if the
4885 watchpoint frame is in scope if the current thread is the thread
4886 that was used to create the watchpoint. */
4887 if (!watchpoint_in_thread_scope (b))
60e1c644 4888 return WP_IGNORE;
f6bc2008 4889
c906108c
SS
4890 if (b->exp_valid_block == NULL)
4891 within_current_scope = 1;
4892 else
4893 {
edb3359d
DJ
4894 struct frame_info *frame = get_current_frame ();
4895 struct gdbarch *frame_arch = get_frame_arch (frame);
4896 CORE_ADDR frame_pc = get_frame_pc (frame);
4897
c9cf6e20 4898 /* stack_frame_destroyed_p() returns a non-zero value if we're
4a64f543
MS
4899 still in the function but the stack frame has already been
4900 invalidated. Since we can't rely on the values of local
4901 variables after the stack has been destroyed, we are treating
4902 the watchpoint in that state as `not changed' without further
4903 checking. Don't mark watchpoints as changed if the current
4904 frame is in an epilogue - even if they are in some other
4905 frame, our view of the stack is likely to be wrong and
4906 frame_find_by_id could error out. */
c9cf6e20 4907 if (gdbarch_stack_frame_destroyed_p (frame_arch, frame_pc))
60e1c644 4908 return WP_IGNORE;
a0f49112 4909
101dcfbe 4910 fr = frame_find_by_id (b->watchpoint_frame);
c906108c 4911 within_current_scope = (fr != NULL);
69fbadd5
DJ
4912
4913 /* If we've gotten confused in the unwinder, we might have
4914 returned a frame that can't describe this variable. */
edb3359d
DJ
4915 if (within_current_scope)
4916 {
4917 struct symbol *function;
4918
4919 function = get_frame_function (fr);
4920 if (function == NULL
4921 || !contained_in (b->exp_valid_block,
4922 SYMBOL_BLOCK_VALUE (function)))
4923 within_current_scope = 0;
4924 }
69fbadd5 4925
edb3359d 4926 if (within_current_scope)
c906108c
SS
4927 /* If we end up stopping, the current frame will get selected
4928 in normal_stop. So this call to select_frame won't affect
4929 the user. */
0f7d239c 4930 select_frame (fr);
c906108c 4931 }
c5aa993b 4932
c906108c
SS
4933 if (within_current_scope)
4934 {
4a64f543
MS
4935 /* We use value_{,free_to_}mark because it could be a *long*
4936 time before we return to the command level and call
4937 free_all_values. We can't call free_all_values because we
4938 might be in the middle of evaluating a function call. */
c906108c 4939
0cf6dd15 4940 int pc = 0;
9c06b0b4 4941 struct value *mark;
fa4727a6
DJ
4942 struct value *new_val;
4943
c1fc2657 4944 if (is_masked_watchpoint (b))
9c06b0b4
TJB
4945 /* Since we don't know the exact trigger address (from
4946 stopped_data_address), just tell the user we've triggered
4947 a mask watchpoint. */
4948 return WP_VALUE_CHANGED;
4949
4950 mark = value_mark ();
4d01a485 4951 fetch_subexp_value (b->exp.get (), &pc, &new_val, NULL, NULL, 0);
218d2fc6 4952
bb9d5f81
PP
4953 if (b->val_bitsize != 0)
4954 new_val = extract_bitfield_from_watchpoint_value (b, new_val);
4955
4a64f543
MS
4956 /* We use value_equal_contents instead of value_equal because
4957 the latter coerces an array to a pointer, thus comparing just
4958 the address of the array instead of its contents. This is
4959 not what we want. */
fa4727a6 4960 if ((b->val != NULL) != (new_val != NULL)
218d2fc6 4961 || (b->val != NULL && !value_equal_contents (b->val, new_val)))
c906108c 4962 {
fa4727a6
DJ
4963 if (new_val != NULL)
4964 {
4965 release_value (new_val);
4966 value_free_to_mark (mark);
4967 }
c906108c
SS
4968 bs->old_val = b->val;
4969 b->val = new_val;
fa4727a6 4970 b->val_valid = 1;
c906108c
SS
4971 return WP_VALUE_CHANGED;
4972 }
4973 else
4974 {
60e1c644 4975 /* Nothing changed. */
c906108c 4976 value_free_to_mark (mark);
c906108c
SS
4977 return WP_VALUE_NOT_CHANGED;
4978 }
4979 }
4980 else
4981 {
4982 /* This seems like the only logical thing to do because
c5aa993b
JM
4983 if we temporarily ignored the watchpoint, then when
4984 we reenter the block in which it is valid it contains
4985 garbage (in the case of a function, it may have two
4986 garbage values, one before and one after the prologue).
4987 So we can't even detect the first assignment to it and
4988 watch after that (since the garbage may or may not equal
4989 the first value assigned). */
348d480f
PA
4990 /* We print all the stop information in
4991 breakpoint_ops->print_it, but in this case, by the time we
4992 call breakpoint_ops->print_it this bp will be deleted
4993 already. So we have no choice but print the information
4994 here. */
468afe6c 4995
0e454242 4996 SWITCH_THRU_ALL_UIS ()
468afe6c
PA
4997 {
4998 struct ui_out *uiout = current_uiout;
4999
112e8700
SM
5000 if (uiout->is_mi_like_p ())
5001 uiout->field_string
5002 ("reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_SCOPE));
5003 uiout->text ("\nWatchpoint ");
c1fc2657 5004 uiout->field_int ("wpnum", b->number);
112e8700 5005 uiout->text (" deleted because the program has left the block in\n"
468afe6c
PA
5006 "which its expression is valid.\n");
5007 }
4ce44c66 5008
cdac0397 5009 /* Make sure the watchpoint's commands aren't executed. */
d1b0a7bf 5010 b->commands = NULL;
d0fb5eae 5011 watchpoint_del_at_next_stop (b);
c906108c
SS
5012
5013 return WP_DELETED;
5014 }
5015}
5016
18a18393 5017/* Return true if it looks like target has stopped due to hitting
348d480f
PA
5018 breakpoint location BL. This function does not check if we should
5019 stop, only if BL explains the stop. */
5020
18a18393 5021static int
6c95b8df 5022bpstat_check_location (const struct bp_location *bl,
accd0bcd 5023 const address_space *aspace, CORE_ADDR bp_addr,
09ac7c10 5024 const struct target_waitstatus *ws)
18a18393
VP
5025{
5026 struct breakpoint *b = bl->owner;
5027
348d480f 5028 /* BL is from an existing breakpoint. */
2bdf28a0
JK
5029 gdb_assert (b != NULL);
5030
bd522513 5031 return b->ops->breakpoint_hit (bl, aspace, bp_addr, ws);
18a18393
VP
5032}
5033
3a5c3e22
PA
5034/* Determine if the watched values have actually changed, and we
5035 should stop. If not, set BS->stop to 0. */
5036
18a18393
VP
5037static void
5038bpstat_check_watchpoint (bpstat bs)
5039{
2bdf28a0 5040 const struct bp_location *bl;
3a5c3e22 5041 struct watchpoint *b;
2bdf28a0
JK
5042
5043 /* BS is built for existing struct breakpoint. */
f431efe5 5044 bl = bs->bp_location_at;
2bdf28a0 5045 gdb_assert (bl != NULL);
3a5c3e22 5046 b = (struct watchpoint *) bs->breakpoint_at;
2bdf28a0 5047 gdb_assert (b != NULL);
18a18393 5048
18a18393 5049 {
18a18393
VP
5050 int must_check_value = 0;
5051
c1fc2657 5052 if (b->type == bp_watchpoint)
18a18393
VP
5053 /* For a software watchpoint, we must always check the
5054 watched value. */
5055 must_check_value = 1;
5056 else if (b->watchpoint_triggered == watch_triggered_yes)
5057 /* We have a hardware watchpoint (read, write, or access)
5058 and the target earlier reported an address watched by
5059 this watchpoint. */
5060 must_check_value = 1;
5061 else if (b->watchpoint_triggered == watch_triggered_unknown
c1fc2657 5062 && b->type == bp_hardware_watchpoint)
18a18393
VP
5063 /* We were stopped by a hardware watchpoint, but the target could
5064 not report the data address. We must check the watchpoint's
5065 value. Access and read watchpoints are out of luck; without
5066 a data address, we can't figure it out. */
5067 must_check_value = 1;
3a5c3e22 5068
18a18393
VP
5069 if (must_check_value)
5070 {
bf469271
PA
5071 wp_check_result e;
5072
5073 TRY
5074 {
5075 e = watchpoint_check (bs);
5076 }
5077 CATCH (ex, RETURN_MASK_ALL)
5078 {
5079 exception_fprintf (gdb_stderr, ex,
5080 "Error evaluating expression "
5081 "for watchpoint %d\n",
5082 b->number);
5083
5084 SWITCH_THRU_ALL_UIS ()
5085 {
5086 printf_filtered (_("Watchpoint %d deleted.\n"),
5087 b->number);
5088 }
5089 watchpoint_del_at_next_stop (b);
5090 e = WP_DELETED;
5091 }
5092 END_CATCH
5093
18a18393
VP
5094 switch (e)
5095 {
5096 case WP_DELETED:
5097 /* We've already printed what needs to be printed. */
5098 bs->print_it = print_it_done;
5099 /* Stop. */
5100 break;
60e1c644
PA
5101 case WP_IGNORE:
5102 bs->print_it = print_it_noop;
5103 bs->stop = 0;
5104 break;
18a18393 5105 case WP_VALUE_CHANGED:
c1fc2657 5106 if (b->type == bp_read_watchpoint)
18a18393 5107 {
85d721b8
PA
5108 /* There are two cases to consider here:
5109
4a64f543 5110 1. We're watching the triggered memory for reads.
85d721b8
PA
5111 In that case, trust the target, and always report
5112 the watchpoint hit to the user. Even though
5113 reads don't cause value changes, the value may
5114 have changed since the last time it was read, and
5115 since we're not trapping writes, we will not see
5116 those, and as such we should ignore our notion of
5117 old value.
5118
4a64f543 5119 2. We're watching the triggered memory for both
85d721b8
PA
5120 reads and writes. There are two ways this may
5121 happen:
5122
4a64f543 5123 2.1. This is a target that can't break on data
85d721b8
PA
5124 reads only, but can break on accesses (reads or
5125 writes), such as e.g., x86. We detect this case
5126 at the time we try to insert read watchpoints.
5127
4a64f543 5128 2.2. Otherwise, the target supports read
85d721b8
PA
5129 watchpoints, but, the user set an access or write
5130 watchpoint watching the same memory as this read
5131 watchpoint.
5132
5133 If we're watching memory writes as well as reads,
5134 ignore watchpoint hits when we find that the
5135 value hasn't changed, as reads don't cause
5136 changes. This still gives false positives when
5137 the program writes the same value to memory as
5138 what there was already in memory (we will confuse
5139 it for a read), but it's much better than
5140 nothing. */
5141
5142 int other_write_watchpoint = 0;
5143
5144 if (bl->watchpoint_type == hw_read)
5145 {
5146 struct breakpoint *other_b;
5147
5148 ALL_BREAKPOINTS (other_b)
3a5c3e22
PA
5149 if (other_b->type == bp_hardware_watchpoint
5150 || other_b->type == bp_access_watchpoint)
85d721b8 5151 {
3a5c3e22
PA
5152 struct watchpoint *other_w =
5153 (struct watchpoint *) other_b;
5154
5155 if (other_w->watchpoint_triggered
5156 == watch_triggered_yes)
5157 {
5158 other_write_watchpoint = 1;
5159 break;
5160 }
85d721b8
PA
5161 }
5162 }
5163
5164 if (other_write_watchpoint
5165 || bl->watchpoint_type == hw_access)
5166 {
5167 /* We're watching the same memory for writes,
5168 and the value changed since the last time we
5169 updated it, so this trap must be for a write.
5170 Ignore it. */
5171 bs->print_it = print_it_noop;
5172 bs->stop = 0;
5173 }
18a18393
VP
5174 }
5175 break;
5176 case WP_VALUE_NOT_CHANGED:
c1fc2657
SM
5177 if (b->type == bp_hardware_watchpoint
5178 || b->type == bp_watchpoint)
18a18393
VP
5179 {
5180 /* Don't stop: write watchpoints shouldn't fire if
5181 the value hasn't changed. */
5182 bs->print_it = print_it_noop;
5183 bs->stop = 0;
5184 }
5185 /* Stop. */
5186 break;
5187 default:
5188 /* Can't happen. */
18a18393
VP
5189 break;
5190 }
5191 }
5192 else /* must_check_value == 0 */
5193 {
5194 /* This is a case where some watchpoint(s) triggered, but
5195 not at the address of this watchpoint, or else no
5196 watchpoint triggered after all. So don't print
5197 anything for this watchpoint. */
5198 bs->print_it = print_it_noop;
5199 bs->stop = 0;
5200 }
5201 }
5202}
5203
7d4df6a4
DE
5204/* For breakpoints that are currently marked as telling gdb to stop,
5205 check conditions (condition proper, frame, thread and ignore count)
18a18393
VP
5206 of breakpoint referred to by BS. If we should not stop for this
5207 breakpoint, set BS->stop to 0. */
f431efe5 5208
18a18393
VP
5209static void
5210bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
5211{
2bdf28a0
JK
5212 const struct bp_location *bl;
5213 struct breakpoint *b;
bf469271
PA
5214 /* Assume stop. */
5215 bool condition_result = true;
7d4df6a4
DE
5216 struct expression *cond;
5217
5218 gdb_assert (bs->stop);
2bdf28a0
JK
5219
5220 /* BS is built for existing struct breakpoint. */
f431efe5 5221 bl = bs->bp_location_at;
2bdf28a0 5222 gdb_assert (bl != NULL);
f431efe5 5223 b = bs->breakpoint_at;
2bdf28a0 5224 gdb_assert (b != NULL);
18a18393 5225
b775012e
LM
5226 /* Even if the target evaluated the condition on its end and notified GDB, we
5227 need to do so again since GDB does not know if we stopped due to a
5228 breakpoint or a single step breakpoint. */
5229
18a18393 5230 if (frame_id_p (b->frame_id)
edb3359d 5231 && !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ())))
18a18393 5232 {
7d4df6a4
DE
5233 bs->stop = 0;
5234 return;
5235 }
60e1c644 5236
12ab52e9
PA
5237 /* If this is a thread/task-specific breakpoint, don't waste cpu
5238 evaluating the condition if this isn't the specified
5239 thread/task. */
5d5658a1 5240 if ((b->thread != -1 && b->thread != ptid_to_global_thread_id (ptid))
12ab52e9
PA
5241 || (b->task != 0 && b->task != ada_get_task_number (ptid)))
5242
6c1b0f7b
DE
5243 {
5244 bs->stop = 0;
5245 return;
5246 }
5247
6dddc817
DE
5248 /* Evaluate extension language breakpoints that have a "stop" method
5249 implemented. */
5250 bs->stop = breakpoint_ext_lang_cond_says_stop (b);
7371cf6d 5251
7d4df6a4
DE
5252 if (is_watchpoint (b))
5253 {
5254 struct watchpoint *w = (struct watchpoint *) b;
3a5c3e22 5255
4d01a485 5256 cond = w->cond_exp.get ();
7d4df6a4
DE
5257 }
5258 else
4d01a485 5259 cond = bl->cond.get ();
60e1c644 5260
7d4df6a4
DE
5261 if (cond && b->disposition != disp_del_at_next_stop)
5262 {
5263 int within_current_scope = 1;
5264 struct watchpoint * w;
60e1c644 5265
7d4df6a4
DE
5266 /* We use value_mark and value_free_to_mark because it could
5267 be a long time before we return to the command level and
5268 call free_all_values. We can't call free_all_values
5269 because we might be in the middle of evaluating a
5270 function call. */
5271 struct value *mark = value_mark ();
5272
5273 if (is_watchpoint (b))
5274 w = (struct watchpoint *) b;
5275 else
5276 w = NULL;
5277
5278 /* Need to select the frame, with all that implies so that
5279 the conditions will have the right context. Because we
5280 use the frame, we will not see an inlined function's
5281 variables when we arrive at a breakpoint at the start
5282 of the inlined function; the current frame will be the
5283 call site. */
5284 if (w == NULL || w->cond_exp_valid_block == NULL)
5285 select_frame (get_current_frame ());
5286 else
18a18393 5287 {
7d4df6a4
DE
5288 struct frame_info *frame;
5289
5290 /* For local watchpoint expressions, which particular
5291 instance of a local is being watched matters, so we
5292 keep track of the frame to evaluate the expression
5293 in. To evaluate the condition however, it doesn't
5294 really matter which instantiation of the function
5295 where the condition makes sense triggers the
5296 watchpoint. This allows an expression like "watch
5297 global if q > 10" set in `func', catch writes to
5298 global on all threads that call `func', or catch
5299 writes on all recursive calls of `func' by a single
5300 thread. We simply always evaluate the condition in
5301 the innermost frame that's executing where it makes
5302 sense to evaluate the condition. It seems
5303 intuitive. */
5304 frame = block_innermost_frame (w->cond_exp_valid_block);
5305 if (frame != NULL)
5306 select_frame (frame);
5307 else
5308 within_current_scope = 0;
18a18393 5309 }
7d4df6a4 5310 if (within_current_scope)
bf469271
PA
5311 {
5312 TRY
5313 {
5314 condition_result = breakpoint_cond_eval (cond);
5315 }
5316 CATCH (ex, RETURN_MASK_ALL)
5317 {
5318 exception_fprintf (gdb_stderr, ex,
5319 "Error in testing breakpoint condition:\n");
5320 }
5321 END_CATCH
5322 }
7d4df6a4 5323 else
18a18393 5324 {
7d4df6a4
DE
5325 warning (_("Watchpoint condition cannot be tested "
5326 "in the current scope"));
5327 /* If we failed to set the right context for this
5328 watchpoint, unconditionally report it. */
18a18393 5329 }
7d4df6a4
DE
5330 /* FIXME-someday, should give breakpoint #. */
5331 value_free_to_mark (mark);
18a18393 5332 }
7d4df6a4 5333
bf469271 5334 if (cond && !condition_result)
7d4df6a4
DE
5335 {
5336 bs->stop = 0;
5337 }
7d4df6a4
DE
5338 else if (b->ignore_count > 0)
5339 {
5340 b->ignore_count--;
5341 bs->stop = 0;
5342 /* Increase the hit count even though we don't stop. */
5343 ++(b->hit_count);
5344 observer_notify_breakpoint_modified (b);
5345 }
18a18393
VP
5346}
5347
1cf4d951
PA
5348/* Returns true if we need to track moribund locations of LOC's type
5349 on the current target. */
5350
5351static int
5352need_moribund_for_location_type (struct bp_location *loc)
5353{
5354 return ((loc->loc_type == bp_loc_software_breakpoint
5355 && !target_supports_stopped_by_sw_breakpoint ())
5356 || (loc->loc_type == bp_loc_hardware_breakpoint
5357 && !target_supports_stopped_by_hw_breakpoint ()));
5358}
5359
18a18393 5360
9709f61c 5361/* Get a bpstat associated with having just stopped at address
d983da9c 5362 BP_ADDR in thread PTID.
c906108c 5363
d983da9c 5364 Determine whether we stopped at a breakpoint, etc, or whether we
4a64f543
MS
5365 don't understand this stop. Result is a chain of bpstat's such
5366 that:
c906108c 5367
c5aa993b 5368 if we don't understand the stop, the result is a null pointer.
c906108c 5369
c5aa993b 5370 if we understand why we stopped, the result is not null.
c906108c 5371
c5aa993b
JM
5372 Each element of the chain refers to a particular breakpoint or
5373 watchpoint at which we have stopped. (We may have stopped for
5374 several reasons concurrently.)
c906108c 5375
c5aa993b
JM
5376 Each element of the chain has valid next, breakpoint_at,
5377 commands, FIXME??? fields. */
c906108c
SS
5378
5379bpstat
accd0bcd 5380bpstat_stop_status (const address_space *aspace,
09ac7c10
TT
5381 CORE_ADDR bp_addr, ptid_t ptid,
5382 const struct target_waitstatus *ws)
c906108c 5383{
0d381245 5384 struct breakpoint *b = NULL;
afe38095 5385 struct bp_location *bl;
20874c92 5386 struct bp_location *loc;
5760d0ab
JK
5387 /* First item of allocated bpstat's. */
5388 bpstat bs_head = NULL, *bs_link = &bs_head;
c906108c 5389 /* Pointer to the last thing in the chain currently. */
5760d0ab 5390 bpstat bs;
20874c92 5391 int ix;
429374b8 5392 int need_remove_insert;
f431efe5 5393 int removed_any;
c906108c 5394
f431efe5
PA
5395 /* First, build the bpstat chain with locations that explain a
5396 target stop, while being careful to not set the target running,
5397 as that may invalidate locations (in particular watchpoint
5398 locations are recreated). Resuming will happen here with
5399 breakpoint conditions or watchpoint expressions that include
5400 inferior function calls. */
c5aa993b 5401
429374b8
JK
5402 ALL_BREAKPOINTS (b)
5403 {
1a853c52 5404 if (!breakpoint_enabled (b))
429374b8 5405 continue;
a5606eee 5406
429374b8
JK
5407 for (bl = b->loc; bl != NULL; bl = bl->next)
5408 {
4a64f543
MS
5409 /* For hardware watchpoints, we look only at the first
5410 location. The watchpoint_check function will work on the
5411 entire expression, not the individual locations. For
5412 read watchpoints, the watchpoints_triggered function has
5413 checked all locations already. */
429374b8
JK
5414 if (b->type == bp_hardware_watchpoint && bl != b->loc)
5415 break;
18a18393 5416
f6592439 5417 if (!bl->enabled || bl->shlib_disabled)
429374b8 5418 continue;
c5aa993b 5419
09ac7c10 5420 if (!bpstat_check_location (bl, aspace, bp_addr, ws))
429374b8 5421 continue;
c5aa993b 5422
4a64f543
MS
5423 /* Come here if it's a watchpoint, or if the break address
5424 matches. */
c5aa993b 5425
04afa70c 5426 bs = new bpstats (bl, &bs_link); /* Alloc a bpstat to
4a64f543 5427 explain stop. */
c5aa993b 5428
f431efe5
PA
5429 /* Assume we stop. Should we find a watchpoint that is not
5430 actually triggered, or if the condition of the breakpoint
5431 evaluates as false, we'll reset 'stop' to 0. */
429374b8
JK
5432 bs->stop = 1;
5433 bs->print = 1;
d983da9c 5434
f431efe5
PA
5435 /* If this is a scope breakpoint, mark the associated
5436 watchpoint as triggered so that we will handle the
5437 out-of-scope event. We'll get to the watchpoint next
5438 iteration. */
d0fb5eae 5439 if (b->type == bp_watchpoint_scope && b->related_breakpoint != b)
3a5c3e22
PA
5440 {
5441 struct watchpoint *w = (struct watchpoint *) b->related_breakpoint;
5442
5443 w->watchpoint_triggered = watch_triggered_yes;
5444 }
f431efe5
PA
5445 }
5446 }
5447
7c16b83e 5448 /* Check if a moribund breakpoint explains the stop. */
1cf4d951
PA
5449 if (!target_supports_stopped_by_sw_breakpoint ()
5450 || !target_supports_stopped_by_hw_breakpoint ())
f431efe5 5451 {
1cf4d951 5452 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
f431efe5 5453 {
1cf4d951
PA
5454 if (breakpoint_location_address_match (loc, aspace, bp_addr)
5455 && need_moribund_for_location_type (loc))
5456 {
04afa70c 5457 bs = new bpstats (loc, &bs_link);
1cf4d951
PA
5458 /* For hits of moribund locations, we should just proceed. */
5459 bs->stop = 0;
5460 bs->print = 0;
5461 bs->print_it = print_it_noop;
5462 }
f431efe5
PA
5463 }
5464 }
5465
edcc5120
TT
5466 /* A bit of special processing for shlib breakpoints. We need to
5467 process solib loading here, so that the lists of loaded and
5468 unloaded libraries are correct before we handle "catch load" and
5469 "catch unload". */
5470 for (bs = bs_head; bs != NULL; bs = bs->next)
5471 {
5d268276 5472 if (bs->breakpoint_at && bs->breakpoint_at->type == bp_shlib_event)
edcc5120
TT
5473 {
5474 handle_solib_event ();
5475 break;
5476 }
5477 }
5478
f431efe5
PA
5479 /* Now go through the locations that caused the target to stop, and
5480 check whether we're interested in reporting this stop to higher
5481 layers, or whether we should resume the target transparently. */
5482
5483 removed_any = 0;
5484
5760d0ab 5485 for (bs = bs_head; bs != NULL; bs = bs->next)
f431efe5
PA
5486 {
5487 if (!bs->stop)
5488 continue;
5489
f431efe5 5490 b = bs->breakpoint_at;
348d480f
PA
5491 b->ops->check_status (bs);
5492 if (bs->stop)
28010a5d 5493 {
348d480f 5494 bpstat_check_breakpoint_conditions (bs, ptid);
f431efe5 5495
429374b8
JK
5496 if (bs->stop)
5497 {
5498 ++(b->hit_count);
8d3788bd 5499 observer_notify_breakpoint_modified (b);
c906108c 5500
4a64f543 5501 /* We will stop here. */
429374b8
JK
5502 if (b->disposition == disp_disable)
5503 {
816338b5 5504 --(b->enable_count);
1a853c52 5505 if (b->enable_count <= 0)
429374b8 5506 b->enable_state = bp_disabled;
f431efe5 5507 removed_any = 1;
429374b8
JK
5508 }
5509 if (b->silent)
5510 bs->print = 0;
5511 bs->commands = b->commands;
abf85f46 5512 if (command_line_is_silent (bs->commands
d1b0a7bf 5513 ? bs->commands.get () : NULL))
abf85f46 5514 bs->print = 0;
9d6e6e84
HZ
5515
5516 b->ops->after_condition_true (bs);
429374b8
JK
5517 }
5518
348d480f 5519 }
a9b3a50f
PA
5520
5521 /* Print nothing for this entry if we don't stop or don't
5522 print. */
5523 if (!bs->stop || !bs->print)
5524 bs->print_it = print_it_noop;
429374b8 5525 }
876fa593 5526
d983da9c
DJ
5527 /* If we aren't stopping, the value of some hardware watchpoint may
5528 not have changed, but the intermediate memory locations we are
5529 watching may have. Don't bother if we're stopping; this will get
5530 done later. */
d832cb68 5531 need_remove_insert = 0;
5760d0ab
JK
5532 if (! bpstat_causes_stop (bs_head))
5533 for (bs = bs_head; bs != NULL; bs = bs->next)
d983da9c 5534 if (!bs->stop
f431efe5
PA
5535 && bs->breakpoint_at
5536 && is_hardware_watchpoint (bs->breakpoint_at))
d983da9c 5537 {
3a5c3e22
PA
5538 struct watchpoint *w = (struct watchpoint *) bs->breakpoint_at;
5539
5540 update_watchpoint (w, 0 /* don't reparse. */);
d832cb68 5541 need_remove_insert = 1;
d983da9c
DJ
5542 }
5543
d832cb68 5544 if (need_remove_insert)
44702360 5545 update_global_location_list (UGLL_MAY_INSERT);
f431efe5 5546 else if (removed_any)
44702360 5547 update_global_location_list (UGLL_DONT_INSERT);
d832cb68 5548
5760d0ab 5549 return bs_head;
c906108c 5550}
628fe4e4
JK
5551
5552static void
5553handle_jit_event (void)
5554{
5555 struct frame_info *frame;
5556 struct gdbarch *gdbarch;
5557
243a9253
PA
5558 if (debug_infrun)
5559 fprintf_unfiltered (gdb_stdlog, "handling bp_jit_event\n");
5560
628fe4e4
JK
5561 /* Switch terminal for any messages produced by
5562 breakpoint_re_set. */
223ffa71 5563 target_terminal::ours_for_output ();
628fe4e4
JK
5564
5565 frame = get_current_frame ();
5566 gdbarch = get_frame_arch (frame);
5567
5568 jit_event_handler (gdbarch);
5569
223ffa71 5570 target_terminal::inferior ();
628fe4e4
JK
5571}
5572
5573/* Prepare WHAT final decision for infrun. */
5574
5575/* Decide what infrun needs to do with this bpstat. */
5576
c906108c 5577struct bpstat_what
0e30163f 5578bpstat_what (bpstat bs_head)
c906108c 5579{
c906108c 5580 struct bpstat_what retval;
0e30163f 5581 bpstat bs;
c906108c 5582
628fe4e4 5583 retval.main_action = BPSTAT_WHAT_KEEP_CHECKING;
aa7d318d 5584 retval.call_dummy = STOP_NONE;
186c406b 5585 retval.is_longjmp = 0;
628fe4e4 5586
0e30163f 5587 for (bs = bs_head; bs != NULL; bs = bs->next)
c906108c 5588 {
628fe4e4
JK
5589 /* Extract this BS's action. After processing each BS, we check
5590 if its action overrides all we've seem so far. */
5591 enum bpstat_what_main_action this_action = BPSTAT_WHAT_KEEP_CHECKING;
5592 enum bptype bptype;
5593
c906108c 5594 if (bs->breakpoint_at == NULL)
628fe4e4
JK
5595 {
5596 /* I suspect this can happen if it was a momentary
5597 breakpoint which has since been deleted. */
5598 bptype = bp_none;
5599 }
20874c92 5600 else
f431efe5 5601 bptype = bs->breakpoint_at->type;
628fe4e4
JK
5602
5603 switch (bptype)
c906108c
SS
5604 {
5605 case bp_none:
628fe4e4 5606 break;
c906108c
SS
5607 case bp_breakpoint:
5608 case bp_hardware_breakpoint:
7c16b83e 5609 case bp_single_step:
c906108c
SS
5610 case bp_until:
5611 case bp_finish:
a9b3a50f 5612 case bp_shlib_event:
c906108c
SS
5613 if (bs->stop)
5614 {
5615 if (bs->print)
628fe4e4 5616 this_action = BPSTAT_WHAT_STOP_NOISY;
c906108c 5617 else
628fe4e4 5618 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c
SS
5619 }
5620 else
628fe4e4 5621 this_action = BPSTAT_WHAT_SINGLE;
c906108c
SS
5622 break;
5623 case bp_watchpoint:
5624 case bp_hardware_watchpoint:
5625 case bp_read_watchpoint:
5626 case bp_access_watchpoint:
5627 if (bs->stop)
5628 {
5629 if (bs->print)
628fe4e4 5630 this_action = BPSTAT_WHAT_STOP_NOISY;
c906108c 5631 else
628fe4e4 5632 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c
SS
5633 }
5634 else
628fe4e4
JK
5635 {
5636 /* There was a watchpoint, but we're not stopping.
5637 This requires no further action. */
5638 }
c906108c
SS
5639 break;
5640 case bp_longjmp:
e2e4d78b 5641 case bp_longjmp_call_dummy:
186c406b 5642 case bp_exception:
0a39bb32
PA
5643 if (bs->stop)
5644 {
5645 this_action = BPSTAT_WHAT_SET_LONGJMP_RESUME;
5646 retval.is_longjmp = bptype != bp_exception;
5647 }
5648 else
5649 this_action = BPSTAT_WHAT_SINGLE;
c906108c
SS
5650 break;
5651 case bp_longjmp_resume:
186c406b 5652 case bp_exception_resume:
0a39bb32
PA
5653 if (bs->stop)
5654 {
5655 this_action = BPSTAT_WHAT_CLEAR_LONGJMP_RESUME;
5656 retval.is_longjmp = bptype == bp_longjmp_resume;
5657 }
5658 else
5659 this_action = BPSTAT_WHAT_SINGLE;
c906108c
SS
5660 break;
5661 case bp_step_resume:
5662 if (bs->stop)
628fe4e4
JK
5663 this_action = BPSTAT_WHAT_STEP_RESUME;
5664 else
c906108c 5665 {
628fe4e4
JK
5666 /* It is for the wrong frame. */
5667 this_action = BPSTAT_WHAT_SINGLE;
c906108c 5668 }
c906108c 5669 break;
2c03e5be
PA
5670 case bp_hp_step_resume:
5671 if (bs->stop)
5672 this_action = BPSTAT_WHAT_HP_STEP_RESUME;
5673 else
5674 {
5675 /* It is for the wrong frame. */
5676 this_action = BPSTAT_WHAT_SINGLE;
5677 }
5678 break;
c906108c 5679 case bp_watchpoint_scope:
c4093a6a 5680 case bp_thread_event:
1900040c 5681 case bp_overlay_event:
0fd8e87f 5682 case bp_longjmp_master:
aa7d318d 5683 case bp_std_terminate_master:
186c406b 5684 case bp_exception_master:
628fe4e4 5685 this_action = BPSTAT_WHAT_SINGLE;
c4093a6a 5686 break;
ce78b96d 5687 case bp_catchpoint:
c5aa993b
JM
5688 if (bs->stop)
5689 {
5690 if (bs->print)
628fe4e4 5691 this_action = BPSTAT_WHAT_STOP_NOISY;
c5aa993b 5692 else
628fe4e4 5693 this_action = BPSTAT_WHAT_STOP_SILENT;
c5aa993b
JM
5694 }
5695 else
628fe4e4
JK
5696 {
5697 /* There was a catchpoint, but we're not stopping.
5698 This requires no further action. */
5699 }
5700 break;
628fe4e4 5701 case bp_jit_event:
628fe4e4 5702 this_action = BPSTAT_WHAT_SINGLE;
c5aa993b 5703 break;
c906108c 5704 case bp_call_dummy:
53a5351d
JM
5705 /* Make sure the action is stop (silent or noisy),
5706 so infrun.c pops the dummy frame. */
aa7d318d 5707 retval.call_dummy = STOP_STACK_DUMMY;
628fe4e4 5708 this_action = BPSTAT_WHAT_STOP_SILENT;
aa7d318d
TT
5709 break;
5710 case bp_std_terminate:
5711 /* Make sure the action is stop (silent or noisy),
5712 so infrun.c pops the dummy frame. */
aa7d318d 5713 retval.call_dummy = STOP_STD_TERMINATE;
628fe4e4 5714 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c 5715 break;
1042e4c0 5716 case bp_tracepoint:
7a697b8d 5717 case bp_fast_tracepoint:
0fb4aa4b 5718 case bp_static_tracepoint:
1042e4c0
SS
5719 /* Tracepoint hits should not be reported back to GDB, and
5720 if one got through somehow, it should have been filtered
5721 out already. */
5722 internal_error (__FILE__, __LINE__,
7a697b8d 5723 _("bpstat_what: tracepoint encountered"));
0e30163f
JK
5724 break;
5725 case bp_gnu_ifunc_resolver:
5726 /* Step over it (and insert bp_gnu_ifunc_resolver_return). */
5727 this_action = BPSTAT_WHAT_SINGLE;
5728 break;
5729 case bp_gnu_ifunc_resolver_return:
5730 /* The breakpoint will be removed, execution will restart from the
5731 PC of the former breakpoint. */
5732 this_action = BPSTAT_WHAT_KEEP_CHECKING;
5733 break;
e7e0cddf
SS
5734
5735 case bp_dprintf:
a11cfd87
HZ
5736 if (bs->stop)
5737 this_action = BPSTAT_WHAT_STOP_SILENT;
5738 else
5739 this_action = BPSTAT_WHAT_SINGLE;
e7e0cddf
SS
5740 break;
5741
628fe4e4
JK
5742 default:
5743 internal_error (__FILE__, __LINE__,
5744 _("bpstat_what: unhandled bptype %d"), (int) bptype);
c906108c 5745 }
628fe4e4 5746
325fac50 5747 retval.main_action = std::max (retval.main_action, this_action);
c906108c 5748 }
628fe4e4 5749
243a9253
PA
5750 return retval;
5751}
628fe4e4 5752
243a9253
PA
5753void
5754bpstat_run_callbacks (bpstat bs_head)
5755{
5756 bpstat bs;
628fe4e4 5757
0e30163f
JK
5758 for (bs = bs_head; bs != NULL; bs = bs->next)
5759 {
5760 struct breakpoint *b = bs->breakpoint_at;
5761
5762 if (b == NULL)
5763 continue;
5764 switch (b->type)
5765 {
243a9253
PA
5766 case bp_jit_event:
5767 handle_jit_event ();
5768 break;
0e30163f
JK
5769 case bp_gnu_ifunc_resolver:
5770 gnu_ifunc_resolver_stop (b);
5771 break;
5772 case bp_gnu_ifunc_resolver_return:
5773 gnu_ifunc_resolver_return_stop (b);
5774 break;
5775 }
5776 }
c906108c
SS
5777}
5778
5779/* Nonzero if we should step constantly (e.g. watchpoints on machines
5780 without hardware support). This isn't related to a specific bpstat,
5781 just to things like whether watchpoints are set. */
5782
c5aa993b 5783int
fba45db2 5784bpstat_should_step (void)
c906108c
SS
5785{
5786 struct breakpoint *b;
cc59ec59 5787
c906108c 5788 ALL_BREAKPOINTS (b)
717a8278 5789 if (breakpoint_enabled (b) && b->type == bp_watchpoint && b->loc != NULL)
3172dc30 5790 return 1;
c906108c
SS
5791 return 0;
5792}
5793
67822962
PA
5794int
5795bpstat_causes_stop (bpstat bs)
5796{
5797 for (; bs != NULL; bs = bs->next)
5798 if (bs->stop)
5799 return 1;
5800
5801 return 0;
5802}
5803
c906108c 5804\f
c5aa993b 5805
170b53b2
UW
5806/* Compute a string of spaces suitable to indent the next line
5807 so it starts at the position corresponding to the table column
5808 named COL_NAME in the currently active table of UIOUT. */
5809
5810static char *
5811wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
5812{
5813 static char wrap_indent[80];
5814 int i, total_width, width, align;
c5209615 5815 const char *text;
170b53b2
UW
5816
5817 total_width = 0;
112e8700 5818 for (i = 1; uiout->query_table_field (i, &width, &align, &text); i++)
170b53b2
UW
5819 {
5820 if (strcmp (text, col_name) == 0)
5821 {
5822 gdb_assert (total_width < sizeof wrap_indent);
5823 memset (wrap_indent, ' ', total_width);
5824 wrap_indent[total_width] = 0;
5825
5826 return wrap_indent;
5827 }
5828
5829 total_width += width + 1;
5830 }
5831
5832 return NULL;
5833}
5834
b775012e
LM
5835/* Determine if the locations of this breakpoint will have their conditions
5836 evaluated by the target, host or a mix of both. Returns the following:
5837
5838 "host": Host evals condition.
5839 "host or target": Host or Target evals condition.
5840 "target": Target evals condition.
5841*/
5842
5843static const char *
5844bp_condition_evaluator (struct breakpoint *b)
5845{
5846 struct bp_location *bl;
5847 char host_evals = 0;
5848 char target_evals = 0;
5849
5850 if (!b)
5851 return NULL;
5852
5853 if (!is_breakpoint (b))
5854 return NULL;
5855
5856 if (gdb_evaluates_breakpoint_condition_p ()
5857 || !target_supports_evaluation_of_breakpoint_conditions ())
5858 return condition_evaluation_host;
5859
5860 for (bl = b->loc; bl; bl = bl->next)
5861 {
5862 if (bl->cond_bytecode)
5863 target_evals++;
5864 else
5865 host_evals++;
5866 }
5867
5868 if (host_evals && target_evals)
5869 return condition_evaluation_both;
5870 else if (target_evals)
5871 return condition_evaluation_target;
5872 else
5873 return condition_evaluation_host;
5874}
5875
5876/* Determine the breakpoint location's condition evaluator. This is
5877 similar to bp_condition_evaluator, but for locations. */
5878
5879static const char *
5880bp_location_condition_evaluator (struct bp_location *bl)
5881{
5882 if (bl && !is_breakpoint (bl->owner))
5883 return NULL;
5884
5885 if (gdb_evaluates_breakpoint_condition_p ()
5886 || !target_supports_evaluation_of_breakpoint_conditions ())
5887 return condition_evaluation_host;
5888
5889 if (bl && bl->cond_bytecode)
5890 return condition_evaluation_target;
5891 else
5892 return condition_evaluation_host;
5893}
5894
859825b8
JK
5895/* Print the LOC location out of the list of B->LOC locations. */
5896
170b53b2
UW
5897static void
5898print_breakpoint_location (struct breakpoint *b,
5899 struct bp_location *loc)
0d381245 5900{
79a45e25 5901 struct ui_out *uiout = current_uiout;
5ed8105e
PA
5902
5903 scoped_restore_current_program_space restore_pspace;
6c95b8df 5904
859825b8
JK
5905 if (loc != NULL && loc->shlib_disabled)
5906 loc = NULL;
5907
6c95b8df
PA
5908 if (loc != NULL)
5909 set_current_program_space (loc->pspace);
5910
56435ebe 5911 if (b->display_canonical)
d28cd78a 5912 uiout->field_string ("what", event_location_to_string (b->location.get ()));
2f202fde 5913 else if (loc && loc->symtab)
0d381245 5914 {
4a27f119
KS
5915 const struct symbol *sym = loc->symbol;
5916
5917 if (sym == NULL)
5918 sym = find_pc_sect_function (loc->address, loc->section);
5919
0d381245
VP
5920 if (sym)
5921 {
112e8700
SM
5922 uiout->text ("in ");
5923 uiout->field_string ("func", SYMBOL_PRINT_NAME (sym));
5924 uiout->text (" ");
5925 uiout->wrap_hint (wrap_indent_at_field (uiout, "what"));
5926 uiout->text ("at ");
0d381245 5927 }
112e8700 5928 uiout->field_string ("file",
05cba821 5929 symtab_to_filename_for_display (loc->symtab));
112e8700 5930 uiout->text (":");
05cba821 5931
112e8700
SM
5932 if (uiout->is_mi_like_p ())
5933 uiout->field_string ("fullname", symtab_to_fullname (loc->symtab));
0d381245 5934
112e8700 5935 uiout->field_int ("line", loc->line_number);
0d381245 5936 }
859825b8 5937 else if (loc)
0d381245 5938 {
d7e74731 5939 string_file stb;
170b53b2 5940
d7e74731 5941 print_address_symbolic (loc->gdbarch, loc->address, &stb,
22e722e1 5942 demangle, "");
112e8700 5943 uiout->field_stream ("at", stb);
0d381245 5944 }
859825b8 5945 else
f00aae0f 5946 {
d28cd78a
TT
5947 uiout->field_string ("pending",
5948 event_location_to_string (b->location.get ()));
f00aae0f
KS
5949 /* If extra_string is available, it could be holding a condition
5950 or dprintf arguments. In either case, make sure it is printed,
5951 too, but only for non-MI streams. */
112e8700 5952 if (!uiout->is_mi_like_p () && b->extra_string != NULL)
f00aae0f
KS
5953 {
5954 if (b->type == bp_dprintf)
112e8700 5955 uiout->text (",");
f00aae0f 5956 else
112e8700
SM
5957 uiout->text (" ");
5958 uiout->text (b->extra_string);
f00aae0f
KS
5959 }
5960 }
6c95b8df 5961
b775012e
LM
5962 if (loc && is_breakpoint (b)
5963 && breakpoint_condition_evaluation_mode () == condition_evaluation_target
5964 && bp_condition_evaluator (b) == condition_evaluation_both)
5965 {
112e8700
SM
5966 uiout->text (" (");
5967 uiout->field_string ("evaluated-by",
b775012e 5968 bp_location_condition_evaluator (loc));
112e8700 5969 uiout->text (")");
b775012e 5970 }
0d381245
VP
5971}
5972
269b11a2
PA
5973static const char *
5974bptype_string (enum bptype type)
c906108c 5975{
c4093a6a
JM
5976 struct ep_type_description
5977 {
5978 enum bptype type;
a121b7c1 5979 const char *description;
c4093a6a
JM
5980 };
5981 static struct ep_type_description bptypes[] =
c906108c 5982 {
c5aa993b
JM
5983 {bp_none, "?deleted?"},
5984 {bp_breakpoint, "breakpoint"},
c906108c 5985 {bp_hardware_breakpoint, "hw breakpoint"},
7c16b83e 5986 {bp_single_step, "sw single-step"},
c5aa993b
JM
5987 {bp_until, "until"},
5988 {bp_finish, "finish"},
5989 {bp_watchpoint, "watchpoint"},
c906108c 5990 {bp_hardware_watchpoint, "hw watchpoint"},
c5aa993b
JM
5991 {bp_read_watchpoint, "read watchpoint"},
5992 {bp_access_watchpoint, "acc watchpoint"},
5993 {bp_longjmp, "longjmp"},
5994 {bp_longjmp_resume, "longjmp resume"},
e2e4d78b 5995 {bp_longjmp_call_dummy, "longjmp for call dummy"},
186c406b
TT
5996 {bp_exception, "exception"},
5997 {bp_exception_resume, "exception resume"},
c5aa993b 5998 {bp_step_resume, "step resume"},
2c03e5be 5999 {bp_hp_step_resume, "high-priority step resume"},
c5aa993b
JM
6000 {bp_watchpoint_scope, "watchpoint scope"},
6001 {bp_call_dummy, "call dummy"},
aa7d318d 6002 {bp_std_terminate, "std::terminate"},
c5aa993b 6003 {bp_shlib_event, "shlib events"},
c4093a6a 6004 {bp_thread_event, "thread events"},
1900040c 6005 {bp_overlay_event, "overlay events"},
0fd8e87f 6006 {bp_longjmp_master, "longjmp master"},
aa7d318d 6007 {bp_std_terminate_master, "std::terminate master"},
186c406b 6008 {bp_exception_master, "exception master"},
ce78b96d 6009 {bp_catchpoint, "catchpoint"},
1042e4c0 6010 {bp_tracepoint, "tracepoint"},
7a697b8d 6011 {bp_fast_tracepoint, "fast tracepoint"},
0fb4aa4b 6012 {bp_static_tracepoint, "static tracepoint"},
e7e0cddf 6013 {bp_dprintf, "dprintf"},
4efc6507 6014 {bp_jit_event, "jit events"},
0e30163f
JK
6015 {bp_gnu_ifunc_resolver, "STT_GNU_IFUNC resolver"},
6016 {bp_gnu_ifunc_resolver_return, "STT_GNU_IFUNC resolver return"},
c5aa993b 6017 };
269b11a2
PA
6018
6019 if (((int) type >= (sizeof (bptypes) / sizeof (bptypes[0])))
6020 || ((int) type != bptypes[(int) type].type))
6021 internal_error (__FILE__, __LINE__,
6022 _("bptypes table does not describe type #%d."),
6023 (int) type);
6024
6025 return bptypes[(int) type].description;
6026}
6027
998580f1
MK
6028/* For MI, output a field named 'thread-groups' with a list as the value.
6029 For CLI, prefix the list with the string 'inf'. */
6030
6031static void
6032output_thread_groups (struct ui_out *uiout,
6033 const char *field_name,
5c632425 6034 const std::vector<int> &inf_nums,
998580f1
MK
6035 int mi_only)
6036{
112e8700 6037 int is_mi = uiout->is_mi_like_p ();
998580f1
MK
6038
6039 /* For backward compatibility, don't display inferiors in CLI unless
6040 there are several. Always display them for MI. */
6041 if (!is_mi && mi_only)
6042 return;
6043
10f489e5 6044 ui_out_emit_list list_emitter (uiout, field_name);
752eb8b4 6045
5c632425 6046 for (size_t i = 0; i < inf_nums.size (); i++)
998580f1
MK
6047 {
6048 if (is_mi)
6049 {
6050 char mi_group[10];
6051
5c632425 6052 xsnprintf (mi_group, sizeof (mi_group), "i%d", inf_nums[i]);
112e8700 6053 uiout->field_string (NULL, mi_group);
998580f1
MK
6054 }
6055 else
6056 {
6057 if (i == 0)
112e8700 6058 uiout->text (" inf ");
998580f1 6059 else
112e8700 6060 uiout->text (", ");
998580f1 6061
5c632425 6062 uiout->text (plongest (inf_nums[i]));
998580f1
MK
6063 }
6064 }
998580f1
MK
6065}
6066
269b11a2
PA
6067/* Print B to gdb_stdout. */
6068
6069static void
6070print_one_breakpoint_location (struct breakpoint *b,
6071 struct bp_location *loc,
6072 int loc_number,
6073 struct bp_location **last_loc,
269b11a2
PA
6074 int allflag)
6075{
6076 struct command_line *l;
c2c6d25f 6077 static char bpenables[] = "nynny";
c906108c 6078
79a45e25 6079 struct ui_out *uiout = current_uiout;
0d381245
VP
6080 int header_of_multiple = 0;
6081 int part_of_multiple = (loc != NULL);
79a45b7d
TT
6082 struct value_print_options opts;
6083
6084 get_user_print_options (&opts);
0d381245
VP
6085
6086 gdb_assert (!loc || loc_number != 0);
4a64f543
MS
6087 /* See comment in print_one_breakpoint concerning treatment of
6088 breakpoints with single disabled location. */
0d381245
VP
6089 if (loc == NULL
6090 && (b->loc != NULL
6091 && (b->loc->next != NULL || !b->loc->enabled)))
6092 header_of_multiple = 1;
6093 if (loc == NULL)
6094 loc = b->loc;
6095
c4093a6a
JM
6096 annotate_record ();
6097
6098 /* 1 */
6099 annotate_field (0);
0d381245
VP
6100 if (part_of_multiple)
6101 {
6102 char *formatted;
0c6773c1 6103 formatted = xstrprintf ("%d.%d", b->number, loc_number);
112e8700 6104 uiout->field_string ("number", formatted);
0d381245
VP
6105 xfree (formatted);
6106 }
6107 else
6108 {
112e8700 6109 uiout->field_int ("number", b->number);
0d381245 6110 }
c4093a6a
JM
6111
6112 /* 2 */
6113 annotate_field (1);
0d381245 6114 if (part_of_multiple)
112e8700 6115 uiout->field_skip ("type");
269b11a2 6116 else
112e8700 6117 uiout->field_string ("type", bptype_string (b->type));
c4093a6a
JM
6118
6119 /* 3 */
6120 annotate_field (2);
0d381245 6121 if (part_of_multiple)
112e8700 6122 uiout->field_skip ("disp");
0d381245 6123 else
112e8700 6124 uiout->field_string ("disp", bpdisp_text (b->disposition));
0d381245 6125
c4093a6a
JM
6126
6127 /* 4 */
6128 annotate_field (3);
0d381245 6129 if (part_of_multiple)
112e8700 6130 uiout->field_string ("enabled", loc->enabled ? "y" : "n");
0d381245 6131 else
112e8700
SM
6132 uiout->field_fmt ("enabled", "%c", bpenables[(int) b->enable_state]);
6133 uiout->spaces (2);
0d381245 6134
c4093a6a
JM
6135
6136 /* 5 and 6 */
3086aeae 6137 if (b->ops != NULL && b->ops->print_one != NULL)
0d381245 6138 {
4a64f543
MS
6139 /* Although the print_one can possibly print all locations,
6140 calling it here is not likely to get any nice result. So,
6141 make sure there's just one location. */
0d381245 6142 gdb_assert (b->loc == NULL || b->loc->next == NULL);
a6d9a66e 6143 b->ops->print_one (b, last_loc);
0d381245 6144 }
3086aeae
DJ
6145 else
6146 switch (b->type)
6147 {
6148 case bp_none:
6149 internal_error (__FILE__, __LINE__,
e2e0b3e5 6150 _("print_one_breakpoint: bp_none encountered\n"));
3086aeae 6151 break;
c906108c 6152
3086aeae
DJ
6153 case bp_watchpoint:
6154 case bp_hardware_watchpoint:
6155 case bp_read_watchpoint:
6156 case bp_access_watchpoint:
3a5c3e22
PA
6157 {
6158 struct watchpoint *w = (struct watchpoint *) b;
6159
6160 /* Field 4, the address, is omitted (which makes the columns
6161 not line up too nicely with the headers, but the effect
6162 is relatively readable). */
6163 if (opts.addressprint)
112e8700 6164 uiout->field_skip ("addr");
3a5c3e22 6165 annotate_field (5);
112e8700 6166 uiout->field_string ("what", w->exp_string);
3a5c3e22 6167 }
3086aeae
DJ
6168 break;
6169
3086aeae
DJ
6170 case bp_breakpoint:
6171 case bp_hardware_breakpoint:
7c16b83e 6172 case bp_single_step:
3086aeae
DJ
6173 case bp_until:
6174 case bp_finish:
6175 case bp_longjmp:
6176 case bp_longjmp_resume:
e2e4d78b 6177 case bp_longjmp_call_dummy:
186c406b
TT
6178 case bp_exception:
6179 case bp_exception_resume:
3086aeae 6180 case bp_step_resume:
2c03e5be 6181 case bp_hp_step_resume:
3086aeae
DJ
6182 case bp_watchpoint_scope:
6183 case bp_call_dummy:
aa7d318d 6184 case bp_std_terminate:
3086aeae
DJ
6185 case bp_shlib_event:
6186 case bp_thread_event:
6187 case bp_overlay_event:
0fd8e87f 6188 case bp_longjmp_master:
aa7d318d 6189 case bp_std_terminate_master:
186c406b 6190 case bp_exception_master:
1042e4c0 6191 case bp_tracepoint:
7a697b8d 6192 case bp_fast_tracepoint:
0fb4aa4b 6193 case bp_static_tracepoint:
e7e0cddf 6194 case bp_dprintf:
4efc6507 6195 case bp_jit_event:
0e30163f
JK
6196 case bp_gnu_ifunc_resolver:
6197 case bp_gnu_ifunc_resolver_return:
79a45b7d 6198 if (opts.addressprint)
3086aeae
DJ
6199 {
6200 annotate_field (4);
54e52265 6201 if (header_of_multiple)
112e8700 6202 uiout->field_string ("addr", "<MULTIPLE>");
e9bbd7c5 6203 else if (b->loc == NULL || loc->shlib_disabled)
112e8700 6204 uiout->field_string ("addr", "<PENDING>");
0101ce28 6205 else
112e8700 6206 uiout->field_core_addr ("addr",
5af949e3 6207 loc->gdbarch, loc->address);
3086aeae
DJ
6208 }
6209 annotate_field (5);
0d381245 6210 if (!header_of_multiple)
170b53b2 6211 print_breakpoint_location (b, loc);
0d381245 6212 if (b->loc)
a6d9a66e 6213 *last_loc = b->loc;
3086aeae
DJ
6214 break;
6215 }
c906108c 6216
6c95b8df 6217
998580f1 6218 if (loc != NULL && !header_of_multiple)
6c95b8df
PA
6219 {
6220 struct inferior *inf;
5c632425 6221 std::vector<int> inf_nums;
998580f1 6222 int mi_only = 1;
6c95b8df 6223
998580f1 6224 ALL_INFERIORS (inf)
6c95b8df
PA
6225 {
6226 if (inf->pspace == loc->pspace)
5c632425 6227 inf_nums.push_back (inf->num);
6c95b8df 6228 }
998580f1
MK
6229
6230 /* For backward compatibility, don't display inferiors in CLI unless
6231 there are several. Always display for MI. */
6232 if (allflag
6233 || (!gdbarch_has_global_breakpoints (target_gdbarch ())
6234 && (number_of_program_spaces () > 1
6235 || number_of_inferiors () > 1)
6236 /* LOC is for existing B, it cannot be in
6237 moribund_locations and thus having NULL OWNER. */
6238 && loc->owner->type != bp_catchpoint))
6239 mi_only = 0;
5c632425 6240 output_thread_groups (uiout, "thread-groups", inf_nums, mi_only);
6c95b8df
PA
6241 }
6242
4a306c9a 6243 if (!part_of_multiple)
c4093a6a 6244 {
4a306c9a
JB
6245 if (b->thread != -1)
6246 {
6247 /* FIXME: This seems to be redundant and lost here; see the
4a64f543 6248 "stop only in" line a little further down. */
112e8700
SM
6249 uiout->text (" thread ");
6250 uiout->field_int ("thread", b->thread);
4a306c9a
JB
6251 }
6252 else if (b->task != 0)
6253 {
112e8700
SM
6254 uiout->text (" task ");
6255 uiout->field_int ("task", b->task);
4a306c9a 6256 }
c4093a6a 6257 }
f1310107 6258
112e8700 6259 uiout->text ("\n");
f1310107 6260
348d480f 6261 if (!part_of_multiple)
f1310107
TJB
6262 b->ops->print_one_detail (b, uiout);
6263
0d381245 6264 if (part_of_multiple && frame_id_p (b->frame_id))
c4093a6a
JM
6265 {
6266 annotate_field (6);
112e8700 6267 uiout->text ("\tstop only in stack frame at ");
e5dd4106 6268 /* FIXME: cagney/2002-12-01: Shouldn't be poking around inside
818dd999 6269 the frame ID. */
112e8700 6270 uiout->field_core_addr ("frame",
5af949e3 6271 b->gdbarch, b->frame_id.stack_addr);
112e8700 6272 uiout->text ("\n");
c4093a6a
JM
6273 }
6274
28010a5d 6275 if (!part_of_multiple && b->cond_string)
c4093a6a
JM
6276 {
6277 annotate_field (7);
d77f58be 6278 if (is_tracepoint (b))
112e8700 6279 uiout->text ("\ttrace only if ");
1042e4c0 6280 else
112e8700
SM
6281 uiout->text ("\tstop only if ");
6282 uiout->field_string ("cond", b->cond_string);
b775012e
LM
6283
6284 /* Print whether the target is doing the breakpoint's condition
6285 evaluation. If GDB is doing the evaluation, don't print anything. */
6286 if (is_breakpoint (b)
6287 && breakpoint_condition_evaluation_mode ()
6288 == condition_evaluation_target)
6289 {
112e8700
SM
6290 uiout->text (" (");
6291 uiout->field_string ("evaluated-by",
b775012e 6292 bp_condition_evaluator (b));
112e8700 6293 uiout->text (" evals)");
b775012e 6294 }
112e8700 6295 uiout->text ("\n");
0101ce28
JJ
6296 }
6297
0d381245 6298 if (!part_of_multiple && b->thread != -1)
c4093a6a 6299 {
4a64f543 6300 /* FIXME should make an annotation for this. */
112e8700
SM
6301 uiout->text ("\tstop only in thread ");
6302 if (uiout->is_mi_like_p ())
6303 uiout->field_int ("thread", b->thread);
5d5658a1
PA
6304 else
6305 {
6306 struct thread_info *thr = find_thread_global_id (b->thread);
6307
112e8700 6308 uiout->field_string ("thread", print_thread_id (thr));
5d5658a1 6309 }
112e8700 6310 uiout->text ("\n");
c4093a6a
JM
6311 }
6312
556ec64d
YQ
6313 if (!part_of_multiple)
6314 {
6315 if (b->hit_count)
31f56a27
YQ
6316 {
6317 /* FIXME should make an annotation for this. */
6318 if (is_catchpoint (b))
112e8700 6319 uiout->text ("\tcatchpoint");
31f56a27 6320 else if (is_tracepoint (b))
112e8700 6321 uiout->text ("\ttracepoint");
31f56a27 6322 else
112e8700
SM
6323 uiout->text ("\tbreakpoint");
6324 uiout->text (" already hit ");
6325 uiout->field_int ("times", b->hit_count);
31f56a27 6326 if (b->hit_count == 1)
112e8700 6327 uiout->text (" time\n");
31f56a27 6328 else
112e8700 6329 uiout->text (" times\n");
31f56a27 6330 }
556ec64d
YQ
6331 else
6332 {
31f56a27 6333 /* Output the count also if it is zero, but only if this is mi. */
112e8700
SM
6334 if (uiout->is_mi_like_p ())
6335 uiout->field_int ("times", b->hit_count);
556ec64d
YQ
6336 }
6337 }
8b93c638 6338
0d381245 6339 if (!part_of_multiple && b->ignore_count)
c4093a6a
JM
6340 {
6341 annotate_field (8);
112e8700
SM
6342 uiout->text ("\tignore next ");
6343 uiout->field_int ("ignore", b->ignore_count);
6344 uiout->text (" hits\n");
c4093a6a 6345 }
059fb39f 6346
816338b5
SS
6347 /* Note that an enable count of 1 corresponds to "enable once"
6348 behavior, which is reported by the combination of enablement and
6349 disposition, so we don't need to mention it here. */
6350 if (!part_of_multiple && b->enable_count > 1)
6351 {
6352 annotate_field (8);
112e8700 6353 uiout->text ("\tdisable after ");
816338b5
SS
6354 /* Tweak the wording to clarify that ignore and enable counts
6355 are distinct, and have additive effect. */
6356 if (b->ignore_count)
112e8700 6357 uiout->text ("additional ");
816338b5 6358 else
112e8700
SM
6359 uiout->text ("next ");
6360 uiout->field_int ("enable", b->enable_count);
6361 uiout->text (" hits\n");
816338b5
SS
6362 }
6363
f196051f
SS
6364 if (!part_of_multiple && is_tracepoint (b))
6365 {
6366 struct tracepoint *tp = (struct tracepoint *) b;
6367
6368 if (tp->traceframe_usage)
6369 {
112e8700
SM
6370 uiout->text ("\ttrace buffer usage ");
6371 uiout->field_int ("traceframe-usage", tp->traceframe_usage);
6372 uiout->text (" bytes\n");
f196051f
SS
6373 }
6374 }
d3ce09f5 6375
d1b0a7bf 6376 l = b->commands ? b->commands.get () : NULL;
059fb39f 6377 if (!part_of_multiple && l)
c4093a6a
JM
6378 {
6379 annotate_field (9);
2e783024 6380 ui_out_emit_tuple tuple_emitter (uiout, "script");
8b93c638 6381 print_command_lines (uiout, l, 4);
c4093a6a 6382 }
d24317b4 6383
d9b3f62e 6384 if (is_tracepoint (b))
1042e4c0 6385 {
d9b3f62e
PA
6386 struct tracepoint *t = (struct tracepoint *) b;
6387
6388 if (!part_of_multiple && t->pass_count)
6389 {
6390 annotate_field (10);
112e8700
SM
6391 uiout->text ("\tpass count ");
6392 uiout->field_int ("pass", t->pass_count);
6393 uiout->text (" \n");
d9b3f62e 6394 }
f2a8bc8a
YQ
6395
6396 /* Don't display it when tracepoint or tracepoint location is
6397 pending. */
6398 if (!header_of_multiple && loc != NULL && !loc->shlib_disabled)
6399 {
6400 annotate_field (11);
6401
112e8700
SM
6402 if (uiout->is_mi_like_p ())
6403 uiout->field_string ("installed",
f2a8bc8a
YQ
6404 loc->inserted ? "y" : "n");
6405 else
6406 {
6407 if (loc->inserted)
112e8700 6408 uiout->text ("\t");
f2a8bc8a 6409 else
112e8700
SM
6410 uiout->text ("\tnot ");
6411 uiout->text ("installed on target\n");
f2a8bc8a
YQ
6412 }
6413 }
1042e4c0
SS
6414 }
6415
112e8700 6416 if (uiout->is_mi_like_p () && !part_of_multiple)
d24317b4 6417 {
3a5c3e22
PA
6418 if (is_watchpoint (b))
6419 {
6420 struct watchpoint *w = (struct watchpoint *) b;
6421
112e8700 6422 uiout->field_string ("original-location", w->exp_string);
3a5c3e22 6423 }
f00aae0f 6424 else if (b->location != NULL
d28cd78a 6425 && event_location_to_string (b->location.get ()) != NULL)
112e8700 6426 uiout->field_string ("original-location",
d28cd78a 6427 event_location_to_string (b->location.get ()));
d24317b4 6428 }
c4093a6a 6429}
c5aa993b 6430
0d381245
VP
6431static void
6432print_one_breakpoint (struct breakpoint *b,
4a64f543 6433 struct bp_location **last_loc,
6c95b8df 6434 int allflag)
0d381245 6435{
79a45e25 6436 struct ui_out *uiout = current_uiout;
8d3788bd 6437
2e783024
TT
6438 {
6439 ui_out_emit_tuple tuple_emitter (uiout, "bkpt");
8d3788bd 6440
2e783024
TT
6441 print_one_breakpoint_location (b, NULL, 0, last_loc, allflag);
6442 }
0d381245
VP
6443
6444 /* If this breakpoint has custom print function,
6445 it's already printed. Otherwise, print individual
6446 locations, if any. */
6447 if (b->ops == NULL || b->ops->print_one == NULL)
6448 {
4a64f543
MS
6449 /* If breakpoint has a single location that is disabled, we
6450 print it as if it had several locations, since otherwise it's
6451 hard to represent "breakpoint enabled, location disabled"
6452 situation.
6453
6454 Note that while hardware watchpoints have several locations
a3be7890 6455 internally, that's not a property exposed to user. */
0d381245 6456 if (b->loc
a5606eee 6457 && !is_hardware_watchpoint (b)
8d3788bd 6458 && (b->loc->next || !b->loc->enabled))
0d381245
VP
6459 {
6460 struct bp_location *loc;
6461 int n = 1;
8d3788bd 6462
0d381245 6463 for (loc = b->loc; loc; loc = loc->next, ++n)
8d3788bd 6464 {
2e783024 6465 ui_out_emit_tuple tuple_emitter (uiout, NULL);
8d3788bd 6466 print_one_breakpoint_location (b, loc, n, last_loc, allflag);
8d3788bd 6467 }
0d381245
VP
6468 }
6469 }
6470}
6471
a6d9a66e
UW
6472static int
6473breakpoint_address_bits (struct breakpoint *b)
6474{
6475 int print_address_bits = 0;
6476 struct bp_location *loc;
6477
c6d81124
PA
6478 /* Software watchpoints that aren't watching memory don't have an
6479 address to print. */
6480 if (is_no_memory_software_watchpoint (b))
6481 return 0;
6482
a6d9a66e
UW
6483 for (loc = b->loc; loc; loc = loc->next)
6484 {
c7437ca6
PA
6485 int addr_bit;
6486
c7437ca6 6487 addr_bit = gdbarch_addr_bit (loc->gdbarch);
a6d9a66e
UW
6488 if (addr_bit > print_address_bits)
6489 print_address_bits = addr_bit;
6490 }
6491
6492 return print_address_bits;
6493}
0d381245 6494
65630365 6495/* See breakpoint.h. */
c5aa993b 6496
65630365
PA
6497void
6498print_breakpoint (breakpoint *b)
c4093a6a 6499{
a6d9a66e 6500 struct bp_location *dummy_loc = NULL;
65630365 6501 print_one_breakpoint (b, &dummy_loc, 0);
c4093a6a 6502}
c5aa993b 6503
09d682a4
TT
6504/* Return true if this breakpoint was set by the user, false if it is
6505 internal or momentary. */
6506
6507int
6508user_breakpoint_p (struct breakpoint *b)
6509{
46c6471b 6510 return b->number > 0;
09d682a4
TT
6511}
6512
93daf339
TT
6513/* See breakpoint.h. */
6514
6515int
6516pending_breakpoint_p (struct breakpoint *b)
6517{
6518 return b->loc == NULL;
6519}
6520
7f3b0473 6521/* Print information on user settable breakpoint (watchpoint, etc)
d77f58be
SS
6522 number BNUM. If BNUM is -1 print all user-settable breakpoints.
6523 If ALLFLAG is non-zero, include non-user-settable breakpoints. If
6524 FILTER is non-NULL, call it on each breakpoint and only include the
6525 ones for which it returns non-zero. Return the total number of
6526 breakpoints listed. */
c906108c 6527
d77f58be 6528static int
4495129a 6529breakpoint_1 (const char *args, int allflag,
4a64f543 6530 int (*filter) (const struct breakpoint *))
c4093a6a 6531{
52f0bd74 6532 struct breakpoint *b;
a6d9a66e 6533 struct bp_location *last_loc = NULL;
7f3b0473 6534 int nr_printable_breakpoints;
79a45b7d 6535 struct value_print_options opts;
a6d9a66e 6536 int print_address_bits = 0;
269b11a2 6537 int print_type_col_width = 14;
79a45e25 6538 struct ui_out *uiout = current_uiout;
269b11a2 6539
79a45b7d
TT
6540 get_user_print_options (&opts);
6541
4a64f543
MS
6542 /* Compute the number of rows in the table, as well as the size
6543 required for address fields. */
7f3b0473
AC
6544 nr_printable_breakpoints = 0;
6545 ALL_BREAKPOINTS (b)
e5a67952
MS
6546 {
6547 /* If we have a filter, only list the breakpoints it accepts. */
6548 if (filter && !filter (b))
6549 continue;
6550
6551 /* If we have an "args" string, it is a list of breakpoints to
6552 accept. Skip the others. */
6553 if (args != NULL && *args != '\0')
6554 {
6555 if (allflag && parse_and_eval_long (args) != b->number)
6556 continue;
6557 if (!allflag && !number_is_in_list (args, b->number))
6558 continue;
6559 }
269b11a2 6560
e5a67952
MS
6561 if (allflag || user_breakpoint_p (b))
6562 {
6563 int addr_bit, type_len;
a6d9a66e 6564
e5a67952
MS
6565 addr_bit = breakpoint_address_bits (b);
6566 if (addr_bit > print_address_bits)
6567 print_address_bits = addr_bit;
269b11a2 6568
e5a67952
MS
6569 type_len = strlen (bptype_string (b->type));
6570 if (type_len > print_type_col_width)
6571 print_type_col_width = type_len;
6572
6573 nr_printable_breakpoints++;
6574 }
6575 }
7f3b0473 6576
4a2b031d
TT
6577 {
6578 ui_out_emit_table table_emitter (uiout,
6579 opts.addressprint ? 6 : 5,
6580 nr_printable_breakpoints,
6581 "BreakpointTable");
6582
6583 if (nr_printable_breakpoints > 0)
6584 annotate_breakpoints_headers ();
6585 if (nr_printable_breakpoints > 0)
6586 annotate_field (0);
6587 uiout->table_header (7, ui_left, "number", "Num"); /* 1 */
6588 if (nr_printable_breakpoints > 0)
6589 annotate_field (1);
6590 uiout->table_header (print_type_col_width, ui_left, "type", "Type"); /* 2 */
6591 if (nr_printable_breakpoints > 0)
6592 annotate_field (2);
6593 uiout->table_header (4, ui_left, "disp", "Disp"); /* 3 */
6594 if (nr_printable_breakpoints > 0)
6595 annotate_field (3);
6596 uiout->table_header (3, ui_left, "enabled", "Enb"); /* 4 */
6597 if (opts.addressprint)
6598 {
6599 if (nr_printable_breakpoints > 0)
6600 annotate_field (4);
6601 if (print_address_bits <= 32)
6602 uiout->table_header (10, ui_left, "addr", "Address"); /* 5 */
6603 else
6604 uiout->table_header (18, ui_left, "addr", "Address"); /* 5 */
6605 }
6606 if (nr_printable_breakpoints > 0)
6607 annotate_field (5);
6608 uiout->table_header (40, ui_noalign, "what", "What"); /* 6 */
6609 uiout->table_body ();
6610 if (nr_printable_breakpoints > 0)
6611 annotate_breakpoints_table ();
6612
6613 ALL_BREAKPOINTS (b)
6614 {
6615 QUIT;
6616 /* If we have a filter, only list the breakpoints it accepts. */
6617 if (filter && !filter (b))
6618 continue;
e5a67952 6619
4a2b031d
TT
6620 /* If we have an "args" string, it is a list of breakpoints to
6621 accept. Skip the others. */
e5a67952 6622
4a2b031d
TT
6623 if (args != NULL && *args != '\0')
6624 {
6625 if (allflag) /* maintenance info breakpoint */
6626 {
6627 if (parse_and_eval_long (args) != b->number)
6628 continue;
6629 }
6630 else /* all others */
6631 {
6632 if (!number_is_in_list (args, b->number))
6633 continue;
6634 }
6635 }
6636 /* We only print out user settable breakpoints unless the
6637 allflag is set. */
6638 if (allflag || user_breakpoint_p (b))
6639 print_one_breakpoint (b, &last_loc, allflag);
6640 }
6641 }
698384cd 6642
7f3b0473 6643 if (nr_printable_breakpoints == 0)
c906108c 6644 {
4a64f543
MS
6645 /* If there's a filter, let the caller decide how to report
6646 empty list. */
d77f58be
SS
6647 if (!filter)
6648 {
e5a67952 6649 if (args == NULL || *args == '\0')
112e8700 6650 uiout->message ("No breakpoints or watchpoints.\n");
d77f58be 6651 else
112e8700 6652 uiout->message ("No breakpoint or watchpoint matching '%s'.\n",
e5a67952 6653 args);
d77f58be 6654 }
c906108c
SS
6655 }
6656 else
c4093a6a 6657 {
a6d9a66e
UW
6658 if (last_loc && !server_command)
6659 set_next_address (last_loc->gdbarch, last_loc->address);
c4093a6a 6660 }
c906108c 6661
4a64f543 6662 /* FIXME? Should this be moved up so that it is only called when
c4093a6a 6663 there have been breakpoints? */
c906108c 6664 annotate_breakpoints_table_end ();
d77f58be
SS
6665
6666 return nr_printable_breakpoints;
c906108c
SS
6667}
6668
ad443146
SS
6669/* Display the value of default-collect in a way that is generally
6670 compatible with the breakpoint list. */
6671
6672static void
6673default_collect_info (void)
6674{
79a45e25
PA
6675 struct ui_out *uiout = current_uiout;
6676
ad443146
SS
6677 /* If it has no value (which is frequently the case), say nothing; a
6678 message like "No default-collect." gets in user's face when it's
6679 not wanted. */
6680 if (!*default_collect)
6681 return;
6682
6683 /* The following phrase lines up nicely with per-tracepoint collect
6684 actions. */
112e8700
SM
6685 uiout->text ("default collect ");
6686 uiout->field_string ("default-collect", default_collect);
6687 uiout->text (" \n");
ad443146
SS
6688}
6689
c906108c 6690static void
0b39b52e 6691info_breakpoints_command (const char *args, int from_tty)
c906108c 6692{
e5a67952 6693 breakpoint_1 (args, 0, NULL);
ad443146
SS
6694
6695 default_collect_info ();
d77f58be
SS
6696}
6697
6698static void
1d12d88f 6699info_watchpoints_command (const char *args, int from_tty)
d77f58be 6700{
e5a67952 6701 int num_printed = breakpoint_1 (args, 0, is_watchpoint);
79a45e25 6702 struct ui_out *uiout = current_uiout;
d77f58be
SS
6703
6704 if (num_printed == 0)
6705 {
e5a67952 6706 if (args == NULL || *args == '\0')
112e8700 6707 uiout->message ("No watchpoints.\n");
d77f58be 6708 else
112e8700 6709 uiout->message ("No watchpoint matching '%s'.\n", args);
d77f58be 6710 }
c906108c
SS
6711}
6712
7a292a7a 6713static void
4495129a 6714maintenance_info_breakpoints (const char *args, int from_tty)
c906108c 6715{
e5a67952 6716 breakpoint_1 (args, 1, NULL);
ad443146
SS
6717
6718 default_collect_info ();
c906108c
SS
6719}
6720
0d381245 6721static int
714835d5 6722breakpoint_has_pc (struct breakpoint *b,
6c95b8df 6723 struct program_space *pspace,
714835d5 6724 CORE_ADDR pc, struct obj_section *section)
0d381245
VP
6725{
6726 struct bp_location *bl = b->loc;
cc59ec59 6727
0d381245
VP
6728 for (; bl; bl = bl->next)
6729 {
6c95b8df
PA
6730 if (bl->pspace == pspace
6731 && bl->address == pc
0d381245
VP
6732 && (!overlay_debugging || bl->section == section))
6733 return 1;
6734 }
6735 return 0;
6736}
6737
672f9b60 6738/* Print a message describing any user-breakpoints set at PC. This
6c95b8df
PA
6739 concerns with logical breakpoints, so we match program spaces, not
6740 address spaces. */
c906108c
SS
6741
6742static void
6c95b8df
PA
6743describe_other_breakpoints (struct gdbarch *gdbarch,
6744 struct program_space *pspace, CORE_ADDR pc,
5af949e3 6745 struct obj_section *section, int thread)
c906108c 6746{
52f0bd74
AC
6747 int others = 0;
6748 struct breakpoint *b;
c906108c
SS
6749
6750 ALL_BREAKPOINTS (b)
672f9b60
KP
6751 others += (user_breakpoint_p (b)
6752 && breakpoint_has_pc (b, pspace, pc, section));
c906108c
SS
6753 if (others > 0)
6754 {
a3f17187
AC
6755 if (others == 1)
6756 printf_filtered (_("Note: breakpoint "));
6757 else /* if (others == ???) */
6758 printf_filtered (_("Note: breakpoints "));
c906108c 6759 ALL_BREAKPOINTS (b)
672f9b60 6760 if (user_breakpoint_p (b) && breakpoint_has_pc (b, pspace, pc, section))
0d381245
VP
6761 {
6762 others--;
6763 printf_filtered ("%d", b->number);
6764 if (b->thread == -1 && thread != -1)
6765 printf_filtered (" (all threads)");
6766 else if (b->thread != -1)
6767 printf_filtered (" (thread %d)", b->thread);
6768 printf_filtered ("%s%s ",
059fb39f 6769 ((b->enable_state == bp_disabled
f8eba3c6 6770 || b->enable_state == bp_call_disabled)
0d381245 6771 ? " (disabled)"
0d381245
VP
6772 : ""),
6773 (others > 1) ? ","
6774 : ((others == 1) ? " and" : ""));
6775 }
a3f17187 6776 printf_filtered (_("also set at pc "));
5af949e3 6777 fputs_filtered (paddress (gdbarch, pc), gdb_stdout);
c906108c
SS
6778 printf_filtered (".\n");
6779 }
6780}
6781\f
c906108c 6782
e4f237da 6783/* Return true iff it is meaningful to use the address member of
244558af
LM
6784 BPT locations. For some breakpoint types, the locations' address members
6785 are irrelevant and it makes no sense to attempt to compare them to other
6786 addresses (or use them for any other purpose either).
e4f237da 6787
4a64f543 6788 More specifically, each of the following breakpoint types will
244558af 6789 always have a zero valued location address and we don't want to mark
4a64f543 6790 breakpoints of any of these types to be a duplicate of an actual
244558af 6791 breakpoint location at address zero:
e4f237da
KB
6792
6793 bp_watchpoint
2d134ed3
PA
6794 bp_catchpoint
6795
6796*/
e4f237da
KB
6797
6798static int
6799breakpoint_address_is_meaningful (struct breakpoint *bpt)
6800{
6801 enum bptype type = bpt->type;
6802
2d134ed3
PA
6803 return (type != bp_watchpoint && type != bp_catchpoint);
6804}
6805
6806/* Assuming LOC1 and LOC2's owners are hardware watchpoints, returns
6807 true if LOC1 and LOC2 represent the same watchpoint location. */
6808
6809static int
4a64f543
MS
6810watchpoint_locations_match (struct bp_location *loc1,
6811 struct bp_location *loc2)
2d134ed3 6812{
3a5c3e22
PA
6813 struct watchpoint *w1 = (struct watchpoint *) loc1->owner;
6814 struct watchpoint *w2 = (struct watchpoint *) loc2->owner;
6815
6816 /* Both of them must exist. */
6817 gdb_assert (w1 != NULL);
6818 gdb_assert (w2 != NULL);
2bdf28a0 6819
4a64f543
MS
6820 /* If the target can evaluate the condition expression in hardware,
6821 then we we need to insert both watchpoints even if they are at
6822 the same place. Otherwise the watchpoint will only trigger when
6823 the condition of whichever watchpoint was inserted evaluates to
6824 true, not giving a chance for GDB to check the condition of the
6825 other watchpoint. */
3a5c3e22 6826 if ((w1->cond_exp
4a64f543
MS
6827 && target_can_accel_watchpoint_condition (loc1->address,
6828 loc1->length,
0cf6dd15 6829 loc1->watchpoint_type,
4d01a485 6830 w1->cond_exp.get ()))
3a5c3e22 6831 || (w2->cond_exp
4a64f543
MS
6832 && target_can_accel_watchpoint_condition (loc2->address,
6833 loc2->length,
0cf6dd15 6834 loc2->watchpoint_type,
4d01a485 6835 w2->cond_exp.get ())))
0cf6dd15
TJB
6836 return 0;
6837
85d721b8
PA
6838 /* Note that this checks the owner's type, not the location's. In
6839 case the target does not support read watchpoints, but does
6840 support access watchpoints, we'll have bp_read_watchpoint
6841 watchpoints with hw_access locations. Those should be considered
6842 duplicates of hw_read locations. The hw_read locations will
6843 become hw_access locations later. */
2d134ed3
PA
6844 return (loc1->owner->type == loc2->owner->type
6845 && loc1->pspace->aspace == loc2->pspace->aspace
6846 && loc1->address == loc2->address
6847 && loc1->length == loc2->length);
e4f237da
KB
6848}
6849
31e77af2 6850/* See breakpoint.h. */
6c95b8df 6851
31e77af2 6852int
accd0bcd
YQ
6853breakpoint_address_match (const address_space *aspace1, CORE_ADDR addr1,
6854 const address_space *aspace2, CORE_ADDR addr2)
6c95b8df 6855{
f5656ead 6856 return ((gdbarch_has_global_breakpoints (target_gdbarch ())
6c95b8df
PA
6857 || aspace1 == aspace2)
6858 && addr1 == addr2);
6859}
6860
f1310107
TJB
6861/* Returns true if {ASPACE2,ADDR2} falls within the range determined by
6862 {ASPACE1,ADDR1,LEN1}. In most targets, this can only be true if ASPACE1
6863 matches ASPACE2. On targets that have global breakpoints, the address
6864 space doesn't really matter. */
6865
6866static int
accd0bcd
YQ
6867breakpoint_address_match_range (const address_space *aspace1,
6868 CORE_ADDR addr1,
6869 int len1, const address_space *aspace2,
f1310107
TJB
6870 CORE_ADDR addr2)
6871{
f5656ead 6872 return ((gdbarch_has_global_breakpoints (target_gdbarch ())
f1310107
TJB
6873 || aspace1 == aspace2)
6874 && addr2 >= addr1 && addr2 < addr1 + len1);
6875}
6876
6877/* Returns true if {ASPACE,ADDR} matches the breakpoint BL. BL may be
6878 a ranged breakpoint. In most targets, a match happens only if ASPACE
6879 matches the breakpoint's address space. On targets that have global
6880 breakpoints, the address space doesn't really matter. */
6881
6882static int
6883breakpoint_location_address_match (struct bp_location *bl,
accd0bcd 6884 const address_space *aspace,
f1310107
TJB
6885 CORE_ADDR addr)
6886{
6887 return (breakpoint_address_match (bl->pspace->aspace, bl->address,
6888 aspace, addr)
6889 || (bl->length
6890 && breakpoint_address_match_range (bl->pspace->aspace,
6891 bl->address, bl->length,
6892 aspace, addr)));
6893}
6894
d35ae833
PA
6895/* Returns true if the [ADDR,ADDR+LEN) range in ASPACE overlaps
6896 breakpoint BL. BL may be a ranged breakpoint. In most targets, a
6897 match happens only if ASPACE matches the breakpoint's address
6898 space. On targets that have global breakpoints, the address space
6899 doesn't really matter. */
6900
6901static int
6902breakpoint_location_address_range_overlap (struct bp_location *bl,
accd0bcd 6903 const address_space *aspace,
d35ae833
PA
6904 CORE_ADDR addr, int len)
6905{
6906 if (gdbarch_has_global_breakpoints (target_gdbarch ())
6907 || bl->pspace->aspace == aspace)
6908 {
6909 int bl_len = bl->length != 0 ? bl->length : 1;
6910
6911 if (mem_ranges_overlap (addr, len, bl->address, bl_len))
6912 return 1;
6913 }
6914 return 0;
6915}
6916
1e4d1764
YQ
6917/* If LOC1 and LOC2's owners are not tracepoints, returns false directly.
6918 Then, if LOC1 and LOC2 represent the same tracepoint location, returns
6919 true, otherwise returns false. */
6920
6921static int
6922tracepoint_locations_match (struct bp_location *loc1,
6923 struct bp_location *loc2)
6924{
6925 if (is_tracepoint (loc1->owner) && is_tracepoint (loc2->owner))
6926 /* Since tracepoint locations are never duplicated with others', tracepoint
6927 locations at the same address of different tracepoints are regarded as
6928 different locations. */
6929 return (loc1->address == loc2->address && loc1->owner == loc2->owner);
6930 else
6931 return 0;
6932}
6933
2d134ed3
PA
6934/* Assuming LOC1 and LOC2's types' have meaningful target addresses
6935 (breakpoint_address_is_meaningful), returns true if LOC1 and LOC2
6936 represent the same location. */
6937
6938static int
4a64f543
MS
6939breakpoint_locations_match (struct bp_location *loc1,
6940 struct bp_location *loc2)
2d134ed3 6941{
2bdf28a0
JK
6942 int hw_point1, hw_point2;
6943
6944 /* Both of them must not be in moribund_locations. */
6945 gdb_assert (loc1->owner != NULL);
6946 gdb_assert (loc2->owner != NULL);
6947
6948 hw_point1 = is_hardware_watchpoint (loc1->owner);
6949 hw_point2 = is_hardware_watchpoint (loc2->owner);
2d134ed3
PA
6950
6951 if (hw_point1 != hw_point2)
6952 return 0;
6953 else if (hw_point1)
6954 return watchpoint_locations_match (loc1, loc2);
1e4d1764
YQ
6955 else if (is_tracepoint (loc1->owner) || is_tracepoint (loc2->owner))
6956 return tracepoint_locations_match (loc1, loc2);
2d134ed3 6957 else
f1310107
TJB
6958 /* We compare bp_location.length in order to cover ranged breakpoints. */
6959 return (breakpoint_address_match (loc1->pspace->aspace, loc1->address,
6960 loc2->pspace->aspace, loc2->address)
6961 && loc1->length == loc2->length);
2d134ed3
PA
6962}
6963
76897487
KB
6964static void
6965breakpoint_adjustment_warning (CORE_ADDR from_addr, CORE_ADDR to_addr,
6966 int bnum, int have_bnum)
6967{
f63fbe86
MS
6968 /* The longest string possibly returned by hex_string_custom
6969 is 50 chars. These must be at least that big for safety. */
6970 char astr1[64];
6971 char astr2[64];
76897487 6972
bb599908
PH
6973 strcpy (astr1, hex_string_custom ((unsigned long) from_addr, 8));
6974 strcpy (astr2, hex_string_custom ((unsigned long) to_addr, 8));
76897487 6975 if (have_bnum)
8a3fe4f8 6976 warning (_("Breakpoint %d address previously adjusted from %s to %s."),
76897487
KB
6977 bnum, astr1, astr2);
6978 else
8a3fe4f8 6979 warning (_("Breakpoint address adjusted from %s to %s."), astr1, astr2);
76897487
KB
6980}
6981
4a64f543
MS
6982/* Adjust a breakpoint's address to account for architectural
6983 constraints on breakpoint placement. Return the adjusted address.
6984 Note: Very few targets require this kind of adjustment. For most
6985 targets, this function is simply the identity function. */
76897487
KB
6986
6987static CORE_ADDR
a6d9a66e
UW
6988adjust_breakpoint_address (struct gdbarch *gdbarch,
6989 CORE_ADDR bpaddr, enum bptype bptype)
76897487 6990{
a6d9a66e 6991 if (!gdbarch_adjust_breakpoint_address_p (gdbarch))
76897487
KB
6992 {
6993 /* Very few targets need any kind of breakpoint adjustment. */
6994 return bpaddr;
6995 }
88f7da05
KB
6996 else if (bptype == bp_watchpoint
6997 || bptype == bp_hardware_watchpoint
6998 || bptype == bp_read_watchpoint
6999 || bptype == bp_access_watchpoint
fe798b75 7000 || bptype == bp_catchpoint)
88f7da05
KB
7001 {
7002 /* Watchpoints and the various bp_catch_* eventpoints should not
7003 have their addresses modified. */
7004 return bpaddr;
7005 }
7c16b83e
PA
7006 else if (bptype == bp_single_step)
7007 {
7008 /* Single-step breakpoints should not have their addresses
7009 modified. If there's any architectural constrain that
7010 applies to this address, then it should have already been
7011 taken into account when the breakpoint was created in the
7012 first place. If we didn't do this, stepping through e.g.,
7013 Thumb-2 IT blocks would break. */
7014 return bpaddr;
7015 }
76897487
KB
7016 else
7017 {
7018 CORE_ADDR adjusted_bpaddr;
7019
7020 /* Some targets have architectural constraints on the placement
7021 of breakpoint instructions. Obtain the adjusted address. */
a6d9a66e 7022 adjusted_bpaddr = gdbarch_adjust_breakpoint_address (gdbarch, bpaddr);
76897487
KB
7023
7024 /* An adjusted breakpoint address can significantly alter
7025 a user's expectations. Print a warning if an adjustment
7026 is required. */
7027 if (adjusted_bpaddr != bpaddr)
7028 breakpoint_adjustment_warning (bpaddr, adjusted_bpaddr, 0, 0);
7029
7030 return adjusted_bpaddr;
7031 }
7032}
7033
5625a286 7034bp_location::bp_location (const bp_location_ops *ops, breakpoint *owner)
7cc221ef 7035{
5625a286 7036 bp_location *loc = this;
7cc221ef 7037
348d480f
PA
7038 gdb_assert (ops != NULL);
7039
28010a5d
PA
7040 loc->ops = ops;
7041 loc->owner = owner;
b775012e 7042 loc->cond_bytecode = NULL;
0d381245
VP
7043 loc->shlib_disabled = 0;
7044 loc->enabled = 1;
e049a4b5 7045
28010a5d 7046 switch (owner->type)
e049a4b5
DJ
7047 {
7048 case bp_breakpoint:
7c16b83e 7049 case bp_single_step:
e049a4b5
DJ
7050 case bp_until:
7051 case bp_finish:
7052 case bp_longjmp:
7053 case bp_longjmp_resume:
e2e4d78b 7054 case bp_longjmp_call_dummy:
186c406b
TT
7055 case bp_exception:
7056 case bp_exception_resume:
e049a4b5 7057 case bp_step_resume:
2c03e5be 7058 case bp_hp_step_resume:
e049a4b5
DJ
7059 case bp_watchpoint_scope:
7060 case bp_call_dummy:
aa7d318d 7061 case bp_std_terminate:
e049a4b5
DJ
7062 case bp_shlib_event:
7063 case bp_thread_event:
7064 case bp_overlay_event:
4efc6507 7065 case bp_jit_event:
0fd8e87f 7066 case bp_longjmp_master:
aa7d318d 7067 case bp_std_terminate_master:
186c406b 7068 case bp_exception_master:
0e30163f
JK
7069 case bp_gnu_ifunc_resolver:
7070 case bp_gnu_ifunc_resolver_return:
e7e0cddf 7071 case bp_dprintf:
e049a4b5 7072 loc->loc_type = bp_loc_software_breakpoint;
b775012e 7073 mark_breakpoint_location_modified (loc);
e049a4b5
DJ
7074 break;
7075 case bp_hardware_breakpoint:
7076 loc->loc_type = bp_loc_hardware_breakpoint;
b775012e 7077 mark_breakpoint_location_modified (loc);
e049a4b5
DJ
7078 break;
7079 case bp_hardware_watchpoint:
7080 case bp_read_watchpoint:
7081 case bp_access_watchpoint:
7082 loc->loc_type = bp_loc_hardware_watchpoint;
7083 break;
7084 case bp_watchpoint:
ce78b96d 7085 case bp_catchpoint:
15c3d785
PA
7086 case bp_tracepoint:
7087 case bp_fast_tracepoint:
0fb4aa4b 7088 case bp_static_tracepoint:
e049a4b5
DJ
7089 loc->loc_type = bp_loc_other;
7090 break;
7091 default:
e2e0b3e5 7092 internal_error (__FILE__, __LINE__, _("unknown breakpoint type"));
e049a4b5
DJ
7093 }
7094
f431efe5 7095 loc->refc = 1;
28010a5d
PA
7096}
7097
7098/* Allocate a struct bp_location. */
7099
7100static struct bp_location *
7101allocate_bp_location (struct breakpoint *bpt)
7102{
348d480f
PA
7103 return bpt->ops->allocate_location (bpt);
7104}
7cc221ef 7105
f431efe5
PA
7106static void
7107free_bp_location (struct bp_location *loc)
fe3f5fa8 7108{
348d480f 7109 loc->ops->dtor (loc);
4d01a485 7110 delete loc;
fe3f5fa8
VP
7111}
7112
f431efe5
PA
7113/* Increment reference count. */
7114
7115static void
7116incref_bp_location (struct bp_location *bl)
7117{
7118 ++bl->refc;
7119}
7120
7121/* Decrement reference count. If the reference count reaches 0,
7122 destroy the bp_location. Sets *BLP to NULL. */
7123
7124static void
7125decref_bp_location (struct bp_location **blp)
7126{
0807b50c
PA
7127 gdb_assert ((*blp)->refc > 0);
7128
f431efe5
PA
7129 if (--(*blp)->refc == 0)
7130 free_bp_location (*blp);
7131 *blp = NULL;
7132}
7133
346774a9 7134/* Add breakpoint B at the end of the global breakpoint chain. */
c906108c 7135
b270e6f9
TT
7136static breakpoint *
7137add_to_breakpoint_chain (std::unique_ptr<breakpoint> &&b)
c906108c 7138{
346774a9 7139 struct breakpoint *b1;
b270e6f9 7140 struct breakpoint *result = b.get ();
c906108c 7141
346774a9
PA
7142 /* Add this breakpoint to the end of the chain so that a list of
7143 breakpoints will come out in order of increasing numbers. */
7144
7145 b1 = breakpoint_chain;
7146 if (b1 == 0)
b270e6f9 7147 breakpoint_chain = b.release ();
346774a9
PA
7148 else
7149 {
7150 while (b1->next)
7151 b1 = b1->next;
b270e6f9 7152 b1->next = b.release ();
346774a9 7153 }
b270e6f9
TT
7154
7155 return result;
346774a9
PA
7156}
7157
7158/* Initializes breakpoint B with type BPTYPE and no locations yet. */
7159
7160static void
7161init_raw_breakpoint_without_location (struct breakpoint *b,
7162 struct gdbarch *gdbarch,
28010a5d 7163 enum bptype bptype,
c0a91b2b 7164 const struct breakpoint_ops *ops)
346774a9 7165{
348d480f
PA
7166 gdb_assert (ops != NULL);
7167
28010a5d 7168 b->ops = ops;
4d28f7a8 7169 b->type = bptype;
a6d9a66e 7170 b->gdbarch = gdbarch;
c906108c
SS
7171 b->language = current_language->la_language;
7172 b->input_radix = input_radix;
d0fb5eae 7173 b->related_breakpoint = b;
346774a9
PA
7174}
7175
7176/* Helper to set_raw_breakpoint below. Creates a breakpoint
7177 that has type BPTYPE and has no locations as yet. */
346774a9
PA
7178
7179static struct breakpoint *
7180set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
348d480f 7181 enum bptype bptype,
c0a91b2b 7182 const struct breakpoint_ops *ops)
346774a9 7183{
3b0871f4 7184 std::unique_ptr<breakpoint> b = new_breakpoint_from_type (bptype);
346774a9 7185
3b0871f4 7186 init_raw_breakpoint_without_location (b.get (), gdbarch, bptype, ops);
b270e6f9 7187 return add_to_breakpoint_chain (std::move (b));
0d381245
VP
7188}
7189
0e30163f
JK
7190/* Initialize loc->function_name. EXPLICIT_LOC says no indirect function
7191 resolutions should be made as the user specified the location explicitly
7192 enough. */
7193
0d381245 7194static void
0e30163f 7195set_breakpoint_location_function (struct bp_location *loc, int explicit_loc)
0d381245 7196{
2bdf28a0
JK
7197 gdb_assert (loc->owner != NULL);
7198
0d381245 7199 if (loc->owner->type == bp_breakpoint
1042e4c0 7200 || loc->owner->type == bp_hardware_breakpoint
d77f58be 7201 || is_tracepoint (loc->owner))
0d381245 7202 {
0e30163f 7203 int is_gnu_ifunc;
2c02bd72 7204 const char *function_name;
6a3a010b 7205 CORE_ADDR func_addr;
0e30163f 7206
2c02bd72 7207 find_pc_partial_function_gnu_ifunc (loc->address, &function_name,
6a3a010b 7208 &func_addr, NULL, &is_gnu_ifunc);
0e30163f
JK
7209
7210 if (is_gnu_ifunc && !explicit_loc)
7211 {
7212 struct breakpoint *b = loc->owner;
7213
7214 gdb_assert (loc->pspace == current_program_space);
2c02bd72 7215 if (gnu_ifunc_resolve_name (function_name,
0e30163f
JK
7216 &loc->requested_address))
7217 {
7218 /* Recalculate ADDRESS based on new REQUESTED_ADDRESS. */
7219 loc->address = adjust_breakpoint_address (loc->gdbarch,
7220 loc->requested_address,
7221 b->type);
7222 }
7223 else if (b->type == bp_breakpoint && b->loc == loc
7224 && loc->next == NULL && b->related_breakpoint == b)
7225 {
7226 /* Create only the whole new breakpoint of this type but do not
7227 mess more complicated breakpoints with multiple locations. */
7228 b->type = bp_gnu_ifunc_resolver;
6a3a010b
MR
7229 /* Remember the resolver's address for use by the return
7230 breakpoint. */
7231 loc->related_address = func_addr;
0e30163f
JK
7232 }
7233 }
7234
2c02bd72
DE
7235 if (function_name)
7236 loc->function_name = xstrdup (function_name);
0d381245
VP
7237 }
7238}
7239
a6d9a66e 7240/* Attempt to determine architecture of location identified by SAL. */
1bfeeb0f 7241struct gdbarch *
a6d9a66e
UW
7242get_sal_arch (struct symtab_and_line sal)
7243{
7244 if (sal.section)
7245 return get_objfile_arch (sal.section->objfile);
7246 if (sal.symtab)
eb822aa6 7247 return get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
a6d9a66e
UW
7248
7249 return NULL;
7250}
7251
346774a9
PA
7252/* Low level routine for partially initializing a breakpoint of type
7253 BPTYPE. The newly created breakpoint's address, section, source
c56053d2 7254 file name, and line number are provided by SAL.
0d381245
VP
7255
7256 It is expected that the caller will complete the initialization of
7257 the newly created breakpoint struct as well as output any status
c56053d2 7258 information regarding the creation of a new breakpoint. */
0d381245 7259
346774a9
PA
7260static void
7261init_raw_breakpoint (struct breakpoint *b, struct gdbarch *gdbarch,
28010a5d 7262 struct symtab_and_line sal, enum bptype bptype,
c0a91b2b 7263 const struct breakpoint_ops *ops)
0d381245 7264{
28010a5d 7265 init_raw_breakpoint_without_location (b, gdbarch, bptype, ops);
346774a9 7266
3742cc8b 7267 add_location_to_breakpoint (b, &sal);
0d381245 7268
6c95b8df
PA
7269 if (bptype != bp_catchpoint)
7270 gdb_assert (sal.pspace != NULL);
7271
f8eba3c6
TT
7272 /* Store the program space that was used to set the breakpoint,
7273 except for ordinary breakpoints, which are independent of the
7274 program space. */
7275 if (bptype != bp_breakpoint && bptype != bp_hardware_breakpoint)
7276 b->pspace = sal.pspace;
346774a9 7277}
c906108c 7278
346774a9
PA
7279/* set_raw_breakpoint is a low level routine for allocating and
7280 partially initializing a breakpoint of type BPTYPE. The newly
7281 created breakpoint's address, section, source file name, and line
7282 number are provided by SAL. The newly created and partially
7283 initialized breakpoint is added to the breakpoint chain and
7284 is also returned as the value of this function.
7285
7286 It is expected that the caller will complete the initialization of
7287 the newly created breakpoint struct as well as output any status
7288 information regarding the creation of a new breakpoint. In
7289 particular, set_raw_breakpoint does NOT set the breakpoint
7290 number! Care should be taken to not allow an error to occur
7291 prior to completing the initialization of the breakpoint. If this
7292 should happen, a bogus breakpoint will be left on the chain. */
7293
7294struct breakpoint *
7295set_raw_breakpoint (struct gdbarch *gdbarch,
348d480f 7296 struct symtab_and_line sal, enum bptype bptype,
c0a91b2b 7297 const struct breakpoint_ops *ops)
346774a9 7298{
3b0871f4 7299 std::unique_ptr<breakpoint> b = new_breakpoint_from_type (bptype);
346774a9 7300
3b0871f4 7301 init_raw_breakpoint (b.get (), gdbarch, sal, bptype, ops);
b270e6f9 7302 return add_to_breakpoint_chain (std::move (b));
c906108c
SS
7303}
7304
53a5351d 7305/* Call this routine when stepping and nexting to enable a breakpoint
186c406b
TT
7306 if we do a longjmp() or 'throw' in TP. FRAME is the frame which
7307 initiated the operation. */
c906108c
SS
7308
7309void
186c406b 7310set_longjmp_breakpoint (struct thread_info *tp, struct frame_id frame)
c906108c 7311{
35df4500 7312 struct breakpoint *b, *b_tmp;
5d5658a1 7313 int thread = tp->global_num;
0fd8e87f
UW
7314
7315 /* To avoid having to rescan all objfile symbols at every step,
7316 we maintain a list of continually-inserted but always disabled
7317 longjmp "master" breakpoints. Here, we simply create momentary
7318 clones of those and enable them for the requested thread. */
35df4500 7319 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6c95b8df 7320 if (b->pspace == current_program_space
186c406b
TT
7321 && (b->type == bp_longjmp_master
7322 || b->type == bp_exception_master))
0fd8e87f 7323 {
06edf0c0
PA
7324 enum bptype type = b->type == bp_longjmp_master ? bp_longjmp : bp_exception;
7325 struct breakpoint *clone;
cc59ec59 7326
e2e4d78b
JK
7327 /* longjmp_breakpoint_ops ensures INITIATING_FRAME is cleared again
7328 after their removal. */
06edf0c0 7329 clone = momentary_breakpoint_from_master (b, type,
c1fc2657 7330 &momentary_breakpoint_ops, 1);
0fd8e87f
UW
7331 clone->thread = thread;
7332 }
186c406b
TT
7333
7334 tp->initiating_frame = frame;
c906108c
SS
7335}
7336
611c83ae 7337/* Delete all longjmp breakpoints from THREAD. */
c906108c 7338void
611c83ae 7339delete_longjmp_breakpoint (int thread)
c906108c 7340{
35df4500 7341 struct breakpoint *b, *b_tmp;
c906108c 7342
35df4500 7343 ALL_BREAKPOINTS_SAFE (b, b_tmp)
186c406b 7344 if (b->type == bp_longjmp || b->type == bp_exception)
611c83ae
PA
7345 {
7346 if (b->thread == thread)
7347 delete_breakpoint (b);
7348 }
c906108c
SS
7349}
7350
f59f708a
PA
7351void
7352delete_longjmp_breakpoint_at_next_stop (int thread)
7353{
7354 struct breakpoint *b, *b_tmp;
7355
7356 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7357 if (b->type == bp_longjmp || b->type == bp_exception)
7358 {
7359 if (b->thread == thread)
7360 b->disposition = disp_del_at_next_stop;
7361 }
7362}
7363
e2e4d78b
JK
7364/* Place breakpoints of type bp_longjmp_call_dummy to catch longjmp for
7365 INFERIOR_PTID thread. Chain them all by RELATED_BREAKPOINT and return
7366 pointer to any of them. Return NULL if this system cannot place longjmp
7367 breakpoints. */
7368
7369struct breakpoint *
7370set_longjmp_breakpoint_for_call_dummy (void)
7371{
7372 struct breakpoint *b, *retval = NULL;
7373
7374 ALL_BREAKPOINTS (b)
7375 if (b->pspace == current_program_space && b->type == bp_longjmp_master)
7376 {
7377 struct breakpoint *new_b;
7378
7379 new_b = momentary_breakpoint_from_master (b, bp_longjmp_call_dummy,
a1aa2221
LM
7380 &momentary_breakpoint_ops,
7381 1);
5d5658a1 7382 new_b->thread = ptid_to_global_thread_id (inferior_ptid);
e2e4d78b
JK
7383
7384 /* Link NEW_B into the chain of RETVAL breakpoints. */
7385
7386 gdb_assert (new_b->related_breakpoint == new_b);
7387 if (retval == NULL)
7388 retval = new_b;
7389 new_b->related_breakpoint = retval;
7390 while (retval->related_breakpoint != new_b->related_breakpoint)
7391 retval = retval->related_breakpoint;
7392 retval->related_breakpoint = new_b;
7393 }
7394
7395 return retval;
7396}
7397
7398/* Verify all existing dummy frames and their associated breakpoints for
b67a2c6f 7399 TP. Remove those which can no longer be found in the current frame
e2e4d78b
JK
7400 stack.
7401
7402 You should call this function only at places where it is safe to currently
7403 unwind the whole stack. Failed stack unwind would discard live dummy
7404 frames. */
7405
7406void
b67a2c6f 7407check_longjmp_breakpoint_for_call_dummy (struct thread_info *tp)
e2e4d78b
JK
7408{
7409 struct breakpoint *b, *b_tmp;
7410
7411 ALL_BREAKPOINTS_SAFE (b, b_tmp)
5d5658a1 7412 if (b->type == bp_longjmp_call_dummy && b->thread == tp->global_num)
e2e4d78b
JK
7413 {
7414 struct breakpoint *dummy_b = b->related_breakpoint;
7415
7416 while (dummy_b != b && dummy_b->type != bp_call_dummy)
7417 dummy_b = dummy_b->related_breakpoint;
7418 if (dummy_b->type != bp_call_dummy
7419 || frame_find_by_id (dummy_b->frame_id) != NULL)
7420 continue;
7421
b67a2c6f 7422 dummy_frame_discard (dummy_b->frame_id, tp->ptid);
e2e4d78b
JK
7423
7424 while (b->related_breakpoint != b)
7425 {
7426 if (b_tmp == b->related_breakpoint)
7427 b_tmp = b->related_breakpoint->next;
7428 delete_breakpoint (b->related_breakpoint);
7429 }
7430 delete_breakpoint (b);
7431 }
7432}
7433
1900040c
MS
7434void
7435enable_overlay_breakpoints (void)
7436{
52f0bd74 7437 struct breakpoint *b;
1900040c
MS
7438
7439 ALL_BREAKPOINTS (b)
7440 if (b->type == bp_overlay_event)
7441 {
7442 b->enable_state = bp_enabled;
44702360 7443 update_global_location_list (UGLL_MAY_INSERT);
c02f5703 7444 overlay_events_enabled = 1;
1900040c
MS
7445 }
7446}
7447
7448void
7449disable_overlay_breakpoints (void)
7450{
52f0bd74 7451 struct breakpoint *b;
1900040c
MS
7452
7453 ALL_BREAKPOINTS (b)
7454 if (b->type == bp_overlay_event)
7455 {
7456 b->enable_state = bp_disabled;
44702360 7457 update_global_location_list (UGLL_DONT_INSERT);
c02f5703 7458 overlay_events_enabled = 0;
1900040c
MS
7459 }
7460}
7461
aa7d318d
TT
7462/* Set an active std::terminate breakpoint for each std::terminate
7463 master breakpoint. */
7464void
7465set_std_terminate_breakpoint (void)
7466{
35df4500 7467 struct breakpoint *b, *b_tmp;
aa7d318d 7468
35df4500 7469 ALL_BREAKPOINTS_SAFE (b, b_tmp)
aa7d318d
TT
7470 if (b->pspace == current_program_space
7471 && b->type == bp_std_terminate_master)
7472 {
06edf0c0 7473 momentary_breakpoint_from_master (b, bp_std_terminate,
a1aa2221 7474 &momentary_breakpoint_ops, 1);
aa7d318d
TT
7475 }
7476}
7477
7478/* Delete all the std::terminate breakpoints. */
7479void
7480delete_std_terminate_breakpoint (void)
7481{
35df4500 7482 struct breakpoint *b, *b_tmp;
aa7d318d 7483
35df4500 7484 ALL_BREAKPOINTS_SAFE (b, b_tmp)
aa7d318d
TT
7485 if (b->type == bp_std_terminate)
7486 delete_breakpoint (b);
7487}
7488
c4093a6a 7489struct breakpoint *
a6d9a66e 7490create_thread_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
c4093a6a
JM
7491{
7492 struct breakpoint *b;
c4093a6a 7493
06edf0c0
PA
7494 b = create_internal_breakpoint (gdbarch, address, bp_thread_event,
7495 &internal_breakpoint_ops);
7496
b5de0fa7 7497 b->enable_state = bp_enabled;
f00aae0f 7498 /* location has to be used or breakpoint_re_set will delete me. */
d28cd78a 7499 b->location = new_address_location (b->loc->address, NULL, 0);
c4093a6a 7500
44702360 7501 update_global_location_list_nothrow (UGLL_MAY_INSERT);
74960c60 7502
c4093a6a
JM
7503 return b;
7504}
7505
0101ce28
JJ
7506struct lang_and_radix
7507 {
7508 enum language lang;
7509 int radix;
7510 };
7511
4efc6507
DE
7512/* Create a breakpoint for JIT code registration and unregistration. */
7513
7514struct breakpoint *
7515create_jit_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
7516{
2a7f3dff
PA
7517 return create_internal_breakpoint (gdbarch, address, bp_jit_event,
7518 &internal_breakpoint_ops);
4efc6507 7519}
0101ce28 7520
03673fc7
PP
7521/* Remove JIT code registration and unregistration breakpoint(s). */
7522
7523void
7524remove_jit_event_breakpoints (void)
7525{
7526 struct breakpoint *b, *b_tmp;
7527
7528 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7529 if (b->type == bp_jit_event
7530 && b->loc->pspace == current_program_space)
7531 delete_breakpoint (b);
7532}
7533
cae688ec
JJ
7534void
7535remove_solib_event_breakpoints (void)
7536{
35df4500 7537 struct breakpoint *b, *b_tmp;
cae688ec 7538
35df4500 7539 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6c95b8df
PA
7540 if (b->type == bp_shlib_event
7541 && b->loc->pspace == current_program_space)
cae688ec
JJ
7542 delete_breakpoint (b);
7543}
7544
f37f681c
PA
7545/* See breakpoint.h. */
7546
7547void
7548remove_solib_event_breakpoints_at_next_stop (void)
7549{
7550 struct breakpoint *b, *b_tmp;
7551
7552 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7553 if (b->type == bp_shlib_event
7554 && b->loc->pspace == current_program_space)
7555 b->disposition = disp_del_at_next_stop;
7556}
7557
04086b45
PA
7558/* Helper for create_solib_event_breakpoint /
7559 create_and_insert_solib_event_breakpoint. Allows specifying which
7560 INSERT_MODE to pass through to update_global_location_list. */
7561
7562static struct breakpoint *
7563create_solib_event_breakpoint_1 (struct gdbarch *gdbarch, CORE_ADDR address,
7564 enum ugll_insert_mode insert_mode)
cae688ec
JJ
7565{
7566 struct breakpoint *b;
7567
06edf0c0
PA
7568 b = create_internal_breakpoint (gdbarch, address, bp_shlib_event,
7569 &internal_breakpoint_ops);
04086b45 7570 update_global_location_list_nothrow (insert_mode);
cae688ec
JJ
7571 return b;
7572}
7573
04086b45
PA
7574struct breakpoint *
7575create_solib_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
7576{
7577 return create_solib_event_breakpoint_1 (gdbarch, address, UGLL_MAY_INSERT);
7578}
7579
f37f681c
PA
7580/* See breakpoint.h. */
7581
7582struct breakpoint *
7583create_and_insert_solib_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
7584{
7585 struct breakpoint *b;
7586
04086b45
PA
7587 /* Explicitly tell update_global_location_list to insert
7588 locations. */
7589 b = create_solib_event_breakpoint_1 (gdbarch, address, UGLL_INSERT);
f37f681c
PA
7590 if (!b->loc->inserted)
7591 {
7592 delete_breakpoint (b);
7593 return NULL;
7594 }
7595 return b;
7596}
7597
cae688ec
JJ
7598/* Disable any breakpoints that are on code in shared libraries. Only
7599 apply to enabled breakpoints, disabled ones can just stay disabled. */
7600
7601void
cb851954 7602disable_breakpoints_in_shlibs (void)
cae688ec 7603{
876fa593 7604 struct bp_location *loc, **locp_tmp;
cae688ec 7605
876fa593 7606 ALL_BP_LOCATIONS (loc, locp_tmp)
cae688ec 7607 {
2bdf28a0 7608 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
0d381245 7609 struct breakpoint *b = loc->owner;
2bdf28a0 7610
4a64f543
MS
7611 /* We apply the check to all breakpoints, including disabled for
7612 those with loc->duplicate set. This is so that when breakpoint
7613 becomes enabled, or the duplicate is removed, gdb will try to
7614 insert all breakpoints. If we don't set shlib_disabled here,
7615 we'll try to insert those breakpoints and fail. */
1042e4c0 7616 if (((b->type == bp_breakpoint)
508ccb1f 7617 || (b->type == bp_jit_event)
1042e4c0 7618 || (b->type == bp_hardware_breakpoint)
d77f58be 7619 || (is_tracepoint (b)))
6c95b8df 7620 && loc->pspace == current_program_space
0d381245 7621 && !loc->shlib_disabled
6c95b8df 7622 && solib_name_from_address (loc->pspace, loc->address)
a77053c2 7623 )
0d381245
VP
7624 {
7625 loc->shlib_disabled = 1;
7626 }
cae688ec
JJ
7627 }
7628}
7629
63644780
NB
7630/* Disable any breakpoints and tracepoints that are in SOLIB upon
7631 notification of unloaded_shlib. Only apply to enabled breakpoints,
7632 disabled ones can just stay disabled. */
84acb35a 7633
75149521 7634static void
84acb35a
JJ
7635disable_breakpoints_in_unloaded_shlib (struct so_list *solib)
7636{
876fa593 7637 struct bp_location *loc, **locp_tmp;
84acb35a
JJ
7638 int disabled_shlib_breaks = 0;
7639
876fa593 7640 ALL_BP_LOCATIONS (loc, locp_tmp)
84acb35a 7641 {
2bdf28a0 7642 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
0d381245 7643 struct breakpoint *b = loc->owner;
cc59ec59 7644
1e4d1764 7645 if (solib->pspace == loc->pspace
e2dd7057 7646 && !loc->shlib_disabled
1e4d1764
YQ
7647 && (((b->type == bp_breakpoint
7648 || b->type == bp_jit_event
7649 || b->type == bp_hardware_breakpoint)
7650 && (loc->loc_type == bp_loc_hardware_breakpoint
7651 || loc->loc_type == bp_loc_software_breakpoint))
7652 || is_tracepoint (b))
e2dd7057 7653 && solib_contains_address_p (solib, loc->address))
84acb35a 7654 {
e2dd7057
PP
7655 loc->shlib_disabled = 1;
7656 /* At this point, we cannot rely on remove_breakpoint
7657 succeeding so we must mark the breakpoint as not inserted
7658 to prevent future errors occurring in remove_breakpoints. */
7659 loc->inserted = 0;
8d3788bd
VP
7660
7661 /* This may cause duplicate notifications for the same breakpoint. */
7662 observer_notify_breakpoint_modified (b);
7663
e2dd7057
PP
7664 if (!disabled_shlib_breaks)
7665 {
223ffa71 7666 target_terminal::ours_for_output ();
3e43a32a
MS
7667 warning (_("Temporarily disabling breakpoints "
7668 "for unloaded shared library \"%s\""),
e2dd7057 7669 solib->so_name);
84acb35a 7670 }
e2dd7057 7671 disabled_shlib_breaks = 1;
84acb35a
JJ
7672 }
7673 }
84acb35a
JJ
7674}
7675
63644780
NB
7676/* Disable any breakpoints and tracepoints in OBJFILE upon
7677 notification of free_objfile. Only apply to enabled breakpoints,
7678 disabled ones can just stay disabled. */
7679
7680static void
7681disable_breakpoints_in_freed_objfile (struct objfile *objfile)
7682{
7683 struct breakpoint *b;
7684
7685 if (objfile == NULL)
7686 return;
7687
d03de421
PA
7688 /* OBJF_SHARED|OBJF_USERLOADED objfiles are dynamic modules manually
7689 managed by the user with add-symbol-file/remove-symbol-file.
7690 Similarly to how breakpoints in shared libraries are handled in
7691 response to "nosharedlibrary", mark breakpoints in such modules
08351840
PA
7692 shlib_disabled so they end up uninserted on the next global
7693 location list update. Shared libraries not loaded by the user
7694 aren't handled here -- they're already handled in
7695 disable_breakpoints_in_unloaded_shlib, called by solib.c's
7696 solib_unloaded observer. We skip objfiles that are not
d03de421
PA
7697 OBJF_SHARED as those aren't considered dynamic objects (e.g. the
7698 main objfile). */
7699 if ((objfile->flags & OBJF_SHARED) == 0
7700 || (objfile->flags & OBJF_USERLOADED) == 0)
63644780
NB
7701 return;
7702
7703 ALL_BREAKPOINTS (b)
7704 {
7705 struct bp_location *loc;
7706 int bp_modified = 0;
7707
7708 if (!is_breakpoint (b) && !is_tracepoint (b))
7709 continue;
7710
7711 for (loc = b->loc; loc != NULL; loc = loc->next)
7712 {
7713 CORE_ADDR loc_addr = loc->address;
7714
7715 if (loc->loc_type != bp_loc_hardware_breakpoint
7716 && loc->loc_type != bp_loc_software_breakpoint)
7717 continue;
7718
7719 if (loc->shlib_disabled != 0)
7720 continue;
7721
7722 if (objfile->pspace != loc->pspace)
7723 continue;
7724
7725 if (loc->loc_type != bp_loc_hardware_breakpoint
7726 && loc->loc_type != bp_loc_software_breakpoint)
7727 continue;
7728
7729 if (is_addr_in_objfile (loc_addr, objfile))
7730 {
7731 loc->shlib_disabled = 1;
08351840
PA
7732 /* At this point, we don't know whether the object was
7733 unmapped from the inferior or not, so leave the
7734 inserted flag alone. We'll handle failure to
7735 uninsert quietly, in case the object was indeed
7736 unmapped. */
63644780
NB
7737
7738 mark_breakpoint_location_modified (loc);
7739
7740 bp_modified = 1;
7741 }
7742 }
7743
7744 if (bp_modified)
7745 observer_notify_breakpoint_modified (b);
7746 }
7747}
7748
ce78b96d
JB
7749/* FORK & VFORK catchpoints. */
7750
e29a4733 7751/* An instance of this type is used to represent a fork or vfork
c1fc2657
SM
7752 catchpoint. A breakpoint is really of this type iff its ops pointer points
7753 to CATCH_FORK_BREAKPOINT_OPS. */
e29a4733 7754
c1fc2657 7755struct fork_catchpoint : public breakpoint
e29a4733 7756{
e29a4733
PA
7757 /* Process id of a child process whose forking triggered this
7758 catchpoint. This field is only valid immediately after this
7759 catchpoint has triggered. */
7760 ptid_t forked_inferior_pid;
7761};
7762
4a64f543
MS
7763/* Implement the "insert" breakpoint_ops method for fork
7764 catchpoints. */
ce78b96d 7765
77b06cd7
TJB
7766static int
7767insert_catch_fork (struct bp_location *bl)
ce78b96d 7768{
dfd4cc63 7769 return target_insert_fork_catchpoint (ptid_get_pid (inferior_ptid));
ce78b96d
JB
7770}
7771
4a64f543
MS
7772/* Implement the "remove" breakpoint_ops method for fork
7773 catchpoints. */
ce78b96d
JB
7774
7775static int
73971819 7776remove_catch_fork (struct bp_location *bl, enum remove_bp_reason reason)
ce78b96d 7777{
dfd4cc63 7778 return target_remove_fork_catchpoint (ptid_get_pid (inferior_ptid));
ce78b96d
JB
7779}
7780
7781/* Implement the "breakpoint_hit" breakpoint_ops method for fork
7782 catchpoints. */
7783
7784static int
f1310107 7785breakpoint_hit_catch_fork (const struct bp_location *bl,
bd522513 7786 const address_space *aspace, CORE_ADDR bp_addr,
09ac7c10 7787 const struct target_waitstatus *ws)
ce78b96d 7788{
e29a4733
PA
7789 struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
7790
f90263c1
TT
7791 if (ws->kind != TARGET_WAITKIND_FORKED)
7792 return 0;
7793
7794 c->forked_inferior_pid = ws->value.related_pid;
7795 return 1;
ce78b96d
JB
7796}
7797
4a64f543
MS
7798/* Implement the "print_it" breakpoint_ops method for fork
7799 catchpoints. */
ce78b96d
JB
7800
7801static enum print_stop_action
348d480f 7802print_it_catch_fork (bpstat bs)
ce78b96d 7803{
36dfb11c 7804 struct ui_out *uiout = current_uiout;
348d480f
PA
7805 struct breakpoint *b = bs->breakpoint_at;
7806 struct fork_catchpoint *c = (struct fork_catchpoint *) bs->breakpoint_at;
e29a4733 7807
ce78b96d 7808 annotate_catchpoint (b->number);
f303dbd6 7809 maybe_print_thread_hit_breakpoint (uiout);
36dfb11c 7810 if (b->disposition == disp_del)
112e8700 7811 uiout->text ("Temporary catchpoint ");
36dfb11c 7812 else
112e8700
SM
7813 uiout->text ("Catchpoint ");
7814 if (uiout->is_mi_like_p ())
36dfb11c 7815 {
112e8700
SM
7816 uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_FORK));
7817 uiout->field_string ("disp", bpdisp_text (b->disposition));
36dfb11c 7818 }
112e8700
SM
7819 uiout->field_int ("bkptno", b->number);
7820 uiout->text (" (forked process ");
7821 uiout->field_int ("newpid", ptid_get_pid (c->forked_inferior_pid));
7822 uiout->text ("), ");
ce78b96d
JB
7823 return PRINT_SRC_AND_LOC;
7824}
7825
4a64f543
MS
7826/* Implement the "print_one" breakpoint_ops method for fork
7827 catchpoints. */
ce78b96d
JB
7828
7829static void
a6d9a66e 7830print_one_catch_fork (struct breakpoint *b, struct bp_location **last_loc)
ce78b96d 7831{
e29a4733 7832 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
79a45b7d 7833 struct value_print_options opts;
79a45e25 7834 struct ui_out *uiout = current_uiout;
79a45b7d
TT
7835
7836 get_user_print_options (&opts);
7837
4a64f543
MS
7838 /* Field 4, the address, is omitted (which makes the columns not
7839 line up too nicely with the headers, but the effect is relatively
7840 readable). */
79a45b7d 7841 if (opts.addressprint)
112e8700 7842 uiout->field_skip ("addr");
ce78b96d 7843 annotate_field (5);
112e8700 7844 uiout->text ("fork");
e29a4733 7845 if (!ptid_equal (c->forked_inferior_pid, null_ptid))
ce78b96d 7846 {
112e8700
SM
7847 uiout->text (", process ");
7848 uiout->field_int ("what", ptid_get_pid (c->forked_inferior_pid));
7849 uiout->spaces (1);
ce78b96d 7850 }
8ac3646f 7851
112e8700
SM
7852 if (uiout->is_mi_like_p ())
7853 uiout->field_string ("catch-type", "fork");
ce78b96d
JB
7854}
7855
7856/* Implement the "print_mention" breakpoint_ops method for fork
7857 catchpoints. */
7858
7859static void
7860print_mention_catch_fork (struct breakpoint *b)
7861{
7862 printf_filtered (_("Catchpoint %d (fork)"), b->number);
7863}
7864
6149aea9
PA
7865/* Implement the "print_recreate" breakpoint_ops method for fork
7866 catchpoints. */
7867
7868static void
7869print_recreate_catch_fork (struct breakpoint *b, struct ui_file *fp)
7870{
7871 fprintf_unfiltered (fp, "catch fork");
d9b3f62e 7872 print_recreate_thread (b, fp);
6149aea9
PA
7873}
7874
ce78b96d
JB
7875/* The breakpoint_ops structure to be used in fork catchpoints. */
7876
2060206e 7877static struct breakpoint_ops catch_fork_breakpoint_ops;
ce78b96d 7878
4a64f543
MS
7879/* Implement the "insert" breakpoint_ops method for vfork
7880 catchpoints. */
ce78b96d 7881
77b06cd7
TJB
7882static int
7883insert_catch_vfork (struct bp_location *bl)
ce78b96d 7884{
dfd4cc63 7885 return target_insert_vfork_catchpoint (ptid_get_pid (inferior_ptid));
ce78b96d
JB
7886}
7887
4a64f543
MS
7888/* Implement the "remove" breakpoint_ops method for vfork
7889 catchpoints. */
ce78b96d
JB
7890
7891static int
73971819 7892remove_catch_vfork (struct bp_location *bl, enum remove_bp_reason reason)
ce78b96d 7893{
dfd4cc63 7894 return target_remove_vfork_catchpoint (ptid_get_pid (inferior_ptid));
ce78b96d
JB
7895}
7896
7897/* Implement the "breakpoint_hit" breakpoint_ops method for vfork
7898 catchpoints. */
7899
7900static int
f1310107 7901breakpoint_hit_catch_vfork (const struct bp_location *bl,
bd522513 7902 const address_space *aspace, CORE_ADDR bp_addr,
09ac7c10 7903 const struct target_waitstatus *ws)
ce78b96d 7904{
e29a4733
PA
7905 struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
7906
f90263c1
TT
7907 if (ws->kind != TARGET_WAITKIND_VFORKED)
7908 return 0;
7909
7910 c->forked_inferior_pid = ws->value.related_pid;
7911 return 1;
ce78b96d
JB
7912}
7913
4a64f543
MS
7914/* Implement the "print_it" breakpoint_ops method for vfork
7915 catchpoints. */
ce78b96d
JB
7916
7917static enum print_stop_action
348d480f 7918print_it_catch_vfork (bpstat bs)
ce78b96d 7919{
36dfb11c 7920 struct ui_out *uiout = current_uiout;
348d480f 7921 struct breakpoint *b = bs->breakpoint_at;
e29a4733
PA
7922 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
7923
ce78b96d 7924 annotate_catchpoint (b->number);
f303dbd6 7925 maybe_print_thread_hit_breakpoint (uiout);
36dfb11c 7926 if (b->disposition == disp_del)
112e8700 7927 uiout->text ("Temporary catchpoint ");
36dfb11c 7928 else
112e8700
SM
7929 uiout->text ("Catchpoint ");
7930 if (uiout->is_mi_like_p ())
36dfb11c 7931 {
112e8700
SM
7932 uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_VFORK));
7933 uiout->field_string ("disp", bpdisp_text (b->disposition));
36dfb11c 7934 }
112e8700
SM
7935 uiout->field_int ("bkptno", b->number);
7936 uiout->text (" (vforked process ");
7937 uiout->field_int ("newpid", ptid_get_pid (c->forked_inferior_pid));
7938 uiout->text ("), ");
ce78b96d
JB
7939 return PRINT_SRC_AND_LOC;
7940}
7941
4a64f543
MS
7942/* Implement the "print_one" breakpoint_ops method for vfork
7943 catchpoints. */
ce78b96d
JB
7944
7945static void
a6d9a66e 7946print_one_catch_vfork (struct breakpoint *b, struct bp_location **last_loc)
ce78b96d 7947{
e29a4733 7948 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
79a45b7d 7949 struct value_print_options opts;
79a45e25 7950 struct ui_out *uiout = current_uiout;
79a45b7d
TT
7951
7952 get_user_print_options (&opts);
4a64f543
MS
7953 /* Field 4, the address, is omitted (which makes the columns not
7954 line up too nicely with the headers, but the effect is relatively
7955 readable). */
79a45b7d 7956 if (opts.addressprint)
112e8700 7957 uiout->field_skip ("addr");
ce78b96d 7958 annotate_field (5);
112e8700 7959 uiout->text ("vfork");
e29a4733 7960 if (!ptid_equal (c->forked_inferior_pid, null_ptid))
ce78b96d 7961 {
112e8700
SM
7962 uiout->text (", process ");
7963 uiout->field_int ("what", ptid_get_pid (c->forked_inferior_pid));
7964 uiout->spaces (1);
ce78b96d 7965 }
8ac3646f 7966
112e8700
SM
7967 if (uiout->is_mi_like_p ())
7968 uiout->field_string ("catch-type", "vfork");
ce78b96d
JB
7969}
7970
7971/* Implement the "print_mention" breakpoint_ops method for vfork
7972 catchpoints. */
7973
7974static void
7975print_mention_catch_vfork (struct breakpoint *b)
7976{
7977 printf_filtered (_("Catchpoint %d (vfork)"), b->number);
7978}
7979
6149aea9
PA
7980/* Implement the "print_recreate" breakpoint_ops method for vfork
7981 catchpoints. */
7982
7983static void
7984print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
7985{
7986 fprintf_unfiltered (fp, "catch vfork");
d9b3f62e 7987 print_recreate_thread (b, fp);
6149aea9
PA
7988}
7989
ce78b96d
JB
7990/* The breakpoint_ops structure to be used in vfork catchpoints. */
7991
2060206e 7992static struct breakpoint_ops catch_vfork_breakpoint_ops;
ce78b96d 7993
edcc5120 7994/* An instance of this type is used to represent an solib catchpoint.
c1fc2657 7995 A breakpoint is really of this type iff its ops pointer points to
edcc5120
TT
7996 CATCH_SOLIB_BREAKPOINT_OPS. */
7997
c1fc2657 7998struct solib_catchpoint : public breakpoint
edcc5120 7999{
c1fc2657 8000 ~solib_catchpoint () override;
edcc5120
TT
8001
8002 /* True for "catch load", false for "catch unload". */
8003 unsigned char is_load;
8004
8005 /* Regular expression to match, if any. COMPILED is only valid when
8006 REGEX is non-NULL. */
8007 char *regex;
2d7cc5c7 8008 std::unique_ptr<compiled_regex> compiled;
edcc5120
TT
8009};
8010
c1fc2657 8011solib_catchpoint::~solib_catchpoint ()
edcc5120 8012{
c1fc2657 8013 xfree (this->regex);
edcc5120
TT
8014}
8015
8016static int
8017insert_catch_solib (struct bp_location *ignore)
8018{
8019 return 0;
8020}
8021
8022static int
73971819 8023remove_catch_solib (struct bp_location *ignore, enum remove_bp_reason reason)
edcc5120
TT
8024{
8025 return 0;
8026}
8027
8028static int
8029breakpoint_hit_catch_solib (const struct bp_location *bl,
bd522513 8030 const address_space *aspace,
edcc5120
TT
8031 CORE_ADDR bp_addr,
8032 const struct target_waitstatus *ws)
8033{
8034 struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
8035 struct breakpoint *other;
8036
8037 if (ws->kind == TARGET_WAITKIND_LOADED)
8038 return 1;
8039
8040 ALL_BREAKPOINTS (other)
8041 {
8042 struct bp_location *other_bl;
8043
8044 if (other == bl->owner)
8045 continue;
8046
8047 if (other->type != bp_shlib_event)
8048 continue;
8049
c1fc2657 8050 if (self->pspace != NULL && other->pspace != self->pspace)
edcc5120
TT
8051 continue;
8052
8053 for (other_bl = other->loc; other_bl != NULL; other_bl = other_bl->next)
8054 {
8055 if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
8056 return 1;
8057 }
8058 }
8059
8060 return 0;
8061}
8062
8063static void
8064check_status_catch_solib (struct bpstats *bs)
8065{
8066 struct solib_catchpoint *self
8067 = (struct solib_catchpoint *) bs->breakpoint_at;
8068 int ix;
8069
8070 if (self->is_load)
8071 {
8072 struct so_list *iter;
8073
8074 for (ix = 0;
8075 VEC_iterate (so_list_ptr, current_program_space->added_solibs,
8076 ix, iter);
8077 ++ix)
8078 {
8079 if (!self->regex
2d7cc5c7 8080 || self->compiled->exec (iter->so_name, 0, NULL, 0) == 0)
edcc5120
TT
8081 return;
8082 }
8083 }
8084 else
8085 {
8086 char *iter;
8087
8088 for (ix = 0;
8089 VEC_iterate (char_ptr, current_program_space->deleted_solibs,
8090 ix, iter);
8091 ++ix)
8092 {
8093 if (!self->regex
2d7cc5c7 8094 || self->compiled->exec (iter, 0, NULL, 0) == 0)
edcc5120
TT
8095 return;
8096 }
8097 }
8098
8099 bs->stop = 0;
8100 bs->print_it = print_it_noop;
8101}
8102
8103static enum print_stop_action
8104print_it_catch_solib (bpstat bs)
8105{
8106 struct breakpoint *b = bs->breakpoint_at;
8107 struct ui_out *uiout = current_uiout;
8108
8109 annotate_catchpoint (b->number);
f303dbd6 8110 maybe_print_thread_hit_breakpoint (uiout);
edcc5120 8111 if (b->disposition == disp_del)
112e8700 8112 uiout->text ("Temporary catchpoint ");
edcc5120 8113 else
112e8700
SM
8114 uiout->text ("Catchpoint ");
8115 uiout->field_int ("bkptno", b->number);
8116 uiout->text ("\n");
8117 if (uiout->is_mi_like_p ())
8118 uiout->field_string ("disp", bpdisp_text (b->disposition));
edcc5120
TT
8119 print_solib_event (1);
8120 return PRINT_SRC_AND_LOC;
8121}
8122
8123static void
8124print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
8125{
8126 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
8127 struct value_print_options opts;
8128 struct ui_out *uiout = current_uiout;
8129 char *msg;
8130
8131 get_user_print_options (&opts);
8132 /* Field 4, the address, is omitted (which makes the columns not
8133 line up too nicely with the headers, but the effect is relatively
8134 readable). */
8135 if (opts.addressprint)
8136 {
8137 annotate_field (4);
112e8700 8138 uiout->field_skip ("addr");
edcc5120
TT
8139 }
8140
8141 annotate_field (5);
8142 if (self->is_load)
8143 {
8144 if (self->regex)
8145 msg = xstrprintf (_("load of library matching %s"), self->regex);
8146 else
8147 msg = xstrdup (_("load of library"));
8148 }
8149 else
8150 {
8151 if (self->regex)
8152 msg = xstrprintf (_("unload of library matching %s"), self->regex);
8153 else
8154 msg = xstrdup (_("unload of library"));
8155 }
112e8700 8156 uiout->field_string ("what", msg);
edcc5120 8157 xfree (msg);
8ac3646f 8158
112e8700
SM
8159 if (uiout->is_mi_like_p ())
8160 uiout->field_string ("catch-type", self->is_load ? "load" : "unload");
edcc5120
TT
8161}
8162
8163static void
8164print_mention_catch_solib (struct breakpoint *b)
8165{
8166 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
8167
8168 printf_filtered (_("Catchpoint %d (%s)"), b->number,
8169 self->is_load ? "load" : "unload");
8170}
8171
8172static void
8173print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
8174{
8175 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
8176
8177 fprintf_unfiltered (fp, "%s %s",
8178 b->disposition == disp_del ? "tcatch" : "catch",
8179 self->is_load ? "load" : "unload");
8180 if (self->regex)
8181 fprintf_unfiltered (fp, " %s", self->regex);
8182 fprintf_unfiltered (fp, "\n");
8183}
8184
8185static struct breakpoint_ops catch_solib_breakpoint_ops;
8186
91985142
MG
8187/* Shared helper function (MI and CLI) for creating and installing
8188 a shared object event catchpoint. If IS_LOAD is non-zero then
8189 the events to be caught are load events, otherwise they are
8190 unload events. If IS_TEMP is non-zero the catchpoint is a
8191 temporary one. If ENABLED is non-zero the catchpoint is
8192 created in an enabled state. */
edcc5120 8193
91985142 8194void
a121b7c1 8195add_solib_catchpoint (const char *arg, int is_load, int is_temp, int enabled)
edcc5120 8196{
edcc5120 8197 struct gdbarch *gdbarch = get_current_arch ();
edcc5120 8198
edcc5120
TT
8199 if (!arg)
8200 arg = "";
f1735a53 8201 arg = skip_spaces (arg);
edcc5120 8202
36bd8eaa 8203 std::unique_ptr<solib_catchpoint> c (new solib_catchpoint ());
edcc5120
TT
8204
8205 if (*arg != '\0')
8206 {
2d7cc5c7
PA
8207 c->compiled.reset (new compiled_regex (arg, REG_NOSUB,
8208 _("Invalid regexp")));
edcc5120
TT
8209 c->regex = xstrdup (arg);
8210 }
8211
8212 c->is_load = is_load;
36bd8eaa 8213 init_catchpoint (c.get (), gdbarch, is_temp, NULL,
edcc5120
TT
8214 &catch_solib_breakpoint_ops);
8215
c1fc2657 8216 c->enable_state = enabled ? bp_enabled : bp_disabled;
91985142 8217
b270e6f9 8218 install_breakpoint (0, std::move (c), 1);
edcc5120
TT
8219}
8220
91985142
MG
8221/* A helper function that does all the work for "catch load" and
8222 "catch unload". */
8223
8224static void
eb4c3f4a 8225catch_load_or_unload (const char *arg, int from_tty, int is_load,
91985142
MG
8226 struct cmd_list_element *command)
8227{
8228 int tempflag;
8229 const int enabled = 1;
8230
8231 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
8232
8233 add_solib_catchpoint (arg, is_load, tempflag, enabled);
8234}
8235
edcc5120 8236static void
eb4c3f4a 8237catch_load_command_1 (const char *arg, int from_tty,
edcc5120
TT
8238 struct cmd_list_element *command)
8239{
8240 catch_load_or_unload (arg, from_tty, 1, command);
8241}
8242
8243static void
eb4c3f4a 8244catch_unload_command_1 (const char *arg, int from_tty,
edcc5120
TT
8245 struct cmd_list_element *command)
8246{
8247 catch_load_or_unload (arg, from_tty, 0, command);
8248}
8249
346774a9
PA
8250/* Initialize a new breakpoint of the bp_catchpoint kind. If TEMPFLAG
8251 is non-zero, then make the breakpoint temporary. If COND_STRING is
8252 not NULL, then store it in the breakpoint. OPS, if not NULL, is
8253 the breakpoint_ops structure associated to the catchpoint. */
ce78b96d 8254
ab04a2af 8255void
346774a9
PA
8256init_catchpoint (struct breakpoint *b,
8257 struct gdbarch *gdbarch, int tempflag,
63160a43 8258 const char *cond_string,
c0a91b2b 8259 const struct breakpoint_ops *ops)
c906108c 8260{
51abb421 8261 symtab_and_line sal;
6c95b8df 8262 sal.pspace = current_program_space;
c5aa993b 8263
28010a5d 8264 init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
ce78b96d 8265
1b36a34b 8266 b->cond_string = (cond_string == NULL) ? NULL : xstrdup (cond_string);
b5de0fa7 8267 b->disposition = tempflag ? disp_del : disp_donttouch;
346774a9
PA
8268}
8269
28010a5d 8270void
b270e6f9 8271install_breakpoint (int internal, std::unique_ptr<breakpoint> &&arg, int update_gll)
c56053d2 8272{
b270e6f9 8273 breakpoint *b = add_to_breakpoint_chain (std::move (arg));
3a5c3e22 8274 set_breakpoint_number (internal, b);
558a9d82
YQ
8275 if (is_tracepoint (b))
8276 set_tracepoint_count (breakpoint_count);
3a5c3e22
PA
8277 if (!internal)
8278 mention (b);
c56053d2 8279 observer_notify_breakpoint_created (b);
3ea46bff
YQ
8280
8281 if (update_gll)
44702360 8282 update_global_location_list (UGLL_MAY_INSERT);
c56053d2
PA
8283}
8284
9b70b993 8285static void
a6d9a66e 8286create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
63160a43 8287 int tempflag, const char *cond_string,
c0a91b2b 8288 const struct breakpoint_ops *ops)
c906108c 8289{
b270e6f9 8290 std::unique_ptr<fork_catchpoint> c (new fork_catchpoint ());
ce78b96d 8291
b270e6f9 8292 init_catchpoint (c.get (), gdbarch, tempflag, cond_string, ops);
e29a4733
PA
8293
8294 c->forked_inferior_pid = null_ptid;
8295
b270e6f9 8296 install_breakpoint (0, std::move (c), 1);
c906108c
SS
8297}
8298
fe798b75
JB
8299/* Exec catchpoints. */
8300
b4d90040 8301/* An instance of this type is used to represent an exec catchpoint.
c1fc2657 8302 A breakpoint is really of this type iff its ops pointer points to
b4d90040
PA
8303 CATCH_EXEC_BREAKPOINT_OPS. */
8304
c1fc2657 8305struct exec_catchpoint : public breakpoint
b4d90040 8306{
c1fc2657 8307 ~exec_catchpoint () override;
b4d90040
PA
8308
8309 /* Filename of a program whose exec triggered this catchpoint.
8310 This field is only valid immediately after this catchpoint has
8311 triggered. */
8312 char *exec_pathname;
8313};
8314
c1fc2657 8315/* Exec catchpoint destructor. */
b4d90040 8316
c1fc2657 8317exec_catchpoint::~exec_catchpoint ()
b4d90040 8318{
c1fc2657 8319 xfree (this->exec_pathname);
b4d90040
PA
8320}
8321
77b06cd7
TJB
8322static int
8323insert_catch_exec (struct bp_location *bl)
c906108c 8324{
dfd4cc63 8325 return target_insert_exec_catchpoint (ptid_get_pid (inferior_ptid));
fe798b75 8326}
c906108c 8327
fe798b75 8328static int
73971819 8329remove_catch_exec (struct bp_location *bl, enum remove_bp_reason reason)
fe798b75 8330{
dfd4cc63 8331 return target_remove_exec_catchpoint (ptid_get_pid (inferior_ptid));
fe798b75 8332}
c906108c 8333
fe798b75 8334static int
f1310107 8335breakpoint_hit_catch_exec (const struct bp_location *bl,
bd522513 8336 const address_space *aspace, CORE_ADDR bp_addr,
09ac7c10 8337 const struct target_waitstatus *ws)
fe798b75 8338{
b4d90040
PA
8339 struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
8340
f90263c1
TT
8341 if (ws->kind != TARGET_WAITKIND_EXECD)
8342 return 0;
8343
8344 c->exec_pathname = xstrdup (ws->value.execd_pathname);
8345 return 1;
fe798b75 8346}
c906108c 8347
fe798b75 8348static enum print_stop_action
348d480f 8349print_it_catch_exec (bpstat bs)
fe798b75 8350{
36dfb11c 8351 struct ui_out *uiout = current_uiout;
348d480f 8352 struct breakpoint *b = bs->breakpoint_at;
b4d90040
PA
8353 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
8354
fe798b75 8355 annotate_catchpoint (b->number);
f303dbd6 8356 maybe_print_thread_hit_breakpoint (uiout);
36dfb11c 8357 if (b->disposition == disp_del)
112e8700 8358 uiout->text ("Temporary catchpoint ");
36dfb11c 8359 else
112e8700
SM
8360 uiout->text ("Catchpoint ");
8361 if (uiout->is_mi_like_p ())
36dfb11c 8362 {
112e8700
SM
8363 uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_EXEC));
8364 uiout->field_string ("disp", bpdisp_text (b->disposition));
36dfb11c 8365 }
112e8700
SM
8366 uiout->field_int ("bkptno", b->number);
8367 uiout->text (" (exec'd ");
8368 uiout->field_string ("new-exec", c->exec_pathname);
8369 uiout->text ("), ");
36dfb11c 8370
fe798b75 8371 return PRINT_SRC_AND_LOC;
c906108c
SS
8372}
8373
fe798b75 8374static void
a6d9a66e 8375print_one_catch_exec (struct breakpoint *b, struct bp_location **last_loc)
fe798b75 8376{
b4d90040 8377 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
fe798b75 8378 struct value_print_options opts;
79a45e25 8379 struct ui_out *uiout = current_uiout;
fe798b75
JB
8380
8381 get_user_print_options (&opts);
8382
8383 /* Field 4, the address, is omitted (which makes the columns
8384 not line up too nicely with the headers, but the effect
8385 is relatively readable). */
8386 if (opts.addressprint)
112e8700 8387 uiout->field_skip ("addr");
fe798b75 8388 annotate_field (5);
112e8700 8389 uiout->text ("exec");
b4d90040 8390 if (c->exec_pathname != NULL)
fe798b75 8391 {
112e8700
SM
8392 uiout->text (", program \"");
8393 uiout->field_string ("what", c->exec_pathname);
8394 uiout->text ("\" ");
fe798b75 8395 }
8ac3646f 8396
112e8700
SM
8397 if (uiout->is_mi_like_p ())
8398 uiout->field_string ("catch-type", "exec");
fe798b75
JB
8399}
8400
8401static void
8402print_mention_catch_exec (struct breakpoint *b)
8403{
8404 printf_filtered (_("Catchpoint %d (exec)"), b->number);
8405}
8406
6149aea9
PA
8407/* Implement the "print_recreate" breakpoint_ops method for exec
8408 catchpoints. */
8409
8410static void
8411print_recreate_catch_exec (struct breakpoint *b, struct ui_file *fp)
8412{
8413 fprintf_unfiltered (fp, "catch exec");
d9b3f62e 8414 print_recreate_thread (b, fp);
6149aea9
PA
8415}
8416
2060206e 8417static struct breakpoint_ops catch_exec_breakpoint_ops;
fe798b75 8418
c906108c 8419static int
fba45db2 8420hw_breakpoint_used_count (void)
c906108c 8421{
c906108c 8422 int i = 0;
f1310107
TJB
8423 struct breakpoint *b;
8424 struct bp_location *bl;
c906108c
SS
8425
8426 ALL_BREAKPOINTS (b)
c5aa993b 8427 {
d6b74ac4 8428 if (b->type == bp_hardware_breakpoint && breakpoint_enabled (b))
f1310107
TJB
8429 for (bl = b->loc; bl; bl = bl->next)
8430 {
8431 /* Special types of hardware breakpoints may use more than
8432 one register. */
348d480f 8433 i += b->ops->resources_needed (bl);
f1310107 8434 }
c5aa993b 8435 }
c906108c
SS
8436
8437 return i;
8438}
8439
a1398e0c
PA
8440/* Returns the resources B would use if it were a hardware
8441 watchpoint. */
8442
c906108c 8443static int
a1398e0c 8444hw_watchpoint_use_count (struct breakpoint *b)
c906108c 8445{
c906108c 8446 int i = 0;
e09342b5 8447 struct bp_location *bl;
c906108c 8448
a1398e0c
PA
8449 if (!breakpoint_enabled (b))
8450 return 0;
8451
8452 for (bl = b->loc; bl; bl = bl->next)
8453 {
8454 /* Special types of hardware watchpoints may use more than
8455 one register. */
8456 i += b->ops->resources_needed (bl);
8457 }
8458
8459 return i;
8460}
8461
8462/* Returns the sum the used resources of all hardware watchpoints of
8463 type TYPE in the breakpoints list. Also returns in OTHER_TYPE_USED
8464 the sum of the used resources of all hardware watchpoints of other
8465 types _not_ TYPE. */
8466
8467static int
8468hw_watchpoint_used_count_others (struct breakpoint *except,
8469 enum bptype type, int *other_type_used)
8470{
8471 int i = 0;
8472 struct breakpoint *b;
8473
c906108c
SS
8474 *other_type_used = 0;
8475 ALL_BREAKPOINTS (b)
e09342b5 8476 {
a1398e0c
PA
8477 if (b == except)
8478 continue;
e09342b5
TJB
8479 if (!breakpoint_enabled (b))
8480 continue;
8481
a1398e0c
PA
8482 if (b->type == type)
8483 i += hw_watchpoint_use_count (b);
8484 else if (is_hardware_watchpoint (b))
8485 *other_type_used = 1;
e09342b5
TJB
8486 }
8487
c906108c
SS
8488 return i;
8489}
8490
c906108c 8491void
fba45db2 8492disable_watchpoints_before_interactive_call_start (void)
c906108c 8493{
c5aa993b 8494 struct breakpoint *b;
c906108c
SS
8495
8496 ALL_BREAKPOINTS (b)
c5aa993b 8497 {
cc60f2e3 8498 if (is_watchpoint (b) && breakpoint_enabled (b))
c5aa993b 8499 {
b5de0fa7 8500 b->enable_state = bp_call_disabled;
44702360 8501 update_global_location_list (UGLL_DONT_INSERT);
c5aa993b
JM
8502 }
8503 }
c906108c
SS
8504}
8505
8506void
fba45db2 8507enable_watchpoints_after_interactive_call_stop (void)
c906108c 8508{
c5aa993b 8509 struct breakpoint *b;
c906108c
SS
8510
8511 ALL_BREAKPOINTS (b)
c5aa993b 8512 {
cc60f2e3 8513 if (is_watchpoint (b) && b->enable_state == bp_call_disabled)
c5aa993b 8514 {
b5de0fa7 8515 b->enable_state = bp_enabled;
44702360 8516 update_global_location_list (UGLL_MAY_INSERT);
c5aa993b
JM
8517 }
8518 }
c906108c
SS
8519}
8520
8bea4e01
UW
8521void
8522disable_breakpoints_before_startup (void)
8523{
6c95b8df 8524 current_program_space->executing_startup = 1;
44702360 8525 update_global_location_list (UGLL_DONT_INSERT);
8bea4e01
UW
8526}
8527
8528void
8529enable_breakpoints_after_startup (void)
8530{
6c95b8df 8531 current_program_space->executing_startup = 0;
f8eba3c6 8532 breakpoint_re_set ();
8bea4e01
UW
8533}
8534
7c16b83e
PA
8535/* Create a new single-step breakpoint for thread THREAD, with no
8536 locations. */
c906108c 8537
7c16b83e
PA
8538static struct breakpoint *
8539new_single_step_breakpoint (int thread, struct gdbarch *gdbarch)
8540{
b270e6f9 8541 std::unique_ptr<breakpoint> b (new breakpoint ());
7c16b83e 8542
b270e6f9 8543 init_raw_breakpoint_without_location (b.get (), gdbarch, bp_single_step,
7c16b83e
PA
8544 &momentary_breakpoint_ops);
8545
8546 b->disposition = disp_donttouch;
8547 b->frame_id = null_frame_id;
8548
8549 b->thread = thread;
8550 gdb_assert (b->thread != 0);
8551
b270e6f9 8552 return add_to_breakpoint_chain (std::move (b));
7c16b83e
PA
8553}
8554
8555/* Set a momentary breakpoint of type TYPE at address specified by
8556 SAL. If FRAME_ID is valid, the breakpoint is restricted to that
8557 frame. */
c906108c 8558
454dafbd 8559breakpoint_up
a6d9a66e
UW
8560set_momentary_breakpoint (struct gdbarch *gdbarch, struct symtab_and_line sal,
8561 struct frame_id frame_id, enum bptype type)
c906108c 8562{
52f0bd74 8563 struct breakpoint *b;
edb3359d 8564
193facb3
JK
8565 /* If FRAME_ID is valid, it should be a real frame, not an inlined or
8566 tail-called one. */
8567 gdb_assert (!frame_id_artificial_p (frame_id));
edb3359d 8568
06edf0c0 8569 b = set_raw_breakpoint (gdbarch, sal, type, &momentary_breakpoint_ops);
b5de0fa7
EZ
8570 b->enable_state = bp_enabled;
8571 b->disposition = disp_donttouch;
818dd999 8572 b->frame_id = frame_id;
c906108c 8573
4a64f543
MS
8574 /* If we're debugging a multi-threaded program, then we want
8575 momentary breakpoints to be active in only a single thread of
8576 control. */
39f77062 8577 if (in_thread_list (inferior_ptid))
5d5658a1 8578 b->thread = ptid_to_global_thread_id (inferior_ptid);
c906108c 8579
44702360 8580 update_global_location_list_nothrow (UGLL_MAY_INSERT);
74960c60 8581
454dafbd 8582 return breakpoint_up (b);
c906108c 8583}
611c83ae 8584
06edf0c0 8585/* Make a momentary breakpoint based on the master breakpoint ORIG.
a1aa2221
LM
8586 The new breakpoint will have type TYPE, use OPS as its
8587 breakpoint_ops, and will set enabled to LOC_ENABLED. */
e58b0e63 8588
06edf0c0
PA
8589static struct breakpoint *
8590momentary_breakpoint_from_master (struct breakpoint *orig,
8591 enum bptype type,
a1aa2221
LM
8592 const struct breakpoint_ops *ops,
8593 int loc_enabled)
e58b0e63
PA
8594{
8595 struct breakpoint *copy;
8596
06edf0c0 8597 copy = set_raw_breakpoint_without_location (orig->gdbarch, type, ops);
e58b0e63 8598 copy->loc = allocate_bp_location (copy);
0e30163f 8599 set_breakpoint_location_function (copy->loc, 1);
e58b0e63 8600
a6d9a66e 8601 copy->loc->gdbarch = orig->loc->gdbarch;
e58b0e63
PA
8602 copy->loc->requested_address = orig->loc->requested_address;
8603 copy->loc->address = orig->loc->address;
8604 copy->loc->section = orig->loc->section;
6c95b8df 8605 copy->loc->pspace = orig->loc->pspace;
55aa24fb 8606 copy->loc->probe = orig->loc->probe;
f8eba3c6 8607 copy->loc->line_number = orig->loc->line_number;
2f202fde 8608 copy->loc->symtab = orig->loc->symtab;
a1aa2221 8609 copy->loc->enabled = loc_enabled;
e58b0e63
PA
8610 copy->frame_id = orig->frame_id;
8611 copy->thread = orig->thread;
6c95b8df 8612 copy->pspace = orig->pspace;
e58b0e63
PA
8613
8614 copy->enable_state = bp_enabled;
8615 copy->disposition = disp_donttouch;
8616 copy->number = internal_breakpoint_number--;
8617
44702360 8618 update_global_location_list_nothrow (UGLL_DONT_INSERT);
e58b0e63
PA
8619 return copy;
8620}
8621
06edf0c0
PA
8622/* Make a deep copy of momentary breakpoint ORIG. Returns NULL if
8623 ORIG is NULL. */
8624
8625struct breakpoint *
8626clone_momentary_breakpoint (struct breakpoint *orig)
8627{
8628 /* If there's nothing to clone, then return nothing. */
8629 if (orig == NULL)
8630 return NULL;
8631
a1aa2221 8632 return momentary_breakpoint_from_master (orig, orig->type, orig->ops, 0);
06edf0c0
PA
8633}
8634
454dafbd 8635breakpoint_up
a6d9a66e
UW
8636set_momentary_breakpoint_at_pc (struct gdbarch *gdbarch, CORE_ADDR pc,
8637 enum bptype type)
611c83ae
PA
8638{
8639 struct symtab_and_line sal;
8640
8641 sal = find_pc_line (pc, 0);
8642 sal.pc = pc;
8643 sal.section = find_pc_overlay (pc);
8644 sal.explicit_pc = 1;
8645
a6d9a66e 8646 return set_momentary_breakpoint (gdbarch, sal, null_frame_id, type);
611c83ae 8647}
c906108c 8648\f
c5aa993b 8649
c906108c
SS
8650/* Tell the user we have just set a breakpoint B. */
8651
8652static void
fba45db2 8653mention (struct breakpoint *b)
c906108c 8654{
348d480f 8655 b->ops->print_mention (b);
112e8700 8656 if (current_uiout->is_mi_like_p ())
fb40c209 8657 return;
c906108c
SS
8658 printf_filtered ("\n");
8659}
c906108c 8660\f
c5aa993b 8661
1a853c52
PA
8662static int bp_loc_is_permanent (struct bp_location *loc);
8663
0d381245 8664static struct bp_location *
39d61571 8665add_location_to_breakpoint (struct breakpoint *b,
0d381245
VP
8666 const struct symtab_and_line *sal)
8667{
8668 struct bp_location *loc, **tmp;
3742cc8b
YQ
8669 CORE_ADDR adjusted_address;
8670 struct gdbarch *loc_gdbarch = get_sal_arch (*sal);
8671
8672 if (loc_gdbarch == NULL)
8673 loc_gdbarch = b->gdbarch;
8674
8675 /* Adjust the breakpoint's address prior to allocating a location.
8676 Once we call allocate_bp_location(), that mostly uninitialized
8677 location will be placed on the location chain. Adjustment of the
8678 breakpoint may cause target_read_memory() to be called and we do
8679 not want its scan of the location chain to find a breakpoint and
8680 location that's only been partially initialized. */
8681 adjusted_address = adjust_breakpoint_address (loc_gdbarch,
8682 sal->pc, b->type);
0d381245 8683
d30113d4 8684 /* Sort the locations by their ADDRESS. */
39d61571 8685 loc = allocate_bp_location (b);
d30113d4
JK
8686 for (tmp = &(b->loc); *tmp != NULL && (*tmp)->address <= adjusted_address;
8687 tmp = &((*tmp)->next))
0d381245 8688 ;
d30113d4 8689 loc->next = *tmp;
0d381245 8690 *tmp = loc;
3742cc8b 8691
0d381245 8692 loc->requested_address = sal->pc;
3742cc8b 8693 loc->address = adjusted_address;
6c95b8df 8694 loc->pspace = sal->pspace;
935676c9 8695 loc->probe.prob = sal->prob;
729662a5 8696 loc->probe.objfile = sal->objfile;
6c95b8df 8697 gdb_assert (loc->pspace != NULL);
0d381245 8698 loc->section = sal->section;
3742cc8b 8699 loc->gdbarch = loc_gdbarch;
f8eba3c6 8700 loc->line_number = sal->line;
2f202fde 8701 loc->symtab = sal->symtab;
4a27f119 8702 loc->symbol = sal->symbol;
f8eba3c6 8703
0e30163f
JK
8704 set_breakpoint_location_function (loc,
8705 sal->explicit_pc || sal->explicit_line);
1a853c52 8706
6ae88661
LM
8707 /* While by definition, permanent breakpoints are already present in the
8708 code, we don't mark the location as inserted. Normally one would expect
8709 that GDB could rely on that breakpoint instruction to stop the program,
8710 thus removing the need to insert its own breakpoint, except that executing
8711 the breakpoint instruction can kill the target instead of reporting a
8712 SIGTRAP. E.g., on SPARC, when interrupts are disabled, executing the
8713 instruction resets the CPU, so QEMU 2.0.0 for SPARC correspondingly dies
8714 with "Trap 0x02 while interrupts disabled, Error state". Letting the
8715 breakpoint be inserted normally results in QEMU knowing about the GDB
8716 breakpoint, and thus trap before the breakpoint instruction is executed.
8717 (If GDB later needs to continue execution past the permanent breakpoint,
8718 it manually increments the PC, thus avoiding executing the breakpoint
8719 instruction.) */
1a853c52 8720 if (bp_loc_is_permanent (loc))
6ae88661 8721 loc->permanent = 1;
1a853c52 8722
0d381245
VP
8723 return loc;
8724}
514f746b
AR
8725\f
8726
1cf4d951 8727/* See breakpoint.h. */
514f746b 8728
1cf4d951
PA
8729int
8730program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address)
514f746b
AR
8731{
8732 int len;
8733 CORE_ADDR addr;
1afeeb75 8734 const gdb_byte *bpoint;
514f746b
AR
8735 gdb_byte *target_mem;
8736
1cf4d951
PA
8737 addr = address;
8738 bpoint = gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
8739
8740 /* Software breakpoints unsupported? */
8741 if (bpoint == NULL)
8742 return 0;
8743
224c3ddb 8744 target_mem = (gdb_byte *) alloca (len);
1cf4d951
PA
8745
8746 /* Enable the automatic memory restoration from breakpoints while
8747 we read the memory. Otherwise we could say about our temporary
8748 breakpoints they are permanent. */
cb85b21b
TT
8749 scoped_restore restore_memory
8750 = make_scoped_restore_show_memory_breakpoints (0);
1cf4d951
PA
8751
8752 if (target_read_memory (address, target_mem, len) == 0
8753 && memcmp (target_mem, bpoint, len) == 0)
cb85b21b 8754 return 1;
1cf4d951 8755
cb85b21b 8756 return 0;
1cf4d951
PA
8757}
8758
8759/* Return 1 if LOC is pointing to a permanent breakpoint,
8760 return 0 otherwise. */
8761
8762static int
8763bp_loc_is_permanent (struct bp_location *loc)
8764{
514f746b
AR
8765 gdb_assert (loc != NULL);
8766
244558af
LM
8767 /* If we have a catchpoint or a watchpoint, just return 0. We should not
8768 attempt to read from the addresses the locations of these breakpoint types
8769 point to. program_breakpoint_here_p, below, will attempt to read
8770 memory. */
8771 if (!breakpoint_address_is_meaningful (loc->owner))
8772 return 0;
8773
5ed8105e 8774 scoped_restore_current_pspace_and_thread restore_pspace_thread;
6c95b8df 8775 switch_to_program_space_and_thread (loc->pspace);
5ed8105e 8776 return program_breakpoint_here_p (loc->gdbarch, loc->address);
514f746b
AR
8777}
8778
e7e0cddf
SS
8779/* Build a command list for the dprintf corresponding to the current
8780 settings of the dprintf style options. */
8781
8782static void
8783update_dprintf_command_list (struct breakpoint *b)
8784{
8785 char *dprintf_args = b->extra_string;
8786 char *printf_line = NULL;
8787
8788 if (!dprintf_args)
8789 return;
8790
8791 dprintf_args = skip_spaces (dprintf_args);
8792
8793 /* Allow a comma, as it may have terminated a location, but don't
8794 insist on it. */
8795 if (*dprintf_args == ',')
8796 ++dprintf_args;
8797 dprintf_args = skip_spaces (dprintf_args);
8798
8799 if (*dprintf_args != '"')
8800 error (_("Bad format string, missing '\"'."));
8801
d3ce09f5 8802 if (strcmp (dprintf_style, dprintf_style_gdb) == 0)
e7e0cddf 8803 printf_line = xstrprintf ("printf %s", dprintf_args);
d3ce09f5 8804 else if (strcmp (dprintf_style, dprintf_style_call) == 0)
e7e0cddf
SS
8805 {
8806 if (!dprintf_function)
8807 error (_("No function supplied for dprintf call"));
8808
8809 if (dprintf_channel && strlen (dprintf_channel) > 0)
8810 printf_line = xstrprintf ("call (void) %s (%s,%s)",
8811 dprintf_function,
8812 dprintf_channel,
8813 dprintf_args);
8814 else
8815 printf_line = xstrprintf ("call (void) %s (%s)",
8816 dprintf_function,
8817 dprintf_args);
8818 }
d3ce09f5
SS
8819 else if (strcmp (dprintf_style, dprintf_style_agent) == 0)
8820 {
8821 if (target_can_run_breakpoint_commands ())
8822 printf_line = xstrprintf ("agent-printf %s", dprintf_args);
8823 else
8824 {
8825 warning (_("Target cannot run dprintf commands, falling back to GDB printf"));
8826 printf_line = xstrprintf ("printf %s", dprintf_args);
8827 }
8828 }
e7e0cddf
SS
8829 else
8830 internal_error (__FILE__, __LINE__,
8831 _("Invalid dprintf style."));
8832
f28045c2 8833 gdb_assert (printf_line != NULL);
9d6e6e84 8834 /* Manufacture a printf sequence. */
f28045c2 8835 {
8d749320 8836 struct command_line *printf_cmd_line = XNEW (struct command_line);
e7e0cddf 8837
f28045c2
YQ
8838 printf_cmd_line->control_type = simple_control;
8839 printf_cmd_line->body_count = 0;
8840 printf_cmd_line->body_list = NULL;
9d6e6e84 8841 printf_cmd_line->next = NULL;
f28045c2 8842 printf_cmd_line->line = printf_line;
e7e0cddf 8843
93921405 8844 breakpoint_set_commands (b, command_line_up (printf_cmd_line));
f28045c2 8845 }
e7e0cddf
SS
8846}
8847
8848/* Update all dprintf commands, making their command lists reflect
8849 current style settings. */
8850
8851static void
eb4c3f4a 8852update_dprintf_commands (const char *args, int from_tty,
e7e0cddf
SS
8853 struct cmd_list_element *c)
8854{
8855 struct breakpoint *b;
8856
8857 ALL_BREAKPOINTS (b)
8858 {
8859 if (b->type == bp_dprintf)
8860 update_dprintf_command_list (b);
8861 }
8862}
c3f6f71d 8863
f00aae0f
KS
8864/* Create a breakpoint with SAL as location. Use LOCATION
8865 as a description of the location, and COND_STRING
b35a8b2f
DE
8866 as condition expression. If LOCATION is NULL then create an
8867 "address location" from the address in the SAL. */
018d34a4
VP
8868
8869static void
d9b3f62e 8870init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
6c5b2ebe 8871 gdb::array_view<const symtab_and_line> sals,
ffc2605c 8872 event_location_up &&location,
e1e01040
PA
8873 gdb::unique_xmalloc_ptr<char> filter,
8874 gdb::unique_xmalloc_ptr<char> cond_string,
8875 gdb::unique_xmalloc_ptr<char> extra_string,
d9b3f62e
PA
8876 enum bptype type, enum bpdisp disposition,
8877 int thread, int task, int ignore_count,
c0a91b2b 8878 const struct breakpoint_ops *ops, int from_tty,
44f238bb
PA
8879 int enabled, int internal, unsigned flags,
8880 int display_canonical)
018d34a4 8881{
0d381245 8882 int i;
018d34a4
VP
8883
8884 if (type == bp_hardware_breakpoint)
8885 {
fbbd034e
AS
8886 int target_resources_ok;
8887
8888 i = hw_breakpoint_used_count ();
8889 target_resources_ok =
8890 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
018d34a4
VP
8891 i + 1, 0);
8892 if (target_resources_ok == 0)
8893 error (_("No hardware breakpoint support in the target."));
8894 else if (target_resources_ok < 0)
8895 error (_("Hardware breakpoints used exceeds limit."));
8896 }
8897
6c5b2ebe 8898 gdb_assert (!sals.empty ());
6c95b8df 8899
6c5b2ebe 8900 for (const auto &sal : sals)
0d381245 8901 {
0d381245
VP
8902 struct bp_location *loc;
8903
8904 if (from_tty)
5af949e3
UW
8905 {
8906 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
8907 if (!loc_gdbarch)
8908 loc_gdbarch = gdbarch;
8909
8910 describe_other_breakpoints (loc_gdbarch,
6c95b8df 8911 sal.pspace, sal.pc, sal.section, thread);
5af949e3 8912 }
0d381245 8913
6c5b2ebe 8914 if (&sal == &sals[0])
0d381245 8915 {
d9b3f62e 8916 init_raw_breakpoint (b, gdbarch, sal, type, ops);
0d381245 8917 b->thread = thread;
4a306c9a 8918 b->task = task;
855a6e68 8919
e1e01040
PA
8920 b->cond_string = cond_string.release ();
8921 b->extra_string = extra_string.release ();
0d381245 8922 b->ignore_count = ignore_count;
41447f92 8923 b->enable_state = enabled ? bp_enabled : bp_disabled;
0d381245 8924 b->disposition = disposition;
6c95b8df 8925
44f238bb
PA
8926 if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
8927 b->loc->inserted = 1;
8928
0fb4aa4b
PA
8929 if (type == bp_static_tracepoint)
8930 {
d9b3f62e 8931 struct tracepoint *t = (struct tracepoint *) b;
0fb4aa4b
PA
8932 struct static_tracepoint_marker marker;
8933
983af33b 8934 if (strace_marker_p (b))
0fb4aa4b
PA
8935 {
8936 /* We already know the marker exists, otherwise, we
8937 wouldn't see a sal for it. */
d28cd78a
TT
8938 const char *p
8939 = &event_location_to_string (b->location.get ())[3];
f00aae0f 8940 const char *endp;
0fb4aa4b 8941 char *marker_str;
0fb4aa4b 8942
f1735a53 8943 p = skip_spaces (p);
0fb4aa4b 8944
f1735a53 8945 endp = skip_to_space (p);
0fb4aa4b
PA
8946
8947 marker_str = savestring (p, endp - p);
d9b3f62e 8948 t->static_trace_marker_id = marker_str;
0fb4aa4b 8949
3e43a32a
MS
8950 printf_filtered (_("Probed static tracepoint "
8951 "marker \"%s\"\n"),
d9b3f62e 8952 t->static_trace_marker_id);
0fb4aa4b
PA
8953 }
8954 else if (target_static_tracepoint_marker_at (sal.pc, &marker))
8955 {
d9b3f62e 8956 t->static_trace_marker_id = xstrdup (marker.str_id);
0fb4aa4b
PA
8957 release_static_tracepoint_marker (&marker);
8958
3e43a32a
MS
8959 printf_filtered (_("Probed static tracepoint "
8960 "marker \"%s\"\n"),
d9b3f62e 8961 t->static_trace_marker_id);
0fb4aa4b
PA
8962 }
8963 else
3e43a32a
MS
8964 warning (_("Couldn't determine the static "
8965 "tracepoint marker to probe"));
0fb4aa4b
PA
8966 }
8967
0d381245
VP
8968 loc = b->loc;
8969 }
8970 else
018d34a4 8971 {
39d61571 8972 loc = add_location_to_breakpoint (b, &sal);
44f238bb
PA
8973 if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
8974 loc->inserted = 1;
0d381245
VP
8975 }
8976
8977 if (b->cond_string)
8978 {
bbc13ae3
KS
8979 const char *arg = b->cond_string;
8980
1bb9788d
TT
8981 loc->cond = parse_exp_1 (&arg, loc->address,
8982 block_for_pc (loc->address), 0);
0d381245 8983 if (*arg)
588ae58c 8984 error (_("Garbage '%s' follows condition"), arg);
018d34a4 8985 }
e7e0cddf
SS
8986
8987 /* Dynamic printf requires and uses additional arguments on the
8988 command line, otherwise it's an error. */
8989 if (type == bp_dprintf)
8990 {
8991 if (b->extra_string)
8992 update_dprintf_command_list (b);
8993 else
8994 error (_("Format string required"));
8995 }
8996 else if (b->extra_string)
588ae58c 8997 error (_("Garbage '%s' at end of command"), b->extra_string);
855a6e68 8998 }
018d34a4 8999
56435ebe 9000 b->display_canonical = display_canonical;
f00aae0f 9001 if (location != NULL)
d28cd78a 9002 b->location = std::move (location);
018d34a4 9003 else
d28cd78a 9004 b->location = new_address_location (b->loc->address, NULL, 0);
e1e01040 9005 b->filter = filter.release ();
d9b3f62e 9006}
018d34a4 9007
d9b3f62e
PA
9008static void
9009create_breakpoint_sal (struct gdbarch *gdbarch,
6c5b2ebe 9010 gdb::array_view<const symtab_and_line> sals,
ffc2605c 9011 event_location_up &&location,
e1e01040
PA
9012 gdb::unique_xmalloc_ptr<char> filter,
9013 gdb::unique_xmalloc_ptr<char> cond_string,
9014 gdb::unique_xmalloc_ptr<char> extra_string,
d9b3f62e
PA
9015 enum bptype type, enum bpdisp disposition,
9016 int thread, int task, int ignore_count,
c0a91b2b 9017 const struct breakpoint_ops *ops, int from_tty,
44f238bb
PA
9018 int enabled, int internal, unsigned flags,
9019 int display_canonical)
d9b3f62e 9020{
a5e364af 9021 std::unique_ptr<breakpoint> b = new_breakpoint_from_type (type);
d9b3f62e 9022
a5e364af 9023 init_breakpoint_sal (b.get (), gdbarch,
ffc2605c 9024 sals, std::move (location),
e1e01040
PA
9025 std::move (filter),
9026 std::move (cond_string),
9027 std::move (extra_string),
d9b3f62e
PA
9028 type, disposition,
9029 thread, task, ignore_count,
9030 ops, from_tty,
44f238bb
PA
9031 enabled, internal, flags,
9032 display_canonical);
d9b3f62e 9033
b270e6f9 9034 install_breakpoint (internal, std::move (b), 0);
018d34a4
VP
9035}
9036
9037/* Add SALS.nelts breakpoints to the breakpoint table. For each
9038 SALS.sal[i] breakpoint, include the corresponding ADDR_STRING[i]
9039 value. COND_STRING, if not NULL, specified the condition to be
9040 used for all breakpoints. Essentially the only case where
9041 SALS.nelts is not 1 is when we set a breakpoint on an overloaded
9042 function. In that case, it's still not possible to specify
9043 separate conditions for different overloaded functions, so
9044 we take just a single condition string.
9045
c3f6f71d 9046 NOTE: If the function succeeds, the caller is expected to cleanup
018d34a4 9047 the arrays ADDR_STRING, COND_STRING, and SALS (but not the
c3f6f71d
JM
9048 array contents). If the function fails (error() is called), the
9049 caller is expected to cleanups both the ADDR_STRING, COND_STRING,
4a64f543 9050 COND and SALS arrays and each of those arrays contents. */
c906108c
SS
9051
9052static void
8cdf0e15 9053create_breakpoints_sal (struct gdbarch *gdbarch,
7efd8fc2 9054 struct linespec_result *canonical,
e1e01040
PA
9055 gdb::unique_xmalloc_ptr<char> cond_string,
9056 gdb::unique_xmalloc_ptr<char> extra_string,
8cdf0e15
VP
9057 enum bptype type, enum bpdisp disposition,
9058 int thread, int task, int ignore_count,
c0a91b2b 9059 const struct breakpoint_ops *ops, int from_tty,
44f238bb 9060 int enabled, int internal, unsigned flags)
c906108c 9061{
f8eba3c6 9062 if (canonical->pre_expanded)
6c5b2ebe 9063 gdb_assert (canonical->lsals.size () == 1);
f8eba3c6 9064
6c5b2ebe 9065 for (const auto &lsal : canonical->lsals)
c3f6f71d 9066 {
f00aae0f 9067 /* Note that 'location' can be NULL in the case of a plain
f8eba3c6 9068 'break', without arguments. */
ffc2605c 9069 event_location_up location
f00aae0f 9070 = (canonical->location != NULL
8e9e35b1 9071 ? copy_event_location (canonical->location.get ()) : NULL);
e1e01040 9072 gdb::unique_xmalloc_ptr<char> filter_string
6c5b2ebe 9073 (lsal.canonical != NULL ? xstrdup (lsal.canonical) : NULL);
0d381245 9074
6c5b2ebe 9075 create_breakpoint_sal (gdbarch, lsal.sals,
ffc2605c 9076 std::move (location),
e1e01040
PA
9077 std::move (filter_string),
9078 std::move (cond_string),
9079 std::move (extra_string),
e7e0cddf 9080 type, disposition,
84f4c1fe 9081 thread, task, ignore_count, ops,
44f238bb 9082 from_tty, enabled, internal, flags,
56435ebe 9083 canonical->special_display);
c3f6f71d 9084 }
c3f6f71d 9085}
c906108c 9086
f00aae0f 9087/* Parse LOCATION which is assumed to be a SAL specification possibly
c3f6f71d 9088 followed by conditionals. On return, SALS contains an array of SAL
f00aae0f
KS
9089 addresses found. LOCATION points to the end of the SAL (for
9090 linespec locations).
9998af43
TJB
9091
9092 The array and the line spec strings are allocated on the heap, it is
9093 the caller's responsibility to free them. */
c906108c 9094
b9362cc7 9095static void
f00aae0f 9096parse_breakpoint_sals (const struct event_location *location,
58438ac1 9097 struct linespec_result *canonical)
c3f6f71d 9098{
f00aae0f
KS
9099 struct symtab_and_line cursal;
9100
9101 if (event_location_type (location) == LINESPEC_LOCATION)
9102 {
9103 const char *address = get_linespec_location (location);
9104
9105 if (address == NULL)
9106 {
9107 /* The last displayed codepoint, if it's valid, is our default
9108 breakpoint address. */
9109 if (last_displayed_sal_is_valid ())
9110 {
f00aae0f
KS
9111 /* Set sal's pspace, pc, symtab, and line to the values
9112 corresponding to the last call to print_frame_info.
9113 Be sure to reinitialize LINE with NOTCURRENT == 0
9114 as the breakpoint line number is inappropriate otherwise.
9115 find_pc_line would adjust PC, re-set it back. */
51abb421
PA
9116 symtab_and_line sal = get_last_displayed_sal ();
9117 CORE_ADDR pc = sal.pc;
9118
f00aae0f
KS
9119 sal = find_pc_line (pc, 0);
9120
9121 /* "break" without arguments is equivalent to "break *PC"
9122 where PC is the last displayed codepoint's address. So
9123 make sure to set sal.explicit_pc to prevent GDB from
9124 trying to expand the list of sals to include all other
9125 instances with the same symtab and line. */
9126 sal.pc = pc;
9127 sal.explicit_pc = 1;
9128
6c5b2ebe
PA
9129 struct linespec_sals lsal;
9130 lsal.sals = {sal};
f00aae0f
KS
9131 lsal.canonical = NULL;
9132
6c5b2ebe 9133 canonical->lsals.push_back (std::move (lsal));
f00aae0f
KS
9134 return;
9135 }
9136 else
9137 error (_("No default breakpoint address now."));
c906108c 9138 }
c906108c 9139 }
f00aae0f
KS
9140
9141 /* Force almost all breakpoints to be in terms of the
9142 current_source_symtab (which is decode_line_1's default).
9143 This should produce the results we want almost all of the
9144 time while leaving default_breakpoint_* alone.
9145
9146 ObjC: However, don't match an Objective-C method name which
9147 may have a '+' or '-' succeeded by a '['. */
9148 cursal = get_current_source_symtab_and_line ();
9149 if (last_displayed_sal_is_valid ())
c906108c 9150 {
f00aae0f 9151 const char *address = NULL;
cc80f267 9152
f00aae0f
KS
9153 if (event_location_type (location) == LINESPEC_LOCATION)
9154 address = get_linespec_location (location);
cc80f267 9155
f00aae0f
KS
9156 if (!cursal.symtab
9157 || (address != NULL
9158 && strchr ("+-", address[0]) != NULL
9159 && address[1] != '['))
9160 {
c2f4122d 9161 decode_line_full (location, DECODE_LINE_FUNFIRSTLINE, NULL,
f00aae0f
KS
9162 get_last_displayed_symtab (),
9163 get_last_displayed_line (),
9164 canonical, NULL, NULL);
9165 return;
9166 }
c906108c 9167 }
f00aae0f 9168
c2f4122d 9169 decode_line_full (location, DECODE_LINE_FUNFIRSTLINE, NULL,
f00aae0f 9170 cursal.symtab, cursal.line, canonical, NULL, NULL);
c3f6f71d 9171}
c906108c 9172
c906108c 9173
c3f6f71d 9174/* Convert each SAL into a real PC. Verify that the PC can be
4a64f543 9175 inserted as a breakpoint. If it can't throw an error. */
c906108c 9176
b9362cc7 9177static void
6c5b2ebe 9178breakpoint_sals_to_pc (std::vector<symtab_and_line> &sals)
c3f6f71d 9179{
6c5b2ebe
PA
9180 for (auto &sal : sals)
9181 resolve_sal_pc (&sal);
c3f6f71d
JM
9182}
9183
7a697b8d
SS
9184/* Fast tracepoints may have restrictions on valid locations. For
9185 instance, a fast tracepoint using a jump instead of a trap will
9186 likely have to overwrite more bytes than a trap would, and so can
9187 only be placed where the instruction is longer than the jump, or a
9188 multi-instruction sequence does not have a jump into the middle of
9189 it, etc. */
9190
9191static void
9192check_fast_tracepoint_sals (struct gdbarch *gdbarch,
6c5b2ebe 9193 gdb::array_view<const symtab_and_line> sals)
7a697b8d 9194{
6c5b2ebe 9195 int rslt;
7a697b8d
SS
9196 char *msg;
9197 struct cleanup *old_chain;
9198
6c5b2ebe 9199 for (const auto &sal : sals)
7a697b8d 9200 {
f8eba3c6
TT
9201 struct gdbarch *sarch;
9202
6c5b2ebe 9203 sarch = get_sal_arch (sal);
f8eba3c6
TT
9204 /* We fall back to GDBARCH if there is no architecture
9205 associated with SAL. */
9206 if (sarch == NULL)
9207 sarch = gdbarch;
6c5b2ebe 9208 rslt = gdbarch_fast_tracepoint_valid_at (sarch, sal.pc, &msg);
7a697b8d
SS
9209 old_chain = make_cleanup (xfree, msg);
9210
9211 if (!rslt)
53c3572a 9212 error (_("May not have a fast tracepoint at %s%s"),
6c5b2ebe 9213 paddress (sarch, sal.pc), (msg ? msg : ""));
7a697b8d
SS
9214
9215 do_cleanups (old_chain);
9216 }
9217}
9218
018d34a4
VP
9219/* Given TOK, a string specification of condition and thread, as
9220 accepted by the 'break' command, extract the condition
9221 string and thread number and set *COND_STRING and *THREAD.
4a64f543 9222 PC identifies the context at which the condition should be parsed.
018d34a4
VP
9223 If no condition is found, *COND_STRING is set to NULL.
9224 If no thread is found, *THREAD is set to -1. */
d634f2de
JB
9225
9226static void
bbc13ae3 9227find_condition_and_thread (const char *tok, CORE_ADDR pc,
e7e0cddf
SS
9228 char **cond_string, int *thread, int *task,
9229 char **rest)
018d34a4
VP
9230{
9231 *cond_string = NULL;
9232 *thread = -1;
ed1d1739
KS
9233 *task = 0;
9234 *rest = NULL;
9235
018d34a4
VP
9236 while (tok && *tok)
9237 {
bbc13ae3 9238 const char *end_tok;
018d34a4 9239 int toklen;
bbc13ae3
KS
9240 const char *cond_start = NULL;
9241 const char *cond_end = NULL;
cc59ec59 9242
f1735a53 9243 tok = skip_spaces (tok);
e7e0cddf
SS
9244
9245 if ((*tok == '"' || *tok == ',') && rest)
9246 {
9247 *rest = savestring (tok, strlen (tok));
9248 return;
9249 }
9250
f1735a53 9251 end_tok = skip_to_space (tok);
d634f2de 9252
018d34a4 9253 toklen = end_tok - tok;
d634f2de 9254
018d34a4
VP
9255 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
9256 {
9257 tok = cond_start = end_tok + 1;
4d01a485 9258 parse_exp_1 (&tok, pc, block_for_pc (pc), 0);
018d34a4 9259 cond_end = tok;
d634f2de 9260 *cond_string = savestring (cond_start, cond_end - cond_start);
018d34a4
VP
9261 }
9262 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
9263 {
5d5658a1
PA
9264 const char *tmptok;
9265 struct thread_info *thr;
d634f2de 9266
018d34a4 9267 tok = end_tok + 1;
5d5658a1 9268 thr = parse_thread_id (tok, &tmptok);
018d34a4
VP
9269 if (tok == tmptok)
9270 error (_("Junk after thread keyword."));
5d5658a1 9271 *thread = thr->global_num;
bbc13ae3 9272 tok = tmptok;
018d34a4 9273 }
4a306c9a
JB
9274 else if (toklen >= 1 && strncmp (tok, "task", toklen) == 0)
9275 {
9276 char *tmptok;
9277
9278 tok = end_tok + 1;
bbc13ae3 9279 *task = strtol (tok, &tmptok, 0);
4a306c9a
JB
9280 if (tok == tmptok)
9281 error (_("Junk after task keyword."));
9282 if (!valid_task_id (*task))
b6199126 9283 error (_("Unknown task %d."), *task);
bbc13ae3 9284 tok = tmptok;
4a306c9a 9285 }
e7e0cddf
SS
9286 else if (rest)
9287 {
9288 *rest = savestring (tok, strlen (tok));
ccab2054 9289 return;
e7e0cddf 9290 }
018d34a4
VP
9291 else
9292 error (_("Junk at end of arguments."));
9293 }
9294}
9295
0fb4aa4b
PA
9296/* Decode a static tracepoint marker spec. */
9297
6c5b2ebe 9298static std::vector<symtab_and_line>
f00aae0f 9299decode_static_tracepoint_spec (const char **arg_p)
0fb4aa4b
PA
9300{
9301 VEC(static_tracepoint_marker_p) *markers = NULL;
f00aae0f
KS
9302 const char *p = &(*arg_p)[3];
9303 const char *endp;
0fb4aa4b
PA
9304 int i;
9305
f1735a53 9306 p = skip_spaces (p);
0fb4aa4b 9307
f1735a53 9308 endp = skip_to_space (p);
0fb4aa4b 9309
81b1e71c 9310 std::string marker_str (p, endp - p);
0fb4aa4b 9311
81b1e71c 9312 markers = target_static_tracepoint_markers_by_strid (marker_str.c_str ());
0fb4aa4b 9313 if (VEC_empty(static_tracepoint_marker_p, markers))
81b1e71c
TT
9314 error (_("No known static tracepoint marker named %s"),
9315 marker_str.c_str ());
0fb4aa4b 9316
6c5b2ebe
PA
9317 std::vector<symtab_and_line> sals;
9318 sals.reserve (VEC_length(static_tracepoint_marker_p, markers));
0fb4aa4b 9319
6c5b2ebe 9320 for (i = 0; i < VEC_length(static_tracepoint_marker_p, markers); i++)
0fb4aa4b
PA
9321 {
9322 struct static_tracepoint_marker *marker;
9323
9324 marker = VEC_index (static_tracepoint_marker_p, markers, i);
9325
51abb421 9326 symtab_and_line sal = find_pc_line (marker->address, 0);
6c5b2ebe
PA
9327 sal.pc = marker->address;
9328 sals.push_back (sal);
0fb4aa4b
PA
9329
9330 release_static_tracepoint_marker (marker);
9331 }
9332
0fb4aa4b
PA
9333 *arg_p = endp;
9334 return sals;
9335}
9336
f00aae0f 9337/* See breakpoint.h. */
0101ce28 9338
8cdf0e15
VP
9339int
9340create_breakpoint (struct gdbarch *gdbarch,
e1e01040
PA
9341 const struct event_location *location,
9342 const char *cond_string,
9343 int thread, const char *extra_string,
f00aae0f 9344 int parse_extra,
0fb4aa4b 9345 int tempflag, enum bptype type_wanted,
8cdf0e15
VP
9346 int ignore_count,
9347 enum auto_boolean pending_break_support,
c0a91b2b 9348 const struct breakpoint_ops *ops,
44f238bb
PA
9349 int from_tty, int enabled, int internal,
9350 unsigned flags)
c3f6f71d 9351{
7efd8fc2 9352 struct linespec_result canonical;
80c99de1 9353 struct cleanup *bkpt_chain = NULL;
0101ce28 9354 int pending = 0;
4a306c9a 9355 int task = 0;
86b17b60 9356 int prev_bkpt_count = breakpoint_count;
c3f6f71d 9357
348d480f
PA
9358 gdb_assert (ops != NULL);
9359
f00aae0f
KS
9360 /* If extra_string isn't useful, set it to NULL. */
9361 if (extra_string != NULL && *extra_string == '\0')
9362 extra_string = NULL;
9363
492d29ea 9364 TRY
b78a6381 9365 {
f00aae0f 9366 ops->create_sals_from_location (location, &canonical, type_wanted);
b78a6381 9367 }
492d29ea 9368 CATCH (e, RETURN_MASK_ERROR)
0101ce28 9369 {
492d29ea
PA
9370 /* If caller is interested in rc value from parse, set
9371 value. */
9372 if (e.error == NOT_FOUND_ERROR)
0101ce28 9373 {
05ff989b
AC
9374 /* If pending breakpoint support is turned off, throw
9375 error. */
fa8d40ab
JJ
9376
9377 if (pending_break_support == AUTO_BOOLEAN_FALSE)
723a2275
VP
9378 throw_exception (e);
9379
9380 exception_print (gdb_stderr, e);
fa8d40ab 9381
05ff989b
AC
9382 /* If pending breakpoint support is auto query and the user
9383 selects no, then simply return the error code. */
059fb39f 9384 if (pending_break_support == AUTO_BOOLEAN_AUTO
bfccc43c
YQ
9385 && !nquery (_("Make %s pending on future shared library load? "),
9386 bptype_string (type_wanted)))
fd9b8c24 9387 return 0;
fa8d40ab 9388
05ff989b
AC
9389 /* At this point, either the user was queried about setting
9390 a pending breakpoint and selected yes, or pending
9391 breakpoint behavior is on and thus a pending breakpoint
9392 is defaulted on behalf of the user. */
f00aae0f 9393 pending = 1;
0101ce28 9394 }
492d29ea
PA
9395 else
9396 throw_exception (e);
0101ce28 9397 }
492d29ea
PA
9398 END_CATCH
9399
6c5b2ebe 9400 if (!pending && canonical.lsals.empty ())
492d29ea 9401 return 0;
c3f6f71d 9402
c3f6f71d
JM
9403 /* ----------------------------- SNIP -----------------------------
9404 Anything added to the cleanup chain beyond this point is assumed
9405 to be part of a breakpoint. If the breakpoint create succeeds
80c99de1
PA
9406 then the memory is not reclaimed. */
9407 bkpt_chain = make_cleanup (null_cleanup, 0);
c3f6f71d 9408
c3f6f71d
JM
9409 /* Resolve all line numbers to PC's and verify that the addresses
9410 are ok for the target. */
0101ce28 9411 if (!pending)
f8eba3c6 9412 {
6c5b2ebe
PA
9413 for (auto &lsal : canonical.lsals)
9414 breakpoint_sals_to_pc (lsal.sals);
f8eba3c6 9415 }
c3f6f71d 9416
7a697b8d 9417 /* Fast tracepoints may have additional restrictions on location. */
bfccc43c 9418 if (!pending && type_wanted == bp_fast_tracepoint)
f8eba3c6 9419 {
6c5b2ebe
PA
9420 for (const auto &lsal : canonical.lsals)
9421 check_fast_tracepoint_sals (gdbarch, lsal.sals);
f8eba3c6 9422 }
7a697b8d 9423
c3f6f71d
JM
9424 /* Verify that condition can be parsed, before setting any
9425 breakpoints. Allocate a separate condition expression for each
4a64f543 9426 breakpoint. */
0101ce28 9427 if (!pending)
c3f6f71d 9428 {
e1e01040
PA
9429 gdb::unique_xmalloc_ptr<char> cond_string_copy;
9430 gdb::unique_xmalloc_ptr<char> extra_string_copy;
9431
f00aae0f 9432 if (parse_extra)
72b2ff0e 9433 {
0878d0fa 9434 char *rest;
e1e01040 9435 char *cond;
52d361e1 9436
6c5b2ebe 9437 const linespec_sals &lsal = canonical.lsals[0];
52d361e1 9438
0878d0fa
YQ
9439 /* Here we only parse 'arg' to separate condition
9440 from thread number, so parsing in context of first
9441 sal is OK. When setting the breakpoint we'll
9442 re-parse it in context of each sal. */
9443
6c5b2ebe 9444 find_condition_and_thread (extra_string, lsal.sals[0].pc,
e1e01040
PA
9445 &cond, &thread, &task, &rest);
9446 cond_string_copy.reset (cond);
9447 extra_string_copy.reset (rest);
72b2ff0e 9448 }
2f069f6f 9449 else
72b2ff0e 9450 {
f00aae0f
KS
9451 if (type_wanted != bp_dprintf
9452 && extra_string != NULL && *extra_string != '\0')
9453 error (_("Garbage '%s' at end of location"), extra_string);
0878d0fa
YQ
9454
9455 /* Create a private copy of condition string. */
9456 if (cond_string)
e1e01040 9457 cond_string_copy.reset (xstrdup (cond_string));
0878d0fa
YQ
9458 /* Create a private copy of any extra string. */
9459 if (extra_string)
e1e01040 9460 extra_string_copy.reset (xstrdup (extra_string));
72b2ff0e 9461 }
0fb4aa4b 9462
52d361e1 9463 ops->create_breakpoints_sal (gdbarch, &canonical,
e1e01040
PA
9464 std::move (cond_string_copy),
9465 std::move (extra_string_copy),
9466 type_wanted,
d9b3f62e
PA
9467 tempflag ? disp_del : disp_donttouch,
9468 thread, task, ignore_count, ops,
44f238bb 9469 from_tty, enabled, internal, flags);
c906108c 9470 }
0101ce28
JJ
9471 else
9472 {
a5e364af 9473 std::unique_ptr <breakpoint> b = new_breakpoint_from_type (type_wanted);
bfccc43c 9474
a5e364af 9475 init_raw_breakpoint_without_location (b.get (), gdbarch, type_wanted, ops);
d28cd78a 9476 b->location = copy_event_location (location);
bfccc43c 9477
f00aae0f
KS
9478 if (parse_extra)
9479 b->cond_string = NULL;
e12c7713
MK
9480 else
9481 {
9482 /* Create a private copy of condition string. */
e1e01040 9483 b->cond_string = cond_string != NULL ? xstrdup (cond_string) : NULL;
15630549 9484 b->thread = thread;
e12c7713 9485 }
f00aae0f
KS
9486
9487 /* Create a private copy of any extra string. */
e1e01040 9488 b->extra_string = extra_string != NULL ? xstrdup (extra_string) : NULL;
0101ce28 9489 b->ignore_count = ignore_count;
0101ce28 9490 b->disposition = tempflag ? disp_del : disp_donttouch;
0d381245 9491 b->condition_not_parsed = 1;
41447f92 9492 b->enable_state = enabled ? bp_enabled : bp_disabled;
cc72b2a2
KP
9493 if ((type_wanted != bp_breakpoint
9494 && type_wanted != bp_hardware_breakpoint) || thread != -1)
f8eba3c6 9495 b->pspace = current_program_space;
8bea4e01 9496
b270e6f9 9497 install_breakpoint (internal, std::move (b), 0);
0101ce28
JJ
9498 }
9499
6c5b2ebe 9500 if (canonical.lsals.size () > 1)
95a42b64 9501 {
3e43a32a
MS
9502 warning (_("Multiple breakpoints were set.\nUse the "
9503 "\"delete\" command to delete unwanted breakpoints."));
86b17b60 9504 prev_breakpoint_count = prev_bkpt_count;
95a42b64
TT
9505 }
9506
80c99de1
PA
9507 /* That's it. Discard the cleanups for data inserted into the
9508 breakpoint. */
9509 discard_cleanups (bkpt_chain);
217dc9e2 9510
80c99de1 9511 /* error call may happen here - have BKPT_CHAIN already discarded. */
44702360 9512 update_global_location_list (UGLL_MAY_INSERT);
fd9b8c24
PA
9513
9514 return 1;
c3f6f71d 9515}
c906108c 9516
348d480f 9517/* Set a breakpoint.
72b2ff0e
VP
9518 ARG is a string describing breakpoint address,
9519 condition, and thread.
9520 FLAG specifies if a breakpoint is hardware on,
9521 and if breakpoint is temporary, using BP_HARDWARE_FLAG
9522 and BP_TEMPFLAG. */
348d480f 9523
98deb0da 9524static void
f2fc3015 9525break_command_1 (const char *arg, int flag, int from_tty)
c3f6f71d 9526{
72b2ff0e 9527 int tempflag = flag & BP_TEMPFLAG;
0fb4aa4b
PA
9528 enum bptype type_wanted = (flag & BP_HARDWAREFLAG
9529 ? bp_hardware_breakpoint
9530 : bp_breakpoint);
55aa24fb 9531 struct breakpoint_ops *ops;
f00aae0f 9532
ffc2605c 9533 event_location_up location = string_to_event_location (&arg, current_language);
55aa24fb
SDJ
9534
9535 /* Matching breakpoints on probes. */
5b56227b 9536 if (location != NULL
ffc2605c 9537 && event_location_type (location.get ()) == PROBE_LOCATION)
55aa24fb
SDJ
9538 ops = &bkpt_probe_breakpoint_ops;
9539 else
9540 ops = &bkpt_breakpoint_ops;
c3f6f71d 9541
8cdf0e15 9542 create_breakpoint (get_current_arch (),
ffc2605c 9543 location.get (),
f00aae0f 9544 NULL, 0, arg, 1 /* parse arg */,
0fb4aa4b 9545 tempflag, type_wanted,
8cdf0e15
VP
9546 0 /* Ignore count */,
9547 pending_break_support,
55aa24fb 9548 ops,
8cdf0e15 9549 from_tty,
84f4c1fe 9550 1 /* enabled */,
44f238bb
PA
9551 0 /* internal */,
9552 0);
c906108c
SS
9553}
9554
c906108c
SS
9555/* Helper function for break_command_1 and disassemble_command. */
9556
9557void
fba45db2 9558resolve_sal_pc (struct symtab_and_line *sal)
c906108c
SS
9559{
9560 CORE_ADDR pc;
9561
9562 if (sal->pc == 0 && sal->symtab != NULL)
9563 {
9564 if (!find_line_pc (sal->symtab, sal->line, &pc))
8a3fe4f8 9565 error (_("No line %d in file \"%s\"."),
05cba821 9566 sal->line, symtab_to_filename_for_display (sal->symtab));
c906108c 9567 sal->pc = pc;
6a048695 9568
4a64f543
MS
9569 /* If this SAL corresponds to a breakpoint inserted using a line
9570 number, then skip the function prologue if necessary. */
6a048695 9571 if (sal->explicit_line)
059acae7 9572 skip_prologue_sal (sal);
c906108c
SS
9573 }
9574
9575 if (sal->section == 0 && sal->symtab != NULL)
9576 {
346d1dfe 9577 const struct blockvector *bv;
3977b71f 9578 const struct block *b;
c5aa993b 9579 struct symbol *sym;
c906108c 9580
43f3e411
DE
9581 bv = blockvector_for_pc_sect (sal->pc, 0, &b,
9582 SYMTAB_COMPUNIT (sal->symtab));
c906108c
SS
9583 if (bv != NULL)
9584 {
7f0df278 9585 sym = block_linkage_function (b);
c906108c
SS
9586 if (sym != NULL)
9587 {
eb822aa6
DE
9588 fixup_symbol_section (sym, SYMTAB_OBJFILE (sal->symtab));
9589 sal->section = SYMBOL_OBJ_SECTION (SYMTAB_OBJFILE (sal->symtab),
9590 sym);
c906108c
SS
9591 }
9592 else
9593 {
4a64f543
MS
9594 /* It really is worthwhile to have the section, so we'll
9595 just have to look harder. This case can be executed
9596 if we have line numbers but no functions (as can
9597 happen in assembly source). */
c906108c 9598
5ed8105e 9599 scoped_restore_current_pspace_and_thread restore_pspace_thread;
6c95b8df 9600 switch_to_program_space_and_thread (sal->pspace);
c906108c 9601
5ed8105e 9602 bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (sal->pc);
7cbd4a93 9603 if (msym.minsym)
efd66ac6 9604 sal->section = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym);
c906108c
SS
9605 }
9606 }
9607 }
9608}
9609
9610void
0b39b52e 9611break_command (const char *arg, int from_tty)
c906108c 9612{
db107f19 9613 break_command_1 (arg, 0, from_tty);
c906108c
SS
9614}
9615
c906108c 9616void
0b39b52e 9617tbreak_command (const char *arg, int from_tty)
c906108c 9618{
db107f19 9619 break_command_1 (arg, BP_TEMPFLAG, from_tty);
c906108c
SS
9620}
9621
c906108c 9622static void
0b39b52e 9623hbreak_command (const char *arg, int from_tty)
c906108c 9624{
db107f19 9625 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
c906108c
SS
9626}
9627
9628static void
0b39b52e 9629thbreak_command (const char *arg, int from_tty)
c906108c 9630{
db107f19 9631 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
c906108c
SS
9632}
9633
9634static void
ee7ddd71 9635stop_command (const char *arg, int from_tty)
c906108c 9636{
a3f17187 9637 printf_filtered (_("Specify the type of breakpoint to set.\n\
c906108c 9638Usage: stop in <function | address>\n\
a3f17187 9639 stop at <line>\n"));
c906108c
SS
9640}
9641
9642static void
4495129a 9643stopin_command (const char *arg, int from_tty)
c906108c
SS
9644{
9645 int badInput = 0;
9646
c5aa993b 9647 if (arg == (char *) NULL)
c906108c
SS
9648 badInput = 1;
9649 else if (*arg != '*')
9650 {
4495129a 9651 const char *argptr = arg;
c906108c
SS
9652 int hasColon = 0;
9653
4a64f543 9654 /* Look for a ':'. If this is a line number specification, then
53a5351d 9655 say it is bad, otherwise, it should be an address or
4a64f543 9656 function/method name. */
c906108c 9657 while (*argptr && !hasColon)
c5aa993b
JM
9658 {
9659 hasColon = (*argptr == ':');
9660 argptr++;
9661 }
c906108c
SS
9662
9663 if (hasColon)
c5aa993b 9664 badInput = (*argptr != ':'); /* Not a class::method */
c906108c 9665 else
c5aa993b 9666 badInput = isdigit (*arg); /* a simple line number */
c906108c
SS
9667 }
9668
9669 if (badInput)
a3f17187 9670 printf_filtered (_("Usage: stop in <function | address>\n"));
c906108c 9671 else
db107f19 9672 break_command_1 (arg, 0, from_tty);
c906108c
SS
9673}
9674
9675static void
4495129a 9676stopat_command (const char *arg, int from_tty)
c906108c
SS
9677{
9678 int badInput = 0;
9679
c5aa993b 9680 if (arg == (char *) NULL || *arg == '*') /* no line number */
c906108c
SS
9681 badInput = 1;
9682 else
9683 {
4495129a 9684 const char *argptr = arg;
c906108c
SS
9685 int hasColon = 0;
9686
4a64f543
MS
9687 /* Look for a ':'. If there is a '::' then get out, otherwise
9688 it is probably a line number. */
c906108c 9689 while (*argptr && !hasColon)
c5aa993b
JM
9690 {
9691 hasColon = (*argptr == ':');
9692 argptr++;
9693 }
c906108c
SS
9694
9695 if (hasColon)
c5aa993b 9696 badInput = (*argptr == ':'); /* we have class::method */
c906108c 9697 else
c5aa993b 9698 badInput = !isdigit (*arg); /* not a line number */
c906108c
SS
9699 }
9700
9701 if (badInput)
a3f17187 9702 printf_filtered (_("Usage: stop at <line>\n"));
c906108c 9703 else
db107f19 9704 break_command_1 (arg, 0, from_tty);
c906108c
SS
9705}
9706
e7e0cddf
SS
9707/* The dynamic printf command is mostly like a regular breakpoint, but
9708 with a prewired command list consisting of a single output command,
9709 built from extra arguments supplied on the dprintf command
9710 line. */
9711
da821c7b 9712static void
0b39b52e 9713dprintf_command (const char *arg, int from_tty)
e7e0cddf 9714{
ffc2605c 9715 event_location_up location = string_to_event_location (&arg, current_language);
f00aae0f
KS
9716
9717 /* If non-NULL, ARG should have been advanced past the location;
9718 the next character must be ','. */
9719 if (arg != NULL)
9720 {
9721 if (arg[0] != ',' || arg[1] == '\0')
9722 error (_("Format string required"));
9723 else
9724 {
9725 /* Skip the comma. */
9726 ++arg;
9727 }
9728 }
9729
e7e0cddf 9730 create_breakpoint (get_current_arch (),
ffc2605c 9731 location.get (),
f00aae0f 9732 NULL, 0, arg, 1 /* parse arg */,
e7e0cddf
SS
9733 0, bp_dprintf,
9734 0 /* Ignore count */,
9735 pending_break_support,
9736 &dprintf_breakpoint_ops,
9737 from_tty,
9738 1 /* enabled */,
9739 0 /* internal */,
9740 0);
9741}
9742
d3ce09f5 9743static void
0b39b52e 9744agent_printf_command (const char *arg, int from_tty)
d3ce09f5
SS
9745{
9746 error (_("May only run agent-printf on the target"));
9747}
9748
f1310107
TJB
9749/* Implement the "breakpoint_hit" breakpoint_ops method for
9750 ranged breakpoints. */
9751
9752static int
9753breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
bd522513 9754 const address_space *aspace,
09ac7c10
TT
9755 CORE_ADDR bp_addr,
9756 const struct target_waitstatus *ws)
f1310107 9757{
09ac7c10 9758 if (ws->kind != TARGET_WAITKIND_STOPPED
a493e3e2 9759 || ws->value.sig != GDB_SIGNAL_TRAP)
09ac7c10
TT
9760 return 0;
9761
f1310107
TJB
9762 return breakpoint_address_match_range (bl->pspace->aspace, bl->address,
9763 bl->length, aspace, bp_addr);
9764}
9765
9766/* Implement the "resources_needed" breakpoint_ops method for
9767 ranged breakpoints. */
9768
9769static int
9770resources_needed_ranged_breakpoint (const struct bp_location *bl)
9771{
9772 return target_ranged_break_num_registers ();
9773}
9774
9775/* Implement the "print_it" breakpoint_ops method for
9776 ranged breakpoints. */
9777
9778static enum print_stop_action
348d480f 9779print_it_ranged_breakpoint (bpstat bs)
f1310107 9780{
348d480f 9781 struct breakpoint *b = bs->breakpoint_at;
f1310107 9782 struct bp_location *bl = b->loc;
79a45e25 9783 struct ui_out *uiout = current_uiout;
f1310107
TJB
9784
9785 gdb_assert (b->type == bp_hardware_breakpoint);
9786
9787 /* Ranged breakpoints have only one location. */
9788 gdb_assert (bl && bl->next == NULL);
9789
9790 annotate_breakpoint (b->number);
f303dbd6
PA
9791
9792 maybe_print_thread_hit_breakpoint (uiout);
9793
f1310107 9794 if (b->disposition == disp_del)
112e8700 9795 uiout->text ("Temporary ranged breakpoint ");
f1310107 9796 else
112e8700
SM
9797 uiout->text ("Ranged breakpoint ");
9798 if (uiout->is_mi_like_p ())
f1310107 9799 {
112e8700 9800 uiout->field_string ("reason",
f1310107 9801 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 9802 uiout->field_string ("disp", bpdisp_text (b->disposition));
f1310107 9803 }
112e8700
SM
9804 uiout->field_int ("bkptno", b->number);
9805 uiout->text (", ");
f1310107
TJB
9806
9807 return PRINT_SRC_AND_LOC;
9808}
9809
9810/* Implement the "print_one" breakpoint_ops method for
9811 ranged breakpoints. */
9812
9813static void
9814print_one_ranged_breakpoint (struct breakpoint *b,
9815 struct bp_location **last_loc)
9816{
9817 struct bp_location *bl = b->loc;
9818 struct value_print_options opts;
79a45e25 9819 struct ui_out *uiout = current_uiout;
f1310107
TJB
9820
9821 /* Ranged breakpoints have only one location. */
9822 gdb_assert (bl && bl->next == NULL);
9823
9824 get_user_print_options (&opts);
9825
9826 if (opts.addressprint)
9827 /* We don't print the address range here, it will be printed later
9828 by print_one_detail_ranged_breakpoint. */
112e8700 9829 uiout->field_skip ("addr");
f1310107
TJB
9830 annotate_field (5);
9831 print_breakpoint_location (b, bl);
9832 *last_loc = bl;
9833}
9834
9835/* Implement the "print_one_detail" breakpoint_ops method for
9836 ranged breakpoints. */
9837
9838static void
9839print_one_detail_ranged_breakpoint (const struct breakpoint *b,
9840 struct ui_out *uiout)
9841{
9842 CORE_ADDR address_start, address_end;
9843 struct bp_location *bl = b->loc;
d7e74731 9844 string_file stb;
f1310107
TJB
9845
9846 gdb_assert (bl);
9847
9848 address_start = bl->address;
9849 address_end = address_start + bl->length - 1;
9850
112e8700 9851 uiout->text ("\taddress range: ");
d7e74731
PA
9852 stb.printf ("[%s, %s]",
9853 print_core_address (bl->gdbarch, address_start),
9854 print_core_address (bl->gdbarch, address_end));
112e8700
SM
9855 uiout->field_stream ("addr", stb);
9856 uiout->text ("\n");
f1310107
TJB
9857}
9858
9859/* Implement the "print_mention" breakpoint_ops method for
9860 ranged breakpoints. */
9861
9862static void
9863print_mention_ranged_breakpoint (struct breakpoint *b)
9864{
9865 struct bp_location *bl = b->loc;
79a45e25 9866 struct ui_out *uiout = current_uiout;
f1310107
TJB
9867
9868 gdb_assert (bl);
9869 gdb_assert (b->type == bp_hardware_breakpoint);
9870
112e8700 9871 if (uiout->is_mi_like_p ())
f1310107
TJB
9872 return;
9873
9874 printf_filtered (_("Hardware assisted ranged breakpoint %d from %s to %s."),
9875 b->number, paddress (bl->gdbarch, bl->address),
9876 paddress (bl->gdbarch, bl->address + bl->length - 1));
9877}
9878
9879/* Implement the "print_recreate" breakpoint_ops method for
9880 ranged breakpoints. */
9881
9882static void
9883print_recreate_ranged_breakpoint (struct breakpoint *b, struct ui_file *fp)
9884{
f00aae0f 9885 fprintf_unfiltered (fp, "break-range %s, %s",
d28cd78a
TT
9886 event_location_to_string (b->location.get ()),
9887 event_location_to_string (b->location_range_end.get ()));
d9b3f62e 9888 print_recreate_thread (b, fp);
f1310107
TJB
9889}
9890
9891/* The breakpoint_ops structure to be used in ranged breakpoints. */
9892
2060206e 9893static struct breakpoint_ops ranged_breakpoint_ops;
f1310107
TJB
9894
9895/* Find the address where the end of the breakpoint range should be
9896 placed, given the SAL of the end of the range. This is so that if
9897 the user provides a line number, the end of the range is set to the
9898 last instruction of the given line. */
9899
9900static CORE_ADDR
9901find_breakpoint_range_end (struct symtab_and_line sal)
9902{
9903 CORE_ADDR end;
9904
9905 /* If the user provided a PC value, use it. Otherwise,
9906 find the address of the end of the given location. */
9907 if (sal.explicit_pc)
9908 end = sal.pc;
9909 else
9910 {
9911 int ret;
9912 CORE_ADDR start;
9913
9914 ret = find_line_pc_range (sal, &start, &end);
9915 if (!ret)
9916 error (_("Could not find location of the end of the range."));
9917
9918 /* find_line_pc_range returns the start of the next line. */
9919 end--;
9920 }
9921
9922 return end;
9923}
9924
9925/* Implement the "break-range" CLI command. */
9926
9927static void
0b39b52e 9928break_range_command (const char *arg, int from_tty)
f1310107 9929{
f2fc3015 9930 const char *arg_start;
f1310107
TJB
9931 struct linespec_result canonical_start, canonical_end;
9932 int bp_count, can_use_bp, length;
9933 CORE_ADDR end;
9934 struct breakpoint *b;
f1310107
TJB
9935
9936 /* We don't support software ranged breakpoints. */
9937 if (target_ranged_break_num_registers () < 0)
9938 error (_("This target does not support hardware ranged breakpoints."));
9939
9940 bp_count = hw_breakpoint_used_count ();
9941 bp_count += target_ranged_break_num_registers ();
9942 can_use_bp = target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
9943 bp_count, 0);
9944 if (can_use_bp < 0)
9945 error (_("Hardware breakpoints used exceeds limit."));
9946
f8eba3c6 9947 arg = skip_spaces (arg);
f1310107
TJB
9948 if (arg == NULL || arg[0] == '\0')
9949 error(_("No address range specified."));
9950
f8eba3c6 9951 arg_start = arg;
ffc2605c
TT
9952 event_location_up start_location = string_to_event_location (&arg,
9953 current_language);
9954 parse_breakpoint_sals (start_location.get (), &canonical_start);
f1310107
TJB
9955
9956 if (arg[0] != ',')
9957 error (_("Too few arguments."));
6c5b2ebe 9958 else if (canonical_start.lsals.empty ())
f1310107 9959 error (_("Could not find location of the beginning of the range."));
f8eba3c6 9960
6c5b2ebe 9961 const linespec_sals &lsal_start = canonical_start.lsals[0];
f8eba3c6 9962
6c5b2ebe
PA
9963 if (canonical_start.lsals.size () > 1
9964 || lsal_start.sals.size () != 1)
f1310107
TJB
9965 error (_("Cannot create a ranged breakpoint with multiple locations."));
9966
6c5b2ebe 9967 const symtab_and_line &sal_start = lsal_start.sals[0];
81b1e71c 9968 std::string addr_string_start (arg_start, arg - arg_start);
f1310107
TJB
9969
9970 arg++; /* Skip the comma. */
f8eba3c6 9971 arg = skip_spaces (arg);
f1310107
TJB
9972
9973 /* Parse the end location. */
9974
f1310107
TJB
9975 arg_start = arg;
9976
f8eba3c6 9977 /* We call decode_line_full directly here instead of using
f1310107
TJB
9978 parse_breakpoint_sals because we need to specify the start location's
9979 symtab and line as the default symtab and line for the end of the
9980 range. This makes it possible to have ranges like "foo.c:27, +14",
9981 where +14 means 14 lines from the start location. */
ffc2605c
TT
9982 event_location_up end_location = string_to_event_location (&arg,
9983 current_language);
9984 decode_line_full (end_location.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
f8eba3c6
TT
9985 sal_start.symtab, sal_start.line,
9986 &canonical_end, NULL, NULL);
9987
6c5b2ebe 9988 if (canonical_end.lsals.empty ())
f1310107 9989 error (_("Could not find location of the end of the range."));
f8eba3c6 9990
6c5b2ebe
PA
9991 const linespec_sals &lsal_end = canonical_end.lsals[0];
9992 if (canonical_end.lsals.size () > 1
9993 || lsal_end.sals.size () != 1)
f1310107
TJB
9994 error (_("Cannot create a ranged breakpoint with multiple locations."));
9995
6c5b2ebe 9996 const symtab_and_line &sal_end = lsal_end.sals[0];
f1310107
TJB
9997
9998 end = find_breakpoint_range_end (sal_end);
9999 if (sal_start.pc > end)
177b42fe 10000 error (_("Invalid address range, end precedes start."));
f1310107
TJB
10001
10002 length = end - sal_start.pc + 1;
10003 if (length < 0)
10004 /* Length overflowed. */
10005 error (_("Address range too large."));
10006 else if (length == 1)
10007 {
10008 /* This range is simple enough to be handled by
10009 the `hbreak' command. */
81b1e71c 10010 hbreak_command (&addr_string_start[0], 1);
f1310107
TJB
10011
10012 return;
10013 }
10014
10015 /* Now set up the breakpoint. */
10016 b = set_raw_breakpoint (get_current_arch (), sal_start,
348d480f 10017 bp_hardware_breakpoint, &ranged_breakpoint_ops);
f1310107
TJB
10018 set_breakpoint_count (breakpoint_count + 1);
10019 b->number = breakpoint_count;
10020 b->disposition = disp_donttouch;
d28cd78a
TT
10021 b->location = std::move (start_location);
10022 b->location_range_end = std::move (end_location);
f1310107
TJB
10023 b->loc->length = length;
10024
f1310107 10025 mention (b);
8d3788bd 10026 observer_notify_breakpoint_created (b);
44702360 10027 update_global_location_list (UGLL_MAY_INSERT);
f1310107
TJB
10028}
10029
4a64f543
MS
10030/* Return non-zero if EXP is verified as constant. Returned zero
10031 means EXP is variable. Also the constant detection may fail for
10032 some constant expressions and in such case still falsely return
10033 zero. */
2e6e3d9c 10034
65d79d4b
SDJ
10035static int
10036watchpoint_exp_is_const (const struct expression *exp)
10037{
10038 int i = exp->nelts;
10039
10040 while (i > 0)
10041 {
10042 int oplenp, argsp;
10043
10044 /* We are only interested in the descriptor of each element. */
10045 operator_length (exp, i, &oplenp, &argsp);
10046 i -= oplenp;
10047
10048 switch (exp->elts[i].opcode)
10049 {
10050 case BINOP_ADD:
10051 case BINOP_SUB:
10052 case BINOP_MUL:
10053 case BINOP_DIV:
10054 case BINOP_REM:
10055 case BINOP_MOD:
10056 case BINOP_LSH:
10057 case BINOP_RSH:
10058 case BINOP_LOGICAL_AND:
10059 case BINOP_LOGICAL_OR:
10060 case BINOP_BITWISE_AND:
10061 case BINOP_BITWISE_IOR:
10062 case BINOP_BITWISE_XOR:
10063 case BINOP_EQUAL:
10064 case BINOP_NOTEQUAL:
10065 case BINOP_LESS:
10066 case BINOP_GTR:
10067 case BINOP_LEQ:
10068 case BINOP_GEQ:
10069 case BINOP_REPEAT:
10070 case BINOP_COMMA:
10071 case BINOP_EXP:
10072 case BINOP_MIN:
10073 case BINOP_MAX:
10074 case BINOP_INTDIV:
10075 case BINOP_CONCAT:
65d79d4b
SDJ
10076 case TERNOP_COND:
10077 case TERNOP_SLICE:
65d79d4b
SDJ
10078
10079 case OP_LONG:
edd079d9 10080 case OP_FLOAT:
65d79d4b
SDJ
10081 case OP_LAST:
10082 case OP_COMPLEX:
10083 case OP_STRING:
65d79d4b
SDJ
10084 case OP_ARRAY:
10085 case OP_TYPE:
608b4967
TT
10086 case OP_TYPEOF:
10087 case OP_DECLTYPE:
6e72ca20 10088 case OP_TYPEID:
65d79d4b
SDJ
10089 case OP_NAME:
10090 case OP_OBJC_NSSTRING:
10091
10092 case UNOP_NEG:
10093 case UNOP_LOGICAL_NOT:
10094 case UNOP_COMPLEMENT:
10095 case UNOP_ADDR:
10096 case UNOP_HIGH:
aeaa2474 10097 case UNOP_CAST:
9eaf6705
TT
10098
10099 case UNOP_CAST_TYPE:
10100 case UNOP_REINTERPRET_CAST:
10101 case UNOP_DYNAMIC_CAST:
4a64f543
MS
10102 /* Unary, binary and ternary operators: We have to check
10103 their operands. If they are constant, then so is the
10104 result of that operation. For instance, if A and B are
10105 determined to be constants, then so is "A + B".
10106
10107 UNOP_IND is one exception to the rule above, because the
10108 value of *ADDR is not necessarily a constant, even when
10109 ADDR is. */
65d79d4b
SDJ
10110 break;
10111
10112 case OP_VAR_VALUE:
10113 /* Check whether the associated symbol is a constant.
4a64f543 10114
65d79d4b 10115 We use SYMBOL_CLASS rather than TYPE_CONST because it's
4a64f543
MS
10116 possible that a buggy compiler could mark a variable as
10117 constant even when it is not, and TYPE_CONST would return
10118 true in this case, while SYMBOL_CLASS wouldn't.
10119
10120 We also have to check for function symbols because they
10121 are always constant. */
65d79d4b
SDJ
10122 {
10123 struct symbol *s = exp->elts[i + 2].symbol;
10124
10125 if (SYMBOL_CLASS (s) != LOC_BLOCK
10126 && SYMBOL_CLASS (s) != LOC_CONST
10127 && SYMBOL_CLASS (s) != LOC_CONST_BYTES)
10128 return 0;
10129 break;
10130 }
10131
10132 /* The default action is to return 0 because we are using
10133 the optimistic approach here: If we don't know something,
10134 then it is not a constant. */
10135 default:
10136 return 0;
10137 }
10138 }
10139
10140 return 1;
10141}
10142
c1fc2657 10143/* Watchpoint destructor. */
3a5c3e22 10144
c1fc2657 10145watchpoint::~watchpoint ()
3a5c3e22 10146{
c1fc2657
SM
10147 xfree (this->exp_string);
10148 xfree (this->exp_string_reparse);
10149 value_free (this->val);
3a5c3e22
PA
10150}
10151
348d480f
PA
10152/* Implement the "re_set" breakpoint_ops method for watchpoints. */
10153
10154static void
10155re_set_watchpoint (struct breakpoint *b)
10156{
3a5c3e22
PA
10157 struct watchpoint *w = (struct watchpoint *) b;
10158
348d480f
PA
10159 /* Watchpoint can be either on expression using entirely global
10160 variables, or it can be on local variables.
10161
10162 Watchpoints of the first kind are never auto-deleted, and even
10163 persist across program restarts. Since they can use variables
10164 from shared libraries, we need to reparse expression as libraries
10165 are loaded and unloaded.
10166
10167 Watchpoints on local variables can also change meaning as result
10168 of solib event. For example, if a watchpoint uses both a local
10169 and a global variables in expression, it's a local watchpoint,
10170 but unloading of a shared library will make the expression
10171 invalid. This is not a very common use case, but we still
10172 re-evaluate expression, to avoid surprises to the user.
10173
10174 Note that for local watchpoints, we re-evaluate it only if
10175 watchpoints frame id is still valid. If it's not, it means the
10176 watchpoint is out of scope and will be deleted soon. In fact,
10177 I'm not sure we'll ever be called in this case.
10178
10179 If a local watchpoint's frame id is still valid, then
3a5c3e22 10180 w->exp_valid_block is likewise valid, and we can safely use it.
348d480f 10181
3a5c3e22
PA
10182 Don't do anything about disabled watchpoints, since they will be
10183 reevaluated again when enabled. */
10184 update_watchpoint (w, 1 /* reparse */);
348d480f
PA
10185}
10186
77b06cd7
TJB
10187/* Implement the "insert" breakpoint_ops method for hardware watchpoints. */
10188
10189static int
10190insert_watchpoint (struct bp_location *bl)
10191{
3a5c3e22
PA
10192 struct watchpoint *w = (struct watchpoint *) bl->owner;
10193 int length = w->exact ? 1 : bl->length;
e09342b5
TJB
10194
10195 return target_insert_watchpoint (bl->address, length, bl->watchpoint_type,
4d01a485 10196 w->cond_exp.get ());
77b06cd7
TJB
10197}
10198
10199/* Implement the "remove" breakpoint_ops method for hardware watchpoints. */
10200
10201static int
73971819 10202remove_watchpoint (struct bp_location *bl, enum remove_bp_reason reason)
77b06cd7 10203{
3a5c3e22
PA
10204 struct watchpoint *w = (struct watchpoint *) bl->owner;
10205 int length = w->exact ? 1 : bl->length;
e09342b5
TJB
10206
10207 return target_remove_watchpoint (bl->address, length, bl->watchpoint_type,
4d01a485 10208 w->cond_exp.get ());
e09342b5
TJB
10209}
10210
e09342b5 10211static int
348d480f 10212breakpoint_hit_watchpoint (const struct bp_location *bl,
bd522513 10213 const address_space *aspace, CORE_ADDR bp_addr,
09ac7c10 10214 const struct target_waitstatus *ws)
e09342b5 10215{
348d480f 10216 struct breakpoint *b = bl->owner;
3a5c3e22 10217 struct watchpoint *w = (struct watchpoint *) b;
77b06cd7 10218
348d480f
PA
10219 /* Continuable hardware watchpoints are treated as non-existent if the
10220 reason we stopped wasn't a hardware watchpoint (we didn't stop on
10221 some data address). Otherwise gdb won't stop on a break instruction
10222 in the code (not from a breakpoint) when a hardware watchpoint has
10223 been defined. Also skip watchpoints which we know did not trigger
10224 (did not match the data address). */
10225 if (is_hardware_watchpoint (b)
3a5c3e22 10226 && w->watchpoint_triggered == watch_triggered_no)
348d480f 10227 return 0;
9c06b0b4 10228
348d480f 10229 return 1;
9c06b0b4
TJB
10230}
10231
348d480f
PA
10232static void
10233check_status_watchpoint (bpstat bs)
9c06b0b4 10234{
348d480f 10235 gdb_assert (is_watchpoint (bs->breakpoint_at));
9c06b0b4 10236
348d480f 10237 bpstat_check_watchpoint (bs);
9c06b0b4
TJB
10238}
10239
10240/* Implement the "resources_needed" breakpoint_ops method for
348d480f 10241 hardware watchpoints. */
9c06b0b4
TJB
10242
10243static int
348d480f 10244resources_needed_watchpoint (const struct bp_location *bl)
9c06b0b4 10245{
3a5c3e22
PA
10246 struct watchpoint *w = (struct watchpoint *) bl->owner;
10247 int length = w->exact? 1 : bl->length;
348d480f
PA
10248
10249 return target_region_ok_for_hw_watchpoint (bl->address, length);
9c06b0b4
TJB
10250}
10251
10252/* Implement the "works_in_software_mode" breakpoint_ops method for
348d480f 10253 hardware watchpoints. */
9c06b0b4
TJB
10254
10255static int
348d480f 10256works_in_software_mode_watchpoint (const struct breakpoint *b)
9c06b0b4 10257{
efa80663
PA
10258 /* Read and access watchpoints only work with hardware support. */
10259 return b->type == bp_watchpoint || b->type == bp_hardware_watchpoint;
9c06b0b4
TJB
10260}
10261
9c06b0b4 10262static enum print_stop_action
348d480f 10263print_it_watchpoint (bpstat bs)
9c06b0b4 10264{
348d480f 10265 struct breakpoint *b;
348d480f 10266 enum print_stop_action result;
3a5c3e22 10267 struct watchpoint *w;
79a45e25 10268 struct ui_out *uiout = current_uiout;
348d480f
PA
10269
10270 gdb_assert (bs->bp_location_at != NULL);
10271
348d480f 10272 b = bs->breakpoint_at;
3a5c3e22 10273 w = (struct watchpoint *) b;
348d480f 10274
f303dbd6
PA
10275 annotate_watchpoint (b->number);
10276 maybe_print_thread_hit_breakpoint (uiout);
10277
d7e74731
PA
10278 string_file stb;
10279
76f9c9cf 10280 gdb::optional<ui_out_emit_tuple> tuple_emitter;
9c06b0b4
TJB
10281 switch (b->type)
10282 {
348d480f 10283 case bp_watchpoint:
9c06b0b4 10284 case bp_hardware_watchpoint:
112e8700
SM
10285 if (uiout->is_mi_like_p ())
10286 uiout->field_string
10287 ("reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
348d480f 10288 mention (b);
76f9c9cf 10289 tuple_emitter.emplace (uiout, "value");
112e8700 10290 uiout->text ("\nOld value = ");
d7e74731 10291 watchpoint_value_print (bs->old_val, &stb);
112e8700
SM
10292 uiout->field_stream ("old", stb);
10293 uiout->text ("\nNew value = ");
d7e74731 10294 watchpoint_value_print (w->val, &stb);
112e8700
SM
10295 uiout->field_stream ("new", stb);
10296 uiout->text ("\n");
348d480f
PA
10297 /* More than one watchpoint may have been triggered. */
10298 result = PRINT_UNKNOWN;
9c06b0b4
TJB
10299 break;
10300
10301 case bp_read_watchpoint:
112e8700
SM
10302 if (uiout->is_mi_like_p ())
10303 uiout->field_string
10304 ("reason", async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
348d480f 10305 mention (b);
76f9c9cf 10306 tuple_emitter.emplace (uiout, "value");
112e8700 10307 uiout->text ("\nValue = ");
d7e74731 10308 watchpoint_value_print (w->val, &stb);
112e8700
SM
10309 uiout->field_stream ("value", stb);
10310 uiout->text ("\n");
348d480f 10311 result = PRINT_UNKNOWN;
9c06b0b4
TJB
10312 break;
10313
10314 case bp_access_watchpoint:
348d480f
PA
10315 if (bs->old_val != NULL)
10316 {
112e8700
SM
10317 if (uiout->is_mi_like_p ())
10318 uiout->field_string
10319 ("reason",
348d480f
PA
10320 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
10321 mention (b);
76f9c9cf 10322 tuple_emitter.emplace (uiout, "value");
112e8700 10323 uiout->text ("\nOld value = ");
d7e74731 10324 watchpoint_value_print (bs->old_val, &stb);
112e8700
SM
10325 uiout->field_stream ("old", stb);
10326 uiout->text ("\nNew value = ");
348d480f
PA
10327 }
10328 else
10329 {
10330 mention (b);
112e8700
SM
10331 if (uiout->is_mi_like_p ())
10332 uiout->field_string
10333 ("reason",
348d480f 10334 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
76f9c9cf 10335 tuple_emitter.emplace (uiout, "value");
112e8700 10336 uiout->text ("\nValue = ");
348d480f 10337 }
d7e74731 10338 watchpoint_value_print (w->val, &stb);
112e8700
SM
10339 uiout->field_stream ("new", stb);
10340 uiout->text ("\n");
348d480f 10341 result = PRINT_UNKNOWN;
9c06b0b4
TJB
10342 break;
10343 default:
348d480f 10344 result = PRINT_UNKNOWN;
9c06b0b4
TJB
10345 }
10346
348d480f
PA
10347 return result;
10348}
10349
10350/* Implement the "print_mention" breakpoint_ops method for hardware
10351 watchpoints. */
10352
10353static void
10354print_mention_watchpoint (struct breakpoint *b)
10355{
3a5c3e22 10356 struct watchpoint *w = (struct watchpoint *) b;
79a45e25 10357 struct ui_out *uiout = current_uiout;
46b9c129 10358 const char *tuple_name;
348d480f
PA
10359
10360 switch (b->type)
10361 {
10362 case bp_watchpoint:
112e8700 10363 uiout->text ("Watchpoint ");
46b9c129 10364 tuple_name = "wpt";
348d480f
PA
10365 break;
10366 case bp_hardware_watchpoint:
112e8700 10367 uiout->text ("Hardware watchpoint ");
46b9c129 10368 tuple_name = "wpt";
348d480f
PA
10369 break;
10370 case bp_read_watchpoint:
112e8700 10371 uiout->text ("Hardware read watchpoint ");
46b9c129 10372 tuple_name = "hw-rwpt";
348d480f
PA
10373 break;
10374 case bp_access_watchpoint:
112e8700 10375 uiout->text ("Hardware access (read/write) watchpoint ");
46b9c129 10376 tuple_name = "hw-awpt";
348d480f
PA
10377 break;
10378 default:
10379 internal_error (__FILE__, __LINE__,
10380 _("Invalid hardware watchpoint type."));
10381 }
10382
46b9c129 10383 ui_out_emit_tuple tuple_emitter (uiout, tuple_name);
112e8700
SM
10384 uiout->field_int ("number", b->number);
10385 uiout->text (": ");
10386 uiout->field_string ("exp", w->exp_string);
348d480f
PA
10387}
10388
10389/* Implement the "print_recreate" breakpoint_ops method for
10390 watchpoints. */
10391
10392static void
10393print_recreate_watchpoint (struct breakpoint *b, struct ui_file *fp)
10394{
3a5c3e22
PA
10395 struct watchpoint *w = (struct watchpoint *) b;
10396
348d480f
PA
10397 switch (b->type)
10398 {
10399 case bp_watchpoint:
10400 case bp_hardware_watchpoint:
10401 fprintf_unfiltered (fp, "watch");
10402 break;
10403 case bp_read_watchpoint:
10404 fprintf_unfiltered (fp, "rwatch");
10405 break;
10406 case bp_access_watchpoint:
10407 fprintf_unfiltered (fp, "awatch");
10408 break;
10409 default:
10410 internal_error (__FILE__, __LINE__,
10411 _("Invalid watchpoint type."));
10412 }
10413
3a5c3e22 10414 fprintf_unfiltered (fp, " %s", w->exp_string);
d9b3f62e 10415 print_recreate_thread (b, fp);
348d480f
PA
10416}
10417
427cd150
TT
10418/* Implement the "explains_signal" breakpoint_ops method for
10419 watchpoints. */
10420
47591c29 10421static int
427cd150
TT
10422explains_signal_watchpoint (struct breakpoint *b, enum gdb_signal sig)
10423{
10424 /* A software watchpoint cannot cause a signal other than
10425 GDB_SIGNAL_TRAP. */
10426 if (b->type == bp_watchpoint && sig != GDB_SIGNAL_TRAP)
47591c29 10427 return 0;
427cd150 10428
47591c29 10429 return 1;
427cd150
TT
10430}
10431
348d480f
PA
10432/* The breakpoint_ops structure to be used in hardware watchpoints. */
10433
2060206e 10434static struct breakpoint_ops watchpoint_breakpoint_ops;
348d480f
PA
10435
10436/* Implement the "insert" breakpoint_ops method for
10437 masked hardware watchpoints. */
10438
10439static int
10440insert_masked_watchpoint (struct bp_location *bl)
10441{
3a5c3e22
PA
10442 struct watchpoint *w = (struct watchpoint *) bl->owner;
10443
10444 return target_insert_mask_watchpoint (bl->address, w->hw_wp_mask,
348d480f
PA
10445 bl->watchpoint_type);
10446}
10447
10448/* Implement the "remove" breakpoint_ops method for
10449 masked hardware watchpoints. */
10450
10451static int
73971819 10452remove_masked_watchpoint (struct bp_location *bl, enum remove_bp_reason reason)
348d480f 10453{
3a5c3e22
PA
10454 struct watchpoint *w = (struct watchpoint *) bl->owner;
10455
10456 return target_remove_mask_watchpoint (bl->address, w->hw_wp_mask,
348d480f
PA
10457 bl->watchpoint_type);
10458}
10459
10460/* Implement the "resources_needed" breakpoint_ops method for
10461 masked hardware watchpoints. */
10462
10463static int
10464resources_needed_masked_watchpoint (const struct bp_location *bl)
10465{
3a5c3e22
PA
10466 struct watchpoint *w = (struct watchpoint *) bl->owner;
10467
10468 return target_masked_watch_num_registers (bl->address, w->hw_wp_mask);
348d480f
PA
10469}
10470
10471/* Implement the "works_in_software_mode" breakpoint_ops method for
10472 masked hardware watchpoints. */
10473
10474static int
10475works_in_software_mode_masked_watchpoint (const struct breakpoint *b)
10476{
10477 return 0;
10478}
10479
10480/* Implement the "print_it" breakpoint_ops method for
10481 masked hardware watchpoints. */
10482
10483static enum print_stop_action
10484print_it_masked_watchpoint (bpstat bs)
10485{
10486 struct breakpoint *b = bs->breakpoint_at;
79a45e25 10487 struct ui_out *uiout = current_uiout;
348d480f
PA
10488
10489 /* Masked watchpoints have only one location. */
10490 gdb_assert (b->loc && b->loc->next == NULL);
10491
f303dbd6
PA
10492 annotate_watchpoint (b->number);
10493 maybe_print_thread_hit_breakpoint (uiout);
10494
348d480f
PA
10495 switch (b->type)
10496 {
10497 case bp_hardware_watchpoint:
112e8700
SM
10498 if (uiout->is_mi_like_p ())
10499 uiout->field_string
10500 ("reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
348d480f
PA
10501 break;
10502
10503 case bp_read_watchpoint:
112e8700
SM
10504 if (uiout->is_mi_like_p ())
10505 uiout->field_string
10506 ("reason", async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
348d480f
PA
10507 break;
10508
10509 case bp_access_watchpoint:
112e8700
SM
10510 if (uiout->is_mi_like_p ())
10511 uiout->field_string
10512 ("reason",
348d480f
PA
10513 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
10514 break;
10515 default:
10516 internal_error (__FILE__, __LINE__,
10517 _("Invalid hardware watchpoint type."));
10518 }
10519
10520 mention (b);
112e8700 10521 uiout->text (_("\n\
9c06b0b4
TJB
10522Check the underlying instruction at PC for the memory\n\
10523address and value which triggered this watchpoint.\n"));
112e8700 10524 uiout->text ("\n");
9c06b0b4
TJB
10525
10526 /* More than one watchpoint may have been triggered. */
10527 return PRINT_UNKNOWN;
10528}
10529
10530/* Implement the "print_one_detail" breakpoint_ops method for
10531 masked hardware watchpoints. */
10532
10533static void
10534print_one_detail_masked_watchpoint (const struct breakpoint *b,
10535 struct ui_out *uiout)
10536{
3a5c3e22
PA
10537 struct watchpoint *w = (struct watchpoint *) b;
10538
9c06b0b4
TJB
10539 /* Masked watchpoints have only one location. */
10540 gdb_assert (b->loc && b->loc->next == NULL);
10541
112e8700
SM
10542 uiout->text ("\tmask ");
10543 uiout->field_core_addr ("mask", b->loc->gdbarch, w->hw_wp_mask);
10544 uiout->text ("\n");
9c06b0b4
TJB
10545}
10546
10547/* Implement the "print_mention" breakpoint_ops method for
10548 masked hardware watchpoints. */
10549
10550static void
10551print_mention_masked_watchpoint (struct breakpoint *b)
10552{
3a5c3e22 10553 struct watchpoint *w = (struct watchpoint *) b;
79a45e25 10554 struct ui_out *uiout = current_uiout;
46b9c129 10555 const char *tuple_name;
9c06b0b4
TJB
10556
10557 switch (b->type)
10558 {
10559 case bp_hardware_watchpoint:
112e8700 10560 uiout->text ("Masked hardware watchpoint ");
46b9c129 10561 tuple_name = "wpt";
9c06b0b4
TJB
10562 break;
10563 case bp_read_watchpoint:
112e8700 10564 uiout->text ("Masked hardware read watchpoint ");
46b9c129 10565 tuple_name = "hw-rwpt";
9c06b0b4
TJB
10566 break;
10567 case bp_access_watchpoint:
112e8700 10568 uiout->text ("Masked hardware access (read/write) watchpoint ");
46b9c129 10569 tuple_name = "hw-awpt";
9c06b0b4
TJB
10570 break;
10571 default:
10572 internal_error (__FILE__, __LINE__,
10573 _("Invalid hardware watchpoint type."));
10574 }
10575
46b9c129 10576 ui_out_emit_tuple tuple_emitter (uiout, tuple_name);
112e8700
SM
10577 uiout->field_int ("number", b->number);
10578 uiout->text (": ");
10579 uiout->field_string ("exp", w->exp_string);
9c06b0b4
TJB
10580}
10581
10582/* Implement the "print_recreate" breakpoint_ops method for
10583 masked hardware watchpoints. */
10584
10585static void
10586print_recreate_masked_watchpoint (struct breakpoint *b, struct ui_file *fp)
10587{
3a5c3e22 10588 struct watchpoint *w = (struct watchpoint *) b;
9c06b0b4
TJB
10589 char tmp[40];
10590
10591 switch (b->type)
10592 {
10593 case bp_hardware_watchpoint:
10594 fprintf_unfiltered (fp, "watch");
10595 break;
10596 case bp_read_watchpoint:
10597 fprintf_unfiltered (fp, "rwatch");
10598 break;
10599 case bp_access_watchpoint:
10600 fprintf_unfiltered (fp, "awatch");
10601 break;
10602 default:
10603 internal_error (__FILE__, __LINE__,
10604 _("Invalid hardware watchpoint type."));
10605 }
10606
3a5c3e22
PA
10607 sprintf_vma (tmp, w->hw_wp_mask);
10608 fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string, tmp);
d9b3f62e 10609 print_recreate_thread (b, fp);
9c06b0b4
TJB
10610}
10611
10612/* The breakpoint_ops structure to be used in masked hardware watchpoints. */
10613
2060206e 10614static struct breakpoint_ops masked_watchpoint_breakpoint_ops;
9c06b0b4
TJB
10615
10616/* Tell whether the given watchpoint is a masked hardware watchpoint. */
10617
10618static int
10619is_masked_watchpoint (const struct breakpoint *b)
10620{
10621 return b->ops == &masked_watchpoint_breakpoint_ops;
10622}
10623
53a5351d
JM
10624/* accessflag: hw_write: watch write,
10625 hw_read: watch read,
10626 hw_access: watch access (read or write) */
c906108c 10627static void
bbc13ae3 10628watch_command_1 (const char *arg, int accessflag, int from_tty,
84f4c1fe 10629 int just_location, int internal)
c906108c 10630{
c1fc2657 10631 struct breakpoint *scope_breakpoint = NULL;
270140bd 10632 const struct block *exp_valid_block = NULL, *cond_exp_valid_block = NULL;
a1442452 10633 struct value *val, *mark, *result;
bb9d5f81 10634 int saved_bitpos = 0, saved_bitsize = 0;
bbc13ae3
KS
10635 const char *exp_start = NULL;
10636 const char *exp_end = NULL;
10637 const char *tok, *end_tok;
9c06b0b4 10638 int toklen = -1;
bbc13ae3
KS
10639 const char *cond_start = NULL;
10640 const char *cond_end = NULL;
c906108c 10641 enum bptype bp_type;
37e4754d 10642 int thread = -1;
0cf6dd15 10643 int pc = 0;
9c06b0b4
TJB
10644 /* Flag to indicate whether we are going to use masks for
10645 the hardware watchpoint. */
10646 int use_mask = 0;
10647 CORE_ADDR mask = 0;
c906108c 10648
37e4754d
LM
10649 /* Make sure that we actually have parameters to parse. */
10650 if (arg != NULL && arg[0] != '\0')
10651 {
bbc13ae3
KS
10652 const char *value_start;
10653
10654 exp_end = arg + strlen (arg);
37e4754d 10655
9c06b0b4
TJB
10656 /* Look for "parameter value" pairs at the end
10657 of the arguments string. */
bbc13ae3 10658 for (tok = exp_end - 1; tok > arg; tok--)
9c06b0b4
TJB
10659 {
10660 /* Skip whitespace at the end of the argument list. */
10661 while (tok > arg && (*tok == ' ' || *tok == '\t'))
10662 tok--;
10663
10664 /* Find the beginning of the last token.
10665 This is the value of the parameter. */
10666 while (tok > arg && (*tok != ' ' && *tok != '\t'))
10667 tok--;
10668 value_start = tok + 1;
10669
10670 /* Skip whitespace. */
10671 while (tok > arg && (*tok == ' ' || *tok == '\t'))
10672 tok--;
10673
10674 end_tok = tok;
10675
10676 /* Find the beginning of the second to last token.
10677 This is the parameter itself. */
10678 while (tok > arg && (*tok != ' ' && *tok != '\t'))
10679 tok--;
10680 tok++;
10681 toklen = end_tok - tok + 1;
10682
61012eef 10683 if (toklen == 6 && startswith (tok, "thread"))
9c06b0b4 10684 {
5d5658a1 10685 struct thread_info *thr;
9c06b0b4
TJB
10686 /* At this point we've found a "thread" token, which means
10687 the user is trying to set a watchpoint that triggers
10688 only in a specific thread. */
5d5658a1 10689 const char *endp;
37e4754d 10690
9c06b0b4
TJB
10691 if (thread != -1)
10692 error(_("You can specify only one thread."));
37e4754d 10693
9c06b0b4 10694 /* Extract the thread ID from the next token. */
5d5658a1 10695 thr = parse_thread_id (value_start, &endp);
37e4754d 10696
5d5658a1 10697 /* Check if the user provided a valid thread ID. */
9c06b0b4 10698 if (*endp != ' ' && *endp != '\t' && *endp != '\0')
5d5658a1 10699 invalid_thread_id_error (value_start);
9c06b0b4 10700
5d5658a1 10701 thread = thr->global_num;
9c06b0b4 10702 }
61012eef 10703 else if (toklen == 4 && startswith (tok, "mask"))
9c06b0b4
TJB
10704 {
10705 /* We've found a "mask" token, which means the user wants to
10706 create a hardware watchpoint that is going to have the mask
10707 facility. */
10708 struct value *mask_value, *mark;
37e4754d 10709
9c06b0b4
TJB
10710 if (use_mask)
10711 error(_("You can specify only one mask."));
37e4754d 10712
9c06b0b4 10713 use_mask = just_location = 1;
37e4754d 10714
9c06b0b4
TJB
10715 mark = value_mark ();
10716 mask_value = parse_to_comma_and_eval (&value_start);
10717 mask = value_as_address (mask_value);
10718 value_free_to_mark (mark);
10719 }
10720 else
10721 /* We didn't recognize what we found. We should stop here. */
10722 break;
37e4754d 10723
9c06b0b4
TJB
10724 /* Truncate the string and get rid of the "parameter value" pair before
10725 the arguments string is parsed by the parse_exp_1 function. */
bbc13ae3 10726 exp_end = tok;
9c06b0b4 10727 }
37e4754d 10728 }
bbc13ae3
KS
10729 else
10730 exp_end = arg;
37e4754d 10731
bbc13ae3
KS
10732 /* Parse the rest of the arguments. From here on out, everything
10733 is in terms of a newly allocated string instead of the original
10734 ARG. */
c906108c 10735 innermost_block = NULL;
81b1e71c
TT
10736 std::string expression (arg, exp_end - arg);
10737 exp_start = arg = expression.c_str ();
4d01a485 10738 expression_up exp = parse_exp_1 (&arg, 0, 0, 0);
c906108c 10739 exp_end = arg;
fa8a61dc
TT
10740 /* Remove trailing whitespace from the expression before saving it.
10741 This makes the eventual display of the expression string a bit
10742 prettier. */
10743 while (exp_end > exp_start && (exp_end[-1] == ' ' || exp_end[-1] == '\t'))
10744 --exp_end;
10745
65d79d4b 10746 /* Checking if the expression is not constant. */
4d01a485 10747 if (watchpoint_exp_is_const (exp.get ()))
65d79d4b
SDJ
10748 {
10749 int len;
10750
10751 len = exp_end - exp_start;
10752 while (len > 0 && isspace (exp_start[len - 1]))
10753 len--;
10754 error (_("Cannot watch constant value `%.*s'."), len, exp_start);
10755 }
10756
c906108c
SS
10757 exp_valid_block = innermost_block;
10758 mark = value_mark ();
4d01a485 10759 fetch_subexp_value (exp.get (), &pc, &val, &result, NULL, just_location);
06a64a0b 10760
bb9d5f81
PP
10761 if (val != NULL && just_location)
10762 {
10763 saved_bitpos = value_bitpos (val);
10764 saved_bitsize = value_bitsize (val);
10765 }
10766
06a64a0b
TT
10767 if (just_location)
10768 {
9c06b0b4
TJB
10769 int ret;
10770
06a64a0b 10771 exp_valid_block = NULL;
a1442452 10772 val = value_addr (result);
06a64a0b
TT
10773 release_value (val);
10774 value_free_to_mark (mark);
9c06b0b4
TJB
10775
10776 if (use_mask)
10777 {
10778 ret = target_masked_watch_num_registers (value_as_address (val),
10779 mask);
10780 if (ret == -1)
10781 error (_("This target does not support masked watchpoints."));
10782 else if (ret == -2)
10783 error (_("Invalid mask or memory region."));
10784 }
06a64a0b
TT
10785 }
10786 else if (val != NULL)
fa4727a6 10787 release_value (val);
c906108c 10788
f1735a53
TT
10789 tok = skip_spaces (arg);
10790 end_tok = skip_to_space (tok);
c906108c
SS
10791
10792 toklen = end_tok - tok;
10793 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
10794 {
60e1c644 10795 innermost_block = NULL;
c906108c 10796 tok = cond_start = end_tok + 1;
4d01a485 10797 parse_exp_1 (&tok, 0, 0, 0);
60e1c644
PA
10798
10799 /* The watchpoint expression may not be local, but the condition
10800 may still be. E.g.: `watch global if local > 0'. */
10801 cond_exp_valid_block = innermost_block;
10802
c906108c
SS
10803 cond_end = tok;
10804 }
10805 if (*tok)
8a3fe4f8 10806 error (_("Junk at end of command."));
c906108c 10807
441d7c93
PA
10808 frame_info *wp_frame = block_innermost_frame (exp_valid_block);
10809
10810 /* Save this because create_internal_breakpoint below invalidates
10811 'wp_frame'. */
10812 frame_id watchpoint_frame = get_frame_id (wp_frame);
d983da9c
DJ
10813
10814 /* If the expression is "local", then set up a "watchpoint scope"
10815 breakpoint at the point where we've left the scope of the watchpoint
10816 expression. Create the scope breakpoint before the watchpoint, so
10817 that we will encounter it first in bpstat_stop_status. */
441d7c93 10818 if (exp_valid_block != NULL && wp_frame != NULL)
d983da9c 10819 {
441d7c93
PA
10820 frame_id caller_frame_id = frame_unwind_caller_id (wp_frame);
10821
10822 if (frame_id_p (caller_frame_id))
edb3359d 10823 {
441d7c93
PA
10824 gdbarch *caller_arch = frame_unwind_caller_arch (wp_frame);
10825 CORE_ADDR caller_pc = frame_unwind_caller_pc (wp_frame);
10826
edb3359d 10827 scope_breakpoint
441d7c93 10828 = create_internal_breakpoint (caller_arch, caller_pc,
06edf0c0
PA
10829 bp_watchpoint_scope,
10830 &momentary_breakpoint_ops);
d983da9c 10831
441d7c93
PA
10832 /* create_internal_breakpoint could invalidate WP_FRAME. */
10833 wp_frame = NULL;
10834
edb3359d 10835 scope_breakpoint->enable_state = bp_enabled;
d983da9c 10836
edb3359d
DJ
10837 /* Automatically delete the breakpoint when it hits. */
10838 scope_breakpoint->disposition = disp_del;
d983da9c 10839
edb3359d 10840 /* Only break in the proper frame (help with recursion). */
441d7c93 10841 scope_breakpoint->frame_id = caller_frame_id;
d983da9c 10842
edb3359d 10843 /* Set the address at which we will stop. */
441d7c93
PA
10844 scope_breakpoint->loc->gdbarch = caller_arch;
10845 scope_breakpoint->loc->requested_address = caller_pc;
edb3359d 10846 scope_breakpoint->loc->address
a6d9a66e
UW
10847 = adjust_breakpoint_address (scope_breakpoint->loc->gdbarch,
10848 scope_breakpoint->loc->requested_address,
edb3359d
DJ
10849 scope_breakpoint->type);
10850 }
d983da9c
DJ
10851 }
10852
e8369a73
AB
10853 /* Now set up the breakpoint. We create all watchpoints as hardware
10854 watchpoints here even if hardware watchpoints are turned off, a call
10855 to update_watchpoint later in this function will cause the type to
10856 drop back to bp_watchpoint (software watchpoint) if required. */
10857
10858 if (accessflag == hw_read)
10859 bp_type = bp_read_watchpoint;
10860 else if (accessflag == hw_access)
10861 bp_type = bp_access_watchpoint;
10862 else
10863 bp_type = bp_hardware_watchpoint;
3a5c3e22 10864
b270e6f9 10865 std::unique_ptr<watchpoint> w (new watchpoint ());
c1fc2657 10866
348d480f 10867 if (use_mask)
b270e6f9 10868 init_raw_breakpoint_without_location (w.get (), NULL, bp_type,
3a5c3e22 10869 &masked_watchpoint_breakpoint_ops);
348d480f 10870 else
b270e6f9 10871 init_raw_breakpoint_without_location (w.get (), NULL, bp_type,
3a5c3e22 10872 &watchpoint_breakpoint_ops);
c1fc2657
SM
10873 w->thread = thread;
10874 w->disposition = disp_donttouch;
10875 w->pspace = current_program_space;
b22e99fd 10876 w->exp = std::move (exp);
3a5c3e22
PA
10877 w->exp_valid_block = exp_valid_block;
10878 w->cond_exp_valid_block = cond_exp_valid_block;
06a64a0b
TT
10879 if (just_location)
10880 {
10881 struct type *t = value_type (val);
10882 CORE_ADDR addr = value_as_address (val);
06a64a0b 10883
43cc5389
TT
10884 w->exp_string_reparse
10885 = current_language->la_watch_location_expression (t, addr).release ();
06a64a0b 10886
3a5c3e22 10887 w->exp_string = xstrprintf ("-location %.*s",
d63d0675 10888 (int) (exp_end - exp_start), exp_start);
06a64a0b
TT
10889 }
10890 else
3a5c3e22 10891 w->exp_string = savestring (exp_start, exp_end - exp_start);
9c06b0b4
TJB
10892
10893 if (use_mask)
10894 {
3a5c3e22 10895 w->hw_wp_mask = mask;
9c06b0b4
TJB
10896 }
10897 else
10898 {
3a5c3e22 10899 w->val = val;
bb9d5f81
PP
10900 w->val_bitpos = saved_bitpos;
10901 w->val_bitsize = saved_bitsize;
3a5c3e22 10902 w->val_valid = 1;
9c06b0b4 10903 }
77b06cd7 10904
c906108c 10905 if (cond_start)
c1fc2657 10906 w->cond_string = savestring (cond_start, cond_end - cond_start);
c906108c 10907 else
c1fc2657 10908 w->cond_string = 0;
c5aa993b 10909
441d7c93 10910 if (frame_id_p (watchpoint_frame))
f6bc2008 10911 {
441d7c93 10912 w->watchpoint_frame = watchpoint_frame;
3a5c3e22 10913 w->watchpoint_thread = inferior_ptid;
f6bc2008 10914 }
c906108c 10915 else
f6bc2008 10916 {
3a5c3e22
PA
10917 w->watchpoint_frame = null_frame_id;
10918 w->watchpoint_thread = null_ptid;
f6bc2008 10919 }
c906108c 10920
d983da9c 10921 if (scope_breakpoint != NULL)
c906108c 10922 {
d983da9c
DJ
10923 /* The scope breakpoint is related to the watchpoint. We will
10924 need to act on them together. */
c1fc2657 10925 w->related_breakpoint = scope_breakpoint;
b270e6f9 10926 scope_breakpoint->related_breakpoint = w.get ();
c906108c 10927 }
d983da9c 10928
06a64a0b
TT
10929 if (!just_location)
10930 value_free_to_mark (mark);
2d134ed3 10931
b270e6f9
TT
10932 /* Finally update the new watchpoint. This creates the locations
10933 that should be inserted. */
10934 update_watchpoint (w.get (), 1);
a9634178 10935
b270e6f9 10936 install_breakpoint (internal, std::move (w), 1);
c906108c
SS
10937}
10938
e09342b5 10939/* Return count of debug registers needed to watch the given expression.
e09342b5 10940 If the watchpoint cannot be handled in hardware return zero. */
c906108c 10941
c906108c 10942static int
a9634178 10943can_use_hardware_watchpoint (struct value *v)
c906108c
SS
10944{
10945 int found_memory_cnt = 0;
2e70b7b9 10946 struct value *head = v;
c906108c
SS
10947
10948 /* Did the user specifically forbid us to use hardware watchpoints? */
c5aa993b 10949 if (!can_use_hw_watchpoints)
c906108c 10950 return 0;
c5aa993b 10951
5c44784c
JM
10952 /* Make sure that the value of the expression depends only upon
10953 memory contents, and values computed from them within GDB. If we
10954 find any register references or function calls, we can't use a
10955 hardware watchpoint.
10956
10957 The idea here is that evaluating an expression generates a series
10958 of values, one holding the value of every subexpression. (The
10959 expression a*b+c has five subexpressions: a, b, a*b, c, and
10960 a*b+c.) GDB's values hold almost enough information to establish
10961 the criteria given above --- they identify memory lvalues,
10962 register lvalues, computed values, etcetera. So we can evaluate
10963 the expression, and then scan the chain of values that leaves
10964 behind to decide whether we can detect any possible change to the
10965 expression's final value using only hardware watchpoints.
10966
10967 However, I don't think that the values returned by inferior
10968 function calls are special in any way. So this function may not
10969 notice that an expression involving an inferior function call
10970 can't be watched with hardware watchpoints. FIXME. */
17cf0ecd 10971 for (; v; v = value_next (v))
c906108c 10972 {
5c44784c 10973 if (VALUE_LVAL (v) == lval_memory)
c906108c 10974 {
8464be76
DJ
10975 if (v != head && value_lazy (v))
10976 /* A lazy memory lvalue in the chain is one that GDB never
10977 needed to fetch; we either just used its address (e.g.,
10978 `a' in `a.b') or we never needed it at all (e.g., `a'
10979 in `a,b'). This doesn't apply to HEAD; if that is
10980 lazy then it was not readable, but watch it anyway. */
5c44784c 10981 ;
53a5351d 10982 else
5c44784c
JM
10983 {
10984 /* Ahh, memory we actually used! Check if we can cover
10985 it with hardware watchpoints. */
df407dfe 10986 struct type *vtype = check_typedef (value_type (v));
2e70b7b9
MS
10987
10988 /* We only watch structs and arrays if user asked for it
10989 explicitly, never if they just happen to appear in a
10990 middle of some value chain. */
10991 if (v == head
10992 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
10993 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
10994 {
42ae5230 10995 CORE_ADDR vaddr = value_address (v);
e09342b5
TJB
10996 int len;
10997 int num_regs;
10998
a9634178 10999 len = (target_exact_watchpoints
e09342b5
TJB
11000 && is_scalar_type_recursive (vtype))?
11001 1 : TYPE_LENGTH (value_type (v));
2e70b7b9 11002
e09342b5
TJB
11003 num_regs = target_region_ok_for_hw_watchpoint (vaddr, len);
11004 if (!num_regs)
2e70b7b9
MS
11005 return 0;
11006 else
e09342b5 11007 found_memory_cnt += num_regs;
2e70b7b9 11008 }
5c44784c 11009 }
c5aa993b 11010 }
5086187c
AC
11011 else if (VALUE_LVAL (v) != not_lval
11012 && deprecated_value_modifiable (v) == 0)
38b6c3b3 11013 return 0; /* These are values from the history (e.g., $1). */
5086187c 11014 else if (VALUE_LVAL (v) == lval_register)
38b6c3b3 11015 return 0; /* Cannot watch a register with a HW watchpoint. */
c906108c
SS
11016 }
11017
11018 /* The expression itself looks suitable for using a hardware
11019 watchpoint, but give the target machine a chance to reject it. */
11020 return found_memory_cnt;
11021}
11022
8b93c638 11023void
f2fc3015 11024watch_command_wrapper (const char *arg, int from_tty, int internal)
8b93c638 11025{
84f4c1fe 11026 watch_command_1 (arg, hw_write, from_tty, 0, internal);
06a64a0b
TT
11027}
11028
06a64a0b
TT
11029/* A helper function that looks for the "-location" argument and then
11030 calls watch_command_1. */
11031
11032static void
0b39b52e 11033watch_maybe_just_location (const char *arg, int accessflag, int from_tty)
06a64a0b
TT
11034{
11035 int just_location = 0;
11036
11037 if (arg
11038 && (check_for_argument (&arg, "-location", sizeof ("-location") - 1)
11039 || check_for_argument (&arg, "-l", sizeof ("-l") - 1)))
11040 {
e9cafbcc 11041 arg = skip_spaces (arg);
06a64a0b
TT
11042 just_location = 1;
11043 }
11044
84f4c1fe 11045 watch_command_1 (arg, accessflag, from_tty, just_location, 0);
8b93c638 11046}
8926118c 11047
c5aa993b 11048static void
0b39b52e 11049watch_command (const char *arg, int from_tty)
c906108c 11050{
06a64a0b 11051 watch_maybe_just_location (arg, hw_write, from_tty);
c906108c
SS
11052}
11053
8b93c638 11054void
f2fc3015 11055rwatch_command_wrapper (const char *arg, int from_tty, int internal)
8b93c638 11056{
84f4c1fe 11057 watch_command_1 (arg, hw_read, from_tty, 0, internal);
8b93c638 11058}
8926118c 11059
c5aa993b 11060static void
0b39b52e 11061rwatch_command (const char *arg, int from_tty)
c906108c 11062{
06a64a0b 11063 watch_maybe_just_location (arg, hw_read, from_tty);
c906108c
SS
11064}
11065
8b93c638 11066void
f2fc3015 11067awatch_command_wrapper (const char *arg, int from_tty, int internal)
8b93c638 11068{
84f4c1fe 11069 watch_command_1 (arg, hw_access, from_tty, 0, internal);
8b93c638 11070}
8926118c 11071
c5aa993b 11072static void
0b39b52e 11073awatch_command (const char *arg, int from_tty)
c906108c 11074{
06a64a0b 11075 watch_maybe_just_location (arg, hw_access, from_tty);
c906108c 11076}
c906108c 11077\f
c5aa993b 11078
cfc31633
PA
11079/* Data for the FSM that manages the until(location)/advance commands
11080 in infcmd.c. Here because it uses the mechanisms of
11081 breakpoints. */
c906108c 11082
cfc31633 11083struct until_break_fsm
bfec99b2 11084{
cfc31633
PA
11085 /* The base class. */
11086 struct thread_fsm thread_fsm;
11087
11088 /* The thread that as current when the command was executed. */
11089 int thread;
11090
11091 /* The breakpoint set at the destination location. */
11092 struct breakpoint *location_breakpoint;
11093
11094 /* Breakpoint set at the return address in the caller frame. May be
11095 NULL. */
11096 struct breakpoint *caller_breakpoint;
bfec99b2
PA
11097};
11098
8980e177
PA
11099static void until_break_fsm_clean_up (struct thread_fsm *self,
11100 struct thread_info *thread);
11101static int until_break_fsm_should_stop (struct thread_fsm *self,
11102 struct thread_info *thread);
cfc31633
PA
11103static enum async_reply_reason
11104 until_break_fsm_async_reply_reason (struct thread_fsm *self);
11105
11106/* until_break_fsm's vtable. */
11107
11108static struct thread_fsm_ops until_break_fsm_ops =
11109{
11110 NULL, /* dtor */
11111 until_break_fsm_clean_up,
11112 until_break_fsm_should_stop,
11113 NULL, /* return_value */
11114 until_break_fsm_async_reply_reason,
11115};
11116
11117/* Allocate a new until_break_command_fsm. */
11118
11119static struct until_break_fsm *
8980e177 11120new_until_break_fsm (struct interp *cmd_interp, int thread,
454dafbd
TT
11121 breakpoint_up &&location_breakpoint,
11122 breakpoint_up &&caller_breakpoint)
cfc31633
PA
11123{
11124 struct until_break_fsm *sm;
11125
11126 sm = XCNEW (struct until_break_fsm);
8980e177 11127 thread_fsm_ctor (&sm->thread_fsm, &until_break_fsm_ops, cmd_interp);
cfc31633
PA
11128
11129 sm->thread = thread;
454dafbd
TT
11130 sm->location_breakpoint = location_breakpoint.release ();
11131 sm->caller_breakpoint = caller_breakpoint.release ();
cfc31633
PA
11132
11133 return sm;
11134}
11135
11136/* Implementation of the 'should_stop' FSM method for the
11137 until(location)/advance commands. */
11138
11139static int
8980e177
PA
11140until_break_fsm_should_stop (struct thread_fsm *self,
11141 struct thread_info *tp)
cfc31633
PA
11142{
11143 struct until_break_fsm *sm = (struct until_break_fsm *) self;
cfc31633
PA
11144
11145 if (bpstat_find_breakpoint (tp->control.stop_bpstat,
11146 sm->location_breakpoint) != NULL
11147 || (sm->caller_breakpoint != NULL
11148 && bpstat_find_breakpoint (tp->control.stop_bpstat,
11149 sm->caller_breakpoint) != NULL))
11150 thread_fsm_set_finished (self);
11151
11152 return 1;
11153}
11154
11155/* Implementation of the 'clean_up' FSM method for the
11156 until(location)/advance commands. */
11157
c2c6d25f 11158static void
8980e177
PA
11159until_break_fsm_clean_up (struct thread_fsm *self,
11160 struct thread_info *thread)
43ff13b4 11161{
cfc31633 11162 struct until_break_fsm *sm = (struct until_break_fsm *) self;
bfec99b2 11163
cfc31633
PA
11164 /* Clean up our temporary breakpoints. */
11165 if (sm->location_breakpoint != NULL)
11166 {
11167 delete_breakpoint (sm->location_breakpoint);
11168 sm->location_breakpoint = NULL;
11169 }
11170 if (sm->caller_breakpoint != NULL)
11171 {
11172 delete_breakpoint (sm->caller_breakpoint);
11173 sm->caller_breakpoint = NULL;
11174 }
11175 delete_longjmp_breakpoint (sm->thread);
11176}
11177
11178/* Implementation of the 'async_reply_reason' FSM method for the
11179 until(location)/advance commands. */
11180
11181static enum async_reply_reason
11182until_break_fsm_async_reply_reason (struct thread_fsm *self)
11183{
11184 return EXEC_ASYNC_LOCATION_REACHED;
43ff13b4
JM
11185}
11186
c906108c 11187void
f2fc3015 11188until_break_command (const char *arg, int from_tty, int anywhere)
c906108c 11189{
8556afb4
PA
11190 struct frame_info *frame;
11191 struct gdbarch *frame_gdbarch;
11192 struct frame_id stack_frame_id;
11193 struct frame_id caller_frame_id;
ffc2605c 11194 struct cleanup *old_chain;
186c406b
TT
11195 int thread;
11196 struct thread_info *tp;
cfc31633 11197 struct until_break_fsm *sm;
c906108c 11198
70509625 11199 clear_proceed_status (0);
c906108c
SS
11200
11201 /* Set a breakpoint where the user wants it and at return from
4a64f543 11202 this function. */
c5aa993b 11203
ffc2605c 11204 event_location_up location = string_to_event_location (&arg, current_language);
f00aae0f 11205
6c5b2ebe
PA
11206 std::vector<symtab_and_line> sals
11207 = (last_displayed_sal_is_valid ()
11208 ? decode_line_1 (location.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
11209 get_last_displayed_symtab (),
11210 get_last_displayed_line ())
11211 : decode_line_1 (location.get (), DECODE_LINE_FUNFIRSTLINE,
11212 NULL, (struct symtab *) NULL, 0));
c5aa993b 11213
6c5b2ebe 11214 if (sals.size () != 1)
8a3fe4f8 11215 error (_("Couldn't get information on specified line."));
c5aa993b 11216
6c5b2ebe 11217 symtab_and_line &sal = sals[0];
c5aa993b 11218
c906108c 11219 if (*arg)
8a3fe4f8 11220 error (_("Junk at end of arguments."));
c5aa993b 11221
c906108c 11222 resolve_sal_pc (&sal);
c5aa993b 11223
186c406b 11224 tp = inferior_thread ();
5d5658a1 11225 thread = tp->global_num;
186c406b 11226
883bc8d1
PA
11227 old_chain = make_cleanup (null_cleanup, NULL);
11228
8556afb4
PA
11229 /* Note linespec handling above invalidates the frame chain.
11230 Installing a breakpoint also invalidates the frame chain (as it
11231 may need to switch threads), so do any frame handling before
11232 that. */
11233
11234 frame = get_selected_frame (NULL);
11235 frame_gdbarch = get_frame_arch (frame);
11236 stack_frame_id = get_stack_frame_id (frame);
11237 caller_frame_id = frame_unwind_caller_id (frame);
883bc8d1 11238
ae66c1fc
EZ
11239 /* Keep within the current frame, or in frames called by the current
11240 one. */
edb3359d 11241
454dafbd 11242 breakpoint_up caller_breakpoint;
883bc8d1 11243 if (frame_id_p (caller_frame_id))
c906108c 11244 {
883bc8d1 11245 struct symtab_and_line sal2;
cfc31633 11246 struct gdbarch *caller_gdbarch;
883bc8d1
PA
11247
11248 sal2 = find_pc_line (frame_unwind_caller_pc (frame), 0);
11249 sal2.pc = frame_unwind_caller_pc (frame);
cfc31633
PA
11250 caller_gdbarch = frame_unwind_caller_arch (frame);
11251 caller_breakpoint = set_momentary_breakpoint (caller_gdbarch,
11252 sal2,
11253 caller_frame_id,
11254 bp_until);
186c406b 11255
883bc8d1 11256 set_longjmp_breakpoint (tp, caller_frame_id);
186c406b 11257 make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
c906108c 11258 }
c5aa993b 11259
c70a6932
JK
11260 /* set_momentary_breakpoint could invalidate FRAME. */
11261 frame = NULL;
11262
454dafbd 11263 breakpoint_up location_breakpoint;
883bc8d1
PA
11264 if (anywhere)
11265 /* If the user told us to continue until a specified location,
11266 we don't specify a frame at which we need to stop. */
cfc31633
PA
11267 location_breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
11268 null_frame_id, bp_until);
883bc8d1
PA
11269 else
11270 /* Otherwise, specify the selected frame, because we want to stop
11271 only at the very same frame. */
cfc31633
PA
11272 location_breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
11273 stack_frame_id, bp_until);
883bc8d1 11274
8980e177 11275 sm = new_until_break_fsm (command_interp (), tp->global_num,
454dafbd
TT
11276 std::move (location_breakpoint),
11277 std::move (caller_breakpoint));
cfc31633 11278 tp->thread_fsm = &sm->thread_fsm;
f107f563 11279
cfc31633 11280 discard_cleanups (old_chain);
f107f563 11281
cfc31633 11282 proceed (-1, GDB_SIGNAL_DEFAULT);
c906108c 11283}
ae66c1fc 11284
c906108c
SS
11285/* This function attempts to parse an optional "if <cond>" clause
11286 from the arg string. If one is not found, it returns NULL.
c5aa993b 11287
c906108c
SS
11288 Else, it returns a pointer to the condition string. (It does not
11289 attempt to evaluate the string against a particular block.) And,
11290 it updates arg to point to the first character following the parsed
4a64f543 11291 if clause in the arg string. */
53a5351d 11292
63160a43
PA
11293const char *
11294ep_parse_optional_if_clause (const char **arg)
c906108c 11295{
63160a43 11296 const char *cond_string;
c5aa993b
JM
11297
11298 if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
c906108c 11299 return NULL;
c5aa993b 11300
4a64f543 11301 /* Skip the "if" keyword. */
c906108c 11302 (*arg) += 2;
c5aa993b 11303
c906108c 11304 /* Skip any extra leading whitespace, and record the start of the
4a64f543 11305 condition string. */
f1735a53 11306 *arg = skip_spaces (*arg);
c906108c 11307 cond_string = *arg;
c5aa993b 11308
4a64f543
MS
11309 /* Assume that the condition occupies the remainder of the arg
11310 string. */
c906108c 11311 (*arg) += strlen (cond_string);
c5aa993b 11312
c906108c
SS
11313 return cond_string;
11314}
c5aa993b 11315
c906108c
SS
11316/* Commands to deal with catching events, such as signals, exceptions,
11317 process start/exit, etc. */
c5aa993b
JM
11318
11319typedef enum
11320{
44feb3ce
TT
11321 catch_fork_temporary, catch_vfork_temporary,
11322 catch_fork_permanent, catch_vfork_permanent
c5aa993b
JM
11323}
11324catch_fork_kind;
11325
c906108c 11326static void
eb4c3f4a 11327catch_fork_command_1 (const char *arg, int from_tty,
cc59ec59 11328 struct cmd_list_element *command)
c906108c 11329{
a6d9a66e 11330 struct gdbarch *gdbarch = get_current_arch ();
63160a43 11331 const char *cond_string = NULL;
44feb3ce
TT
11332 catch_fork_kind fork_kind;
11333 int tempflag;
11334
11335 fork_kind = (catch_fork_kind) (uintptr_t) get_cmd_context (command);
11336 tempflag = (fork_kind == catch_fork_temporary
11337 || fork_kind == catch_vfork_temporary);
c5aa993b 11338
44feb3ce
TT
11339 if (!arg)
11340 arg = "";
f1735a53 11341 arg = skip_spaces (arg);
c5aa993b 11342
c906108c 11343 /* The allowed syntax is:
c5aa993b
JM
11344 catch [v]fork
11345 catch [v]fork if <cond>
11346
4a64f543 11347 First, check if there's an if clause. */
c906108c 11348 cond_string = ep_parse_optional_if_clause (&arg);
c5aa993b 11349
c906108c 11350 if ((*arg != '\0') && !isspace (*arg))
8a3fe4f8 11351 error (_("Junk at end of arguments."));
c5aa993b 11352
c906108c 11353 /* If this target supports it, create a fork or vfork catchpoint
4a64f543 11354 and enable reporting of such events. */
c5aa993b
JM
11355 switch (fork_kind)
11356 {
44feb3ce
TT
11357 case catch_fork_temporary:
11358 case catch_fork_permanent:
a6d9a66e 11359 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
ce78b96d 11360 &catch_fork_breakpoint_ops);
c906108c 11361 break;
44feb3ce
TT
11362 case catch_vfork_temporary:
11363 case catch_vfork_permanent:
a6d9a66e 11364 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
ce78b96d 11365 &catch_vfork_breakpoint_ops);
c906108c 11366 break;
c5aa993b 11367 default:
8a3fe4f8 11368 error (_("unsupported or unknown fork kind; cannot catch it"));
c906108c 11369 break;
c5aa993b 11370 }
c906108c
SS
11371}
11372
11373static void
eb4c3f4a 11374catch_exec_command_1 (const char *arg, int from_tty,
cc59ec59 11375 struct cmd_list_element *command)
c906108c 11376{
a6d9a66e 11377 struct gdbarch *gdbarch = get_current_arch ();
44feb3ce 11378 int tempflag;
63160a43 11379 const char *cond_string = NULL;
c906108c 11380
44feb3ce
TT
11381 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11382
11383 if (!arg)
11384 arg = "";
f1735a53 11385 arg = skip_spaces (arg);
c906108c
SS
11386
11387 /* The allowed syntax is:
c5aa993b
JM
11388 catch exec
11389 catch exec if <cond>
c906108c 11390
4a64f543 11391 First, check if there's an if clause. */
c906108c
SS
11392 cond_string = ep_parse_optional_if_clause (&arg);
11393
11394 if ((*arg != '\0') && !isspace (*arg))
8a3fe4f8 11395 error (_("Junk at end of arguments."));
c906108c 11396
b270e6f9
TT
11397 std::unique_ptr<exec_catchpoint> c (new exec_catchpoint ());
11398 init_catchpoint (c.get (), gdbarch, tempflag, cond_string,
b4d90040
PA
11399 &catch_exec_breakpoint_ops);
11400 c->exec_pathname = NULL;
11401
b270e6f9 11402 install_breakpoint (0, std::move (c), 1);
c906108c 11403}
c5aa993b 11404
9ac4176b 11405void
28010a5d
PA
11406init_ada_exception_breakpoint (struct breakpoint *b,
11407 struct gdbarch *gdbarch,
11408 struct symtab_and_line sal,
f2fc3015 11409 const char *addr_string,
c0a91b2b 11410 const struct breakpoint_ops *ops,
28010a5d 11411 int tempflag,
349774ef 11412 int enabled,
28010a5d 11413 int from_tty)
f7f9143b 11414{
f7f9143b
JB
11415 if (from_tty)
11416 {
5af949e3
UW
11417 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
11418 if (!loc_gdbarch)
11419 loc_gdbarch = gdbarch;
11420
6c95b8df
PA
11421 describe_other_breakpoints (loc_gdbarch,
11422 sal.pspace, sal.pc, sal.section, -1);
f7f9143b
JB
11423 /* FIXME: brobecker/2006-12-28: Actually, re-implement a special
11424 version for exception catchpoints, because two catchpoints
11425 used for different exception names will use the same address.
11426 In this case, a "breakpoint ... also set at..." warning is
4a64f543 11427 unproductive. Besides, the warning phrasing is also a bit
e5dd4106 11428 inappropriate, we should use the word catchpoint, and tell
f7f9143b
JB
11429 the user what type of catchpoint it is. The above is good
11430 enough for now, though. */
11431 }
11432
28010a5d 11433 init_raw_breakpoint (b, gdbarch, sal, bp_breakpoint, ops);
f7f9143b 11434
349774ef 11435 b->enable_state = enabled ? bp_enabled : bp_disabled;
f7f9143b 11436 b->disposition = tempflag ? disp_del : disp_donttouch;
d28cd78a
TT
11437 b->location = string_to_event_location (&addr_string,
11438 language_def (language_ada));
f7f9143b 11439 b->language = language_ada;
f7f9143b
JB
11440}
11441
c906108c 11442static void
981a3fb3 11443catch_command (const char *arg, int from_tty)
c906108c 11444{
44feb3ce 11445 error (_("Catch requires an event name."));
c906108c
SS
11446}
11447\f
11448
11449static void
981a3fb3 11450tcatch_command (const char *arg, int from_tty)
c906108c 11451{
44feb3ce 11452 error (_("Catch requires an event name."));
c906108c
SS
11453}
11454
81b1e71c 11455/* Compare two breakpoints and return a strcmp-like result. */
8a2c437b
TT
11456
11457static int
81b1e71c 11458compare_breakpoints (const breakpoint *a, const breakpoint *b)
8a2c437b 11459{
81b1e71c
TT
11460 uintptr_t ua = (uintptr_t) a;
11461 uintptr_t ub = (uintptr_t) b;
8a2c437b 11462
81b1e71c 11463 if (a->number < b->number)
8a2c437b 11464 return -1;
81b1e71c 11465 else if (a->number > b->number)
8a2c437b
TT
11466 return 1;
11467
11468 /* Now sort by address, in case we see, e..g, two breakpoints with
11469 the number 0. */
11470 if (ua < ub)
11471 return -1;
94b0e70d 11472 return ua > ub ? 1 : 0;
8a2c437b
TT
11473}
11474
80f8a6eb 11475/* Delete breakpoints by address or line. */
c906108c
SS
11476
11477static void
0b39b52e 11478clear_command (const char *arg, int from_tty)
c906108c 11479{
81b1e71c 11480 struct breakpoint *b;
c906108c 11481 int default_match;
c906108c
SS
11482 int i;
11483
6c5b2ebe
PA
11484 std::vector<symtab_and_line> decoded_sals;
11485 symtab_and_line last_sal;
11486 gdb::array_view<symtab_and_line> sals;
c906108c
SS
11487 if (arg)
11488 {
6c5b2ebe
PA
11489 decoded_sals
11490 = decode_line_with_current_source (arg,
11491 (DECODE_LINE_FUNFIRSTLINE
11492 | DECODE_LINE_LIST_MODE));
c906108c 11493 default_match = 0;
6c5b2ebe 11494 sals = decoded_sals;
c906108c
SS
11495 }
11496 else
11497 {
1bfeeb0f
JL
11498 /* Set sal's line, symtab, pc, and pspace to the values
11499 corresponding to the last call to print_frame_info. If the
11500 codepoint is not valid, this will set all the fields to 0. */
51abb421 11501 last_sal = get_last_displayed_sal ();
6c5b2ebe 11502 if (last_sal.symtab == 0)
8a3fe4f8 11503 error (_("No source file specified."));
c906108c 11504
c906108c 11505 default_match = 1;
6c5b2ebe 11506 sals = last_sal;
c906108c
SS
11507 }
11508
4a64f543
MS
11509 /* We don't call resolve_sal_pc here. That's not as bad as it
11510 seems, because all existing breakpoints typically have both
11511 file/line and pc set. So, if clear is given file/line, we can
11512 match this to existing breakpoint without obtaining pc at all.
ed0616c6
VP
11513
11514 We only support clearing given the address explicitly
11515 present in breakpoint table. Say, we've set breakpoint
4a64f543 11516 at file:line. There were several PC values for that file:line,
ed0616c6 11517 due to optimization, all in one block.
4a64f543
MS
11518
11519 We've picked one PC value. If "clear" is issued with another
ed0616c6
VP
11520 PC corresponding to the same file:line, the breakpoint won't
11521 be cleared. We probably can still clear the breakpoint, but
11522 since the other PC value is never presented to user, user
11523 can only find it by guessing, and it does not seem important
11524 to support that. */
11525
4a64f543
MS
11526 /* For each line spec given, delete bps which correspond to it. Do
11527 it in two passes, solely to preserve the current behavior that
11528 from_tty is forced true if we delete more than one
11529 breakpoint. */
c906108c 11530
81b1e71c 11531 std::vector<struct breakpoint *> found;
6c5b2ebe 11532 for (const auto &sal : sals)
c906108c 11533 {
05cba821
JK
11534 const char *sal_fullname;
11535
c906108c 11536 /* If exact pc given, clear bpts at that pc.
c5aa993b
JM
11537 If line given (pc == 0), clear all bpts on specified line.
11538 If defaulting, clear all bpts on default line
c906108c 11539 or at default pc.
c5aa993b
JM
11540
11541 defaulting sal.pc != 0 tests to do
11542
11543 0 1 pc
11544 1 1 pc _and_ line
11545 0 0 line
11546 1 0 <can't happen> */
c906108c 11547
05cba821
JK
11548 sal_fullname = (sal.symtab == NULL
11549 ? NULL : symtab_to_fullname (sal.symtab));
c906108c 11550
4a64f543 11551 /* Find all matching breakpoints and add them to 'found'. */
d6e956e5 11552 ALL_BREAKPOINTS (b)
c5aa993b 11553 {
0d381245 11554 int match = 0;
4a64f543 11555 /* Are we going to delete b? */
cc60f2e3 11556 if (b->type != bp_none && !is_watchpoint (b))
0d381245
VP
11557 {
11558 struct bp_location *loc = b->loc;
11559 for (; loc; loc = loc->next)
11560 {
f8eba3c6
TT
11561 /* If the user specified file:line, don't allow a PC
11562 match. This matches historical gdb behavior. */
11563 int pc_match = (!sal.explicit_line
11564 && sal.pc
11565 && (loc->pspace == sal.pspace)
11566 && (loc->address == sal.pc)
11567 && (!section_is_overlay (loc->section)
11568 || loc->section == sal.section));
4aac40c8
TT
11569 int line_match = 0;
11570
11571 if ((default_match || sal.explicit_line)
2f202fde 11572 && loc->symtab != NULL
05cba821 11573 && sal_fullname != NULL
4aac40c8 11574 && sal.pspace == loc->pspace
05cba821
JK
11575 && loc->line_number == sal.line
11576 && filename_cmp (symtab_to_fullname (loc->symtab),
11577 sal_fullname) == 0)
11578 line_match = 1;
4aac40c8 11579
0d381245
VP
11580 if (pc_match || line_match)
11581 {
11582 match = 1;
11583 break;
11584 }
11585 }
11586 }
11587
11588 if (match)
81b1e71c 11589 found.push_back (b);
c906108c 11590 }
80f8a6eb 11591 }
8a2c437b 11592
80f8a6eb 11593 /* Now go thru the 'found' chain and delete them. */
81b1e71c 11594 if (found.empty ())
80f8a6eb
MS
11595 {
11596 if (arg)
8a3fe4f8 11597 error (_("No breakpoint at %s."), arg);
80f8a6eb 11598 else
8a3fe4f8 11599 error (_("No breakpoint at this line."));
80f8a6eb 11600 }
c906108c 11601
8a2c437b 11602 /* Remove duplicates from the vec. */
81b1e71c
TT
11603 std::sort (found.begin (), found.end (),
11604 [] (const breakpoint *a, const breakpoint *b)
11605 {
11606 return compare_breakpoints (a, b) < 0;
11607 });
11608 found.erase (std::unique (found.begin (), found.end (),
11609 [] (const breakpoint *a, const breakpoint *b)
11610 {
11611 return compare_breakpoints (a, b) == 0;
11612 }),
11613 found.end ());
8a2c437b 11614
81b1e71c 11615 if (found.size () > 1)
4a64f543 11616 from_tty = 1; /* Always report if deleted more than one. */
80f8a6eb 11617 if (from_tty)
a3f17187 11618 {
81b1e71c 11619 if (found.size () == 1)
a3f17187
AC
11620 printf_unfiltered (_("Deleted breakpoint "));
11621 else
11622 printf_unfiltered (_("Deleted breakpoints "));
11623 }
d6e956e5 11624
81b1e71c 11625 for (breakpoint *iter : found)
80f8a6eb 11626 {
c5aa993b 11627 if (from_tty)
81b1e71c
TT
11628 printf_unfiltered ("%d ", iter->number);
11629 delete_breakpoint (iter);
c906108c 11630 }
80f8a6eb
MS
11631 if (from_tty)
11632 putchar_unfiltered ('\n');
c906108c
SS
11633}
11634\f
11635/* Delete breakpoint in BS if they are `delete' breakpoints and
11636 all breakpoints that are marked for deletion, whether hit or not.
11637 This is called after any breakpoint is hit, or after errors. */
11638
11639void
fba45db2 11640breakpoint_auto_delete (bpstat bs)
c906108c 11641{
35df4500 11642 struct breakpoint *b, *b_tmp;
c906108c
SS
11643
11644 for (; bs; bs = bs->next)
f431efe5
PA
11645 if (bs->breakpoint_at
11646 && bs->breakpoint_at->disposition == disp_del
c906108c 11647 && bs->stop)
f431efe5 11648 delete_breakpoint (bs->breakpoint_at);
c906108c 11649
35df4500 11650 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 11651 {
b5de0fa7 11652 if (b->disposition == disp_del_at_next_stop)
c5aa993b
JM
11653 delete_breakpoint (b);
11654 }
c906108c
SS
11655}
11656
4a64f543
MS
11657/* A comparison function for bp_location AP and BP being interfaced to
11658 qsort. Sort elements primarily by their ADDRESS (no matter what
11659 does breakpoint_address_is_meaningful say for its OWNER),
1a853c52 11660 secondarily by ordering first permanent elements and
4a64f543 11661 terciarily just ensuring the array is sorted stable way despite
e5dd4106 11662 qsort being an unstable algorithm. */
876fa593
JK
11663
11664static int
f5336ca5 11665bp_locations_compare (const void *ap, const void *bp)
876fa593 11666{
9a3c8263
SM
11667 const struct bp_location *a = *(const struct bp_location **) ap;
11668 const struct bp_location *b = *(const struct bp_location **) bp;
876fa593
JK
11669
11670 if (a->address != b->address)
11671 return (a->address > b->address) - (a->address < b->address);
11672
dea2aa5f
LM
11673 /* Sort locations at the same address by their pspace number, keeping
11674 locations of the same inferior (in a multi-inferior environment)
11675 grouped. */
11676
11677 if (a->pspace->num != b->pspace->num)
11678 return ((a->pspace->num > b->pspace->num)
11679 - (a->pspace->num < b->pspace->num));
11680
876fa593 11681 /* Sort permanent breakpoints first. */
1a853c52
PA
11682 if (a->permanent != b->permanent)
11683 return (a->permanent < b->permanent) - (a->permanent > b->permanent);
876fa593 11684
c56a97f9
JK
11685 /* Make the internal GDB representation stable across GDB runs
11686 where A and B memory inside GDB can differ. Breakpoint locations of
11687 the same type at the same address can be sorted in arbitrary order. */
876fa593
JK
11688
11689 if (a->owner->number != b->owner->number)
c56a97f9
JK
11690 return ((a->owner->number > b->owner->number)
11691 - (a->owner->number < b->owner->number));
876fa593
JK
11692
11693 return (a > b) - (a < b);
11694}
11695
f5336ca5
PA
11696/* Set bp_locations_placed_address_before_address_max and
11697 bp_locations_shadow_len_after_address_max according to the current
11698 content of the bp_locations array. */
f7545552
TT
11699
11700static void
f5336ca5 11701bp_locations_target_extensions_update (void)
f7545552 11702{
876fa593
JK
11703 struct bp_location *bl, **blp_tmp;
11704
f5336ca5
PA
11705 bp_locations_placed_address_before_address_max = 0;
11706 bp_locations_shadow_len_after_address_max = 0;
876fa593
JK
11707
11708 ALL_BP_LOCATIONS (bl, blp_tmp)
11709 {
11710 CORE_ADDR start, end, addr;
11711
11712 if (!bp_location_has_shadow (bl))
11713 continue;
11714
11715 start = bl->target_info.placed_address;
11716 end = start + bl->target_info.shadow_len;
11717
11718 gdb_assert (bl->address >= start);
11719 addr = bl->address - start;
f5336ca5
PA
11720 if (addr > bp_locations_placed_address_before_address_max)
11721 bp_locations_placed_address_before_address_max = addr;
876fa593
JK
11722
11723 /* Zero SHADOW_LEN would not pass bp_location_has_shadow. */
11724
11725 gdb_assert (bl->address < end);
11726 addr = end - bl->address;
f5336ca5
PA
11727 if (addr > bp_locations_shadow_len_after_address_max)
11728 bp_locations_shadow_len_after_address_max = addr;
876fa593 11729 }
f7545552
TT
11730}
11731
1e4d1764
YQ
11732/* Download tracepoint locations if they haven't been. */
11733
11734static void
11735download_tracepoint_locations (void)
11736{
7ed2c994 11737 struct breakpoint *b;
dd2e65cc 11738 enum tribool can_download_tracepoint = TRIBOOL_UNKNOWN;
1e4d1764 11739
5ed8105e 11740 scoped_restore_current_pspace_and_thread restore_pspace_thread;
1e4d1764 11741
7ed2c994 11742 ALL_TRACEPOINTS (b)
1e4d1764 11743 {
7ed2c994 11744 struct bp_location *bl;
1e4d1764 11745 struct tracepoint *t;
f2a8bc8a 11746 int bp_location_downloaded = 0;
1e4d1764 11747
7ed2c994 11748 if ((b->type == bp_fast_tracepoint
1e4d1764
YQ
11749 ? !may_insert_fast_tracepoints
11750 : !may_insert_tracepoints))
11751 continue;
11752
dd2e65cc
YQ
11753 if (can_download_tracepoint == TRIBOOL_UNKNOWN)
11754 {
11755 if (target_can_download_tracepoint ())
11756 can_download_tracepoint = TRIBOOL_TRUE;
11757 else
11758 can_download_tracepoint = TRIBOOL_FALSE;
11759 }
11760
11761 if (can_download_tracepoint == TRIBOOL_FALSE)
11762 break;
11763
7ed2c994
YQ
11764 for (bl = b->loc; bl; bl = bl->next)
11765 {
11766 /* In tracepoint, locations are _never_ duplicated, so
11767 should_be_inserted is equivalent to
11768 unduplicated_should_be_inserted. */
11769 if (!should_be_inserted (bl) || bl->inserted)
11770 continue;
1e4d1764 11771
7ed2c994 11772 switch_to_program_space_and_thread (bl->pspace);
1e4d1764 11773
7ed2c994 11774 target_download_tracepoint (bl);
1e4d1764 11775
7ed2c994 11776 bl->inserted = 1;
f2a8bc8a 11777 bp_location_downloaded = 1;
7ed2c994
YQ
11778 }
11779 t = (struct tracepoint *) b;
11780 t->number_on_target = b->number;
f2a8bc8a
YQ
11781 if (bp_location_downloaded)
11782 observer_notify_breakpoint_modified (b);
1e4d1764 11783 }
1e4d1764
YQ
11784}
11785
934709f0
PW
11786/* Swap the insertion/duplication state between two locations. */
11787
11788static void
11789swap_insertion (struct bp_location *left, struct bp_location *right)
11790{
11791 const int left_inserted = left->inserted;
11792 const int left_duplicate = left->duplicate;
b775012e 11793 const int left_needs_update = left->needs_update;
934709f0
PW
11794 const struct bp_target_info left_target_info = left->target_info;
11795
1e4d1764
YQ
11796 /* Locations of tracepoints can never be duplicated. */
11797 if (is_tracepoint (left->owner))
11798 gdb_assert (!left->duplicate);
11799 if (is_tracepoint (right->owner))
11800 gdb_assert (!right->duplicate);
11801
934709f0
PW
11802 left->inserted = right->inserted;
11803 left->duplicate = right->duplicate;
b775012e 11804 left->needs_update = right->needs_update;
934709f0
PW
11805 left->target_info = right->target_info;
11806 right->inserted = left_inserted;
11807 right->duplicate = left_duplicate;
b775012e 11808 right->needs_update = left_needs_update;
934709f0
PW
11809 right->target_info = left_target_info;
11810}
11811
b775012e
LM
11812/* Force the re-insertion of the locations at ADDRESS. This is called
11813 once a new/deleted/modified duplicate location is found and we are evaluating
11814 conditions on the target's side. Such conditions need to be updated on
11815 the target. */
11816
11817static void
11818force_breakpoint_reinsertion (struct bp_location *bl)
11819{
11820 struct bp_location **locp = NULL, **loc2p;
11821 struct bp_location *loc;
11822 CORE_ADDR address = 0;
11823 int pspace_num;
11824
11825 address = bl->address;
11826 pspace_num = bl->pspace->num;
11827
11828 /* This is only meaningful if the target is
11829 evaluating conditions and if the user has
11830 opted for condition evaluation on the target's
11831 side. */
11832 if (gdb_evaluates_breakpoint_condition_p ()
11833 || !target_supports_evaluation_of_breakpoint_conditions ())
11834 return;
11835
11836 /* Flag all breakpoint locations with this address and
11837 the same program space as the location
11838 as "its condition has changed". We need to
11839 update the conditions on the target's side. */
11840 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, address)
11841 {
11842 loc = *loc2p;
11843
11844 if (!is_breakpoint (loc->owner)
11845 || pspace_num != loc->pspace->num)
11846 continue;
11847
11848 /* Flag the location appropriately. We use a different state to
11849 let everyone know that we already updated the set of locations
11850 with addr bl->address and program space bl->pspace. This is so
11851 we don't have to keep calling these functions just to mark locations
11852 that have already been marked. */
11853 loc->condition_changed = condition_updated;
11854
11855 /* Free the agent expression bytecode as well. We will compute
11856 it later on. */
833177a4 11857 loc->cond_bytecode.reset ();
b775012e
LM
11858 }
11859}
44702360
PA
11860/* Called whether new breakpoints are created, or existing breakpoints
11861 deleted, to update the global location list and recompute which
11862 locations are duplicate of which.
b775012e 11863
04086b45
PA
11864 The INSERT_MODE flag determines whether locations may not, may, or
11865 shall be inserted now. See 'enum ugll_insert_mode' for more
11866 info. */
b60e7edf 11867
0d381245 11868static void
44702360 11869update_global_location_list (enum ugll_insert_mode insert_mode)
0d381245 11870{
74960c60 11871 struct breakpoint *b;
876fa593 11872 struct bp_location **locp, *loc;
b775012e
LM
11873 /* Last breakpoint location address that was marked for update. */
11874 CORE_ADDR last_addr = 0;
11875 /* Last breakpoint location program space that was marked for update. */
11876 int last_pspace_num = -1;
f7545552 11877
2d134ed3
PA
11878 /* Used in the duplicates detection below. When iterating over all
11879 bp_locations, points to the first bp_location of a given address.
11880 Breakpoints and watchpoints of different types are never
11881 duplicates of each other. Keep one pointer for each type of
11882 breakpoint/watchpoint, so we only need to loop over all locations
11883 once. */
11884 struct bp_location *bp_loc_first; /* breakpoint */
11885 struct bp_location *wp_loc_first; /* hardware watchpoint */
11886 struct bp_location *awp_loc_first; /* access watchpoint */
11887 struct bp_location *rwp_loc_first; /* read watchpoint */
876fa593 11888
f5336ca5
PA
11889 /* Saved former bp_locations array which we compare against the newly
11890 built bp_locations from the current state of ALL_BREAKPOINTS. */
81b1e71c 11891 struct bp_location **old_locp;
f5336ca5 11892 unsigned old_locations_count;
81b1e71c 11893 gdb::unique_xmalloc_ptr<struct bp_location *> old_locations (bp_locations);
876fa593 11894
f5336ca5
PA
11895 old_locations_count = bp_locations_count;
11896 bp_locations = NULL;
11897 bp_locations_count = 0;
0d381245 11898
74960c60 11899 ALL_BREAKPOINTS (b)
876fa593 11900 for (loc = b->loc; loc; loc = loc->next)
f5336ca5 11901 bp_locations_count++;
876fa593 11902
f5336ca5
PA
11903 bp_locations = XNEWVEC (struct bp_location *, bp_locations_count);
11904 locp = bp_locations;
876fa593
JK
11905 ALL_BREAKPOINTS (b)
11906 for (loc = b->loc; loc; loc = loc->next)
11907 *locp++ = loc;
f5336ca5
PA
11908 qsort (bp_locations, bp_locations_count, sizeof (*bp_locations),
11909 bp_locations_compare);
876fa593 11910
f5336ca5 11911 bp_locations_target_extensions_update ();
74960c60 11912
4a64f543
MS
11913 /* Identify bp_location instances that are no longer present in the
11914 new list, and therefore should be freed. Note that it's not
11915 necessary that those locations should be removed from inferior --
11916 if there's another location at the same address (previously
11917 marked as duplicate), we don't need to remove/insert the
11918 location.
876fa593 11919
4a64f543
MS
11920 LOCP is kept in sync with OLD_LOCP, each pointing to the current
11921 and former bp_location array state respectively. */
876fa593 11922
f5336ca5 11923 locp = bp_locations;
81b1e71c
TT
11924 for (old_locp = old_locations.get ();
11925 old_locp < old_locations.get () + old_locations_count;
876fa593 11926 old_locp++)
74960c60 11927 {
876fa593 11928 struct bp_location *old_loc = *old_locp;
c7d46a38 11929 struct bp_location **loc2p;
876fa593 11930
e5dd4106 11931 /* Tells if 'old_loc' is found among the new locations. If
4a64f543 11932 not, we have to free it. */
c7d46a38 11933 int found_object = 0;
20874c92
VP
11934 /* Tells if the location should remain inserted in the target. */
11935 int keep_in_target = 0;
11936 int removed = 0;
876fa593 11937
4a64f543
MS
11938 /* Skip LOCP entries which will definitely never be needed.
11939 Stop either at or being the one matching OLD_LOC. */
f5336ca5 11940 while (locp < bp_locations + bp_locations_count
c7d46a38 11941 && (*locp)->address < old_loc->address)
876fa593 11942 locp++;
c7d46a38
PA
11943
11944 for (loc2p = locp;
f5336ca5 11945 (loc2p < bp_locations + bp_locations_count
c7d46a38
PA
11946 && (*loc2p)->address == old_loc->address);
11947 loc2p++)
11948 {
b775012e
LM
11949 /* Check if this is a new/duplicated location or a duplicated
11950 location that had its condition modified. If so, we want to send
11951 its condition to the target if evaluation of conditions is taking
11952 place there. */
11953 if ((*loc2p)->condition_changed == condition_modified
11954 && (last_addr != old_loc->address
11955 || last_pspace_num != old_loc->pspace->num))
c7d46a38 11956 {
b775012e
LM
11957 force_breakpoint_reinsertion (*loc2p);
11958 last_pspace_num = old_loc->pspace->num;
c7d46a38 11959 }
b775012e
LM
11960
11961 if (*loc2p == old_loc)
11962 found_object = 1;
c7d46a38 11963 }
74960c60 11964
b775012e
LM
11965 /* We have already handled this address, update it so that we don't
11966 have to go through updates again. */
11967 last_addr = old_loc->address;
11968
11969 /* Target-side condition evaluation: Handle deleted locations. */
11970 if (!found_object)
11971 force_breakpoint_reinsertion (old_loc);
11972
4a64f543
MS
11973 /* If this location is no longer present, and inserted, look if
11974 there's maybe a new location at the same address. If so,
11975 mark that one inserted, and don't remove this one. This is
11976 needed so that we don't have a time window where a breakpoint
11977 at certain location is not inserted. */
74960c60 11978
876fa593 11979 if (old_loc->inserted)
0d381245 11980 {
4a64f543
MS
11981 /* If the location is inserted now, we might have to remove
11982 it. */
74960c60 11983
876fa593 11984 if (found_object && should_be_inserted (old_loc))
74960c60 11985 {
4a64f543
MS
11986 /* The location is still present in the location list,
11987 and still should be inserted. Don't do anything. */
20874c92 11988 keep_in_target = 1;
74960c60
VP
11989 }
11990 else
11991 {
b775012e
LM
11992 /* This location still exists, but it won't be kept in the
11993 target since it may have been disabled. We proceed to
11994 remove its target-side condition. */
11995
4a64f543
MS
11996 /* The location is either no longer present, or got
11997 disabled. See if there's another location at the
11998 same address, in which case we don't need to remove
11999 this one from the target. */
876fa593 12000
2bdf28a0 12001 /* OLD_LOC comes from existing struct breakpoint. */
876fa593
JK
12002 if (breakpoint_address_is_meaningful (old_loc->owner))
12003 {
876fa593 12004 for (loc2p = locp;
f5336ca5 12005 (loc2p < bp_locations + bp_locations_count
c7d46a38 12006 && (*loc2p)->address == old_loc->address);
876fa593
JK
12007 loc2p++)
12008 {
12009 struct bp_location *loc2 = *loc2p;
12010
2d134ed3 12011 if (breakpoint_locations_match (loc2, old_loc))
c7d46a38 12012 {
85d721b8
PA
12013 /* Read watchpoint locations are switched to
12014 access watchpoints, if the former are not
12015 supported, but the latter are. */
12016 if (is_hardware_watchpoint (old_loc->owner))
12017 {
12018 gdb_assert (is_hardware_watchpoint (loc2->owner));
12019 loc2->watchpoint_type = old_loc->watchpoint_type;
12020 }
12021
934709f0
PW
12022 /* loc2 is a duplicated location. We need to check
12023 if it should be inserted in case it will be
12024 unduplicated. */
12025 if (loc2 != old_loc
12026 && unduplicated_should_be_inserted (loc2))
c7d46a38 12027 {
934709f0 12028 swap_insertion (old_loc, loc2);
c7d46a38
PA
12029 keep_in_target = 1;
12030 break;
12031 }
876fa593
JK
12032 }
12033 }
12034 }
74960c60
VP
12035 }
12036
20874c92
VP
12037 if (!keep_in_target)
12038 {
834c0d03 12039 if (remove_breakpoint (old_loc))
20874c92 12040 {
4a64f543
MS
12041 /* This is just about all we can do. We could keep
12042 this location on the global list, and try to
12043 remove it next time, but there's no particular
12044 reason why we will succeed next time.
20874c92 12045
4a64f543
MS
12046 Note that at this point, old_loc->owner is still
12047 valid, as delete_breakpoint frees the breakpoint
12048 only after calling us. */
3e43a32a
MS
12049 printf_filtered (_("warning: Error removing "
12050 "breakpoint %d\n"),
876fa593 12051 old_loc->owner->number);
20874c92
VP
12052 }
12053 removed = 1;
12054 }
0d381245 12055 }
74960c60
VP
12056
12057 if (!found_object)
1c5cfe86 12058 {
fbea99ea 12059 if (removed && target_is_non_stop_p ()
1cf4d951 12060 && need_moribund_for_location_type (old_loc))
20874c92 12061 {
db82e815
PA
12062 /* This location was removed from the target. In
12063 non-stop mode, a race condition is possible where
12064 we've removed a breakpoint, but stop events for that
12065 breakpoint are already queued and will arrive later.
12066 We apply an heuristic to be able to distinguish such
12067 SIGTRAPs from other random SIGTRAPs: we keep this
12068 breakpoint location for a bit, and will retire it
12069 after we see some number of events. The theory here
12070 is that reporting of events should, "on the average",
12071 be fair, so after a while we'll see events from all
12072 threads that have anything of interest, and no longer
12073 need to keep this breakpoint location around. We
12074 don't hold locations forever so to reduce chances of
12075 mistaking a non-breakpoint SIGTRAP for a breakpoint
12076 SIGTRAP.
12077
12078 The heuristic failing can be disastrous on
12079 decr_pc_after_break targets.
12080
12081 On decr_pc_after_break targets, like e.g., x86-linux,
12082 if we fail to recognize a late breakpoint SIGTRAP,
12083 because events_till_retirement has reached 0 too
12084 soon, we'll fail to do the PC adjustment, and report
12085 a random SIGTRAP to the user. When the user resumes
12086 the inferior, it will most likely immediately crash
2dec564e 12087 with SIGILL/SIGBUS/SIGSEGV, or worse, get silently
db82e815
PA
12088 corrupted, because of being resumed e.g., in the
12089 middle of a multi-byte instruction, or skipped a
12090 one-byte instruction. This was actually seen happen
12091 on native x86-linux, and should be less rare on
12092 targets that do not support new thread events, like
12093 remote, due to the heuristic depending on
12094 thread_count.
12095
12096 Mistaking a random SIGTRAP for a breakpoint trap
12097 causes similar symptoms (PC adjustment applied when
12098 it shouldn't), but then again, playing with SIGTRAPs
12099 behind the debugger's back is asking for trouble.
12100
12101 Since hardware watchpoint traps are always
12102 distinguishable from other traps, so we don't need to
12103 apply keep hardware watchpoint moribund locations
12104 around. We simply always ignore hardware watchpoint
12105 traps we can no longer explain. */
12106
876fa593
JK
12107 old_loc->events_till_retirement = 3 * (thread_count () + 1);
12108 old_loc->owner = NULL;
20874c92 12109
876fa593 12110 VEC_safe_push (bp_location_p, moribund_locations, old_loc);
1c5cfe86
PA
12111 }
12112 else
f431efe5
PA
12113 {
12114 old_loc->owner = NULL;
12115 decref_bp_location (&old_loc);
12116 }
20874c92 12117 }
74960c60 12118 }
1c5cfe86 12119
348d480f
PA
12120 /* Rescan breakpoints at the same address and section, marking the
12121 first one as "first" and any others as "duplicates". This is so
12122 that the bpt instruction is only inserted once. If we have a
12123 permanent breakpoint at the same place as BPT, make that one the
12124 official one, and the rest as duplicates. Permanent breakpoints
12125 are sorted first for the same address.
12126
12127 Do the same for hardware watchpoints, but also considering the
12128 watchpoint's type (regular/access/read) and length. */
12129
12130 bp_loc_first = NULL;
12131 wp_loc_first = NULL;
12132 awp_loc_first = NULL;
12133 rwp_loc_first = NULL;
12134 ALL_BP_LOCATIONS (loc, locp)
12135 {
12136 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always
12137 non-NULL. */
348d480f 12138 struct bp_location **loc_first_p;
d3fbdd86 12139 b = loc->owner;
348d480f 12140
6f380991 12141 if (!unduplicated_should_be_inserted (loc)
348d480f 12142 || !breakpoint_address_is_meaningful (b)
1e4d1764
YQ
12143 /* Don't detect duplicate for tracepoint locations because they are
12144 never duplicated. See the comments in field `duplicate' of
12145 `struct bp_location'. */
348d480f 12146 || is_tracepoint (b))
b775012e
LM
12147 {
12148 /* Clear the condition modification flag. */
12149 loc->condition_changed = condition_unchanged;
12150 continue;
12151 }
348d480f 12152
348d480f
PA
12153 if (b->type == bp_hardware_watchpoint)
12154 loc_first_p = &wp_loc_first;
12155 else if (b->type == bp_read_watchpoint)
12156 loc_first_p = &rwp_loc_first;
12157 else if (b->type == bp_access_watchpoint)
12158 loc_first_p = &awp_loc_first;
12159 else
12160 loc_first_p = &bp_loc_first;
12161
12162 if (*loc_first_p == NULL
12163 || (overlay_debugging && loc->section != (*loc_first_p)->section)
12164 || !breakpoint_locations_match (loc, *loc_first_p))
12165 {
12166 *loc_first_p = loc;
12167 loc->duplicate = 0;
b775012e
LM
12168
12169 if (is_breakpoint (loc->owner) && loc->condition_changed)
12170 {
12171 loc->needs_update = 1;
12172 /* Clear the condition modification flag. */
12173 loc->condition_changed = condition_unchanged;
12174 }
348d480f
PA
12175 continue;
12176 }
12177
934709f0
PW
12178
12179 /* This and the above ensure the invariant that the first location
12180 is not duplicated, and is the inserted one.
12181 All following are marked as duplicated, and are not inserted. */
12182 if (loc->inserted)
12183 swap_insertion (loc, *loc_first_p);
348d480f
PA
12184 loc->duplicate = 1;
12185
b775012e
LM
12186 /* Clear the condition modification flag. */
12187 loc->condition_changed = condition_unchanged;
348d480f
PA
12188 }
12189
a25a5a45 12190 if (insert_mode == UGLL_INSERT || breakpoints_should_be_inserted_now ())
b775012e 12191 {
04086b45 12192 if (insert_mode != UGLL_DONT_INSERT)
b775012e
LM
12193 insert_breakpoint_locations ();
12194 else
12195 {
44702360
PA
12196 /* Even though the caller told us to not insert new
12197 locations, we may still need to update conditions on the
12198 target's side of breakpoints that were already inserted
12199 if the target is evaluating breakpoint conditions. We
b775012e
LM
12200 only update conditions for locations that are marked
12201 "needs_update". */
12202 update_inserted_breakpoint_locations ();
12203 }
12204 }
348d480f 12205
04086b45 12206 if (insert_mode != UGLL_DONT_INSERT)
1e4d1764 12207 download_tracepoint_locations ();
348d480f
PA
12208}
12209
12210void
12211breakpoint_retire_moribund (void)
12212{
12213 struct bp_location *loc;
12214 int ix;
12215
12216 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
12217 if (--(loc->events_till_retirement) == 0)
12218 {
12219 decref_bp_location (&loc);
12220 VEC_unordered_remove (bp_location_p, moribund_locations, ix);
12221 --ix;
12222 }
12223}
12224
12225static void
44702360 12226update_global_location_list_nothrow (enum ugll_insert_mode insert_mode)
348d480f 12227{
348d480f 12228
492d29ea
PA
12229 TRY
12230 {
12231 update_global_location_list (insert_mode);
12232 }
12233 CATCH (e, RETURN_MASK_ERROR)
12234 {
12235 }
12236 END_CATCH
348d480f
PA
12237}
12238
12239/* Clear BKP from a BPS. */
12240
12241static void
12242bpstat_remove_bp_location (bpstat bps, struct breakpoint *bpt)
12243{
12244 bpstat bs;
12245
12246 for (bs = bps; bs; bs = bs->next)
12247 if (bs->breakpoint_at == bpt)
12248 {
12249 bs->breakpoint_at = NULL;
12250 bs->old_val = NULL;
12251 /* bs->commands will be freed later. */
12252 }
12253}
12254
12255/* Callback for iterate_over_threads. */
12256static int
12257bpstat_remove_breakpoint_callback (struct thread_info *th, void *data)
12258{
9a3c8263 12259 struct breakpoint *bpt = (struct breakpoint *) data;
348d480f
PA
12260
12261 bpstat_remove_bp_location (th->control.stop_bpstat, bpt);
12262 return 0;
12263}
12264
12265/* Helper for breakpoint and tracepoint breakpoint_ops->mention
12266 callbacks. */
12267
12268static void
12269say_where (struct breakpoint *b)
12270{
12271 struct value_print_options opts;
12272
12273 get_user_print_options (&opts);
12274
12275 /* i18n: cagney/2005-02-11: Below needs to be merged into a
12276 single string. */
12277 if (b->loc == NULL)
12278 {
f00aae0f
KS
12279 /* For pending locations, the output differs slightly based
12280 on b->extra_string. If this is non-NULL, it contains either
12281 a condition or dprintf arguments. */
12282 if (b->extra_string == NULL)
12283 {
12284 printf_filtered (_(" (%s) pending."),
d28cd78a 12285 event_location_to_string (b->location.get ()));
f00aae0f
KS
12286 }
12287 else if (b->type == bp_dprintf)
12288 {
12289 printf_filtered (_(" (%s,%s) pending."),
d28cd78a 12290 event_location_to_string (b->location.get ()),
f00aae0f
KS
12291 b->extra_string);
12292 }
12293 else
12294 {
12295 printf_filtered (_(" (%s %s) pending."),
d28cd78a 12296 event_location_to_string (b->location.get ()),
f00aae0f
KS
12297 b->extra_string);
12298 }
348d480f
PA
12299 }
12300 else
12301 {
2f202fde 12302 if (opts.addressprint || b->loc->symtab == NULL)
348d480f
PA
12303 {
12304 printf_filtered (" at ");
12305 fputs_filtered (paddress (b->loc->gdbarch, b->loc->address),
12306 gdb_stdout);
12307 }
2f202fde 12308 if (b->loc->symtab != NULL)
f8eba3c6
TT
12309 {
12310 /* If there is a single location, we can print the location
12311 more nicely. */
12312 if (b->loc->next == NULL)
12313 printf_filtered (": file %s, line %d.",
05cba821
JK
12314 symtab_to_filename_for_display (b->loc->symtab),
12315 b->loc->line_number);
f8eba3c6
TT
12316 else
12317 /* This is not ideal, but each location may have a
12318 different file name, and this at least reflects the
12319 real situation somewhat. */
f00aae0f 12320 printf_filtered (": %s.",
d28cd78a 12321 event_location_to_string (b->location.get ()));
f8eba3c6 12322 }
348d480f
PA
12323
12324 if (b->loc->next)
12325 {
12326 struct bp_location *loc = b->loc;
12327 int n = 0;
12328 for (; loc; loc = loc->next)
12329 ++n;
12330 printf_filtered (" (%d locations)", n);
12331 }
12332 }
12333}
12334
348d480f
PA
12335/* Default bp_location_ops methods. */
12336
12337static void
12338bp_location_dtor (struct bp_location *self)
12339{
348d480f
PA
12340 xfree (self->function_name);
12341}
12342
12343static const struct bp_location_ops bp_location_ops =
12344{
12345 bp_location_dtor
12346};
12347
c1fc2657 12348/* Destructor for the breakpoint base class. */
348d480f 12349
c1fc2657 12350breakpoint::~breakpoint ()
348d480f 12351{
c1fc2657
SM
12352 xfree (this->cond_string);
12353 xfree (this->extra_string);
12354 xfree (this->filter);
348d480f
PA
12355}
12356
2060206e
PA
12357static struct bp_location *
12358base_breakpoint_allocate_location (struct breakpoint *self)
348d480f 12359{
5625a286 12360 return new bp_location (&bp_location_ops, self);
348d480f
PA
12361}
12362
2060206e
PA
12363static void
12364base_breakpoint_re_set (struct breakpoint *b)
12365{
12366 /* Nothing to re-set. */
12367}
12368
12369#define internal_error_pure_virtual_called() \
12370 gdb_assert_not_reached ("pure virtual function called")
12371
12372static int
12373base_breakpoint_insert_location (struct bp_location *bl)
12374{
12375 internal_error_pure_virtual_called ();
12376}
12377
12378static int
73971819
PA
12379base_breakpoint_remove_location (struct bp_location *bl,
12380 enum remove_bp_reason reason)
2060206e
PA
12381{
12382 internal_error_pure_virtual_called ();
12383}
12384
12385static int
12386base_breakpoint_breakpoint_hit (const struct bp_location *bl,
bd522513 12387 const address_space *aspace,
09ac7c10
TT
12388 CORE_ADDR bp_addr,
12389 const struct target_waitstatus *ws)
2060206e
PA
12390{
12391 internal_error_pure_virtual_called ();
12392}
12393
12394static void
12395base_breakpoint_check_status (bpstat bs)
12396{
12397 /* Always stop. */
12398}
12399
12400/* A "works_in_software_mode" breakpoint_ops method that just internal
12401 errors. */
12402
12403static int
12404base_breakpoint_works_in_software_mode (const struct breakpoint *b)
12405{
12406 internal_error_pure_virtual_called ();
12407}
12408
12409/* A "resources_needed" breakpoint_ops method that just internal
12410 errors. */
12411
12412static int
12413base_breakpoint_resources_needed (const struct bp_location *bl)
12414{
12415 internal_error_pure_virtual_called ();
12416}
12417
12418static enum print_stop_action
12419base_breakpoint_print_it (bpstat bs)
12420{
12421 internal_error_pure_virtual_called ();
12422}
12423
12424static void
12425base_breakpoint_print_one_detail (const struct breakpoint *self,
12426 struct ui_out *uiout)
12427{
12428 /* nothing */
12429}
12430
12431static void
12432base_breakpoint_print_mention (struct breakpoint *b)
12433{
12434 internal_error_pure_virtual_called ();
12435}
12436
12437static void
12438base_breakpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
12439{
12440 internal_error_pure_virtual_called ();
12441}
12442
983af33b 12443static void
f00aae0f
KS
12444base_breakpoint_create_sals_from_location
12445 (const struct event_location *location,
12446 struct linespec_result *canonical,
12447 enum bptype type_wanted)
983af33b
SDJ
12448{
12449 internal_error_pure_virtual_called ();
12450}
12451
12452static void
12453base_breakpoint_create_breakpoints_sal (struct gdbarch *gdbarch,
12454 struct linespec_result *c,
e1e01040
PA
12455 gdb::unique_xmalloc_ptr<char> cond_string,
12456 gdb::unique_xmalloc_ptr<char> extra_string,
983af33b
SDJ
12457 enum bptype type_wanted,
12458 enum bpdisp disposition,
12459 int thread,
12460 int task, int ignore_count,
12461 const struct breakpoint_ops *o,
12462 int from_tty, int enabled,
44f238bb 12463 int internal, unsigned flags)
983af33b
SDJ
12464{
12465 internal_error_pure_virtual_called ();
12466}
12467
6c5b2ebe 12468static std::vector<symtab_and_line>
f00aae0f
KS
12469base_breakpoint_decode_location (struct breakpoint *b,
12470 const struct event_location *location,
6c5b2ebe 12471 struct program_space *search_pspace)
983af33b
SDJ
12472{
12473 internal_error_pure_virtual_called ();
12474}
12475
ab04a2af
TT
12476/* The default 'explains_signal' method. */
12477
47591c29 12478static int
427cd150 12479base_breakpoint_explains_signal (struct breakpoint *b, enum gdb_signal sig)
ab04a2af 12480{
47591c29 12481 return 1;
ab04a2af
TT
12482}
12483
9d6e6e84
HZ
12484/* The default "after_condition_true" method. */
12485
12486static void
12487base_breakpoint_after_condition_true (struct bpstats *bs)
12488{
12489 /* Nothing to do. */
12490}
12491
ab04a2af 12492struct breakpoint_ops base_breakpoint_ops =
2060206e 12493{
2060206e
PA
12494 base_breakpoint_allocate_location,
12495 base_breakpoint_re_set,
12496 base_breakpoint_insert_location,
12497 base_breakpoint_remove_location,
12498 base_breakpoint_breakpoint_hit,
12499 base_breakpoint_check_status,
12500 base_breakpoint_resources_needed,
12501 base_breakpoint_works_in_software_mode,
12502 base_breakpoint_print_it,
12503 NULL,
12504 base_breakpoint_print_one_detail,
12505 base_breakpoint_print_mention,
983af33b 12506 base_breakpoint_print_recreate,
5f700d83 12507 base_breakpoint_create_sals_from_location,
983af33b 12508 base_breakpoint_create_breakpoints_sal,
5f700d83 12509 base_breakpoint_decode_location,
9d6e6e84
HZ
12510 base_breakpoint_explains_signal,
12511 base_breakpoint_after_condition_true,
2060206e
PA
12512};
12513
12514/* Default breakpoint_ops methods. */
12515
12516static void
348d480f
PA
12517bkpt_re_set (struct breakpoint *b)
12518{
06edf0c0 12519 /* FIXME: is this still reachable? */
9ef9e6a6 12520 if (breakpoint_event_location_empty_p (b))
06edf0c0 12521 {
f00aae0f 12522 /* Anything without a location can't be re-set. */
348d480f 12523 delete_breakpoint (b);
06edf0c0 12524 return;
348d480f 12525 }
06edf0c0
PA
12526
12527 breakpoint_re_set_default (b);
348d480f
PA
12528}
12529
2060206e 12530static int
348d480f
PA
12531bkpt_insert_location (struct bp_location *bl)
12532{
cd6c3b4f
YQ
12533 CORE_ADDR addr = bl->target_info.reqstd_address;
12534
579c6ad9 12535 bl->target_info.kind = breakpoint_kind (bl, &addr);
cd6c3b4f
YQ
12536 bl->target_info.placed_address = addr;
12537
348d480f 12538 if (bl->loc_type == bp_loc_hardware_breakpoint)
7c16b83e 12539 return target_insert_hw_breakpoint (bl->gdbarch, &bl->target_info);
348d480f 12540 else
7c16b83e 12541 return target_insert_breakpoint (bl->gdbarch, &bl->target_info);
348d480f
PA
12542}
12543
2060206e 12544static int
73971819 12545bkpt_remove_location (struct bp_location *bl, enum remove_bp_reason reason)
348d480f
PA
12546{
12547 if (bl->loc_type == bp_loc_hardware_breakpoint)
12548 return target_remove_hw_breakpoint (bl->gdbarch, &bl->target_info);
12549 else
73971819 12550 return target_remove_breakpoint (bl->gdbarch, &bl->target_info, reason);
348d480f
PA
12551}
12552
2060206e 12553static int
348d480f 12554bkpt_breakpoint_hit (const struct bp_location *bl,
bd522513 12555 const address_space *aspace, CORE_ADDR bp_addr,
09ac7c10 12556 const struct target_waitstatus *ws)
348d480f 12557{
09ac7c10 12558 if (ws->kind != TARGET_WAITKIND_STOPPED
a493e3e2 12559 || ws->value.sig != GDB_SIGNAL_TRAP)
09ac7c10
TT
12560 return 0;
12561
348d480f
PA
12562 if (!breakpoint_address_match (bl->pspace->aspace, bl->address,
12563 aspace, bp_addr))
12564 return 0;
12565
12566 if (overlay_debugging /* unmapped overlay section */
12567 && section_is_overlay (bl->section)
12568 && !section_is_mapped (bl->section))
12569 return 0;
12570
12571 return 1;
12572}
12573
cd1608cc
PA
12574static int
12575dprintf_breakpoint_hit (const struct bp_location *bl,
bd522513 12576 const address_space *aspace, CORE_ADDR bp_addr,
cd1608cc
PA
12577 const struct target_waitstatus *ws)
12578{
12579 if (dprintf_style == dprintf_style_agent
12580 && target_can_run_breakpoint_commands ())
12581 {
12582 /* An agent-style dprintf never causes a stop. If we see a trap
12583 for this address it must be for a breakpoint that happens to
12584 be set at the same address. */
12585 return 0;
12586 }
12587
12588 return bkpt_breakpoint_hit (bl, aspace, bp_addr, ws);
12589}
12590
2060206e 12591static int
348d480f
PA
12592bkpt_resources_needed (const struct bp_location *bl)
12593{
12594 gdb_assert (bl->owner->type == bp_hardware_breakpoint);
12595
12596 return 1;
12597}
12598
2060206e 12599static enum print_stop_action
348d480f
PA
12600bkpt_print_it (bpstat bs)
12601{
348d480f
PA
12602 struct breakpoint *b;
12603 const struct bp_location *bl;
001c8c33 12604 int bp_temp;
79a45e25 12605 struct ui_out *uiout = current_uiout;
348d480f
PA
12606
12607 gdb_assert (bs->bp_location_at != NULL);
12608
12609 bl = bs->bp_location_at;
12610 b = bs->breakpoint_at;
12611
001c8c33
PA
12612 bp_temp = b->disposition == disp_del;
12613 if (bl->address != bl->requested_address)
12614 breakpoint_adjustment_warning (bl->requested_address,
12615 bl->address,
12616 b->number, 1);
12617 annotate_breakpoint (b->number);
f303dbd6
PA
12618 maybe_print_thread_hit_breakpoint (uiout);
12619
001c8c33 12620 if (bp_temp)
112e8700 12621 uiout->text ("Temporary breakpoint ");
001c8c33 12622 else
112e8700
SM
12623 uiout->text ("Breakpoint ");
12624 if (uiout->is_mi_like_p ())
348d480f 12625 {
112e8700 12626 uiout->field_string ("reason",
001c8c33 12627 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12628 uiout->field_string ("disp", bpdisp_text (b->disposition));
06edf0c0 12629 }
112e8700
SM
12630 uiout->field_int ("bkptno", b->number);
12631 uiout->text (", ");
06edf0c0 12632
001c8c33 12633 return PRINT_SRC_AND_LOC;
06edf0c0
PA
12634}
12635
2060206e 12636static void
06edf0c0
PA
12637bkpt_print_mention (struct breakpoint *b)
12638{
112e8700 12639 if (current_uiout->is_mi_like_p ())
06edf0c0
PA
12640 return;
12641
12642 switch (b->type)
12643 {
12644 case bp_breakpoint:
12645 case bp_gnu_ifunc_resolver:
12646 if (b->disposition == disp_del)
12647 printf_filtered (_("Temporary breakpoint"));
12648 else
12649 printf_filtered (_("Breakpoint"));
12650 printf_filtered (_(" %d"), b->number);
12651 if (b->type == bp_gnu_ifunc_resolver)
12652 printf_filtered (_(" at gnu-indirect-function resolver"));
12653 break;
12654 case bp_hardware_breakpoint:
12655 printf_filtered (_("Hardware assisted breakpoint %d"), b->number);
12656 break;
e7e0cddf
SS
12657 case bp_dprintf:
12658 printf_filtered (_("Dprintf %d"), b->number);
12659 break;
06edf0c0
PA
12660 }
12661
12662 say_where (b);
12663}
12664
2060206e 12665static void
06edf0c0
PA
12666bkpt_print_recreate (struct breakpoint *tp, struct ui_file *fp)
12667{
12668 if (tp->type == bp_breakpoint && tp->disposition == disp_del)
12669 fprintf_unfiltered (fp, "tbreak");
12670 else if (tp->type == bp_breakpoint)
12671 fprintf_unfiltered (fp, "break");
12672 else if (tp->type == bp_hardware_breakpoint
12673 && tp->disposition == disp_del)
12674 fprintf_unfiltered (fp, "thbreak");
12675 else if (tp->type == bp_hardware_breakpoint)
12676 fprintf_unfiltered (fp, "hbreak");
12677 else
12678 internal_error (__FILE__, __LINE__,
12679 _("unhandled breakpoint type %d"), (int) tp->type);
12680
f00aae0f 12681 fprintf_unfiltered (fp, " %s",
d28cd78a 12682 event_location_to_string (tp->location.get ()));
f00aae0f
KS
12683
12684 /* Print out extra_string if this breakpoint is pending. It might
12685 contain, for example, conditions that were set by the user. */
12686 if (tp->loc == NULL && tp->extra_string != NULL)
12687 fprintf_unfiltered (fp, " %s", tp->extra_string);
12688
dd11a36c 12689 print_recreate_thread (tp, fp);
06edf0c0
PA
12690}
12691
983af33b 12692static void
f00aae0f
KS
12693bkpt_create_sals_from_location (const struct event_location *location,
12694 struct linespec_result *canonical,
12695 enum bptype type_wanted)
983af33b 12696{
f00aae0f 12697 create_sals_from_location_default (location, canonical, type_wanted);
983af33b
SDJ
12698}
12699
12700static void
12701bkpt_create_breakpoints_sal (struct gdbarch *gdbarch,
12702 struct linespec_result *canonical,
e1e01040
PA
12703 gdb::unique_xmalloc_ptr<char> cond_string,
12704 gdb::unique_xmalloc_ptr<char> extra_string,
983af33b
SDJ
12705 enum bptype type_wanted,
12706 enum bpdisp disposition,
12707 int thread,
12708 int task, int ignore_count,
12709 const struct breakpoint_ops *ops,
12710 int from_tty, int enabled,
44f238bb 12711 int internal, unsigned flags)
983af33b 12712{
023fa29b 12713 create_breakpoints_sal_default (gdbarch, canonical,
e1e01040
PA
12714 std::move (cond_string),
12715 std::move (extra_string),
e7e0cddf 12716 type_wanted,
983af33b
SDJ
12717 disposition, thread, task,
12718 ignore_count, ops, from_tty,
44f238bb 12719 enabled, internal, flags);
983af33b
SDJ
12720}
12721
6c5b2ebe 12722static std::vector<symtab_and_line>
f00aae0f
KS
12723bkpt_decode_location (struct breakpoint *b,
12724 const struct event_location *location,
6c5b2ebe 12725 struct program_space *search_pspace)
983af33b 12726{
6c5b2ebe 12727 return decode_location_default (b, location, search_pspace);
983af33b
SDJ
12728}
12729
06edf0c0
PA
12730/* Virtual table for internal breakpoints. */
12731
12732static void
12733internal_bkpt_re_set (struct breakpoint *b)
12734{
12735 switch (b->type)
12736 {
12737 /* Delete overlay event and longjmp master breakpoints; they
12738 will be reset later by breakpoint_re_set. */
12739 case bp_overlay_event:
12740 case bp_longjmp_master:
12741 case bp_std_terminate_master:
12742 case bp_exception_master:
12743 delete_breakpoint (b);
12744 break;
12745
12746 /* This breakpoint is special, it's set up when the inferior
12747 starts and we really don't want to touch it. */
12748 case bp_shlib_event:
12749
12750 /* Like bp_shlib_event, this breakpoint type is special. Once
12751 it is set up, we do not want to touch it. */
12752 case bp_thread_event:
12753 break;
12754 }
12755}
12756
12757static void
12758internal_bkpt_check_status (bpstat bs)
12759{
a9b3a50f
PA
12760 if (bs->breakpoint_at->type == bp_shlib_event)
12761 {
12762 /* If requested, stop when the dynamic linker notifies GDB of
12763 events. This allows the user to get control and place
12764 breakpoints in initializer routines for dynamically loaded
12765 objects (among other things). */
12766 bs->stop = stop_on_solib_events;
12767 bs->print = stop_on_solib_events;
12768 }
12769 else
12770 bs->stop = 0;
06edf0c0
PA
12771}
12772
12773static enum print_stop_action
12774internal_bkpt_print_it (bpstat bs)
12775{
06edf0c0 12776 struct breakpoint *b;
06edf0c0 12777
06edf0c0
PA
12778 b = bs->breakpoint_at;
12779
06edf0c0
PA
12780 switch (b->type)
12781 {
348d480f
PA
12782 case bp_shlib_event:
12783 /* Did we stop because the user set the stop_on_solib_events
12784 variable? (If so, we report this as a generic, "Stopped due
12785 to shlib event" message.) */
edcc5120 12786 print_solib_event (0);
348d480f
PA
12787 break;
12788
12789 case bp_thread_event:
12790 /* Not sure how we will get here.
12791 GDB should not stop for these breakpoints. */
12792 printf_filtered (_("Thread Event Breakpoint: gdb should not stop!\n"));
348d480f
PA
12793 break;
12794
12795 case bp_overlay_event:
12796 /* By analogy with the thread event, GDB should not stop for these. */
12797 printf_filtered (_("Overlay Event Breakpoint: gdb should not stop!\n"));
348d480f
PA
12798 break;
12799
12800 case bp_longjmp_master:
12801 /* These should never be enabled. */
12802 printf_filtered (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
348d480f
PA
12803 break;
12804
12805 case bp_std_terminate_master:
12806 /* These should never be enabled. */
12807 printf_filtered (_("std::terminate Master Breakpoint: "
12808 "gdb should not stop!\n"));
348d480f
PA
12809 break;
12810
12811 case bp_exception_master:
12812 /* These should never be enabled. */
12813 printf_filtered (_("Exception Master Breakpoint: "
12814 "gdb should not stop!\n"));
06edf0c0
PA
12815 break;
12816 }
12817
001c8c33 12818 return PRINT_NOTHING;
06edf0c0
PA
12819}
12820
12821static void
12822internal_bkpt_print_mention (struct breakpoint *b)
12823{
12824 /* Nothing to mention. These breakpoints are internal. */
12825}
12826
06edf0c0
PA
12827/* Virtual table for momentary breakpoints */
12828
12829static void
12830momentary_bkpt_re_set (struct breakpoint *b)
12831{
12832 /* Keep temporary breakpoints, which can be encountered when we step
4d1eb6b4 12833 over a dlopen call and solib_add is resetting the breakpoints.
06edf0c0
PA
12834 Otherwise these should have been blown away via the cleanup chain
12835 or by breakpoint_init_inferior when we rerun the executable. */
12836}
12837
12838static void
12839momentary_bkpt_check_status (bpstat bs)
12840{
12841 /* Nothing. The point of these breakpoints is causing a stop. */
12842}
12843
12844static enum print_stop_action
12845momentary_bkpt_print_it (bpstat bs)
12846{
001c8c33 12847 return PRINT_UNKNOWN;
348d480f
PA
12848}
12849
06edf0c0
PA
12850static void
12851momentary_bkpt_print_mention (struct breakpoint *b)
348d480f 12852{
06edf0c0 12853 /* Nothing to mention. These breakpoints are internal. */
348d480f
PA
12854}
12855
e2e4d78b
JK
12856/* Ensure INITIATING_FRAME is cleared when no such breakpoint exists.
12857
12858 It gets cleared already on the removal of the first one of such placed
12859 breakpoints. This is OK as they get all removed altogether. */
12860
c1fc2657 12861longjmp_breakpoint::~longjmp_breakpoint ()
e2e4d78b 12862{
c1fc2657 12863 thread_info *tp = find_thread_global_id (this->thread);
e2e4d78b 12864
c1fc2657 12865 if (tp != NULL)
e2e4d78b 12866 tp->initiating_frame = null_frame_id;
e2e4d78b
JK
12867}
12868
55aa24fb
SDJ
12869/* Specific methods for probe breakpoints. */
12870
12871static int
12872bkpt_probe_insert_location (struct bp_location *bl)
12873{
12874 int v = bkpt_insert_location (bl);
12875
12876 if (v == 0)
12877 {
12878 /* The insertion was successful, now let's set the probe's semaphore
12879 if needed. */
935676c9 12880 bl->probe.prob->set_semaphore (bl->probe.objfile, bl->gdbarch);
55aa24fb
SDJ
12881 }
12882
12883 return v;
12884}
12885
12886static int
73971819
PA
12887bkpt_probe_remove_location (struct bp_location *bl,
12888 enum remove_bp_reason reason)
55aa24fb
SDJ
12889{
12890 /* Let's clear the semaphore before removing the location. */
935676c9 12891 bl->probe.prob->clear_semaphore (bl->probe.objfile, bl->gdbarch);
55aa24fb 12892
73971819 12893 return bkpt_remove_location (bl, reason);
55aa24fb
SDJ
12894}
12895
12896static void
f00aae0f 12897bkpt_probe_create_sals_from_location (const struct event_location *location,
5f700d83 12898 struct linespec_result *canonical,
f00aae0f 12899 enum bptype type_wanted)
55aa24fb
SDJ
12900{
12901 struct linespec_sals lsal;
12902
c2f4122d 12903 lsal.sals = parse_probes (location, NULL, canonical);
8e9e35b1
TT
12904 lsal.canonical
12905 = xstrdup (event_location_to_string (canonical->location.get ()));
6c5b2ebe 12906 canonical->lsals.push_back (std::move (lsal));
55aa24fb
SDJ
12907}
12908
6c5b2ebe 12909static std::vector<symtab_and_line>
f00aae0f
KS
12910bkpt_probe_decode_location (struct breakpoint *b,
12911 const struct event_location *location,
6c5b2ebe 12912 struct program_space *search_pspace)
55aa24fb 12913{
6c5b2ebe
PA
12914 std::vector<symtab_and_line> sals = parse_probes (location, search_pspace, NULL);
12915 if (sals.empty ())
55aa24fb 12916 error (_("probe not found"));
6c5b2ebe 12917 return sals;
55aa24fb
SDJ
12918}
12919
348d480f 12920/* The breakpoint_ops structure to be used in tracepoints. */
876fa593 12921
348d480f
PA
12922static void
12923tracepoint_re_set (struct breakpoint *b)
12924{
12925 breakpoint_re_set_default (b);
12926}
876fa593 12927
348d480f
PA
12928static int
12929tracepoint_breakpoint_hit (const struct bp_location *bl,
bd522513 12930 const address_space *aspace, CORE_ADDR bp_addr,
09ac7c10 12931 const struct target_waitstatus *ws)
348d480f
PA
12932{
12933 /* By definition, the inferior does not report stops at
12934 tracepoints. */
12935 return 0;
74960c60
VP
12936}
12937
12938static void
348d480f
PA
12939tracepoint_print_one_detail (const struct breakpoint *self,
12940 struct ui_out *uiout)
74960c60 12941{
d9b3f62e
PA
12942 struct tracepoint *tp = (struct tracepoint *) self;
12943 if (tp->static_trace_marker_id)
348d480f
PA
12944 {
12945 gdb_assert (self->type == bp_static_tracepoint);
cc59ec59 12946
112e8700
SM
12947 uiout->text ("\tmarker id is ");
12948 uiout->field_string ("static-tracepoint-marker-string-id",
d9b3f62e 12949 tp->static_trace_marker_id);
112e8700 12950 uiout->text ("\n");
348d480f 12951 }
0d381245
VP
12952}
12953
a474d7c2 12954static void
348d480f 12955tracepoint_print_mention (struct breakpoint *b)
a474d7c2 12956{
112e8700 12957 if (current_uiout->is_mi_like_p ())
348d480f 12958 return;
cc59ec59 12959
348d480f
PA
12960 switch (b->type)
12961 {
12962 case bp_tracepoint:
12963 printf_filtered (_("Tracepoint"));
12964 printf_filtered (_(" %d"), b->number);
12965 break;
12966 case bp_fast_tracepoint:
12967 printf_filtered (_("Fast tracepoint"));
12968 printf_filtered (_(" %d"), b->number);
12969 break;
12970 case bp_static_tracepoint:
12971 printf_filtered (_("Static tracepoint"));
12972 printf_filtered (_(" %d"), b->number);
12973 break;
12974 default:
12975 internal_error (__FILE__, __LINE__,
12976 _("unhandled tracepoint type %d"), (int) b->type);
12977 }
12978
12979 say_where (b);
a474d7c2
PA
12980}
12981
348d480f 12982static void
d9b3f62e 12983tracepoint_print_recreate (struct breakpoint *self, struct ui_file *fp)
a474d7c2 12984{
d9b3f62e
PA
12985 struct tracepoint *tp = (struct tracepoint *) self;
12986
12987 if (self->type == bp_fast_tracepoint)
348d480f 12988 fprintf_unfiltered (fp, "ftrace");
c93e8391 12989 else if (self->type == bp_static_tracepoint)
348d480f 12990 fprintf_unfiltered (fp, "strace");
d9b3f62e 12991 else if (self->type == bp_tracepoint)
348d480f
PA
12992 fprintf_unfiltered (fp, "trace");
12993 else
12994 internal_error (__FILE__, __LINE__,
d9b3f62e 12995 _("unhandled tracepoint type %d"), (int) self->type);
cc59ec59 12996
f00aae0f 12997 fprintf_unfiltered (fp, " %s",
d28cd78a 12998 event_location_to_string (self->location.get ()));
d9b3f62e
PA
12999 print_recreate_thread (self, fp);
13000
13001 if (tp->pass_count)
13002 fprintf_unfiltered (fp, " passcount %d\n", tp->pass_count);
a474d7c2
PA
13003}
13004
983af33b 13005static void
f00aae0f
KS
13006tracepoint_create_sals_from_location (const struct event_location *location,
13007 struct linespec_result *canonical,
13008 enum bptype type_wanted)
983af33b 13009{
f00aae0f 13010 create_sals_from_location_default (location, canonical, type_wanted);
983af33b
SDJ
13011}
13012
13013static void
13014tracepoint_create_breakpoints_sal (struct gdbarch *gdbarch,
13015 struct linespec_result *canonical,
e1e01040
PA
13016 gdb::unique_xmalloc_ptr<char> cond_string,
13017 gdb::unique_xmalloc_ptr<char> extra_string,
983af33b
SDJ
13018 enum bptype type_wanted,
13019 enum bpdisp disposition,
13020 int thread,
13021 int task, int ignore_count,
13022 const struct breakpoint_ops *ops,
13023 int from_tty, int enabled,
44f238bb 13024 int internal, unsigned flags)
983af33b 13025{
023fa29b 13026 create_breakpoints_sal_default (gdbarch, canonical,
e1e01040
PA
13027 std::move (cond_string),
13028 std::move (extra_string),
e7e0cddf 13029 type_wanted,
983af33b
SDJ
13030 disposition, thread, task,
13031 ignore_count, ops, from_tty,
44f238bb 13032 enabled, internal, flags);
983af33b
SDJ
13033}
13034
6c5b2ebe 13035static std::vector<symtab_and_line>
f00aae0f
KS
13036tracepoint_decode_location (struct breakpoint *b,
13037 const struct event_location *location,
6c5b2ebe 13038 struct program_space *search_pspace)
983af33b 13039{
6c5b2ebe 13040 return decode_location_default (b, location, search_pspace);
983af33b
SDJ
13041}
13042
2060206e 13043struct breakpoint_ops tracepoint_breakpoint_ops;
348d480f 13044
55aa24fb
SDJ
13045/* The breakpoint_ops structure to be use on tracepoints placed in a
13046 static probe. */
13047
13048static void
f00aae0f
KS
13049tracepoint_probe_create_sals_from_location
13050 (const struct event_location *location,
13051 struct linespec_result *canonical,
13052 enum bptype type_wanted)
55aa24fb
SDJ
13053{
13054 /* We use the same method for breakpoint on probes. */
f00aae0f 13055 bkpt_probe_create_sals_from_location (location, canonical, type_wanted);
55aa24fb
SDJ
13056}
13057
6c5b2ebe 13058static std::vector<symtab_and_line>
f00aae0f
KS
13059tracepoint_probe_decode_location (struct breakpoint *b,
13060 const struct event_location *location,
6c5b2ebe 13061 struct program_space *search_pspace)
55aa24fb
SDJ
13062{
13063 /* We use the same method for breakpoint on probes. */
6c5b2ebe 13064 return bkpt_probe_decode_location (b, location, search_pspace);
55aa24fb
SDJ
13065}
13066
13067static struct breakpoint_ops tracepoint_probe_breakpoint_ops;
13068
5c2b4418
HZ
13069/* Dprintf breakpoint_ops methods. */
13070
13071static void
13072dprintf_re_set (struct breakpoint *b)
13073{
13074 breakpoint_re_set_default (b);
13075
f00aae0f
KS
13076 /* extra_string should never be non-NULL for dprintf. */
13077 gdb_assert (b->extra_string != NULL);
5c2b4418
HZ
13078
13079 /* 1 - connect to target 1, that can run breakpoint commands.
13080 2 - create a dprintf, which resolves fine.
13081 3 - disconnect from target 1
13082 4 - connect to target 2, that can NOT run breakpoint commands.
13083
13084 After steps #3/#4, you'll want the dprintf command list to
13085 be updated, because target 1 and 2 may well return different
13086 answers for target_can_run_breakpoint_commands().
13087 Given absence of finer grained resetting, we get to do
13088 it all the time. */
13089 if (b->extra_string != NULL)
13090 update_dprintf_command_list (b);
13091}
13092
2d9442cc
HZ
13093/* Implement the "print_recreate" breakpoint_ops method for dprintf. */
13094
13095static void
13096dprintf_print_recreate (struct breakpoint *tp, struct ui_file *fp)
13097{
f00aae0f 13098 fprintf_unfiltered (fp, "dprintf %s,%s",
d28cd78a 13099 event_location_to_string (tp->location.get ()),
2d9442cc
HZ
13100 tp->extra_string);
13101 print_recreate_thread (tp, fp);
13102}
13103
9d6e6e84
HZ
13104/* Implement the "after_condition_true" breakpoint_ops method for
13105 dprintf.
13106
13107 dprintf's are implemented with regular commands in their command
13108 list, but we run the commands here instead of before presenting the
13109 stop to the user, as dprintf's don't actually cause a stop. This
13110 also makes it so that the commands of multiple dprintfs at the same
13111 address are all handled. */
13112
13113static void
13114dprintf_after_condition_true (struct bpstats *bs)
13115{
04afa70c 13116 struct bpstats tmp_bs;
9d6e6e84
HZ
13117 struct bpstats *tmp_bs_p = &tmp_bs;
13118
13119 /* dprintf's never cause a stop. This wasn't set in the
13120 check_status hook instead because that would make the dprintf's
13121 condition not be evaluated. */
13122 bs->stop = 0;
13123
13124 /* Run the command list here. Take ownership of it instead of
13125 copying. We never want these commands to run later in
13126 bpstat_do_actions, if a breakpoint that causes a stop happens to
13127 be set at same address as this dprintf, or even if running the
13128 commands here throws. */
13129 tmp_bs.commands = bs->commands;
13130 bs->commands = NULL;
9d6e6e84
HZ
13131
13132 bpstat_do_actions_1 (&tmp_bs_p);
13133
13134 /* 'tmp_bs.commands' will usually be NULL by now, but
13135 bpstat_do_actions_1 may return early without processing the whole
13136 list. */
9d6e6e84
HZ
13137}
13138
983af33b
SDJ
13139/* The breakpoint_ops structure to be used on static tracepoints with
13140 markers (`-m'). */
13141
13142static void
f00aae0f 13143strace_marker_create_sals_from_location (const struct event_location *location,
5f700d83 13144 struct linespec_result *canonical,
f00aae0f 13145 enum bptype type_wanted)
983af33b
SDJ
13146{
13147 struct linespec_sals lsal;
f00aae0f 13148 const char *arg_start, *arg;
983af33b 13149
f00aae0f
KS
13150 arg = arg_start = get_linespec_location (location);
13151 lsal.sals = decode_static_tracepoint_spec (&arg);
983af33b 13152
f2fc3015
TT
13153 std::string str (arg_start, arg - arg_start);
13154 const char *ptr = str.c_str ();
13155 canonical->location = new_linespec_location (&ptr);
983af33b 13156
8e9e35b1
TT
13157 lsal.canonical
13158 = xstrdup (event_location_to_string (canonical->location.get ()));
6c5b2ebe 13159 canonical->lsals.push_back (std::move (lsal));
983af33b
SDJ
13160}
13161
13162static void
13163strace_marker_create_breakpoints_sal (struct gdbarch *gdbarch,
13164 struct linespec_result *canonical,
e1e01040
PA
13165 gdb::unique_xmalloc_ptr<char> cond_string,
13166 gdb::unique_xmalloc_ptr<char> extra_string,
983af33b
SDJ
13167 enum bptype type_wanted,
13168 enum bpdisp disposition,
13169 int thread,
13170 int task, int ignore_count,
13171 const struct breakpoint_ops *ops,
13172 int from_tty, int enabled,
44f238bb 13173 int internal, unsigned flags)
983af33b 13174{
6c5b2ebe 13175 const linespec_sals &lsal = canonical->lsals[0];
983af33b
SDJ
13176
13177 /* If the user is creating a static tracepoint by marker id
13178 (strace -m MARKER_ID), then store the sals index, so that
13179 breakpoint_re_set can try to match up which of the newly
13180 found markers corresponds to this one, and, don't try to
13181 expand multiple locations for each sal, given than SALS
13182 already should contain all sals for MARKER_ID. */
13183
6c5b2ebe 13184 for (size_t i = 0; i < lsal.sals.size (); i++)
983af33b 13185 {
6c5b2ebe
PA
13186 event_location_up location
13187 = copy_event_location (canonical->location.get ());
983af33b 13188
b270e6f9 13189 std::unique_ptr<tracepoint> tp (new tracepoint ());
6c5b2ebe 13190 init_breakpoint_sal (tp.get (), gdbarch, lsal.sals[i],
ffc2605c 13191 std::move (location), NULL,
e1e01040
PA
13192 std::move (cond_string),
13193 std::move (extra_string),
e7e0cddf 13194 type_wanted, disposition,
983af33b 13195 thread, task, ignore_count, ops,
44f238bb 13196 from_tty, enabled, internal, flags,
983af33b
SDJ
13197 canonical->special_display);
13198 /* Given that its possible to have multiple markers with
13199 the same string id, if the user is creating a static
13200 tracepoint by marker id ("strace -m MARKER_ID"), then
13201 store the sals index, so that breakpoint_re_set can
13202 try to match up which of the newly found markers
13203 corresponds to this one */
13204 tp->static_trace_marker_id_idx = i;
13205
b270e6f9 13206 install_breakpoint (internal, std::move (tp), 0);
983af33b
SDJ
13207 }
13208}
13209
6c5b2ebe 13210static std::vector<symtab_and_line>
f00aae0f
KS
13211strace_marker_decode_location (struct breakpoint *b,
13212 const struct event_location *location,
6c5b2ebe 13213 struct program_space *search_pspace)
983af33b
SDJ
13214{
13215 struct tracepoint *tp = (struct tracepoint *) b;
f00aae0f 13216 const char *s = get_linespec_location (location);
983af33b 13217
6c5b2ebe
PA
13218 std::vector<symtab_and_line> sals = decode_static_tracepoint_spec (&s);
13219 if (sals.size () > tp->static_trace_marker_id_idx)
983af33b 13220 {
6c5b2ebe
PA
13221 sals[0] = sals[tp->static_trace_marker_id_idx];
13222 sals.resize (1);
13223 return sals;
983af33b
SDJ
13224 }
13225 else
13226 error (_("marker %s not found"), tp->static_trace_marker_id);
13227}
13228
13229static struct breakpoint_ops strace_marker_breakpoint_ops;
13230
13231static int
13232strace_marker_p (struct breakpoint *b)
13233{
13234 return b->ops == &strace_marker_breakpoint_ops;
13235}
13236
53a5351d 13237/* Delete a breakpoint and clean up all traces of it in the data
f431efe5 13238 structures. */
c906108c
SS
13239
13240void
fba45db2 13241delete_breakpoint (struct breakpoint *bpt)
c906108c 13242{
52f0bd74 13243 struct breakpoint *b;
c906108c 13244
8a3fe4f8 13245 gdb_assert (bpt != NULL);
c906108c 13246
4a64f543
MS
13247 /* Has this bp already been deleted? This can happen because
13248 multiple lists can hold pointers to bp's. bpstat lists are
13249 especial culprits.
13250
13251 One example of this happening is a watchpoint's scope bp. When
13252 the scope bp triggers, we notice that the watchpoint is out of
13253 scope, and delete it. We also delete its scope bp. But the
13254 scope bp is marked "auto-deleting", and is already on a bpstat.
13255 That bpstat is then checked for auto-deleting bp's, which are
13256 deleted.
13257
13258 A real solution to this problem might involve reference counts in
13259 bp's, and/or giving them pointers back to their referencing
13260 bpstat's, and teaching delete_breakpoint to only free a bp's
13261 storage when no more references were extent. A cheaper bandaid
13262 was chosen. */
c906108c
SS
13263 if (bpt->type == bp_none)
13264 return;
13265
4a64f543
MS
13266 /* At least avoid this stale reference until the reference counting
13267 of breakpoints gets resolved. */
d0fb5eae 13268 if (bpt->related_breakpoint != bpt)
e5a0a904 13269 {
d0fb5eae 13270 struct breakpoint *related;
3a5c3e22 13271 struct watchpoint *w;
d0fb5eae
JK
13272
13273 if (bpt->type == bp_watchpoint_scope)
3a5c3e22 13274 w = (struct watchpoint *) bpt->related_breakpoint;
d0fb5eae 13275 else if (bpt->related_breakpoint->type == bp_watchpoint_scope)
3a5c3e22
PA
13276 w = (struct watchpoint *) bpt;
13277 else
13278 w = NULL;
13279 if (w != NULL)
13280 watchpoint_del_at_next_stop (w);
d0fb5eae
JK
13281
13282 /* Unlink bpt from the bpt->related_breakpoint ring. */
13283 for (related = bpt; related->related_breakpoint != bpt;
13284 related = related->related_breakpoint);
13285 related->related_breakpoint = bpt->related_breakpoint;
13286 bpt->related_breakpoint = bpt;
e5a0a904
JK
13287 }
13288
a9634178
TJB
13289 /* watch_command_1 creates a watchpoint but only sets its number if
13290 update_watchpoint succeeds in creating its bp_locations. If there's
13291 a problem in that process, we'll be asked to delete the half-created
13292 watchpoint. In that case, don't announce the deletion. */
13293 if (bpt->number)
13294 observer_notify_breakpoint_deleted (bpt);
c906108c 13295
c906108c
SS
13296 if (breakpoint_chain == bpt)
13297 breakpoint_chain = bpt->next;
13298
c906108c
SS
13299 ALL_BREAKPOINTS (b)
13300 if (b->next == bpt)
c5aa993b
JM
13301 {
13302 b->next = bpt->next;
13303 break;
13304 }
c906108c 13305
f431efe5
PA
13306 /* Be sure no bpstat's are pointing at the breakpoint after it's
13307 been freed. */
13308 /* FIXME, how can we find all bpstat's? We just check stop_bpstat
e5dd4106 13309 in all threads for now. Note that we cannot just remove bpstats
f431efe5
PA
13310 pointing at bpt from the stop_bpstat list entirely, as breakpoint
13311 commands are associated with the bpstat; if we remove it here,
13312 then the later call to bpstat_do_actions (&stop_bpstat); in
13313 event-top.c won't do anything, and temporary breakpoints with
13314 commands won't work. */
13315
13316 iterate_over_threads (bpstat_remove_breakpoint_callback, bpt);
13317
4a64f543
MS
13318 /* Now that breakpoint is removed from breakpoint list, update the
13319 global location list. This will remove locations that used to
13320 belong to this breakpoint. Do this before freeing the breakpoint
13321 itself, since remove_breakpoint looks at location's owner. It
13322 might be better design to have location completely
13323 self-contained, but it's not the case now. */
44702360 13324 update_global_location_list (UGLL_DONT_INSERT);
74960c60 13325
4a64f543
MS
13326 /* On the chance that someone will soon try again to delete this
13327 same bp, we mark it as deleted before freeing its storage. */
c906108c 13328 bpt->type = bp_none;
4d01a485 13329 delete bpt;
c906108c
SS
13330}
13331
51be5b68
PA
13332/* Iterator function to call a user-provided callback function once
13333 for each of B and its related breakpoints. */
13334
13335static void
13336iterate_over_related_breakpoints (struct breakpoint *b,
48649e1b 13337 gdb::function_view<void (breakpoint *)> function)
51be5b68
PA
13338{
13339 struct breakpoint *related;
13340
13341 related = b;
13342 do
13343 {
13344 struct breakpoint *next;
13345
13346 /* FUNCTION may delete RELATED. */
13347 next = related->related_breakpoint;
13348
13349 if (next == related)
13350 {
13351 /* RELATED is the last ring entry. */
48649e1b 13352 function (related);
51be5b68
PA
13353
13354 /* FUNCTION may have deleted it, so we'd never reach back to
13355 B. There's nothing left to do anyway, so just break
13356 out. */
13357 break;
13358 }
13359 else
48649e1b 13360 function (related);
51be5b68
PA
13361
13362 related = next;
13363 }
13364 while (related != b);
13365}
95a42b64 13366
4495129a 13367static void
981a3fb3 13368delete_command (const char *arg, int from_tty)
c906108c 13369{
35df4500 13370 struct breakpoint *b, *b_tmp;
c906108c 13371
ea9365bb
TT
13372 dont_repeat ();
13373
c906108c
SS
13374 if (arg == 0)
13375 {
13376 int breaks_to_delete = 0;
13377
46c6471b
PA
13378 /* Delete all breakpoints if no argument. Do not delete
13379 internal breakpoints, these have to be deleted with an
13380 explicit breakpoint number argument. */
c5aa993b 13381 ALL_BREAKPOINTS (b)
46c6471b 13382 if (user_breakpoint_p (b))
973d738b
DJ
13383 {
13384 breaks_to_delete = 1;
13385 break;
13386 }
c906108c
SS
13387
13388 /* Ask user only if there are some breakpoints to delete. */
13389 if (!from_tty
e2e0b3e5 13390 || (breaks_to_delete && query (_("Delete all breakpoints? "))))
c906108c 13391 {
35df4500 13392 ALL_BREAKPOINTS_SAFE (b, b_tmp)
46c6471b 13393 if (user_breakpoint_p (b))
c5aa993b 13394 delete_breakpoint (b);
c906108c
SS
13395 }
13396 }
13397 else
48649e1b
TT
13398 map_breakpoint_numbers
13399 (arg, [&] (breakpoint *b)
13400 {
13401 iterate_over_related_breakpoints (b, delete_breakpoint);
13402 });
c906108c
SS
13403}
13404
c2f4122d
PA
13405/* Return true if all locations of B bound to PSPACE are pending. If
13406 PSPACE is NULL, all locations of all program spaces are
13407 considered. */
13408
0d381245 13409static int
c2f4122d 13410all_locations_are_pending (struct breakpoint *b, struct program_space *pspace)
fe3f5fa8 13411{
c2f4122d
PA
13412 struct bp_location *loc;
13413
13414 for (loc = b->loc; loc != NULL; loc = loc->next)
13415 if ((pspace == NULL
13416 || loc->pspace == pspace)
13417 && !loc->shlib_disabled
8645ff69 13418 && !loc->pspace->executing_startup)
0d381245
VP
13419 return 0;
13420 return 1;
fe3f5fa8
VP
13421}
13422
776592bf
DE
13423/* Subroutine of update_breakpoint_locations to simplify it.
13424 Return non-zero if multiple fns in list LOC have the same name.
13425 Null names are ignored. */
13426
13427static int
13428ambiguous_names_p (struct bp_location *loc)
13429{
13430 struct bp_location *l;
13431 htab_t htab = htab_create_alloc (13, htab_hash_string,
cc59ec59
MS
13432 (int (*) (const void *,
13433 const void *)) streq,
776592bf
DE
13434 NULL, xcalloc, xfree);
13435
13436 for (l = loc; l != NULL; l = l->next)
13437 {
13438 const char **slot;
13439 const char *name = l->function_name;
13440
13441 /* Allow for some names to be NULL, ignore them. */
13442 if (name == NULL)
13443 continue;
13444
13445 slot = (const char **) htab_find_slot (htab, (const void *) name,
13446 INSERT);
4a64f543
MS
13447 /* NOTE: We can assume slot != NULL here because xcalloc never
13448 returns NULL. */
776592bf
DE
13449 if (*slot != NULL)
13450 {
13451 htab_delete (htab);
13452 return 1;
13453 }
13454 *slot = name;
13455 }
13456
13457 htab_delete (htab);
13458 return 0;
13459}
13460
0fb4aa4b
PA
13461/* When symbols change, it probably means the sources changed as well,
13462 and it might mean the static tracepoint markers are no longer at
13463 the same address or line numbers they used to be at last we
13464 checked. Losing your static tracepoints whenever you rebuild is
13465 undesirable. This function tries to resync/rematch gdb static
13466 tracepoints with the markers on the target, for static tracepoints
13467 that have not been set by marker id. Static tracepoint that have
13468 been set by marker id are reset by marker id in breakpoint_re_set.
13469 The heuristic is:
13470
13471 1) For a tracepoint set at a specific address, look for a marker at
13472 the old PC. If one is found there, assume to be the same marker.
13473 If the name / string id of the marker found is different from the
13474 previous known name, assume that means the user renamed the marker
13475 in the sources, and output a warning.
13476
13477 2) For a tracepoint set at a given line number, look for a marker
13478 at the new address of the old line number. If one is found there,
13479 assume to be the same marker. If the name / string id of the
13480 marker found is different from the previous known name, assume that
13481 means the user renamed the marker in the sources, and output a
13482 warning.
13483
13484 3) If a marker is no longer found at the same address or line, it
13485 may mean the marker no longer exists. But it may also just mean
13486 the code changed a bit. Maybe the user added a few lines of code
13487 that made the marker move up or down (in line number terms). Ask
13488 the target for info about the marker with the string id as we knew
13489 it. If found, update line number and address in the matching
13490 static tracepoint. This will get confused if there's more than one
13491 marker with the same ID (possible in UST, although unadvised
13492 precisely because it confuses tools). */
13493
13494static struct symtab_and_line
13495update_static_tracepoint (struct breakpoint *b, struct symtab_and_line sal)
13496{
d9b3f62e 13497 struct tracepoint *tp = (struct tracepoint *) b;
0fb4aa4b
PA
13498 struct static_tracepoint_marker marker;
13499 CORE_ADDR pc;
0fb4aa4b
PA
13500
13501 pc = sal.pc;
13502 if (sal.line)
13503 find_line_pc (sal.symtab, sal.line, &pc);
13504
13505 if (target_static_tracepoint_marker_at (pc, &marker))
13506 {
d9b3f62e 13507 if (strcmp (tp->static_trace_marker_id, marker.str_id) != 0)
0fb4aa4b
PA
13508 warning (_("static tracepoint %d changed probed marker from %s to %s"),
13509 b->number,
d9b3f62e 13510 tp->static_trace_marker_id, marker.str_id);
0fb4aa4b 13511
d9b3f62e
PA
13512 xfree (tp->static_trace_marker_id);
13513 tp->static_trace_marker_id = xstrdup (marker.str_id);
0fb4aa4b
PA
13514 release_static_tracepoint_marker (&marker);
13515
13516 return sal;
13517 }
13518
13519 /* Old marker wasn't found on target at lineno. Try looking it up
13520 by string ID. */
13521 if (!sal.explicit_pc
13522 && sal.line != 0
13523 && sal.symtab != NULL
d9b3f62e 13524 && tp->static_trace_marker_id != NULL)
0fb4aa4b
PA
13525 {
13526 VEC(static_tracepoint_marker_p) *markers;
13527
13528 markers
d9b3f62e 13529 = target_static_tracepoint_markers_by_strid (tp->static_trace_marker_id);
0fb4aa4b
PA
13530
13531 if (!VEC_empty(static_tracepoint_marker_p, markers))
13532 {
0fb4aa4b 13533 struct symbol *sym;
80e1d417 13534 struct static_tracepoint_marker *tpmarker;
79a45e25 13535 struct ui_out *uiout = current_uiout;
67994074 13536 struct explicit_location explicit_loc;
0fb4aa4b 13537
80e1d417 13538 tpmarker = VEC_index (static_tracepoint_marker_p, markers, 0);
0fb4aa4b 13539
d9b3f62e 13540 xfree (tp->static_trace_marker_id);
80e1d417 13541 tp->static_trace_marker_id = xstrdup (tpmarker->str_id);
0fb4aa4b
PA
13542
13543 warning (_("marker for static tracepoint %d (%s) not "
13544 "found at previous line number"),
d9b3f62e 13545 b->number, tp->static_trace_marker_id);
0fb4aa4b 13546
51abb421 13547 symtab_and_line sal2 = find_pc_line (tpmarker->address, 0);
80e1d417 13548 sym = find_pc_sect_function (tpmarker->address, NULL);
112e8700 13549 uiout->text ("Now in ");
0fb4aa4b
PA
13550 if (sym)
13551 {
112e8700
SM
13552 uiout->field_string ("func", SYMBOL_PRINT_NAME (sym));
13553 uiout->text (" at ");
0fb4aa4b 13554 }
112e8700 13555 uiout->field_string ("file",
05cba821 13556 symtab_to_filename_for_display (sal2.symtab));
112e8700 13557 uiout->text (":");
0fb4aa4b 13558
112e8700 13559 if (uiout->is_mi_like_p ())
0fb4aa4b 13560 {
0b0865da 13561 const char *fullname = symtab_to_fullname (sal2.symtab);
0fb4aa4b 13562
112e8700 13563 uiout->field_string ("fullname", fullname);
0fb4aa4b
PA
13564 }
13565
112e8700
SM
13566 uiout->field_int ("line", sal2.line);
13567 uiout->text ("\n");
0fb4aa4b 13568
80e1d417 13569 b->loc->line_number = sal2.line;
2f202fde 13570 b->loc->symtab = sym != NULL ? sal2.symtab : NULL;
0fb4aa4b 13571
d28cd78a 13572 b->location.reset (NULL);
67994074
KS
13573 initialize_explicit_location (&explicit_loc);
13574 explicit_loc.source_filename
00e52e53 13575 = ASTRDUP (symtab_to_filename_for_display (sal2.symtab));
67994074
KS
13576 explicit_loc.line_offset.offset = b->loc->line_number;
13577 explicit_loc.line_offset.sign = LINE_OFFSET_NONE;
d28cd78a 13578 b->location = new_explicit_location (&explicit_loc);
0fb4aa4b
PA
13579
13580 /* Might be nice to check if function changed, and warn if
13581 so. */
13582
80e1d417 13583 release_static_tracepoint_marker (tpmarker);
0fb4aa4b
PA
13584 }
13585 }
13586 return sal;
13587}
13588
8d3788bd
VP
13589/* Returns 1 iff locations A and B are sufficiently same that
13590 we don't need to report breakpoint as changed. */
13591
13592static int
13593locations_are_equal (struct bp_location *a, struct bp_location *b)
13594{
13595 while (a && b)
13596 {
13597 if (a->address != b->address)
13598 return 0;
13599
13600 if (a->shlib_disabled != b->shlib_disabled)
13601 return 0;
13602
13603 if (a->enabled != b->enabled)
13604 return 0;
13605
13606 a = a->next;
13607 b = b->next;
13608 }
13609
13610 if ((a == NULL) != (b == NULL))
13611 return 0;
13612
13613 return 1;
13614}
13615
c2f4122d
PA
13616/* Split all locations of B that are bound to PSPACE out of B's
13617 location list to a separate list and return that list's head. If
13618 PSPACE is NULL, hoist out all locations of B. */
13619
13620static struct bp_location *
13621hoist_existing_locations (struct breakpoint *b, struct program_space *pspace)
13622{
13623 struct bp_location head;
13624 struct bp_location *i = b->loc;
13625 struct bp_location **i_link = &b->loc;
13626 struct bp_location *hoisted = &head;
13627
13628 if (pspace == NULL)
13629 {
13630 i = b->loc;
13631 b->loc = NULL;
13632 return i;
13633 }
13634
13635 head.next = NULL;
13636
13637 while (i != NULL)
13638 {
13639 if (i->pspace == pspace)
13640 {
13641 *i_link = i->next;
13642 i->next = NULL;
13643 hoisted->next = i;
13644 hoisted = i;
13645 }
13646 else
13647 i_link = &i->next;
13648 i = *i_link;
13649 }
13650
13651 return head.next;
13652}
13653
13654/* Create new breakpoint locations for B (a hardware or software
13655 breakpoint) based on SALS and SALS_END. If SALS_END.NELTS is not
13656 zero, then B is a ranged breakpoint. Only recreates locations for
13657 FILTER_PSPACE. Locations of other program spaces are left
13658 untouched. */
f1310107 13659
0e30163f 13660void
0d381245 13661update_breakpoint_locations (struct breakpoint *b,
c2f4122d 13662 struct program_space *filter_pspace,
6c5b2ebe
PA
13663 gdb::array_view<const symtab_and_line> sals,
13664 gdb::array_view<const symtab_and_line> sals_end)
fe3f5fa8
VP
13665{
13666 int i;
c2f4122d 13667 struct bp_location *existing_locations;
0d381245 13668
6c5b2ebe 13669 if (!sals_end.empty () && (sals.size () != 1 || sals_end.size () != 1))
f8eba3c6
TT
13670 {
13671 /* Ranged breakpoints have only one start location and one end
13672 location. */
13673 b->enable_state = bp_disabled;
f8eba3c6
TT
13674 printf_unfiltered (_("Could not reset ranged breakpoint %d: "
13675 "multiple locations found\n"),
13676 b->number);
13677 return;
13678 }
f1310107 13679
4a64f543
MS
13680 /* If there's no new locations, and all existing locations are
13681 pending, don't do anything. This optimizes the common case where
13682 all locations are in the same shared library, that was unloaded.
13683 We'd like to retain the location, so that when the library is
13684 loaded again, we don't loose the enabled/disabled status of the
13685 individual locations. */
6c5b2ebe 13686 if (all_locations_are_pending (b, filter_pspace) && sals.empty ())
fe3f5fa8
VP
13687 return;
13688
c2f4122d 13689 existing_locations = hoist_existing_locations (b, filter_pspace);
fe3f5fa8 13690
6c5b2ebe 13691 for (const auto &sal : sals)
fe3f5fa8 13692 {
f8eba3c6
TT
13693 struct bp_location *new_loc;
13694
6c5b2ebe 13695 switch_to_program_space_and_thread (sal.pspace);
f8eba3c6 13696
6c5b2ebe 13697 new_loc = add_location_to_breakpoint (b, &sal);
fe3f5fa8 13698
0d381245
VP
13699 /* Reparse conditions, they might contain references to the
13700 old symtab. */
13701 if (b->cond_string != NULL)
13702 {
bbc13ae3 13703 const char *s;
fe3f5fa8 13704
0d381245 13705 s = b->cond_string;
492d29ea 13706 TRY
0d381245 13707 {
6c5b2ebe
PA
13708 new_loc->cond = parse_exp_1 (&s, sal.pc,
13709 block_for_pc (sal.pc),
0d381245
VP
13710 0);
13711 }
492d29ea 13712 CATCH (e, RETURN_MASK_ERROR)
0d381245 13713 {
3e43a32a
MS
13714 warning (_("failed to reevaluate condition "
13715 "for breakpoint %d: %s"),
0d381245
VP
13716 b->number, e.message);
13717 new_loc->enabled = 0;
13718 }
492d29ea 13719 END_CATCH
0d381245 13720 }
fe3f5fa8 13721
6c5b2ebe 13722 if (!sals_end.empty ())
f1310107 13723 {
6c5b2ebe 13724 CORE_ADDR end = find_breakpoint_range_end (sals_end[0]);
f1310107 13725
6c5b2ebe 13726 new_loc->length = end - sals[0].pc + 1;
f1310107 13727 }
0d381245 13728 }
fe3f5fa8 13729
4a64f543
MS
13730 /* If possible, carry over 'disable' status from existing
13731 breakpoints. */
0d381245
VP
13732 {
13733 struct bp_location *e = existing_locations;
776592bf
DE
13734 /* If there are multiple breakpoints with the same function name,
13735 e.g. for inline functions, comparing function names won't work.
13736 Instead compare pc addresses; this is just a heuristic as things
13737 may have moved, but in practice it gives the correct answer
13738 often enough until a better solution is found. */
13739 int have_ambiguous_names = ambiguous_names_p (b->loc);
13740
0d381245
VP
13741 for (; e; e = e->next)
13742 {
13743 if (!e->enabled && e->function_name)
13744 {
13745 struct bp_location *l = b->loc;
776592bf
DE
13746 if (have_ambiguous_names)
13747 {
13748 for (; l; l = l->next)
f1310107 13749 if (breakpoint_locations_match (e, l))
776592bf
DE
13750 {
13751 l->enabled = 0;
13752 break;
13753 }
13754 }
13755 else
13756 {
13757 for (; l; l = l->next)
13758 if (l->function_name
13759 && strcmp (e->function_name, l->function_name) == 0)
13760 {
13761 l->enabled = 0;
13762 break;
13763 }
13764 }
0d381245
VP
13765 }
13766 }
13767 }
fe3f5fa8 13768
8d3788bd
VP
13769 if (!locations_are_equal (existing_locations, b->loc))
13770 observer_notify_breakpoint_modified (b);
fe3f5fa8
VP
13771}
13772
f00aae0f 13773/* Find the SaL locations corresponding to the given LOCATION.
ef23e705
TJB
13774 On return, FOUND will be 1 if any SaL was found, zero otherwise. */
13775
6c5b2ebe 13776static std::vector<symtab_and_line>
f00aae0f 13777location_to_sals (struct breakpoint *b, struct event_location *location,
c2f4122d 13778 struct program_space *search_pspace, int *found)
ef23e705 13779{
492d29ea 13780 struct gdb_exception exception = exception_none;
ef23e705 13781
983af33b 13782 gdb_assert (b->ops != NULL);
ef23e705 13783
6c5b2ebe
PA
13784 std::vector<symtab_and_line> sals;
13785
492d29ea 13786 TRY
ef23e705 13787 {
6c5b2ebe 13788 sals = b->ops->decode_location (b, location, search_pspace);
ef23e705 13789 }
492d29ea 13790 CATCH (e, RETURN_MASK_ERROR)
ef23e705
TJB
13791 {
13792 int not_found_and_ok = 0;
492d29ea
PA
13793
13794 exception = e;
13795
ef23e705
TJB
13796 /* For pending breakpoints, it's expected that parsing will
13797 fail until the right shared library is loaded. User has
13798 already told to create pending breakpoints and don't need
13799 extra messages. If breakpoint is in bp_shlib_disabled
13800 state, then user already saw the message about that
13801 breakpoint being disabled, and don't want to see more
13802 errors. */
58438ac1 13803 if (e.error == NOT_FOUND_ERROR
c2f4122d
PA
13804 && (b->condition_not_parsed
13805 || (b->loc != NULL
13806 && search_pspace != NULL
13807 && b->loc->pspace != search_pspace)
ef23e705 13808 || (b->loc && b->loc->shlib_disabled)
f8eba3c6 13809 || (b->loc && b->loc->pspace->executing_startup)
ef23e705
TJB
13810 || b->enable_state == bp_disabled))
13811 not_found_and_ok = 1;
13812
13813 if (!not_found_and_ok)
13814 {
13815 /* We surely don't want to warn about the same breakpoint
13816 10 times. One solution, implemented here, is disable
13817 the breakpoint on error. Another solution would be to
13818 have separate 'warning emitted' flag. Since this
13819 happens only when a binary has changed, I don't know
13820 which approach is better. */
13821 b->enable_state = bp_disabled;
13822 throw_exception (e);
13823 }
13824 }
492d29ea 13825 END_CATCH
ef23e705 13826
492d29ea 13827 if (exception.reason == 0 || exception.error != NOT_FOUND_ERROR)
ef23e705 13828 {
6c5b2ebe
PA
13829 for (auto &sal : sals)
13830 resolve_sal_pc (&sal);
f00aae0f 13831 if (b->condition_not_parsed && b->extra_string != NULL)
ef23e705 13832 {
ed1d1739
KS
13833 char *cond_string, *extra_string;
13834 int thread, task;
ef23e705 13835
6c5b2ebe 13836 find_condition_and_thread (b->extra_string, sals[0].pc,
e7e0cddf
SS
13837 &cond_string, &thread, &task,
13838 &extra_string);
f00aae0f 13839 gdb_assert (b->cond_string == NULL);
ef23e705
TJB
13840 if (cond_string)
13841 b->cond_string = cond_string;
13842 b->thread = thread;
13843 b->task = task;
e7e0cddf 13844 if (extra_string)
f00aae0f
KS
13845 {
13846 xfree (b->extra_string);
13847 b->extra_string = extra_string;
13848 }
ef23e705
TJB
13849 b->condition_not_parsed = 0;
13850 }
13851
983af33b 13852 if (b->type == bp_static_tracepoint && !strace_marker_p (b))
6c5b2ebe 13853 sals[0] = update_static_tracepoint (b, sals[0]);
ef23e705 13854
58438ac1
TT
13855 *found = 1;
13856 }
13857 else
13858 *found = 0;
ef23e705
TJB
13859
13860 return sals;
13861}
13862
348d480f
PA
13863/* The default re_set method, for typical hardware or software
13864 breakpoints. Reevaluate the breakpoint and recreate its
13865 locations. */
13866
13867static void
28010a5d 13868breakpoint_re_set_default (struct breakpoint *b)
ef23e705 13869{
c2f4122d 13870 struct program_space *filter_pspace = current_program_space;
6c5b2ebe 13871 std::vector<symtab_and_line> expanded, expanded_end;
ef23e705 13872
6c5b2ebe
PA
13873 int found;
13874 std::vector<symtab_and_line> sals = location_to_sals (b, b->location.get (),
13875 filter_pspace, &found);
ef23e705 13876 if (found)
6c5b2ebe 13877 expanded = std::move (sals);
ef23e705 13878
f00aae0f 13879 if (b->location_range_end != NULL)
f1310107 13880 {
6c5b2ebe
PA
13881 std::vector<symtab_and_line> sals_end
13882 = location_to_sals (b, b->location_range_end.get (),
13883 filter_pspace, &found);
f1310107 13884 if (found)
6c5b2ebe 13885 expanded_end = std::move (sals_end);
f1310107
TJB
13886 }
13887
c2f4122d 13888 update_breakpoint_locations (b, filter_pspace, expanded, expanded_end);
28010a5d
PA
13889}
13890
983af33b
SDJ
13891/* Default method for creating SALs from an address string. It basically
13892 calls parse_breakpoint_sals. Return 1 for success, zero for failure. */
13893
13894static void
f00aae0f
KS
13895create_sals_from_location_default (const struct event_location *location,
13896 struct linespec_result *canonical,
13897 enum bptype type_wanted)
983af33b 13898{
f00aae0f 13899 parse_breakpoint_sals (location, canonical);
983af33b
SDJ
13900}
13901
13902/* Call create_breakpoints_sal for the given arguments. This is the default
13903 function for the `create_breakpoints_sal' method of
13904 breakpoint_ops. */
13905
13906static void
13907create_breakpoints_sal_default (struct gdbarch *gdbarch,
13908 struct linespec_result *canonical,
e1e01040
PA
13909 gdb::unique_xmalloc_ptr<char> cond_string,
13910 gdb::unique_xmalloc_ptr<char> extra_string,
983af33b
SDJ
13911 enum bptype type_wanted,
13912 enum bpdisp disposition,
13913 int thread,
13914 int task, int ignore_count,
13915 const struct breakpoint_ops *ops,
13916 int from_tty, int enabled,
44f238bb 13917 int internal, unsigned flags)
983af33b 13918{
e1e01040
PA
13919 create_breakpoints_sal (gdbarch, canonical,
13920 std::move (cond_string),
13921 std::move (extra_string),
983af33b
SDJ
13922 type_wanted, disposition,
13923 thread, task, ignore_count, ops, from_tty,
44f238bb 13924 enabled, internal, flags);
983af33b
SDJ
13925}
13926
13927/* Decode the line represented by S by calling decode_line_full. This is the
5f700d83 13928 default function for the `decode_location' method of breakpoint_ops. */
983af33b 13929
6c5b2ebe 13930static std::vector<symtab_and_line>
f00aae0f
KS
13931decode_location_default (struct breakpoint *b,
13932 const struct event_location *location,
6c5b2ebe 13933 struct program_space *search_pspace)
983af33b
SDJ
13934{
13935 struct linespec_result canonical;
13936
c2f4122d 13937 decode_line_full (location, DECODE_LINE_FUNFIRSTLINE, search_pspace,
983af33b
SDJ
13938 (struct symtab *) NULL, 0,
13939 &canonical, multiple_symbols_all,
13940 b->filter);
13941
13942 /* We should get 0 or 1 resulting SALs. */
6c5b2ebe 13943 gdb_assert (canonical.lsals.size () < 2);
983af33b 13944
6c5b2ebe 13945 if (!canonical.lsals.empty ())
983af33b 13946 {
6c5b2ebe
PA
13947 const linespec_sals &lsal = canonical.lsals[0];
13948 return std::move (lsal.sals);
983af33b 13949 }
6c5b2ebe 13950 return {};
983af33b
SDJ
13951}
13952
bf469271 13953/* Reset a breakpoint. */
c906108c 13954
bf469271
PA
13955static void
13956breakpoint_re_set_one (breakpoint *b)
c906108c 13957{
fdf44873
TT
13958 input_radix = b->input_radix;
13959 set_language (b->language);
c906108c 13960
348d480f 13961 b->ops->re_set (b);
c906108c
SS
13962}
13963
c2f4122d
PA
13964/* Re-set breakpoint locations for the current program space.
13965 Locations bound to other program spaces are left untouched. */
13966
c906108c 13967void
69de3c6a 13968breakpoint_re_set (void)
c906108c 13969{
35df4500 13970 struct breakpoint *b, *b_tmp;
2a7f3dff 13971
c5aa993b 13972 {
fdf44873
TT
13973 scoped_restore_current_language save_language;
13974 scoped_restore save_input_radix = make_scoped_restore (&input_radix);
5ed8105e 13975 scoped_restore_current_pspace_and_thread restore_pspace_thread;
e62c965a 13976
5ed8105e
PA
13977 /* Note: we must not try to insert locations until after all
13978 breakpoints have been re-set. Otherwise, e.g., when re-setting
13979 breakpoint 1, we'd insert the locations of breakpoint 2, which
13980 hadn't been re-set yet, and thus may have stale locations. */
4efc6507 13981
5ed8105e
PA
13982 ALL_BREAKPOINTS_SAFE (b, b_tmp)
13983 {
bf469271
PA
13984 TRY
13985 {
13986 breakpoint_re_set_one (b);
13987 }
13988 CATCH (ex, RETURN_MASK_ALL)
13989 {
13990 exception_fprintf (gdb_stderr, ex,
13991 "Error in re-setting breakpoint %d: ",
13992 b->number);
13993 }
13994 END_CATCH
5ed8105e 13995 }
5ed8105e
PA
13996
13997 jit_breakpoint_re_set ();
13998 }
6c95b8df 13999
af02033e
PP
14000 create_overlay_event_breakpoint ();
14001 create_longjmp_master_breakpoint ();
14002 create_std_terminate_master_breakpoint ();
186c406b 14003 create_exception_master_breakpoint ();
2a7f3dff
PA
14004
14005 /* Now we can insert. */
14006 update_global_location_list (UGLL_MAY_INSERT);
c906108c
SS
14007}
14008\f
c906108c
SS
14009/* Reset the thread number of this breakpoint:
14010
14011 - If the breakpoint is for all threads, leave it as-is.
4a64f543 14012 - Else, reset it to the current thread for inferior_ptid. */
c906108c 14013void
fba45db2 14014breakpoint_re_set_thread (struct breakpoint *b)
c906108c
SS
14015{
14016 if (b->thread != -1)
14017 {
39f77062 14018 if (in_thread_list (inferior_ptid))
5d5658a1 14019 b->thread = ptid_to_global_thread_id (inferior_ptid);
6c95b8df
PA
14020
14021 /* We're being called after following a fork. The new fork is
14022 selected as current, and unless this was a vfork will have a
14023 different program space from the original thread. Reset that
14024 as well. */
14025 b->loc->pspace = current_program_space;
c906108c
SS
14026 }
14027}
14028
03ac34d5
MS
14029/* Set ignore-count of breakpoint number BPTNUM to COUNT.
14030 If from_tty is nonzero, it prints a message to that effect,
14031 which ends with a period (no newline). */
14032
c906108c 14033void
fba45db2 14034set_ignore_count (int bptnum, int count, int from_tty)
c906108c 14035{
52f0bd74 14036 struct breakpoint *b;
c906108c
SS
14037
14038 if (count < 0)
14039 count = 0;
14040
14041 ALL_BREAKPOINTS (b)
14042 if (b->number == bptnum)
c5aa993b 14043 {
d77f58be
SS
14044 if (is_tracepoint (b))
14045 {
14046 if (from_tty && count != 0)
14047 printf_filtered (_("Ignore count ignored for tracepoint %d."),
14048 bptnum);
14049 return;
14050 }
14051
c5aa993b 14052 b->ignore_count = count;
221ea385
KS
14053 if (from_tty)
14054 {
14055 if (count == 0)
3e43a32a
MS
14056 printf_filtered (_("Will stop next time "
14057 "breakpoint %d is reached."),
221ea385
KS
14058 bptnum);
14059 else if (count == 1)
a3f17187 14060 printf_filtered (_("Will ignore next crossing of breakpoint %d."),
221ea385
KS
14061 bptnum);
14062 else
3e43a32a
MS
14063 printf_filtered (_("Will ignore next %d "
14064 "crossings of breakpoint %d."),
221ea385
KS
14065 count, bptnum);
14066 }
8d3788bd 14067 observer_notify_breakpoint_modified (b);
c5aa993b
JM
14068 return;
14069 }
c906108c 14070
8a3fe4f8 14071 error (_("No breakpoint number %d."), bptnum);
c906108c
SS
14072}
14073
c906108c
SS
14074/* Command to set ignore-count of breakpoint N to COUNT. */
14075
14076static void
0b39b52e 14077ignore_command (const char *args, int from_tty)
c906108c 14078{
0b39b52e 14079 const char *p = args;
52f0bd74 14080 int num;
c906108c
SS
14081
14082 if (p == 0)
e2e0b3e5 14083 error_no_arg (_("a breakpoint number"));
c5aa993b 14084
c906108c 14085 num = get_number (&p);
5c44784c 14086 if (num == 0)
8a3fe4f8 14087 error (_("bad breakpoint number: '%s'"), args);
c906108c 14088 if (*p == 0)
8a3fe4f8 14089 error (_("Second argument (specified ignore-count) is missing."));
c906108c
SS
14090
14091 set_ignore_count (num,
14092 longest_to_int (value_as_long (parse_and_eval (p))),
14093 from_tty);
221ea385
KS
14094 if (from_tty)
14095 printf_filtered ("\n");
c906108c
SS
14096}
14097\f
d0fe4701
XR
14098
14099/* Call FUNCTION on each of the breakpoints with numbers in the range
14100 defined by BP_NUM_RANGE (an inclusive range). */
c906108c
SS
14101
14102static void
d0fe4701
XR
14103map_breakpoint_number_range (std::pair<int, int> bp_num_range,
14104 gdb::function_view<void (breakpoint *)> function)
c906108c 14105{
d0fe4701
XR
14106 if (bp_num_range.first == 0)
14107 {
14108 warning (_("bad breakpoint number at or near '%d'"),
14109 bp_num_range.first);
14110 }
14111 else
c906108c 14112 {
d0fe4701 14113 struct breakpoint *b, *tmp;
197f0a60 14114
d0fe4701 14115 for (int i = bp_num_range.first; i <= bp_num_range.second; i++)
5c44784c 14116 {
d0fe4701
XR
14117 bool match = false;
14118
5c44784c 14119 ALL_BREAKPOINTS_SAFE (b, tmp)
d0fe4701 14120 if (b->number == i)
5c44784c 14121 {
bfd28288 14122 match = true;
48649e1b 14123 function (b);
11cf8741 14124 break;
5c44784c 14125 }
bfd28288 14126 if (!match)
d0fe4701 14127 printf_unfiltered (_("No breakpoint number %d.\n"), i);
c5aa993b 14128 }
c906108c
SS
14129 }
14130}
14131
d0fe4701
XR
14132/* Call FUNCTION on each of the breakpoints whose numbers are given in
14133 ARGS. */
14134
14135static void
14136map_breakpoint_numbers (const char *args,
14137 gdb::function_view<void (breakpoint *)> function)
14138{
14139 if (args == NULL || *args == '\0')
14140 error_no_arg (_("one or more breakpoint numbers"));
14141
14142 number_or_range_parser parser (args);
14143
14144 while (!parser.finished ())
14145 {
14146 int num = parser.get_number ();
14147 map_breakpoint_number_range (std::make_pair (num, num), function);
14148 }
14149}
14150
14151/* Return the breakpoint location structure corresponding to the
14152 BP_NUM and LOC_NUM values. */
14153
0d381245 14154static struct bp_location *
d0fe4701 14155find_location_by_number (int bp_num, int loc_num)
0d381245 14156{
0d381245 14157 struct breakpoint *b;
0d381245
VP
14158
14159 ALL_BREAKPOINTS (b)
14160 if (b->number == bp_num)
14161 {
14162 break;
14163 }
14164
14165 if (!b || b->number != bp_num)
d0fe4701 14166 error (_("Bad breakpoint number '%d'"), bp_num);
0d381245 14167
0d381245 14168 if (loc_num == 0)
d0fe4701 14169 error (_("Bad breakpoint location number '%d'"), loc_num);
0d381245 14170
d0fe4701
XR
14171 int n = 0;
14172 for (bp_location *loc = b->loc; loc != NULL; loc = loc->next)
14173 if (++n == loc_num)
14174 return loc;
14175
14176 error (_("Bad breakpoint location number '%d'"), loc_num);
0d381245
VP
14177}
14178
95e95a6d
PA
14179/* Modes of operation for extract_bp_num. */
14180enum class extract_bp_kind
14181{
14182 /* Extracting a breakpoint number. */
14183 bp,
14184
14185 /* Extracting a location number. */
14186 loc,
14187};
14188
14189/* Extract a breakpoint or location number (as determined by KIND)
14190 from the string starting at START. TRAILER is a character which
14191 can be found after the number. If you don't want a trailer, use
14192 '\0'. If END_OUT is not NULL, it is set to point after the parsed
14193 string. This always returns a positive integer. */
14194
14195static int
14196extract_bp_num (extract_bp_kind kind, const char *start,
14197 int trailer, const char **end_out = NULL)
14198{
14199 const char *end = start;
14200 int num = get_number_trailer (&end, trailer);
14201 if (num < 0)
14202 error (kind == extract_bp_kind::bp
14203 ? _("Negative breakpoint number '%.*s'")
14204 : _("Negative breakpoint location number '%.*s'"),
14205 int (end - start), start);
14206 if (num == 0)
14207 error (kind == extract_bp_kind::bp
14208 ? _("Bad breakpoint number '%.*s'")
14209 : _("Bad breakpoint location number '%.*s'"),
14210 int (end - start), start);
14211
14212 if (end_out != NULL)
14213 *end_out = end;
14214 return num;
14215}
14216
14217/* Extract a breakpoint or location range (as determined by KIND) in
14218 the form NUM1-NUM2 stored at &ARG[arg_offset]. Returns a std::pair
14219 representing the (inclusive) range. The returned pair's elements
14220 are always positive integers. */
14221
14222static std::pair<int, int>
14223extract_bp_or_bp_range (extract_bp_kind kind,
14224 const std::string &arg,
14225 std::string::size_type arg_offset)
14226{
14227 std::pair<int, int> range;
14228 const char *bp_loc = &arg[arg_offset];
14229 std::string::size_type dash = arg.find ('-', arg_offset);
14230 if (dash != std::string::npos)
14231 {
14232 /* bp_loc is a range (x-z). */
14233 if (arg.length () == dash + 1)
14234 error (kind == extract_bp_kind::bp
14235 ? _("Bad breakpoint number at or near: '%s'")
14236 : _("Bad breakpoint location number at or near: '%s'"),
14237 bp_loc);
14238
14239 const char *end;
14240 const char *start_first = bp_loc;
14241 const char *start_second = &arg[dash + 1];
14242 range.first = extract_bp_num (kind, start_first, '-');
14243 range.second = extract_bp_num (kind, start_second, '\0', &end);
14244
14245 if (range.first > range.second)
14246 error (kind == extract_bp_kind::bp
14247 ? _("Inverted breakpoint range at '%.*s'")
14248 : _("Inverted breakpoint location range at '%.*s'"),
14249 int (end - start_first), start_first);
14250 }
14251 else
14252 {
14253 /* bp_loc is a single value. */
14254 range.first = extract_bp_num (kind, bp_loc, '\0');
14255 range.second = range.first;
14256 }
14257 return range;
14258}
14259
d0fe4701
XR
14260/* Extract the breakpoint/location range specified by ARG. Returns
14261 the breakpoint range in BP_NUM_RANGE, and the location range in
14262 BP_LOC_RANGE.
14263
14264 ARG may be in any of the following forms:
14265
14266 x where 'x' is a breakpoint number.
14267 x-y where 'x' and 'y' specify a breakpoint numbers range.
14268 x.y where 'x' is a breakpoint number and 'y' a location number.
14269 x.y-z where 'x' is a breakpoint number and 'y' and 'z' specify a
14270 location number range.
14271*/
14272
cc638e86 14273static void
d0fe4701
XR
14274extract_bp_number_and_location (const std::string &arg,
14275 std::pair<int, int> &bp_num_range,
14276 std::pair<int, int> &bp_loc_range)
14277{
14278 std::string::size_type dot = arg.find ('.');
14279
14280 if (dot != std::string::npos)
14281 {
14282 /* Handle 'x.y' and 'x.y-z' cases. */
14283
14284 if (arg.length () == dot + 1 || dot == 0)
95e95a6d 14285 error (_("Bad breakpoint number at or near: '%s'"), arg.c_str ());
d0fe4701 14286
95e95a6d
PA
14287 bp_num_range.first
14288 = extract_bp_num (extract_bp_kind::bp, arg.c_str (), '.');
14289 bp_num_range.second = bp_num_range.first;
d0fe4701 14290
95e95a6d
PA
14291 bp_loc_range = extract_bp_or_bp_range (extract_bp_kind::loc,
14292 arg, dot + 1);
d0fe4701
XR
14293 }
14294 else
14295 {
14296 /* Handle x and x-y cases. */
d0fe4701 14297
95e95a6d 14298 bp_num_range = extract_bp_or_bp_range (extract_bp_kind::bp, arg, 0);
d0fe4701
XR
14299 bp_loc_range.first = 0;
14300 bp_loc_range.second = 0;
14301 }
d0fe4701
XR
14302}
14303
14304/* Enable or disable a breakpoint location BP_NUM.LOC_NUM. ENABLE
14305 specifies whether to enable or disable. */
14306
14307static void
14308enable_disable_bp_num_loc (int bp_num, int loc_num, bool enable)
14309{
14310 struct bp_location *loc = find_location_by_number (bp_num, loc_num);
14311 if (loc != NULL)
14312 {
14313 if (loc->enabled != enable)
14314 {
14315 loc->enabled = enable;
14316 mark_breakpoint_location_modified (loc);
14317 }
14318 if (target_supports_enable_disable_tracepoint ()
14319 && current_trace_status ()->running && loc->owner
14320 && is_tracepoint (loc->owner))
14321 target_disable_tracepoint (loc);
14322 }
14323 update_global_location_list (UGLL_DONT_INSERT);
14324}
14325
14326/* Enable or disable a range of breakpoint locations. BP_NUM is the
14327 number of the breakpoint, and BP_LOC_RANGE specifies the
14328 (inclusive) range of location numbers of that breakpoint to
14329 enable/disable. ENABLE specifies whether to enable or disable the
14330 location. */
14331
14332static void
14333enable_disable_breakpoint_location_range (int bp_num,
14334 std::pair<int, int> &bp_loc_range,
14335 bool enable)
14336{
14337 for (int i = bp_loc_range.first; i <= bp_loc_range.second; i++)
14338 enable_disable_bp_num_loc (bp_num, i, enable);
14339}
0d381245 14340
1900040c
MS
14341/* Set ignore-count of breakpoint number BPTNUM to COUNT.
14342 If from_tty is nonzero, it prints a message to that effect,
14343 which ends with a period (no newline). */
14344
c906108c 14345void
fba45db2 14346disable_breakpoint (struct breakpoint *bpt)
c906108c
SS
14347{
14348 /* Never disable a watchpoint scope breakpoint; we want to
14349 hit them when we leave scope so we can delete both the
14350 watchpoint and its scope breakpoint at that time. */
14351 if (bpt->type == bp_watchpoint_scope)
14352 return;
14353
b5de0fa7 14354 bpt->enable_state = bp_disabled;
c906108c 14355
b775012e
LM
14356 /* Mark breakpoint locations modified. */
14357 mark_breakpoint_modified (bpt);
14358
d248b706
KY
14359 if (target_supports_enable_disable_tracepoint ()
14360 && current_trace_status ()->running && is_tracepoint (bpt))
14361 {
14362 struct bp_location *location;
14363
14364 for (location = bpt->loc; location; location = location->next)
14365 target_disable_tracepoint (location);
14366 }
14367
44702360 14368 update_global_location_list (UGLL_DONT_INSERT);
c906108c 14369
8d3788bd 14370 observer_notify_breakpoint_modified (bpt);
c906108c
SS
14371}
14372
d0fe4701
XR
14373/* Enable or disable the breakpoint(s) or breakpoint location(s)
14374 specified in ARGS. ARGS may be in any of the formats handled by
14375 extract_bp_number_and_location. ENABLE specifies whether to enable
14376 or disable the breakpoints/locations. */
14377
c906108c 14378static void
d0fe4701 14379enable_disable_command (const char *args, int from_tty, bool enable)
c906108c 14380{
c906108c 14381 if (args == 0)
46c6471b
PA
14382 {
14383 struct breakpoint *bpt;
14384
14385 ALL_BREAKPOINTS (bpt)
14386 if (user_breakpoint_p (bpt))
d0fe4701
XR
14387 {
14388 if (enable)
14389 enable_breakpoint (bpt);
14390 else
14391 disable_breakpoint (bpt);
14392 }
46c6471b 14393 }
9eaabc75 14394 else
0d381245 14395 {
cb791d59 14396 std::string num = extract_arg (&args);
9eaabc75 14397
cb791d59 14398 while (!num.empty ())
d248b706 14399 {
d0fe4701 14400 std::pair<int, int> bp_num_range, bp_loc_range;
9eaabc75 14401
cc638e86
PA
14402 extract_bp_number_and_location (num, bp_num_range, bp_loc_range);
14403
14404 if (bp_loc_range.first == bp_loc_range.second
14405 && bp_loc_range.first == 0)
d0fe4701 14406 {
cc638e86
PA
14407 /* Handle breakpoint ids with formats 'x' or 'x-z'. */
14408 map_breakpoint_number_range (bp_num_range,
14409 enable
14410 ? enable_breakpoint
14411 : disable_breakpoint);
14412 }
14413 else
14414 {
14415 /* Handle breakpoint ids with formats 'x.y' or
14416 'x.y-z'. */
14417 enable_disable_breakpoint_location_range
14418 (bp_num_range.first, bp_loc_range, enable);
b775012e 14419 }
9eaabc75 14420 num = extract_arg (&args);
d248b706 14421 }
0d381245 14422 }
c906108c
SS
14423}
14424
d0fe4701
XR
14425/* The disable command disables the specified breakpoints/locations
14426 (or all defined breakpoints) so they're no longer effective in
14427 stopping the inferior. ARGS may be in any of the forms defined in
14428 extract_bp_number_and_location. */
14429
14430static void
14431disable_command (const char *args, int from_tty)
14432{
14433 enable_disable_command (args, from_tty, false);
14434}
14435
c906108c 14436static void
816338b5
SS
14437enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition,
14438 int count)
c906108c 14439{
afe38095 14440 int target_resources_ok;
c906108c
SS
14441
14442 if (bpt->type == bp_hardware_breakpoint)
14443 {
14444 int i;
c5aa993b 14445 i = hw_breakpoint_used_count ();
53a5351d 14446 target_resources_ok =
d92524f1 14447 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
53a5351d 14448 i + 1, 0);
c906108c 14449 if (target_resources_ok == 0)
8a3fe4f8 14450 error (_("No hardware breakpoint support in the target."));
c906108c 14451 else if (target_resources_ok < 0)
8a3fe4f8 14452 error (_("Hardware breakpoints used exceeds limit."));
c906108c
SS
14453 }
14454
cc60f2e3 14455 if (is_watchpoint (bpt))
c906108c 14456 {
d07205c2 14457 /* Initialize it just to avoid a GCC false warning. */
f486487f 14458 enum enable_state orig_enable_state = bp_disabled;
dde02812 14459
492d29ea 14460 TRY
c906108c 14461 {
3a5c3e22
PA
14462 struct watchpoint *w = (struct watchpoint *) bpt;
14463
1e718ff1
TJB
14464 orig_enable_state = bpt->enable_state;
14465 bpt->enable_state = bp_enabled;
3a5c3e22 14466 update_watchpoint (w, 1 /* reparse */);
c906108c 14467 }
492d29ea 14468 CATCH (e, RETURN_MASK_ALL)
c5aa993b 14469 {
1e718ff1 14470 bpt->enable_state = orig_enable_state;
dde02812
ES
14471 exception_fprintf (gdb_stderr, e, _("Cannot enable watchpoint %d: "),
14472 bpt->number);
14473 return;
c5aa993b 14474 }
492d29ea 14475 END_CATCH
c906108c 14476 }
0101ce28 14477
b775012e
LM
14478 bpt->enable_state = bp_enabled;
14479
14480 /* Mark breakpoint locations modified. */
14481 mark_breakpoint_modified (bpt);
14482
d248b706
KY
14483 if (target_supports_enable_disable_tracepoint ()
14484 && current_trace_status ()->running && is_tracepoint (bpt))
14485 {
14486 struct bp_location *location;
14487
14488 for (location = bpt->loc; location; location = location->next)
14489 target_enable_tracepoint (location);
14490 }
14491
b4c291bb 14492 bpt->disposition = disposition;
816338b5 14493 bpt->enable_count = count;
44702360 14494 update_global_location_list (UGLL_MAY_INSERT);
9c97429f 14495
8d3788bd 14496 observer_notify_breakpoint_modified (bpt);
c906108c
SS
14497}
14498
fe3f5fa8 14499
c906108c 14500void
fba45db2 14501enable_breakpoint (struct breakpoint *bpt)
c906108c 14502{
816338b5 14503 enable_breakpoint_disp (bpt, bpt->disposition, 0);
51be5b68
PA
14504}
14505
d0fe4701
XR
14506/* The enable command enables the specified breakpoints/locations (or
14507 all defined breakpoints) so they once again become (or continue to
14508 be) effective in stopping the inferior. ARGS may be in any of the
14509 forms defined in extract_bp_number_and_location. */
c906108c 14510
c906108c 14511static void
981a3fb3 14512enable_command (const char *args, int from_tty)
c906108c 14513{
d0fe4701 14514 enable_disable_command (args, from_tty, true);
c906108c
SS
14515}
14516
c906108c 14517static void
4495129a 14518enable_once_command (const char *args, int from_tty)
c906108c 14519{
48649e1b
TT
14520 map_breakpoint_numbers
14521 (args, [&] (breakpoint *b)
14522 {
14523 iterate_over_related_breakpoints
14524 (b, [&] (breakpoint *bpt)
14525 {
14526 enable_breakpoint_disp (bpt, disp_disable, 1);
14527 });
14528 });
816338b5
SS
14529}
14530
14531static void
4495129a 14532enable_count_command (const char *args, int from_tty)
816338b5 14533{
b9d61307
SM
14534 int count;
14535
14536 if (args == NULL)
14537 error_no_arg (_("hit count"));
14538
14539 count = get_number (&args);
816338b5 14540
48649e1b
TT
14541 map_breakpoint_numbers
14542 (args, [&] (breakpoint *b)
14543 {
14544 iterate_over_related_breakpoints
14545 (b, [&] (breakpoint *bpt)
14546 {
14547 enable_breakpoint_disp (bpt, disp_disable, count);
14548 });
14549 });
c906108c
SS
14550}
14551
c906108c 14552static void
4495129a 14553enable_delete_command (const char *args, int from_tty)
c906108c 14554{
48649e1b
TT
14555 map_breakpoint_numbers
14556 (args, [&] (breakpoint *b)
14557 {
14558 iterate_over_related_breakpoints
14559 (b, [&] (breakpoint *bpt)
14560 {
14561 enable_breakpoint_disp (bpt, disp_del, 1);
14562 });
14563 });
c906108c
SS
14564}
14565\f
fa8d40ab 14566static void
981a3fb3 14567set_breakpoint_cmd (const char *args, int from_tty)
fa8d40ab
JJ
14568{
14569}
14570
14571static void
981a3fb3 14572show_breakpoint_cmd (const char *args, int from_tty)
fa8d40ab
JJ
14573{
14574}
14575
1f3b5d1b
PP
14576/* Invalidate last known value of any hardware watchpoint if
14577 the memory which that value represents has been written to by
14578 GDB itself. */
14579
14580static void
8de0566d
YQ
14581invalidate_bp_value_on_memory_change (struct inferior *inferior,
14582 CORE_ADDR addr, ssize_t len,
1f3b5d1b
PP
14583 const bfd_byte *data)
14584{
14585 struct breakpoint *bp;
14586
14587 ALL_BREAKPOINTS (bp)
14588 if (bp->enable_state == bp_enabled
3a5c3e22 14589 && bp->type == bp_hardware_watchpoint)
1f3b5d1b 14590 {
3a5c3e22 14591 struct watchpoint *wp = (struct watchpoint *) bp;
1f3b5d1b 14592
3a5c3e22
PA
14593 if (wp->val_valid && wp->val)
14594 {
14595 struct bp_location *loc;
14596
14597 for (loc = bp->loc; loc != NULL; loc = loc->next)
14598 if (loc->loc_type == bp_loc_hardware_watchpoint
14599 && loc->address + loc->length > addr
14600 && addr + len > loc->address)
14601 {
14602 value_free (wp->val);
14603 wp->val = NULL;
14604 wp->val_valid = 0;
14605 }
14606 }
1f3b5d1b
PP
14607 }
14608}
14609
8181d85f
DJ
14610/* Create and insert a breakpoint for software single step. */
14611
14612void
6c95b8df 14613insert_single_step_breakpoint (struct gdbarch *gdbarch,
accd0bcd 14614 const address_space *aspace,
4a64f543 14615 CORE_ADDR next_pc)
8181d85f 14616{
7c16b83e
PA
14617 struct thread_info *tp = inferior_thread ();
14618 struct symtab_and_line sal;
14619 CORE_ADDR pc = next_pc;
8181d85f 14620
34b7e8a6
PA
14621 if (tp->control.single_step_breakpoints == NULL)
14622 {
14623 tp->control.single_step_breakpoints
5d5658a1 14624 = new_single_step_breakpoint (tp->global_num, gdbarch);
34b7e8a6 14625 }
8181d85f 14626
7c16b83e
PA
14627 sal = find_pc_line (pc, 0);
14628 sal.pc = pc;
14629 sal.section = find_pc_overlay (pc);
14630 sal.explicit_pc = 1;
34b7e8a6 14631 add_location_to_breakpoint (tp->control.single_step_breakpoints, &sal);
8181d85f 14632
7c16b83e 14633 update_global_location_list (UGLL_INSERT);
8181d85f
DJ
14634}
14635
93f9a11f
YQ
14636/* Insert single step breakpoints according to the current state. */
14637
14638int
14639insert_single_step_breakpoints (struct gdbarch *gdbarch)
14640{
f5ea389a 14641 struct regcache *regcache = get_current_regcache ();
a0ff9e1a 14642 std::vector<CORE_ADDR> next_pcs;
93f9a11f 14643
f5ea389a 14644 next_pcs = gdbarch_software_single_step (gdbarch, regcache);
93f9a11f 14645
a0ff9e1a 14646 if (!next_pcs.empty ())
93f9a11f 14647 {
f5ea389a 14648 struct frame_info *frame = get_current_frame ();
8b86c959 14649 const address_space *aspace = get_frame_address_space (frame);
93f9a11f 14650
a0ff9e1a 14651 for (CORE_ADDR pc : next_pcs)
93f9a11f
YQ
14652 insert_single_step_breakpoint (gdbarch, aspace, pc);
14653
93f9a11f
YQ
14654 return 1;
14655 }
14656 else
14657 return 0;
14658}
14659
34b7e8a6 14660/* See breakpoint.h. */
f02253f1
HZ
14661
14662int
7c16b83e 14663breakpoint_has_location_inserted_here (struct breakpoint *bp,
accd0bcd 14664 const address_space *aspace,
7c16b83e 14665 CORE_ADDR pc)
1aafd4da 14666{
7c16b83e 14667 struct bp_location *loc;
1aafd4da 14668
7c16b83e
PA
14669 for (loc = bp->loc; loc != NULL; loc = loc->next)
14670 if (loc->inserted
14671 && breakpoint_location_address_match (loc, aspace, pc))
14672 return 1;
1aafd4da 14673
7c16b83e 14674 return 0;
ef370185
JB
14675}
14676
14677/* Check whether a software single-step breakpoint is inserted at
14678 PC. */
14679
14680int
accd0bcd 14681single_step_breakpoint_inserted_here_p (const address_space *aspace,
ef370185
JB
14682 CORE_ADDR pc)
14683{
34b7e8a6
PA
14684 struct breakpoint *bpt;
14685
14686 ALL_BREAKPOINTS (bpt)
14687 {
14688 if (bpt->type == bp_single_step
14689 && breakpoint_has_location_inserted_here (bpt, aspace, pc))
14690 return 1;
14691 }
14692 return 0;
1aafd4da
UW
14693}
14694
1042e4c0
SS
14695/* Tracepoint-specific operations. */
14696
14697/* Set tracepoint count to NUM. */
14698static void
14699set_tracepoint_count (int num)
14700{
14701 tracepoint_count = num;
4fa62494 14702 set_internalvar_integer (lookup_internalvar ("tpnum"), num);
1042e4c0
SS
14703}
14704
70221824 14705static void
0b39b52e 14706trace_command (const char *arg, int from_tty)
1042e4c0 14707{
55aa24fb 14708 struct breakpoint_ops *ops;
55aa24fb 14709
ffc2605c
TT
14710 event_location_up location = string_to_event_location (&arg,
14711 current_language);
5b56227b 14712 if (location != NULL
ffc2605c 14713 && event_location_type (location.get ()) == PROBE_LOCATION)
55aa24fb
SDJ
14714 ops = &tracepoint_probe_breakpoint_ops;
14715 else
14716 ops = &tracepoint_breakpoint_ops;
14717
558a9d82 14718 create_breakpoint (get_current_arch (),
ffc2605c 14719 location.get (),
f00aae0f 14720 NULL, 0, arg, 1 /* parse arg */,
558a9d82
YQ
14721 0 /* tempflag */,
14722 bp_tracepoint /* type_wanted */,
14723 0 /* Ignore count */,
14724 pending_break_support,
14725 ops,
14726 from_tty,
14727 1 /* enabled */,
14728 0 /* internal */, 0);
1042e4c0
SS
14729}
14730
70221824 14731static void
0b39b52e 14732ftrace_command (const char *arg, int from_tty)
7a697b8d 14733{
ffc2605c
TT
14734 event_location_up location = string_to_event_location (&arg,
14735 current_language);
558a9d82 14736 create_breakpoint (get_current_arch (),
ffc2605c 14737 location.get (),
f00aae0f 14738 NULL, 0, arg, 1 /* parse arg */,
558a9d82
YQ
14739 0 /* tempflag */,
14740 bp_fast_tracepoint /* type_wanted */,
14741 0 /* Ignore count */,
14742 pending_break_support,
14743 &tracepoint_breakpoint_ops,
14744 from_tty,
14745 1 /* enabled */,
14746 0 /* internal */, 0);
0fb4aa4b
PA
14747}
14748
14749/* strace command implementation. Creates a static tracepoint. */
14750
70221824 14751static void
0b39b52e 14752strace_command (const char *arg, int from_tty)
0fb4aa4b 14753{
983af33b 14754 struct breakpoint_ops *ops;
ffc2605c 14755 event_location_up location;
983af33b
SDJ
14756
14757 /* Decide if we are dealing with a static tracepoint marker (`-m'),
14758 or with a normal static tracepoint. */
61012eef 14759 if (arg && startswith (arg, "-m") && isspace (arg[2]))
f00aae0f
KS
14760 {
14761 ops = &strace_marker_breakpoint_ops;
14762 location = new_linespec_location (&arg);
14763 }
983af33b 14764 else
f00aae0f
KS
14765 {
14766 ops = &tracepoint_breakpoint_ops;
14767 location = string_to_event_location (&arg, current_language);
14768 }
983af33b 14769
558a9d82 14770 create_breakpoint (get_current_arch (),
ffc2605c 14771 location.get (),
f00aae0f 14772 NULL, 0, arg, 1 /* parse arg */,
558a9d82
YQ
14773 0 /* tempflag */,
14774 bp_static_tracepoint /* type_wanted */,
14775 0 /* Ignore count */,
14776 pending_break_support,
14777 ops,
14778 from_tty,
14779 1 /* enabled */,
14780 0 /* internal */, 0);
7a697b8d
SS
14781}
14782
409873ef
SS
14783/* Set up a fake reader function that gets command lines from a linked
14784 list that was acquired during tracepoint uploading. */
14785
14786static struct uploaded_tp *this_utp;
3149d8c1 14787static int next_cmd;
409873ef
SS
14788
14789static char *
14790read_uploaded_action (void)
14791{
14792 char *rslt;
14793
3149d8c1 14794 VEC_iterate (char_ptr, this_utp->cmd_strings, next_cmd, rslt);
409873ef 14795
3149d8c1 14796 next_cmd++;
409873ef
SS
14797
14798 return rslt;
14799}
14800
00bf0b85
SS
14801/* Given information about a tracepoint as recorded on a target (which
14802 can be either a live system or a trace file), attempt to create an
14803 equivalent GDB tracepoint. This is not a reliable process, since
14804 the target does not necessarily have all the information used when
14805 the tracepoint was originally defined. */
14806
d9b3f62e 14807struct tracepoint *
00bf0b85 14808create_tracepoint_from_upload (struct uploaded_tp *utp)
d5551862 14809{
f2fc3015
TT
14810 const char *addr_str;
14811 char small_buf[100];
d9b3f62e 14812 struct tracepoint *tp;
fd9b8c24 14813
409873ef
SS
14814 if (utp->at_string)
14815 addr_str = utp->at_string;
14816 else
14817 {
14818 /* In the absence of a source location, fall back to raw
14819 address. Since there is no way to confirm that the address
14820 means the same thing as when the trace was started, warn the
14821 user. */
3e43a32a
MS
14822 warning (_("Uploaded tracepoint %d has no "
14823 "source location, using raw address"),
409873ef 14824 utp->number);
8c042590 14825 xsnprintf (small_buf, sizeof (small_buf), "*%s", hex_string (utp->addr));
409873ef
SS
14826 addr_str = small_buf;
14827 }
14828
14829 /* There's not much we can do with a sequence of bytecodes. */
14830 if (utp->cond && !utp->cond_string)
3e43a32a
MS
14831 warning (_("Uploaded tracepoint %d condition "
14832 "has no source form, ignoring it"),
409873ef 14833 utp->number);
d5551862 14834
ffc2605c
TT
14835 event_location_up location = string_to_event_location (&addr_str,
14836 current_language);
8cdf0e15 14837 if (!create_breakpoint (get_current_arch (),
ffc2605c 14838 location.get (),
f00aae0f 14839 utp->cond_string, -1, addr_str,
e7e0cddf 14840 0 /* parse cond/thread */,
8cdf0e15 14841 0 /* tempflag */,
0fb4aa4b 14842 utp->type /* type_wanted */,
8cdf0e15
VP
14843 0 /* Ignore count */,
14844 pending_break_support,
348d480f 14845 &tracepoint_breakpoint_ops,
8cdf0e15 14846 0 /* from_tty */,
84f4c1fe 14847 utp->enabled /* enabled */,
44f238bb
PA
14848 0 /* internal */,
14849 CREATE_BREAKPOINT_FLAGS_INSERTED))
ffc2605c 14850 return NULL;
fd9b8c24 14851
409873ef 14852 /* Get the tracepoint we just created. */
fd9b8c24
PA
14853 tp = get_tracepoint (tracepoint_count);
14854 gdb_assert (tp != NULL);
d5551862 14855
00bf0b85
SS
14856 if (utp->pass > 0)
14857 {
8c042590 14858 xsnprintf (small_buf, sizeof (small_buf), "%d %d", utp->pass,
c1fc2657 14859 tp->number);
00bf0b85 14860
409873ef 14861 trace_pass_command (small_buf, 0);
00bf0b85
SS
14862 }
14863
409873ef
SS
14864 /* If we have uploaded versions of the original commands, set up a
14865 special-purpose "reader" function and call the usual command line
14866 reader, then pass the result to the breakpoint command-setting
14867 function. */
3149d8c1 14868 if (!VEC_empty (char_ptr, utp->cmd_strings))
00bf0b85 14869 {
93921405 14870 command_line_up cmd_list;
00bf0b85 14871
409873ef 14872 this_utp = utp;
3149d8c1 14873 next_cmd = 0;
d5551862 14874
409873ef
SS
14875 cmd_list = read_command_lines_1 (read_uploaded_action, 1, NULL, NULL);
14876
c1fc2657 14877 breakpoint_set_commands (tp, std::move (cmd_list));
00bf0b85 14878 }
3149d8c1
SS
14879 else if (!VEC_empty (char_ptr, utp->actions)
14880 || !VEC_empty (char_ptr, utp->step_actions))
3e43a32a
MS
14881 warning (_("Uploaded tracepoint %d actions "
14882 "have no source form, ignoring them"),
409873ef 14883 utp->number);
00bf0b85 14884
f196051f 14885 /* Copy any status information that might be available. */
c1fc2657 14886 tp->hit_count = utp->hit_count;
f196051f
SS
14887 tp->traceframe_usage = utp->traceframe_usage;
14888
00bf0b85 14889 return tp;
d9b3f62e 14890}
00bf0b85 14891
1042e4c0
SS
14892/* Print information on tracepoint number TPNUM_EXP, or all if
14893 omitted. */
14894
14895static void
1d12d88f 14896info_tracepoints_command (const char *args, int from_tty)
1042e4c0 14897{
79a45e25 14898 struct ui_out *uiout = current_uiout;
e5a67952 14899 int num_printed;
1042e4c0 14900
e5a67952 14901 num_printed = breakpoint_1 (args, 0, is_tracepoint);
d77f58be
SS
14902
14903 if (num_printed == 0)
1042e4c0 14904 {
e5a67952 14905 if (args == NULL || *args == '\0')
112e8700 14906 uiout->message ("No tracepoints.\n");
d77f58be 14907 else
112e8700 14908 uiout->message ("No tracepoint matching '%s'.\n", args);
1042e4c0 14909 }
ad443146
SS
14910
14911 default_collect_info ();
1042e4c0
SS
14912}
14913
4a64f543 14914/* The 'enable trace' command enables tracepoints.
1042e4c0
SS
14915 Not supported by all targets. */
14916static void
5fed81ff 14917enable_trace_command (const char *args, int from_tty)
1042e4c0
SS
14918{
14919 enable_command (args, from_tty);
14920}
14921
4a64f543 14922/* The 'disable trace' command disables tracepoints.
1042e4c0
SS
14923 Not supported by all targets. */
14924static void
5fed81ff 14925disable_trace_command (const char *args, int from_tty)
1042e4c0
SS
14926{
14927 disable_command (args, from_tty);
14928}
14929
4a64f543 14930/* Remove a tracepoint (or all if no argument). */
1042e4c0 14931static void
4495129a 14932delete_trace_command (const char *arg, int from_tty)
1042e4c0 14933{
35df4500 14934 struct breakpoint *b, *b_tmp;
1042e4c0
SS
14935
14936 dont_repeat ();
14937
14938 if (arg == 0)
14939 {
14940 int breaks_to_delete = 0;
14941
14942 /* Delete all breakpoints if no argument.
14943 Do not delete internal or call-dummy breakpoints, these
4a64f543
MS
14944 have to be deleted with an explicit breakpoint number
14945 argument. */
1042e4c0 14946 ALL_TRACEPOINTS (b)
46c6471b 14947 if (is_tracepoint (b) && user_breakpoint_p (b))
1042e4c0
SS
14948 {
14949 breaks_to_delete = 1;
14950 break;
14951 }
1042e4c0
SS
14952
14953 /* Ask user only if there are some breakpoints to delete. */
14954 if (!from_tty
14955 || (breaks_to_delete && query (_("Delete all tracepoints? "))))
14956 {
35df4500 14957 ALL_BREAKPOINTS_SAFE (b, b_tmp)
46c6471b 14958 if (is_tracepoint (b) && user_breakpoint_p (b))
1042e4c0 14959 delete_breakpoint (b);
1042e4c0
SS
14960 }
14961 }
14962 else
48649e1b
TT
14963 map_breakpoint_numbers
14964 (arg, [&] (breakpoint *b)
14965 {
14966 iterate_over_related_breakpoints (b, delete_breakpoint);
14967 });
1042e4c0
SS
14968}
14969
197f0a60
TT
14970/* Helper function for trace_pass_command. */
14971
14972static void
d9b3f62e 14973trace_pass_set_count (struct tracepoint *tp, int count, int from_tty)
197f0a60 14974{
d9b3f62e 14975 tp->pass_count = count;
c1fc2657 14976 observer_notify_breakpoint_modified (tp);
197f0a60
TT
14977 if (from_tty)
14978 printf_filtered (_("Setting tracepoint %d's passcount to %d\n"),
c1fc2657 14979 tp->number, count);
197f0a60
TT
14980}
14981
1042e4c0
SS
14982/* Set passcount for tracepoint.
14983
14984 First command argument is passcount, second is tracepoint number.
14985 If tracepoint number omitted, apply to most recently defined.
14986 Also accepts special argument "all". */
14987
14988static void
0b39b52e 14989trace_pass_command (const char *args, int from_tty)
1042e4c0 14990{
d9b3f62e 14991 struct tracepoint *t1;
0b39b52e 14992 ULONGEST count;
1042e4c0
SS
14993
14994 if (args == 0 || *args == 0)
3e43a32a
MS
14995 error (_("passcount command requires an "
14996 "argument (count + optional TP num)"));
1042e4c0 14997
0b39b52e 14998 count = strtoulst (args, &args, 10); /* Count comes first, then TP num. */
1042e4c0 14999
529480d0 15000 args = skip_spaces (args);
1042e4c0
SS
15001 if (*args && strncasecmp (args, "all", 3) == 0)
15002 {
d9b3f62e
PA
15003 struct breakpoint *b;
15004
1042e4c0 15005 args += 3; /* Skip special argument "all". */
1042e4c0
SS
15006 if (*args)
15007 error (_("Junk at end of arguments."));
1042e4c0 15008
d9b3f62e 15009 ALL_TRACEPOINTS (b)
197f0a60 15010 {
d9b3f62e 15011 t1 = (struct tracepoint *) b;
197f0a60
TT
15012 trace_pass_set_count (t1, count, from_tty);
15013 }
15014 }
15015 else if (*args == '\0')
1042e4c0 15016 {
5fa1d40e 15017 t1 = get_tracepoint_by_number (&args, NULL);
1042e4c0 15018 if (t1)
197f0a60
TT
15019 trace_pass_set_count (t1, count, from_tty);
15020 }
15021 else
15022 {
bfd28288
PA
15023 number_or_range_parser parser (args);
15024 while (!parser.finished ())
1042e4c0 15025 {
bfd28288 15026 t1 = get_tracepoint_by_number (&args, &parser);
197f0a60
TT
15027 if (t1)
15028 trace_pass_set_count (t1, count, from_tty);
1042e4c0
SS
15029 }
15030 }
1042e4c0
SS
15031}
15032
d9b3f62e 15033struct tracepoint *
1042e4c0
SS
15034get_tracepoint (int num)
15035{
15036 struct breakpoint *t;
15037
15038 ALL_TRACEPOINTS (t)
15039 if (t->number == num)
d9b3f62e 15040 return (struct tracepoint *) t;
1042e4c0
SS
15041
15042 return NULL;
15043}
15044
d5551862
SS
15045/* Find the tracepoint with the given target-side number (which may be
15046 different from the tracepoint number after disconnecting and
15047 reconnecting). */
15048
d9b3f62e 15049struct tracepoint *
d5551862
SS
15050get_tracepoint_by_number_on_target (int num)
15051{
d9b3f62e 15052 struct breakpoint *b;
d5551862 15053
d9b3f62e
PA
15054 ALL_TRACEPOINTS (b)
15055 {
15056 struct tracepoint *t = (struct tracepoint *) b;
15057
15058 if (t->number_on_target == num)
15059 return t;
15060 }
d5551862
SS
15061
15062 return NULL;
15063}
15064
1042e4c0 15065/* Utility: parse a tracepoint number and look it up in the list.
197f0a60 15066 If STATE is not NULL, use, get_number_or_range_state and ignore ARG.
5fa1d40e
YQ
15067 If the argument is missing, the most recent tracepoint
15068 (tracepoint_count) is returned. */
15069
d9b3f62e 15070struct tracepoint *
0b39b52e 15071get_tracepoint_by_number (const char **arg,
bfd28288 15072 number_or_range_parser *parser)
1042e4c0 15073{
1042e4c0
SS
15074 struct breakpoint *t;
15075 int tpnum;
0b39b52e 15076 const char *instring = arg == NULL ? NULL : *arg;
1042e4c0 15077
bfd28288 15078 if (parser != NULL)
197f0a60 15079 {
bfd28288
PA
15080 gdb_assert (!parser->finished ());
15081 tpnum = parser->get_number ();
197f0a60
TT
15082 }
15083 else if (arg == NULL || *arg == NULL || ! **arg)
5fa1d40e 15084 tpnum = tracepoint_count;
1042e4c0 15085 else
197f0a60 15086 tpnum = get_number (arg);
1042e4c0
SS
15087
15088 if (tpnum <= 0)
15089 {
15090 if (instring && *instring)
15091 printf_filtered (_("bad tracepoint number at or near '%s'\n"),
15092 instring);
15093 else
5fa1d40e 15094 printf_filtered (_("No previous tracepoint\n"));
1042e4c0
SS
15095 return NULL;
15096 }
15097
15098 ALL_TRACEPOINTS (t)
15099 if (t->number == tpnum)
15100 {
d9b3f62e 15101 return (struct tracepoint *) t;
1042e4c0
SS
15102 }
15103
1042e4c0
SS
15104 printf_unfiltered ("No tracepoint number %d.\n", tpnum);
15105 return NULL;
15106}
15107
d9b3f62e
PA
15108void
15109print_recreate_thread (struct breakpoint *b, struct ui_file *fp)
15110{
15111 if (b->thread != -1)
15112 fprintf_unfiltered (fp, " thread %d", b->thread);
15113
15114 if (b->task != 0)
15115 fprintf_unfiltered (fp, " task %d", b->task);
15116
15117 fprintf_unfiltered (fp, "\n");
15118}
15119
6149aea9
PA
15120/* Save information on user settable breakpoints (watchpoints, etc) to
15121 a new script file named FILENAME. If FILTER is non-NULL, call it
15122 on each breakpoint and only include the ones for which it returns
15123 non-zero. */
15124
1042e4c0 15125static void
4495129a 15126save_breakpoints (const char *filename, int from_tty,
6149aea9 15127 int (*filter) (const struct breakpoint *))
1042e4c0
SS
15128{
15129 struct breakpoint *tp;
6149aea9 15130 int any = 0;
6149aea9 15131 int extra_trace_bits = 0;
1042e4c0 15132
6149aea9
PA
15133 if (filename == 0 || *filename == 0)
15134 error (_("Argument required (file name in which to save)"));
1042e4c0
SS
15135
15136 /* See if we have anything to save. */
6149aea9 15137 ALL_BREAKPOINTS (tp)
1042e4c0 15138 {
6149aea9 15139 /* Skip internal and momentary breakpoints. */
09d682a4 15140 if (!user_breakpoint_p (tp))
6149aea9
PA
15141 continue;
15142
15143 /* If we have a filter, only save the breakpoints it accepts. */
15144 if (filter && !filter (tp))
15145 continue;
15146
15147 any = 1;
15148
15149 if (is_tracepoint (tp))
15150 {
15151 extra_trace_bits = 1;
15152
15153 /* We can stop searching. */
15154 break;
15155 }
1042e4c0 15156 }
6149aea9
PA
15157
15158 if (!any)
1042e4c0 15159 {
6149aea9 15160 warning (_("Nothing to save."));
1042e4c0
SS
15161 return;
15162 }
15163
ee0c3293 15164 gdb::unique_xmalloc_ptr<char> expanded_filename (tilde_expand (filename));
d7e74731
PA
15165
15166 stdio_file fp;
15167
ee0c3293 15168 if (!fp.open (expanded_filename.get (), "w"))
6149aea9 15169 error (_("Unable to open file '%s' for saving (%s)"),
ee0c3293 15170 expanded_filename.get (), safe_strerror (errno));
8bf6485c 15171
6149aea9 15172 if (extra_trace_bits)
d7e74731 15173 save_trace_state_variables (&fp);
8bf6485c 15174
6149aea9 15175 ALL_BREAKPOINTS (tp)
1042e4c0 15176 {
6149aea9 15177 /* Skip internal and momentary breakpoints. */
09d682a4 15178 if (!user_breakpoint_p (tp))
6149aea9 15179 continue;
8bf6485c 15180
6149aea9
PA
15181 /* If we have a filter, only save the breakpoints it accepts. */
15182 if (filter && !filter (tp))
15183 continue;
15184
d7e74731 15185 tp->ops->print_recreate (tp, &fp);
1042e4c0 15186
6149aea9
PA
15187 /* Note, we can't rely on tp->number for anything, as we can't
15188 assume the recreated breakpoint numbers will match. Use $bpnum
15189 instead. */
15190
15191 if (tp->cond_string)
d7e74731 15192 fp.printf (" condition $bpnum %s\n", tp->cond_string);
6149aea9
PA
15193
15194 if (tp->ignore_count)
d7e74731 15195 fp.printf (" ignore $bpnum %d\n", tp->ignore_count);
6149aea9 15196
2d9442cc 15197 if (tp->type != bp_dprintf && tp->commands)
1042e4c0 15198 {
d7e74731 15199 fp.puts (" commands\n");
a7bdde9e 15200
d7e74731 15201 current_uiout->redirect (&fp);
492d29ea 15202 TRY
1042e4c0 15203 {
d1b0a7bf 15204 print_command_lines (current_uiout, tp->commands.get (), 2);
a7bdde9e 15205 }
492d29ea
PA
15206 CATCH (ex, RETURN_MASK_ALL)
15207 {
112e8700 15208 current_uiout->redirect (NULL);
492d29ea
PA
15209 throw_exception (ex);
15210 }
15211 END_CATCH
1042e4c0 15212
112e8700 15213 current_uiout->redirect (NULL);
d7e74731 15214 fp.puts (" end\n");
1042e4c0 15215 }
6149aea9
PA
15216
15217 if (tp->enable_state == bp_disabled)
d7e74731 15218 fp.puts ("disable $bpnum\n");
6149aea9
PA
15219
15220 /* If this is a multi-location breakpoint, check if the locations
15221 should be individually disabled. Watchpoint locations are
15222 special, and not user visible. */
15223 if (!is_watchpoint (tp) && tp->loc && tp->loc->next)
15224 {
15225 struct bp_location *loc;
15226 int n = 1;
15227
15228 for (loc = tp->loc; loc != NULL; loc = loc->next, n++)
15229 if (!loc->enabled)
d7e74731 15230 fp.printf ("disable $bpnum.%d\n", n);
6149aea9 15231 }
1042e4c0 15232 }
8bf6485c 15233
6149aea9 15234 if (extra_trace_bits && *default_collect)
d7e74731 15235 fp.printf ("set default-collect %s\n", default_collect);
8bf6485c 15236
1042e4c0 15237 if (from_tty)
ee0c3293 15238 printf_filtered (_("Saved to file '%s'.\n"), expanded_filename.get ());
6149aea9
PA
15239}
15240
15241/* The `save breakpoints' command. */
15242
15243static void
4495129a 15244save_breakpoints_command (const char *args, int from_tty)
6149aea9
PA
15245{
15246 save_breakpoints (args, from_tty, NULL);
15247}
15248
15249/* The `save tracepoints' command. */
15250
15251static void
4495129a 15252save_tracepoints_command (const char *args, int from_tty)
6149aea9
PA
15253{
15254 save_breakpoints (args, from_tty, is_tracepoint);
1042e4c0
SS
15255}
15256
15257/* Create a vector of all tracepoints. */
15258
15259VEC(breakpoint_p) *
eeae04df 15260all_tracepoints (void)
1042e4c0
SS
15261{
15262 VEC(breakpoint_p) *tp_vec = 0;
15263 struct breakpoint *tp;
15264
15265 ALL_TRACEPOINTS (tp)
15266 {
15267 VEC_safe_push (breakpoint_p, tp_vec, tp);
15268 }
15269
15270 return tp_vec;
15271}
15272
c906108c 15273\f
629500fa
KS
15274/* This help string is used to consolidate all the help string for specifying
15275 locations used by several commands. */
15276
15277#define LOCATION_HELP_STRING \
15278"Linespecs are colon-separated lists of location parameters, such as\n\
15279source filename, function name, label name, and line number.\n\
15280Example: To specify the start of a label named \"the_top\" in the\n\
15281function \"fact\" in the file \"factorial.c\", use\n\
15282\"factorial.c:fact:the_top\".\n\
15283\n\
15284Address locations begin with \"*\" and specify an exact address in the\n\
15285program. Example: To specify the fourth byte past the start function\n\
15286\"main\", use \"*main + 4\".\n\
15287\n\
15288Explicit locations are similar to linespecs but use an option/argument\n\
15289syntax to specify location parameters.\n\
15290Example: To specify the start of the label named \"the_top\" in the\n\
15291function \"fact\" in the file \"factorial.c\", use \"-source factorial.c\n\
15292-function fact -label the_top\".\n"
15293
4a64f543
MS
15294/* This help string is used for the break, hbreak, tbreak and thbreak
15295 commands. It is defined as a macro to prevent duplication.
15296 COMMAND should be a string constant containing the name of the
15297 command. */
629500fa 15298
31e2b00f 15299#define BREAK_ARGS_HELP(command) \
fb7b5af4
SDJ
15300command" [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] [if CONDITION]\n\
15301PROBE_MODIFIER shall be present if the command is to be placed in a\n\
15302probe point. Accepted values are `-probe' (for a generic, automatically\n\
d4777acb
JM
15303guessed probe type), `-probe-stap' (for a SystemTap probe) or \n\
15304`-probe-dtrace' (for a DTrace probe).\n\
629500fa
KS
15305LOCATION may be a linespec, address, or explicit location as described\n\
15306below.\n\
15307\n\
dc10affe
PA
15308With no LOCATION, uses current execution address of the selected\n\
15309stack frame. This is useful for breaking on return to a stack frame.\n\
31e2b00f
AS
15310\n\
15311THREADNUM is the number from \"info threads\".\n\
15312CONDITION is a boolean expression.\n\
629500fa 15313\n" LOCATION_HELP_STRING "\n\
d41c0fc8
PA
15314Multiple breakpoints at one place are permitted, and useful if their\n\
15315conditions are different.\n\
31e2b00f
AS
15316\n\
15317Do \"help breakpoints\" for info on other commands dealing with breakpoints."
15318
44feb3ce
TT
15319/* List of subcommands for "catch". */
15320static struct cmd_list_element *catch_cmdlist;
15321
15322/* List of subcommands for "tcatch". */
15323static struct cmd_list_element *tcatch_cmdlist;
15324
9ac4176b 15325void
a121b7c1 15326add_catch_command (const char *name, const char *docstring,
eb4c3f4a 15327 cmd_const_sfunc_ftype *sfunc,
625e8578 15328 completer_ftype *completer,
44feb3ce
TT
15329 void *user_data_catch,
15330 void *user_data_tcatch)
15331{
15332 struct cmd_list_element *command;
15333
0450cc4c 15334 command = add_cmd (name, class_breakpoint, docstring,
44feb3ce
TT
15335 &catch_cmdlist);
15336 set_cmd_sfunc (command, sfunc);
15337 set_cmd_context (command, user_data_catch);
a96d9b2e 15338 set_cmd_completer (command, completer);
44feb3ce 15339
0450cc4c 15340 command = add_cmd (name, class_breakpoint, docstring,
44feb3ce
TT
15341 &tcatch_cmdlist);
15342 set_cmd_sfunc (command, sfunc);
15343 set_cmd_context (command, user_data_tcatch);
a96d9b2e 15344 set_cmd_completer (command, completer);
44feb3ce
TT
15345}
15346
6149aea9 15347static void
981a3fb3 15348save_command (const char *arg, int from_tty)
6149aea9 15349{
3e43a32a
MS
15350 printf_unfiltered (_("\"save\" must be followed by "
15351 "the name of a save subcommand.\n"));
635c7e8a 15352 help_list (save_cmdlist, "save ", all_commands, gdb_stdout);
6149aea9
PA
15353}
15354
84f4c1fe
PM
15355struct breakpoint *
15356iterate_over_breakpoints (int (*callback) (struct breakpoint *, void *),
15357 void *data)
15358{
35df4500 15359 struct breakpoint *b, *b_tmp;
84f4c1fe 15360
35df4500 15361 ALL_BREAKPOINTS_SAFE (b, b_tmp)
84f4c1fe
PM
15362 {
15363 if ((*callback) (b, data))
15364 return b;
15365 }
15366
15367 return NULL;
15368}
15369
0574c78f
GB
15370/* Zero if any of the breakpoint's locations could be a location where
15371 functions have been inlined, nonzero otherwise. */
15372
15373static int
15374is_non_inline_function (struct breakpoint *b)
15375{
15376 /* The shared library event breakpoint is set on the address of a
15377 non-inline function. */
15378 if (b->type == bp_shlib_event)
15379 return 1;
15380
15381 return 0;
15382}
15383
15384/* Nonzero if the specified PC cannot be a location where functions
15385 have been inlined. */
15386
15387int
accd0bcd 15388pc_at_non_inline_function (const address_space *aspace, CORE_ADDR pc,
09ac7c10 15389 const struct target_waitstatus *ws)
0574c78f
GB
15390{
15391 struct breakpoint *b;
15392 struct bp_location *bl;
15393
15394 ALL_BREAKPOINTS (b)
15395 {
15396 if (!is_non_inline_function (b))
15397 continue;
15398
15399 for (bl = b->loc; bl != NULL; bl = bl->next)
15400 {
15401 if (!bl->shlib_disabled
09ac7c10 15402 && bpstat_check_location (bl, aspace, pc, ws))
0574c78f
GB
15403 return 1;
15404 }
15405 }
15406
15407 return 0;
15408}
15409
2f202fde
JK
15410/* Remove any references to OBJFILE which is going to be freed. */
15411
15412void
15413breakpoint_free_objfile (struct objfile *objfile)
15414{
15415 struct bp_location **locp, *loc;
15416
15417 ALL_BP_LOCATIONS (loc, locp)
eb822aa6 15418 if (loc->symtab != NULL && SYMTAB_OBJFILE (loc->symtab) == objfile)
2f202fde
JK
15419 loc->symtab = NULL;
15420}
15421
2060206e
PA
15422void
15423initialize_breakpoint_ops (void)
15424{
15425 static int initialized = 0;
15426
15427 struct breakpoint_ops *ops;
15428
15429 if (initialized)
15430 return;
15431 initialized = 1;
15432
15433 /* The breakpoint_ops structure to be inherit by all kinds of
15434 breakpoints (real breakpoints, i.e., user "break" breakpoints,
15435 internal and momentary breakpoints, etc.). */
15436 ops = &bkpt_base_breakpoint_ops;
15437 *ops = base_breakpoint_ops;
15438 ops->re_set = bkpt_re_set;
15439 ops->insert_location = bkpt_insert_location;
15440 ops->remove_location = bkpt_remove_location;
15441 ops->breakpoint_hit = bkpt_breakpoint_hit;
5f700d83 15442 ops->create_sals_from_location = bkpt_create_sals_from_location;
983af33b 15443 ops->create_breakpoints_sal = bkpt_create_breakpoints_sal;
5f700d83 15444 ops->decode_location = bkpt_decode_location;
2060206e
PA
15445
15446 /* The breakpoint_ops structure to be used in regular breakpoints. */
15447 ops = &bkpt_breakpoint_ops;
15448 *ops = bkpt_base_breakpoint_ops;
15449 ops->re_set = bkpt_re_set;
15450 ops->resources_needed = bkpt_resources_needed;
15451 ops->print_it = bkpt_print_it;
15452 ops->print_mention = bkpt_print_mention;
15453 ops->print_recreate = bkpt_print_recreate;
15454
15455 /* Ranged breakpoints. */
15456 ops = &ranged_breakpoint_ops;
15457 *ops = bkpt_breakpoint_ops;
15458 ops->breakpoint_hit = breakpoint_hit_ranged_breakpoint;
15459 ops->resources_needed = resources_needed_ranged_breakpoint;
15460 ops->print_it = print_it_ranged_breakpoint;
15461 ops->print_one = print_one_ranged_breakpoint;
15462 ops->print_one_detail = print_one_detail_ranged_breakpoint;
15463 ops->print_mention = print_mention_ranged_breakpoint;
15464 ops->print_recreate = print_recreate_ranged_breakpoint;
15465
15466 /* Internal breakpoints. */
15467 ops = &internal_breakpoint_ops;
15468 *ops = bkpt_base_breakpoint_ops;
15469 ops->re_set = internal_bkpt_re_set;
15470 ops->check_status = internal_bkpt_check_status;
15471 ops->print_it = internal_bkpt_print_it;
15472 ops->print_mention = internal_bkpt_print_mention;
15473
15474 /* Momentary breakpoints. */
15475 ops = &momentary_breakpoint_ops;
15476 *ops = bkpt_base_breakpoint_ops;
15477 ops->re_set = momentary_bkpt_re_set;
15478 ops->check_status = momentary_bkpt_check_status;
15479 ops->print_it = momentary_bkpt_print_it;
15480 ops->print_mention = momentary_bkpt_print_mention;
15481
55aa24fb
SDJ
15482 /* Probe breakpoints. */
15483 ops = &bkpt_probe_breakpoint_ops;
15484 *ops = bkpt_breakpoint_ops;
15485 ops->insert_location = bkpt_probe_insert_location;
15486 ops->remove_location = bkpt_probe_remove_location;
5f700d83
KS
15487 ops->create_sals_from_location = bkpt_probe_create_sals_from_location;
15488 ops->decode_location = bkpt_probe_decode_location;
55aa24fb 15489
2060206e
PA
15490 /* Watchpoints. */
15491 ops = &watchpoint_breakpoint_ops;
15492 *ops = base_breakpoint_ops;
15493 ops->re_set = re_set_watchpoint;
15494 ops->insert_location = insert_watchpoint;
15495 ops->remove_location = remove_watchpoint;
15496 ops->breakpoint_hit = breakpoint_hit_watchpoint;
15497 ops->check_status = check_status_watchpoint;
15498 ops->resources_needed = resources_needed_watchpoint;
15499 ops->works_in_software_mode = works_in_software_mode_watchpoint;
15500 ops->print_it = print_it_watchpoint;
15501 ops->print_mention = print_mention_watchpoint;
15502 ops->print_recreate = print_recreate_watchpoint;
427cd150 15503 ops->explains_signal = explains_signal_watchpoint;
2060206e
PA
15504
15505 /* Masked watchpoints. */
15506 ops = &masked_watchpoint_breakpoint_ops;
15507 *ops = watchpoint_breakpoint_ops;
15508 ops->insert_location = insert_masked_watchpoint;
15509 ops->remove_location = remove_masked_watchpoint;
15510 ops->resources_needed = resources_needed_masked_watchpoint;
15511 ops->works_in_software_mode = works_in_software_mode_masked_watchpoint;
15512 ops->print_it = print_it_masked_watchpoint;
15513 ops->print_one_detail = print_one_detail_masked_watchpoint;
15514 ops->print_mention = print_mention_masked_watchpoint;
15515 ops->print_recreate = print_recreate_masked_watchpoint;
15516
15517 /* Tracepoints. */
15518 ops = &tracepoint_breakpoint_ops;
15519 *ops = base_breakpoint_ops;
15520 ops->re_set = tracepoint_re_set;
15521 ops->breakpoint_hit = tracepoint_breakpoint_hit;
15522 ops->print_one_detail = tracepoint_print_one_detail;
15523 ops->print_mention = tracepoint_print_mention;
15524 ops->print_recreate = tracepoint_print_recreate;
5f700d83 15525 ops->create_sals_from_location = tracepoint_create_sals_from_location;
983af33b 15526 ops->create_breakpoints_sal = tracepoint_create_breakpoints_sal;
5f700d83 15527 ops->decode_location = tracepoint_decode_location;
983af33b 15528
55aa24fb
SDJ
15529 /* Probe tracepoints. */
15530 ops = &tracepoint_probe_breakpoint_ops;
15531 *ops = tracepoint_breakpoint_ops;
5f700d83
KS
15532 ops->create_sals_from_location = tracepoint_probe_create_sals_from_location;
15533 ops->decode_location = tracepoint_probe_decode_location;
55aa24fb 15534
983af33b
SDJ
15535 /* Static tracepoints with marker (`-m'). */
15536 ops = &strace_marker_breakpoint_ops;
15537 *ops = tracepoint_breakpoint_ops;
5f700d83 15538 ops->create_sals_from_location = strace_marker_create_sals_from_location;
983af33b 15539 ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
5f700d83 15540 ops->decode_location = strace_marker_decode_location;
2060206e
PA
15541
15542 /* Fork catchpoints. */
15543 ops = &catch_fork_breakpoint_ops;
15544 *ops = base_breakpoint_ops;
15545 ops->insert_location = insert_catch_fork;
15546 ops->remove_location = remove_catch_fork;
15547 ops->breakpoint_hit = breakpoint_hit_catch_fork;
15548 ops->print_it = print_it_catch_fork;
15549 ops->print_one = print_one_catch_fork;
15550 ops->print_mention = print_mention_catch_fork;
15551 ops->print_recreate = print_recreate_catch_fork;
15552
15553 /* Vfork catchpoints. */
15554 ops = &catch_vfork_breakpoint_ops;
15555 *ops = base_breakpoint_ops;
15556 ops->insert_location = insert_catch_vfork;
15557 ops->remove_location = remove_catch_vfork;
15558 ops->breakpoint_hit = breakpoint_hit_catch_vfork;
15559 ops->print_it = print_it_catch_vfork;
15560 ops->print_one = print_one_catch_vfork;
15561 ops->print_mention = print_mention_catch_vfork;
15562 ops->print_recreate = print_recreate_catch_vfork;
15563
15564 /* Exec catchpoints. */
15565 ops = &catch_exec_breakpoint_ops;
15566 *ops = base_breakpoint_ops;
2060206e
PA
15567 ops->insert_location = insert_catch_exec;
15568 ops->remove_location = remove_catch_exec;
15569 ops->breakpoint_hit = breakpoint_hit_catch_exec;
15570 ops->print_it = print_it_catch_exec;
15571 ops->print_one = print_one_catch_exec;
15572 ops->print_mention = print_mention_catch_exec;
15573 ops->print_recreate = print_recreate_catch_exec;
15574
edcc5120
TT
15575 /* Solib-related catchpoints. */
15576 ops = &catch_solib_breakpoint_ops;
15577 *ops = base_breakpoint_ops;
edcc5120
TT
15578 ops->insert_location = insert_catch_solib;
15579 ops->remove_location = remove_catch_solib;
15580 ops->breakpoint_hit = breakpoint_hit_catch_solib;
15581 ops->check_status = check_status_catch_solib;
15582 ops->print_it = print_it_catch_solib;
15583 ops->print_one = print_one_catch_solib;
15584 ops->print_mention = print_mention_catch_solib;
15585 ops->print_recreate = print_recreate_catch_solib;
e7e0cddf
SS
15586
15587 ops = &dprintf_breakpoint_ops;
15588 *ops = bkpt_base_breakpoint_ops;
5c2b4418 15589 ops->re_set = dprintf_re_set;
e7e0cddf
SS
15590 ops->resources_needed = bkpt_resources_needed;
15591 ops->print_it = bkpt_print_it;
15592 ops->print_mention = bkpt_print_mention;
2d9442cc 15593 ops->print_recreate = dprintf_print_recreate;
9d6e6e84 15594 ops->after_condition_true = dprintf_after_condition_true;
cd1608cc 15595 ops->breakpoint_hit = dprintf_breakpoint_hit;
2060206e
PA
15596}
15597
8bfd80db
YQ
15598/* Chain containing all defined "enable breakpoint" subcommands. */
15599
15600static struct cmd_list_element *enablebreaklist = NULL;
15601
c906108c 15602void
fba45db2 15603_initialize_breakpoint (void)
c906108c
SS
15604{
15605 struct cmd_list_element *c;
15606
2060206e
PA
15607 initialize_breakpoint_ops ();
15608
84acb35a 15609 observer_attach_solib_unloaded (disable_breakpoints_in_unloaded_shlib);
63644780 15610 observer_attach_free_objfile (disable_breakpoints_in_freed_objfile);
1f3b5d1b 15611 observer_attach_memory_changed (invalidate_bp_value_on_memory_change);
84acb35a 15612
55aa24fb 15613 breakpoint_objfile_key
43dce439 15614 = register_objfile_data_with_cleanup (NULL, free_breakpoint_objfile_data);
17450429 15615
c906108c
SS
15616 breakpoint_chain = 0;
15617 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
15618 before a breakpoint is set. */
15619 breakpoint_count = 0;
15620
1042e4c0
SS
15621 tracepoint_count = 0;
15622
1bedd215
AC
15623 add_com ("ignore", class_breakpoint, ignore_command, _("\
15624Set ignore-count of breakpoint number N to COUNT.\n\
15625Usage is `ignore N COUNT'."));
c906108c 15626
1bedd215 15627 add_com ("commands", class_breakpoint, commands_command, _("\
18da0c51
MG
15628Set commands to be executed when the given breakpoints are hit.\n\
15629Give a space-separated breakpoint list as argument after \"commands\".\n\
15630A list element can be a breakpoint number (e.g. `5') or a range of numbers\n\
15631(e.g. `5-7').\n\
c906108c
SS
15632With no argument, the targeted breakpoint is the last one set.\n\
15633The commands themselves follow starting on the next line.\n\
15634Type a line containing \"end\" to indicate the end of them.\n\
15635Give \"silent\" as the first line to make the breakpoint silent;\n\
1bedd215 15636then no output is printed when it is hit, except what the commands print."));
c906108c 15637
d55637df 15638 c = add_com ("condition", class_breakpoint, condition_command, _("\
1bedd215 15639Specify breakpoint number N to break only if COND is true.\n\
c906108c 15640Usage is `condition N COND', where N is an integer and COND is an\n\
1bedd215 15641expression to be evaluated whenever breakpoint N is reached."));
d55637df 15642 set_cmd_completer (c, condition_completer);
c906108c 15643
1bedd215 15644 c = add_com ("tbreak", class_breakpoint, tbreak_command, _("\
31e2b00f 15645Set a temporary breakpoint.\n\
c906108c
SS
15646Like \"break\" except the breakpoint is only temporary,\n\
15647so it will be deleted when hit. Equivalent to \"break\" followed\n\
31e2b00f
AS
15648by using \"enable delete\" on the breakpoint number.\n\
15649\n"
15650BREAK_ARGS_HELP ("tbreak")));
5ba2abeb 15651 set_cmd_completer (c, location_completer);
c94fdfd0 15652
1bedd215 15653 c = add_com ("hbreak", class_breakpoint, hbreak_command, _("\
a3be7890 15654Set a hardware assisted breakpoint.\n\
c906108c 15655Like \"break\" except the breakpoint requires hardware support,\n\
31e2b00f
AS
15656some target hardware may not have this support.\n\
15657\n"
15658BREAK_ARGS_HELP ("hbreak")));
5ba2abeb 15659 set_cmd_completer (c, location_completer);
c906108c 15660
1bedd215 15661 c = add_com ("thbreak", class_breakpoint, thbreak_command, _("\
31e2b00f 15662Set a temporary hardware assisted breakpoint.\n\
c906108c 15663Like \"hbreak\" except the breakpoint is only temporary,\n\
31e2b00f
AS
15664so it will be deleted when hit.\n\
15665\n"
15666BREAK_ARGS_HELP ("thbreak")));
5ba2abeb 15667 set_cmd_completer (c, location_completer);
c906108c 15668
1bedd215
AC
15669 add_prefix_cmd ("enable", class_breakpoint, enable_command, _("\
15670Enable some breakpoints.\n\
c906108c
SS
15671Give breakpoint numbers (separated by spaces) as arguments.\n\
15672With no subcommand, breakpoints are enabled until you command otherwise.\n\
15673This is used to cancel the effect of the \"disable\" command.\n\
1bedd215 15674With a subcommand you can enable temporarily."),
c906108c 15675 &enablelist, "enable ", 1, &cmdlist);
c906108c
SS
15676
15677 add_com_alias ("en", "enable", class_breakpoint, 1);
15678
84951ab5 15679 add_prefix_cmd ("breakpoints", class_breakpoint, enable_command, _("\
1bedd215 15680Enable some breakpoints.\n\
c906108c
SS
15681Give breakpoint numbers (separated by spaces) as arguments.\n\
15682This is used to cancel the effect of the \"disable\" command.\n\
1bedd215 15683May be abbreviated to simply \"enable\".\n"),
c5aa993b 15684 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
c906108c 15685
1a966eab
AC
15686 add_cmd ("once", no_class, enable_once_command, _("\
15687Enable breakpoints for one hit. Give breakpoint numbers.\n\
15688If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
c906108c
SS
15689 &enablebreaklist);
15690
1a966eab
AC
15691 add_cmd ("delete", no_class, enable_delete_command, _("\
15692Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
15693If a breakpoint is hit while enabled in this fashion, it is deleted."),
c906108c
SS
15694 &enablebreaklist);
15695
816338b5
SS
15696 add_cmd ("count", no_class, enable_count_command, _("\
15697Enable breakpoints for COUNT hits. Give count and then breakpoint numbers.\n\
15698If a breakpoint is hit while enabled in this fashion,\n\
15699the count is decremented; when it reaches zero, the breakpoint is disabled."),
15700 &enablebreaklist);
15701
1a966eab
AC
15702 add_cmd ("delete", no_class, enable_delete_command, _("\
15703Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
15704If a breakpoint is hit while enabled in this fashion, it is deleted."),
c906108c
SS
15705 &enablelist);
15706
1a966eab
AC
15707 add_cmd ("once", no_class, enable_once_command, _("\
15708Enable breakpoints for one hit. Give breakpoint numbers.\n\
15709If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
816338b5
SS
15710 &enablelist);
15711
15712 add_cmd ("count", no_class, enable_count_command, _("\
15713Enable breakpoints for COUNT hits. Give count and then breakpoint numbers.\n\
15714If a breakpoint is hit while enabled in this fashion,\n\
15715the count is decremented; when it reaches zero, the breakpoint is disabled."),
c906108c
SS
15716 &enablelist);
15717
1bedd215
AC
15718 add_prefix_cmd ("disable", class_breakpoint, disable_command, _("\
15719Disable some breakpoints.\n\
c906108c
SS
15720Arguments are breakpoint numbers with spaces in between.\n\
15721To disable all breakpoints, give no argument.\n\
64b9b334 15722A disabled breakpoint is not forgotten, but has no effect until re-enabled."),
c906108c
SS
15723 &disablelist, "disable ", 1, &cmdlist);
15724 add_com_alias ("dis", "disable", class_breakpoint, 1);
15725 add_com_alias ("disa", "disable", class_breakpoint, 1);
c906108c 15726
1a966eab
AC
15727 add_cmd ("breakpoints", class_alias, disable_command, _("\
15728Disable some breakpoints.\n\
c906108c
SS
15729Arguments are breakpoint numbers with spaces in between.\n\
15730To disable all breakpoints, give no argument.\n\
64b9b334 15731A disabled breakpoint is not forgotten, but has no effect until re-enabled.\n\
1a966eab 15732This command may be abbreviated \"disable\"."),
c906108c
SS
15733 &disablelist);
15734
1bedd215
AC
15735 add_prefix_cmd ("delete", class_breakpoint, delete_command, _("\
15736Delete some breakpoints or auto-display expressions.\n\
c906108c
SS
15737Arguments are breakpoint numbers with spaces in between.\n\
15738To delete all breakpoints, give no argument.\n\
15739\n\
15740Also a prefix command for deletion of other GDB objects.\n\
1bedd215 15741The \"unset\" command is also an alias for \"delete\"."),
c906108c
SS
15742 &deletelist, "delete ", 1, &cmdlist);
15743 add_com_alias ("d", "delete", class_breakpoint, 1);
7f198e01 15744 add_com_alias ("del", "delete", class_breakpoint, 1);
c906108c 15745
1a966eab
AC
15746 add_cmd ("breakpoints", class_alias, delete_command, _("\
15747Delete some breakpoints or auto-display expressions.\n\
c906108c
SS
15748Arguments are breakpoint numbers with spaces in between.\n\
15749To delete all breakpoints, give no argument.\n\
1a966eab 15750This command may be abbreviated \"delete\"."),
c906108c
SS
15751 &deletelist);
15752
1bedd215 15753 add_com ("clear", class_breakpoint, clear_command, _("\
629500fa
KS
15754Clear breakpoint at specified location.\n\
15755Argument may be a linespec, explicit, or address location as described below.\n\
1bedd215
AC
15756\n\
15757With no argument, clears all breakpoints in the line that the selected frame\n\
629500fa
KS
15758is executing in.\n"
15759"\n" LOCATION_HELP_STRING "\n\
1bedd215 15760See also the \"delete\" command which clears breakpoints by number."));
a6cc4789 15761 add_com_alias ("cl", "clear", class_breakpoint, 1);
c906108c 15762
1bedd215 15763 c = add_com ("break", class_breakpoint, break_command, _("\
629500fa 15764Set breakpoint at specified location.\n"
31e2b00f 15765BREAK_ARGS_HELP ("break")));
5ba2abeb 15766 set_cmd_completer (c, location_completer);
c94fdfd0 15767
c906108c
SS
15768 add_com_alias ("b", "break", class_run, 1);
15769 add_com_alias ("br", "break", class_run, 1);
15770 add_com_alias ("bre", "break", class_run, 1);
15771 add_com_alias ("brea", "break", class_run, 1);
15772
c906108c
SS
15773 if (dbx_commands)
15774 {
1bedd215
AC
15775 add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command, _("\
15776Break in function/address or break at a line in the current file."),
c5aa993b
JM
15777 &stoplist, "stop ", 1, &cmdlist);
15778 add_cmd ("in", class_breakpoint, stopin_command,
1a966eab 15779 _("Break in function or address."), &stoplist);
c5aa993b 15780 add_cmd ("at", class_breakpoint, stopat_command,
1a966eab 15781 _("Break at a line in the current file."), &stoplist);
11db9430 15782 add_com ("status", class_info, info_breakpoints_command, _("\
1bedd215 15783Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
15784The \"Type\" column indicates one of:\n\
15785\tbreakpoint - normal breakpoint\n\
15786\twatchpoint - watchpoint\n\
15787The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
15788the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
15789breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1bedd215
AC
15790address and file/line number respectively.\n\
15791\n\
15792Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
15793are set to the address of the last breakpoint listed unless the command\n\
15794is prefixed with \"server \".\n\n\
c906108c 15795Convenience variable \"$bpnum\" contains the number of the last\n\
1bedd215 15796breakpoint set."));
c906108c
SS
15797 }
15798
11db9430 15799 add_info ("breakpoints", info_breakpoints_command, _("\
e5a67952 15800Status of specified breakpoints (all user-settable breakpoints if no argument).\n\
c906108c
SS
15801The \"Type\" column indicates one of:\n\
15802\tbreakpoint - normal breakpoint\n\
15803\twatchpoint - watchpoint\n\
15804The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
15805the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
15806breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1bedd215
AC
15807address and file/line number respectively.\n\
15808\n\
15809Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
15810are set to the address of the last breakpoint listed unless the command\n\
15811is prefixed with \"server \".\n\n\
c906108c 15812Convenience variable \"$bpnum\" contains the number of the last\n\
1bedd215 15813breakpoint set."));
c906108c 15814
6b04bdb7
MS
15815 add_info_alias ("b", "breakpoints", 1);
15816
1a966eab
AC
15817 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints, _("\
15818Status of all breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
15819The \"Type\" column indicates one of:\n\
15820\tbreakpoint - normal breakpoint\n\
15821\twatchpoint - watchpoint\n\
15822\tlongjmp - internal breakpoint used to step through longjmp()\n\
15823\tlongjmp resume - internal breakpoint at the target of longjmp()\n\
15824\tuntil - internal breakpoint used by the \"until\" command\n\
1a966eab
AC
15825\tfinish - internal breakpoint used by the \"finish\" command\n\
15826The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
c906108c
SS
15827the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
15828breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1a966eab
AC
15829address and file/line number respectively.\n\
15830\n\
15831Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
15832are set to the address of the last breakpoint listed unless the command\n\
15833is prefixed with \"server \".\n\n\
c906108c 15834Convenience variable \"$bpnum\" contains the number of the last\n\
1a966eab 15835breakpoint set."),
c906108c
SS
15836 &maintenanceinfolist);
15837
44feb3ce
TT
15838 add_prefix_cmd ("catch", class_breakpoint, catch_command, _("\
15839Set catchpoints to catch events."),
15840 &catch_cmdlist, "catch ",
15841 0/*allow-unknown*/, &cmdlist);
15842
15843 add_prefix_cmd ("tcatch", class_breakpoint, tcatch_command, _("\
15844Set temporary catchpoints to catch events."),
15845 &tcatch_cmdlist, "tcatch ",
15846 0/*allow-unknown*/, &cmdlist);
15847
44feb3ce
TT
15848 add_catch_command ("fork", _("Catch calls to fork."),
15849 catch_fork_command_1,
a96d9b2e 15850 NULL,
44feb3ce
TT
15851 (void *) (uintptr_t) catch_fork_permanent,
15852 (void *) (uintptr_t) catch_fork_temporary);
15853 add_catch_command ("vfork", _("Catch calls to vfork."),
15854 catch_fork_command_1,
a96d9b2e 15855 NULL,
44feb3ce
TT
15856 (void *) (uintptr_t) catch_vfork_permanent,
15857 (void *) (uintptr_t) catch_vfork_temporary);
15858 add_catch_command ("exec", _("Catch calls to exec."),
15859 catch_exec_command_1,
a96d9b2e
SDJ
15860 NULL,
15861 CATCH_PERMANENT,
15862 CATCH_TEMPORARY);
edcc5120
TT
15863 add_catch_command ("load", _("Catch loads of shared libraries.\n\
15864Usage: catch load [REGEX]\n\
15865If REGEX is given, only stop for libraries matching the regular expression."),
15866 catch_load_command_1,
15867 NULL,
15868 CATCH_PERMANENT,
15869 CATCH_TEMPORARY);
15870 add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
15871Usage: catch unload [REGEX]\n\
15872If REGEX is given, only stop for libraries matching the regular expression."),
15873 catch_unload_command_1,
15874 NULL,
15875 CATCH_PERMANENT,
15876 CATCH_TEMPORARY);
c5aa993b 15877
1bedd215
AC
15878 c = add_com ("watch", class_breakpoint, watch_command, _("\
15879Set a watchpoint for an expression.\n\
06a64a0b 15880Usage: watch [-l|-location] EXPRESSION\n\
c906108c 15881A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
15882an expression changes.\n\
15883If -l or -location is given, this evaluates EXPRESSION and watches\n\
15884the memory to which it refers."));
65d12d83 15885 set_cmd_completer (c, expression_completer);
c906108c 15886
1bedd215
AC
15887 c = add_com ("rwatch", class_breakpoint, rwatch_command, _("\
15888Set a read watchpoint for an expression.\n\
06a64a0b 15889Usage: rwatch [-l|-location] EXPRESSION\n\
c906108c 15890A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
15891an expression is read.\n\
15892If -l or -location is given, this evaluates EXPRESSION and watches\n\
15893the memory to which it refers."));
65d12d83 15894 set_cmd_completer (c, expression_completer);
c906108c 15895
1bedd215
AC
15896 c = add_com ("awatch", class_breakpoint, awatch_command, _("\
15897Set a watchpoint for an expression.\n\
06a64a0b 15898Usage: awatch [-l|-location] EXPRESSION\n\
c906108c 15899A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
15900an expression is either read or written.\n\
15901If -l or -location is given, this evaluates EXPRESSION and watches\n\
15902the memory to which it refers."));
65d12d83 15903 set_cmd_completer (c, expression_completer);
c906108c 15904
11db9430 15905 add_info ("watchpoints", info_watchpoints_command, _("\
e5a67952 15906Status of specified watchpoints (all watchpoints if no argument)."));
c906108c 15907
920d2a44
AC
15908 /* XXX: cagney/2005-02-23: This should be a boolean, and should
15909 respond to changes - contrary to the description. */
85c07804
AC
15910 add_setshow_zinteger_cmd ("can-use-hw-watchpoints", class_support,
15911 &can_use_hw_watchpoints, _("\
15912Set debugger's willingness to use watchpoint hardware."), _("\
15913Show debugger's willingness to use watchpoint hardware."), _("\
c906108c
SS
15914If zero, gdb will not use hardware for new watchpoints, even if\n\
15915such is available. (However, any hardware watchpoints that were\n\
15916created before setting this to nonzero, will continue to use watchpoint\n\
85c07804
AC
15917hardware.)"),
15918 NULL,
920d2a44 15919 show_can_use_hw_watchpoints,
85c07804 15920 &setlist, &showlist);
c906108c
SS
15921
15922 can_use_hw_watchpoints = 1;
fa8d40ab 15923
1042e4c0
SS
15924 /* Tracepoint manipulation commands. */
15925
15926 c = add_com ("trace", class_breakpoint, trace_command, _("\
629500fa 15927Set a tracepoint at specified location.\n\
1042e4c0
SS
15928\n"
15929BREAK_ARGS_HELP ("trace") "\n\
15930Do \"help tracepoints\" for info on other tracepoint commands."));
15931 set_cmd_completer (c, location_completer);
15932
15933 add_com_alias ("tp", "trace", class_alias, 0);
15934 add_com_alias ("tr", "trace", class_alias, 1);
15935 add_com_alias ("tra", "trace", class_alias, 1);
15936 add_com_alias ("trac", "trace", class_alias, 1);
15937
7a697b8d 15938 c = add_com ("ftrace", class_breakpoint, ftrace_command, _("\
629500fa 15939Set a fast tracepoint at specified location.\n\
7a697b8d
SS
15940\n"
15941BREAK_ARGS_HELP ("ftrace") "\n\
15942Do \"help tracepoints\" for info on other tracepoint commands."));
15943 set_cmd_completer (c, location_completer);
15944
0fb4aa4b 15945 c = add_com ("strace", class_breakpoint, strace_command, _("\
629500fa 15946Set a static tracepoint at location or marker.\n\
0fb4aa4b
PA
15947\n\
15948strace [LOCATION] [if CONDITION]\n\
629500fa
KS
15949LOCATION may be a linespec, explicit, or address location (described below) \n\
15950or -m MARKER_ID.\n\n\
15951If a marker id is specified, probe the marker with that name. With\n\
15952no LOCATION, uses current execution address of the selected stack frame.\n\
0fb4aa4b
PA
15953Static tracepoints accept an extra collect action -- ``collect $_sdata''.\n\
15954This collects arbitrary user data passed in the probe point call to the\n\
15955tracing library. You can inspect it when analyzing the trace buffer,\n\
15956by printing the $_sdata variable like any other convenience variable.\n\
15957\n\
15958CONDITION is a boolean expression.\n\
629500fa 15959\n" LOCATION_HELP_STRING "\n\
d41c0fc8
PA
15960Multiple tracepoints at one place are permitted, and useful if their\n\
15961conditions are different.\n\
0fb4aa4b
PA
15962\n\
15963Do \"help breakpoints\" for info on other commands dealing with breakpoints.\n\
15964Do \"help tracepoints\" for info on other tracepoint commands."));
15965 set_cmd_completer (c, location_completer);
15966
11db9430 15967 add_info ("tracepoints", info_tracepoints_command, _("\
e5a67952 15968Status of specified tracepoints (all tracepoints if no argument).\n\
1042e4c0
SS
15969Convenience variable \"$tpnum\" contains the number of the\n\
15970last tracepoint set."));
15971
15972 add_info_alias ("tp", "tracepoints", 1);
15973
15974 add_cmd ("tracepoints", class_trace, delete_trace_command, _("\
15975Delete specified tracepoints.\n\
15976Arguments are tracepoint numbers, separated by spaces.\n\
15977No argument means delete all tracepoints."),
15978 &deletelist);
7e20dfcd 15979 add_alias_cmd ("tr", "tracepoints", class_trace, 1, &deletelist);
1042e4c0
SS
15980
15981 c = add_cmd ("tracepoints", class_trace, disable_trace_command, _("\
15982Disable specified tracepoints.\n\
15983Arguments are tracepoint numbers, separated by spaces.\n\
15984No argument means disable all tracepoints."),
15985 &disablelist);
15986 deprecate_cmd (c, "disable");
15987
15988 c = add_cmd ("tracepoints", class_trace, enable_trace_command, _("\
15989Enable specified tracepoints.\n\
15990Arguments are tracepoint numbers, separated by spaces.\n\
15991No argument means enable all tracepoints."),
15992 &enablelist);
15993 deprecate_cmd (c, "enable");
15994
15995 add_com ("passcount", class_trace, trace_pass_command, _("\
15996Set the passcount for a tracepoint.\n\
15997The trace will end when the tracepoint has been passed 'count' times.\n\
15998Usage: passcount COUNT TPNUM, where TPNUM may also be \"all\";\n\
15999if TPNUM is omitted, passcount refers to the last tracepoint defined."));
16000
6149aea9
PA
16001 add_prefix_cmd ("save", class_breakpoint, save_command,
16002 _("Save breakpoint definitions as a script."),
16003 &save_cmdlist, "save ",
16004 0/*allow-unknown*/, &cmdlist);
16005
16006 c = add_cmd ("breakpoints", class_breakpoint, save_breakpoints_command, _("\
16007Save current breakpoint definitions as a script.\n\
cce7e648 16008This includes all types of breakpoints (breakpoints, watchpoints,\n\
6149aea9
PA
16009catchpoints, tracepoints). Use the 'source' command in another debug\n\
16010session to restore them."),
16011 &save_cmdlist);
16012 set_cmd_completer (c, filename_completer);
16013
16014 c = add_cmd ("tracepoints", class_trace, save_tracepoints_command, _("\
1042e4c0 16015Save current tracepoint definitions as a script.\n\
6149aea9
PA
16016Use the 'source' command in another debug session to restore them."),
16017 &save_cmdlist);
1042e4c0
SS
16018 set_cmd_completer (c, filename_completer);
16019
6149aea9
PA
16020 c = add_com_alias ("save-tracepoints", "save tracepoints", class_trace, 0);
16021 deprecate_cmd (c, "save tracepoints");
16022
1bedd215 16023 add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, _("\
fa8d40ab
JJ
16024Breakpoint specific settings\n\
16025Configure various breakpoint-specific variables such as\n\
1bedd215 16026pending breakpoint behavior"),
fa8d40ab
JJ
16027 &breakpoint_set_cmdlist, "set breakpoint ",
16028 0/*allow-unknown*/, &setlist);
1bedd215 16029 add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, _("\
fa8d40ab
JJ
16030Breakpoint specific settings\n\
16031Configure various breakpoint-specific variables such as\n\
1bedd215 16032pending breakpoint behavior"),
fa8d40ab
JJ
16033 &breakpoint_show_cmdlist, "show breakpoint ",
16034 0/*allow-unknown*/, &showlist);
16035
7915a72c
AC
16036 add_setshow_auto_boolean_cmd ("pending", no_class,
16037 &pending_break_support, _("\
16038Set debugger's behavior regarding pending breakpoints."), _("\
16039Show debugger's behavior regarding pending breakpoints."), _("\
6e1d7d6c
AC
16040If on, an unrecognized breakpoint location will cause gdb to create a\n\
16041pending breakpoint. If off, an unrecognized breakpoint location results in\n\
16042an error. If auto, an unrecognized breakpoint location results in a\n\
7915a72c 16043user-query to see if a pending breakpoint should be created."),
2c5b56ce 16044 NULL,
920d2a44 16045 show_pending_break_support,
6e1d7d6c
AC
16046 &breakpoint_set_cmdlist,
16047 &breakpoint_show_cmdlist);
fa8d40ab
JJ
16048
16049 pending_break_support = AUTO_BOOLEAN_AUTO;
765dc015
VP
16050
16051 add_setshow_boolean_cmd ("auto-hw", no_class,
16052 &automatic_hardware_breakpoints, _("\
16053Set automatic usage of hardware breakpoints."), _("\
16054Show automatic usage of hardware breakpoints."), _("\
16055If set, the debugger will automatically use hardware breakpoints for\n\
16056breakpoints set with \"break\" but falling in read-only memory. If not set,\n\
16057a warning will be emitted for such breakpoints."),
16058 NULL,
16059 show_automatic_hardware_breakpoints,
16060 &breakpoint_set_cmdlist,
16061 &breakpoint_show_cmdlist);
74960c60 16062
a25a5a45
PA
16063 add_setshow_boolean_cmd ("always-inserted", class_support,
16064 &always_inserted_mode, _("\
74960c60
VP
16065Set mode for inserting breakpoints."), _("\
16066Show mode for inserting breakpoints."), _("\
a25a5a45
PA
16067When this mode is on, breakpoints are inserted immediately as soon as\n\
16068they're created, kept inserted even when execution stops, and removed\n\
16069only when the user deletes them. When this mode is off (the default),\n\
16070breakpoints are inserted only when execution continues, and removed\n\
16071when execution stops."),
72d0e2c5
YQ
16072 NULL,
16073 &show_always_inserted_mode,
16074 &breakpoint_set_cmdlist,
16075 &breakpoint_show_cmdlist);
f1310107 16076
b775012e
LM
16077 add_setshow_enum_cmd ("condition-evaluation", class_breakpoint,
16078 condition_evaluation_enums,
16079 &condition_evaluation_mode_1, _("\
16080Set mode of breakpoint condition evaluation."), _("\
16081Show mode of breakpoint condition evaluation."), _("\
d1cda5d9 16082When this is set to \"host\", breakpoint conditions will be\n\
b775012e
LM
16083evaluated on the host's side by GDB. When it is set to \"target\",\n\
16084breakpoint conditions will be downloaded to the target (if the target\n\
16085supports such feature) and conditions will be evaluated on the target's side.\n\
16086If this is set to \"auto\" (default), this will be automatically set to\n\
16087\"target\" if it supports condition evaluation, otherwise it will\n\
16088be set to \"gdb\""),
16089 &set_condition_evaluation_mode,
16090 &show_condition_evaluation_mode,
16091 &breakpoint_set_cmdlist,
16092 &breakpoint_show_cmdlist);
16093
f1310107
TJB
16094 add_com ("break-range", class_breakpoint, break_range_command, _("\
16095Set a breakpoint for an address range.\n\
16096break-range START-LOCATION, END-LOCATION\n\
16097where START-LOCATION and END-LOCATION can be one of the following:\n\
16098 LINENUM, for that line in the current file,\n\
16099 FILE:LINENUM, for that line in that file,\n\
16100 +OFFSET, for that number of lines after the current line\n\
16101 or the start of the range\n\
16102 FUNCTION, for the first line in that function,\n\
16103 FILE:FUNCTION, to distinguish among like-named static functions.\n\
16104 *ADDRESS, for the instruction at that address.\n\
16105\n\
16106The breakpoint will stop execution of the inferior whenever it executes\n\
16107an instruction at any address within the [START-LOCATION, END-LOCATION]\n\
16108range (including START-LOCATION and END-LOCATION)."));
16109
e7e0cddf 16110 c = add_com ("dprintf", class_breakpoint, dprintf_command, _("\
629500fa 16111Set a dynamic printf at specified location.\n\
e7e0cddf 16112dprintf location,format string,arg1,arg2,...\n\
629500fa
KS
16113location may be a linespec, explicit, or address location.\n"
16114"\n" LOCATION_HELP_STRING));
e7e0cddf
SS
16115 set_cmd_completer (c, location_completer);
16116
16117 add_setshow_enum_cmd ("dprintf-style", class_support,
16118 dprintf_style_enums, &dprintf_style, _("\
16119Set the style of usage for dynamic printf."), _("\
16120Show the style of usage for dynamic printf."), _("\
16121This setting chooses how GDB will do a dynamic printf.\n\
16122If the value is \"gdb\", then the printing is done by GDB to its own\n\
16123console, as with the \"printf\" command.\n\
16124If the value is \"call\", the print is done by calling a function in your\n\
16125program; by default printf(), but you can choose a different function or\n\
16126output stream by setting dprintf-function and dprintf-channel."),
16127 update_dprintf_commands, NULL,
16128 &setlist, &showlist);
16129
16130 dprintf_function = xstrdup ("printf");
16131 add_setshow_string_cmd ("dprintf-function", class_support,
16132 &dprintf_function, _("\
16133Set the function to use for dynamic printf"), _("\
16134Show the function to use for dynamic printf"), NULL,
16135 update_dprintf_commands, NULL,
16136 &setlist, &showlist);
16137
16138 dprintf_channel = xstrdup ("");
16139 add_setshow_string_cmd ("dprintf-channel", class_support,
16140 &dprintf_channel, _("\
16141Set the channel to use for dynamic printf"), _("\
16142Show the channel to use for dynamic printf"), NULL,
16143 update_dprintf_commands, NULL,
16144 &setlist, &showlist);
16145
d3ce09f5
SS
16146 add_setshow_boolean_cmd ("disconnected-dprintf", no_class,
16147 &disconnected_dprintf, _("\
16148Set whether dprintf continues after GDB disconnects."), _("\
16149Show whether dprintf continues after GDB disconnects."), _("\
16150Use this to let dprintf commands continue to hit and produce output\n\
16151even if GDB disconnects or detaches from the target."),
16152 NULL,
16153 NULL,
16154 &setlist, &showlist);
16155
16156 add_com ("agent-printf", class_vars, agent_printf_command, _("\
16157agent-printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
16158(target agent only) This is useful for formatted output in user-defined commands."));
16159
765dc015 16160 automatic_hardware_breakpoints = 1;
f3b1572e
PA
16161
16162 observer_attach_about_to_proceed (breakpoint_about_to_proceed);
49fa26b0 16163 observer_attach_thread_exit (remove_threaded_breakpoints);
c906108c 16164}
This page took 4.301139 seconds and 4 git commands to generate.