12f20d68fad1e6305308784b9eb1e3e7f94a6c84
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2
3 Copyright (C) 1986-2012 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
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.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "arch-utils.h"
22 #include <ctype.h>
23 #include "hashtab.h"
24 #include "symtab.h"
25 #include "frame.h"
26 #include "breakpoint.h"
27 #include "tracepoint.h"
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"
35 #include "gdbthread.h"
36 #include "target.h"
37 #include "language.h"
38 #include "gdb_string.h"
39 #include "gdb-demangle.h"
40 #include "filenames.h"
41 #include "annotate.h"
42 #include "symfile.h"
43 #include "objfiles.h"
44 #include "source.h"
45 #include "linespec.h"
46 #include "completer.h"
47 #include "gdb.h"
48 #include "ui-out.h"
49 #include "cli/cli-script.h"
50 #include "gdb_assert.h"
51 #include "block.h"
52 #include "solib.h"
53 #include "solist.h"
54 #include "observer.h"
55 #include "exceptions.h"
56 #include "memattr.h"
57 #include "ada-lang.h"
58 #include "top.h"
59 #include "valprint.h"
60 #include "jit.h"
61 #include "xml-syscall.h"
62 #include "parser-defs.h"
63 #include "gdb_regex.h"
64 #include "probe.h"
65 #include "cli/cli-utils.h"
66 #include "continuations.h"
67 #include "stack.h"
68 #include "skip.h"
69 #include "gdb_regex.h"
70 #include "ax-gdb.h"
71 #include "dummy-frame.h"
72
73 #include "format.h"
74
75 /* readline include files */
76 #include "readline/readline.h"
77 #include "readline/history.h"
78
79 /* readline defines this. */
80 #undef savestring
81
82 #include "mi/mi-common.h"
83 #include "python/python.h"
84
85 /* Prototypes for local functions. */
86
87 static void enable_delete_command (char *, int);
88
89 static void enable_once_command (char *, int);
90
91 static void enable_count_command (char *, int);
92
93 static void disable_command (char *, int);
94
95 static void enable_command (char *, int);
96
97 static void map_breakpoint_numbers (char *, void (*) (struct breakpoint *,
98 void *),
99 void *);
100
101 static void ignore_command (char *, int);
102
103 static int breakpoint_re_set_one (void *);
104
105 static void breakpoint_re_set_default (struct breakpoint *);
106
107 static void create_sals_from_address_default (char **,
108 struct linespec_result *,
109 enum bptype, char *,
110 char **);
111
112 static void create_breakpoints_sal_default (struct gdbarch *,
113 struct linespec_result *,
114 struct linespec_sals *,
115 char *, char *, enum bptype,
116 enum bpdisp, int, int,
117 int,
118 const struct breakpoint_ops *,
119 int, int, int, unsigned);
120
121 static void decode_linespec_default (struct breakpoint *, char **,
122 struct symtabs_and_lines *);
123
124 static void clear_command (char *, int);
125
126 static void catch_command (char *, int);
127
128 static int can_use_hardware_watchpoint (struct value *);
129
130 static void break_command_1 (char *, int, int);
131
132 static void mention (struct breakpoint *);
133
134 static struct breakpoint *set_raw_breakpoint_without_location (struct gdbarch *,
135 enum bptype,
136 const struct breakpoint_ops *);
137 static struct bp_location *add_location_to_breakpoint (struct breakpoint *,
138 const struct symtab_and_line *);
139
140 /* This function is used in gdbtk sources and thus can not be made
141 static. */
142 struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch,
143 struct symtab_and_line,
144 enum bptype,
145 const struct breakpoint_ops *);
146
147 static struct breakpoint *
148 momentary_breakpoint_from_master (struct breakpoint *orig,
149 enum bptype type,
150 const struct breakpoint_ops *ops);
151
152 static void breakpoint_adjustment_warning (CORE_ADDR, CORE_ADDR, int, int);
153
154 static CORE_ADDR adjust_breakpoint_address (struct gdbarch *gdbarch,
155 CORE_ADDR bpaddr,
156 enum bptype bptype);
157
158 static void describe_other_breakpoints (struct gdbarch *,
159 struct program_space *, CORE_ADDR,
160 struct obj_section *, int);
161
162 static int breakpoint_address_match (struct address_space *aspace1,
163 CORE_ADDR addr1,
164 struct address_space *aspace2,
165 CORE_ADDR addr2);
166
167 static int watchpoint_locations_match (struct bp_location *loc1,
168 struct bp_location *loc2);
169
170 static int breakpoint_location_address_match (struct bp_location *bl,
171 struct address_space *aspace,
172 CORE_ADDR addr);
173
174 static void breakpoints_info (char *, int);
175
176 static void watchpoints_info (char *, int);
177
178 static int breakpoint_1 (char *, int,
179 int (*) (const struct breakpoint *));
180
181 static int breakpoint_cond_eval (void *);
182
183 static void cleanup_executing_breakpoints (void *);
184
185 static void commands_command (char *, int);
186
187 static void condition_command (char *, int);
188
189 typedef enum
190 {
191 mark_inserted,
192 mark_uninserted
193 }
194 insertion_state_t;
195
196 static int remove_breakpoint (struct bp_location *, insertion_state_t);
197 static int remove_breakpoint_1 (struct bp_location *, insertion_state_t);
198
199 static enum print_stop_action print_bp_stop_message (bpstat bs);
200
201 static int watchpoint_check (void *);
202
203 static void maintenance_info_breakpoints (char *, int);
204
205 static int hw_breakpoint_used_count (void);
206
207 static int hw_watchpoint_use_count (struct breakpoint *);
208
209 static int hw_watchpoint_used_count_others (struct breakpoint *except,
210 enum bptype type,
211 int *other_type_used);
212
213 static void hbreak_command (char *, int);
214
215 static void thbreak_command (char *, int);
216
217 static void enable_breakpoint_disp (struct breakpoint *, enum bpdisp,
218 int count);
219
220 static void stop_command (char *arg, int from_tty);
221
222 static void stopin_command (char *arg, int from_tty);
223
224 static void stopat_command (char *arg, int from_tty);
225
226 static char *ep_parse_optional_if_clause (char **arg);
227
228 static void catch_exception_command_1 (enum exception_event_kind ex_event,
229 char *arg, int tempflag, int from_tty);
230
231 static void tcatch_command (char *arg, int from_tty);
232
233 static void detach_single_step_breakpoints (void);
234
235 static int single_step_breakpoint_inserted_here_p (struct address_space *,
236 CORE_ADDR pc);
237
238 static void free_bp_location (struct bp_location *loc);
239 static void incref_bp_location (struct bp_location *loc);
240 static void decref_bp_location (struct bp_location **loc);
241
242 static struct bp_location *allocate_bp_location (struct breakpoint *bpt);
243
244 static void update_global_location_list (int);
245
246 static void update_global_location_list_nothrow (int);
247
248 static int is_hardware_watchpoint (const struct breakpoint *bpt);
249
250 static void insert_breakpoint_locations (void);
251
252 static int syscall_catchpoint_p (struct breakpoint *b);
253
254 static void tracepoints_info (char *, int);
255
256 static void delete_trace_command (char *, int);
257
258 static void enable_trace_command (char *, int);
259
260 static void disable_trace_command (char *, int);
261
262 static void trace_pass_command (char *, int);
263
264 static int is_masked_watchpoint (const struct breakpoint *b);
265
266 static struct bp_location **get_first_locp_gte_addr (CORE_ADDR address);
267
268 /* Return 1 if B refers to a static tracepoint set by marker ("-m"), zero
269 otherwise. */
270
271 static int strace_marker_p (struct breakpoint *b);
272
273 static void init_catchpoint (struct breakpoint *b,
274 struct gdbarch *gdbarch, int tempflag,
275 char *cond_string,
276 const struct breakpoint_ops *ops);
277
278 /* The abstract base class all breakpoint_ops structures inherit
279 from. */
280 static struct breakpoint_ops base_breakpoint_ops;
281
282 /* The breakpoint_ops structure to be inherited by all breakpoint_ops
283 that are implemented on top of software or hardware breakpoints
284 (user breakpoints, internal and momentary breakpoints, etc.). */
285 static struct breakpoint_ops bkpt_base_breakpoint_ops;
286
287 /* Internal breakpoints class type. */
288 static struct breakpoint_ops internal_breakpoint_ops;
289
290 /* Momentary breakpoints class type. */
291 static struct breakpoint_ops momentary_breakpoint_ops;
292
293 /* Momentary breakpoints for bp_longjmp and bp_exception class type. */
294 static struct breakpoint_ops longjmp_breakpoint_ops;
295
296 /* The breakpoint_ops structure to be used in regular user created
297 breakpoints. */
298 struct breakpoint_ops bkpt_breakpoint_ops;
299
300 /* Breakpoints set on probes. */
301 static struct breakpoint_ops bkpt_probe_breakpoint_ops;
302
303 /* Dynamic printf class type. */
304 static struct breakpoint_ops dprintf_breakpoint_ops;
305
306 /* The style in which to perform a dynamic printf. This is a user
307 option because different output options have different tradeoffs;
308 if GDB does the printing, there is better error handling if there
309 is a problem with any of the arguments, but using an inferior
310 function lets you have special-purpose printers and sending of
311 output to the same place as compiled-in print functions. */
312
313 static const char dprintf_style_gdb[] = "gdb";
314 static const char dprintf_style_call[] = "call";
315 static const char dprintf_style_agent[] = "agent";
316 static const char *const dprintf_style_enums[] = {
317 dprintf_style_gdb,
318 dprintf_style_call,
319 dprintf_style_agent,
320 NULL
321 };
322 static const char *dprintf_style = dprintf_style_gdb;
323
324 /* The function to use for dynamic printf if the preferred style is to
325 call into the inferior. The value is simply a string that is
326 copied into the command, so it can be anything that GDB can
327 evaluate to a callable address, not necessarily a function name. */
328
329 static char *dprintf_function = "";
330
331 /* The channel to use for dynamic printf if the preferred style is to
332 call into the inferior; if a nonempty string, it will be passed to
333 the call as the first argument, with the format string as the
334 second. As with the dprintf function, this can be anything that
335 GDB knows how to evaluate, so in addition to common choices like
336 "stderr", this could be an app-specific expression like
337 "mystreams[curlogger]". */
338
339 static char *dprintf_channel = "";
340
341 /* True if dprintf commands should continue to operate even if GDB
342 has disconnected. */
343 static int disconnected_dprintf = 1;
344
345 /* A reference-counted struct command_line. This lets multiple
346 breakpoints share a single command list. */
347 struct counted_command_line
348 {
349 /* The reference count. */
350 int refc;
351
352 /* The command list. */
353 struct command_line *commands;
354 };
355
356 struct command_line *
357 breakpoint_commands (struct breakpoint *b)
358 {
359 return b->commands ? b->commands->commands : NULL;
360 }
361
362 /* Flag indicating that a command has proceeded the inferior past the
363 current breakpoint. */
364
365 static int breakpoint_proceeded;
366
367 const char *
368 bpdisp_text (enum bpdisp disp)
369 {
370 /* NOTE: the following values are a part of MI protocol and
371 represent values of 'disp' field returned when inferior stops at
372 a breakpoint. */
373 static const char * const bpdisps[] = {"del", "dstp", "dis", "keep"};
374
375 return bpdisps[(int) disp];
376 }
377
378 /* Prototypes for exported functions. */
379 /* If FALSE, gdb will not use hardware support for watchpoints, even
380 if such is available. */
381 static int can_use_hw_watchpoints;
382
383 static void
384 show_can_use_hw_watchpoints (struct ui_file *file, int from_tty,
385 struct cmd_list_element *c,
386 const char *value)
387 {
388 fprintf_filtered (file,
389 _("Debugger's willingness to use "
390 "watchpoint hardware is %s.\n"),
391 value);
392 }
393
394 /* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
395 If AUTO_BOOLEAN_TRUE, gdb will automatically create pending breakpoints
396 for unrecognized breakpoint locations.
397 If AUTO_BOOLEAN_AUTO, gdb will query when breakpoints are unrecognized. */
398 static enum auto_boolean pending_break_support;
399 static void
400 show_pending_break_support (struct ui_file *file, int from_tty,
401 struct cmd_list_element *c,
402 const char *value)
403 {
404 fprintf_filtered (file,
405 _("Debugger's behavior regarding "
406 "pending breakpoints is %s.\n"),
407 value);
408 }
409
410 /* If 1, gdb will automatically use hardware breakpoints for breakpoints
411 set with "break" but falling in read-only memory.
412 If 0, gdb will warn about such breakpoints, but won't automatically
413 use hardware breakpoints. */
414 static int automatic_hardware_breakpoints;
415 static void
416 show_automatic_hardware_breakpoints (struct ui_file *file, int from_tty,
417 struct cmd_list_element *c,
418 const char *value)
419 {
420 fprintf_filtered (file,
421 _("Automatic usage of hardware breakpoints is %s.\n"),
422 value);
423 }
424
425 /* If on, gdb will keep breakpoints inserted even as inferior is
426 stopped, and immediately insert any new breakpoints. If off, gdb
427 will insert breakpoints into inferior only when resuming it, and
428 will remove breakpoints upon stop. If auto, GDB will behave as ON
429 if in non-stop mode, and as OFF if all-stop mode.*/
430
431 static enum auto_boolean always_inserted_mode = AUTO_BOOLEAN_AUTO;
432
433 static void
434 show_always_inserted_mode (struct ui_file *file, int from_tty,
435 struct cmd_list_element *c, const char *value)
436 {
437 if (always_inserted_mode == AUTO_BOOLEAN_AUTO)
438 fprintf_filtered (file,
439 _("Always inserted breakpoint "
440 "mode is %s (currently %s).\n"),
441 value,
442 breakpoints_always_inserted_mode () ? "on" : "off");
443 else
444 fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"),
445 value);
446 }
447
448 int
449 breakpoints_always_inserted_mode (void)
450 {
451 return (always_inserted_mode == AUTO_BOOLEAN_TRUE
452 || (always_inserted_mode == AUTO_BOOLEAN_AUTO && non_stop));
453 }
454
455 static const char condition_evaluation_both[] = "host or target";
456
457 /* Modes for breakpoint condition evaluation. */
458 static const char condition_evaluation_auto[] = "auto";
459 static const char condition_evaluation_host[] = "host";
460 static const char condition_evaluation_target[] = "target";
461 static const char *const condition_evaluation_enums[] = {
462 condition_evaluation_auto,
463 condition_evaluation_host,
464 condition_evaluation_target,
465 NULL
466 };
467
468 /* Global that holds the current mode for breakpoint condition evaluation. */
469 static const char *condition_evaluation_mode_1 = condition_evaluation_auto;
470
471 /* Global that we use to display information to the user (gets its value from
472 condition_evaluation_mode_1. */
473 static const char *condition_evaluation_mode = condition_evaluation_auto;
474
475 /* Translate a condition evaluation mode MODE into either "host"
476 or "target". This is used mostly to translate from "auto" to the
477 real setting that is being used. It returns the translated
478 evaluation mode. */
479
480 static const char *
481 translate_condition_evaluation_mode (const char *mode)
482 {
483 if (mode == condition_evaluation_auto)
484 {
485 if (target_supports_evaluation_of_breakpoint_conditions ())
486 return condition_evaluation_target;
487 else
488 return condition_evaluation_host;
489 }
490 else
491 return mode;
492 }
493
494 /* Discovers what condition_evaluation_auto translates to. */
495
496 static const char *
497 breakpoint_condition_evaluation_mode (void)
498 {
499 return translate_condition_evaluation_mode (condition_evaluation_mode);
500 }
501
502 /* Return true if GDB should evaluate breakpoint conditions or false
503 otherwise. */
504
505 static int
506 gdb_evaluates_breakpoint_condition_p (void)
507 {
508 const char *mode = breakpoint_condition_evaluation_mode ();
509
510 return (mode == condition_evaluation_host);
511 }
512
513 void _initialize_breakpoint (void);
514
515 /* Are we executing breakpoint commands? */
516 static int executing_breakpoint_commands;
517
518 /* Are overlay event breakpoints enabled? */
519 static int overlay_events_enabled;
520
521 /* See description in breakpoint.h. */
522 int target_exact_watchpoints = 0;
523
524 /* Walk the following statement or block through all breakpoints.
525 ALL_BREAKPOINTS_SAFE does so even if the statement deletes the
526 current breakpoint. */
527
528 #define ALL_BREAKPOINTS(B) for (B = breakpoint_chain; B; B = B->next)
529
530 #define ALL_BREAKPOINTS_SAFE(B,TMP) \
531 for (B = breakpoint_chain; \
532 B ? (TMP=B->next, 1): 0; \
533 B = TMP)
534
535 /* Similar iterator for the low-level breakpoints. SAFE variant is
536 not provided so update_global_location_list must not be called
537 while executing the block of ALL_BP_LOCATIONS. */
538
539 #define ALL_BP_LOCATIONS(B,BP_TMP) \
540 for (BP_TMP = bp_location; \
541 BP_TMP < bp_location + bp_location_count && (B = *BP_TMP); \
542 BP_TMP++)
543
544 /* Iterates through locations with address ADDRESS for the currently selected
545 program space. BP_LOCP_TMP points to each object. BP_LOCP_START points
546 to where the loop should start from.
547 If BP_LOCP_START is a NULL pointer, the macro automatically seeks the
548 appropriate location to start with. */
549
550 #define ALL_BP_LOCATIONS_AT_ADDR(BP_LOCP_TMP, BP_LOCP_START, ADDRESS) \
551 for (BP_LOCP_START = BP_LOCP_START == NULL ? get_first_locp_gte_addr (ADDRESS) : BP_LOCP_START, \
552 BP_LOCP_TMP = BP_LOCP_START; \
553 BP_LOCP_START \
554 && (BP_LOCP_TMP < bp_location + bp_location_count \
555 && (*BP_LOCP_TMP)->address == ADDRESS); \
556 BP_LOCP_TMP++)
557
558 /* Iterator for tracepoints only. */
559
560 #define ALL_TRACEPOINTS(B) \
561 for (B = breakpoint_chain; B; B = B->next) \
562 if (is_tracepoint (B))
563
564 /* Chains of all breakpoints defined. */
565
566 struct breakpoint *breakpoint_chain;
567
568 /* Array is sorted by bp_location_compare - primarily by the ADDRESS. */
569
570 static struct bp_location **bp_location;
571
572 /* Number of elements of BP_LOCATION. */
573
574 static unsigned bp_location_count;
575
576 /* Maximum alignment offset between bp_target_info.PLACED_ADDRESS and
577 ADDRESS for the current elements of BP_LOCATION which get a valid
578 result from bp_location_has_shadow. You can use it for roughly
579 limiting the subrange of BP_LOCATION to scan for shadow bytes for
580 an address you need to read. */
581
582 static CORE_ADDR bp_location_placed_address_before_address_max;
583
584 /* Maximum offset plus alignment between bp_target_info.PLACED_ADDRESS
585 + bp_target_info.SHADOW_LEN and ADDRESS for the current elements of
586 BP_LOCATION which get a valid result from bp_location_has_shadow.
587 You can use it for roughly limiting the subrange of BP_LOCATION to
588 scan for shadow bytes for an address you need to read. */
589
590 static CORE_ADDR bp_location_shadow_len_after_address_max;
591
592 /* The locations that no longer correspond to any breakpoint, unlinked
593 from bp_location array, but for which a hit may still be reported
594 by a target. */
595 VEC(bp_location_p) *moribund_locations = NULL;
596
597 /* Number of last breakpoint made. */
598
599 static int breakpoint_count;
600
601 /* The value of `breakpoint_count' before the last command that
602 created breakpoints. If the last (break-like) command created more
603 than one breakpoint, then the difference between BREAKPOINT_COUNT
604 and PREV_BREAKPOINT_COUNT is more than one. */
605 static int prev_breakpoint_count;
606
607 /* Number of last tracepoint made. */
608
609 static int tracepoint_count;
610
611 static struct cmd_list_element *breakpoint_set_cmdlist;
612 static struct cmd_list_element *breakpoint_show_cmdlist;
613 struct cmd_list_element *save_cmdlist;
614
615 /* Return whether a breakpoint is an active enabled breakpoint. */
616 static int
617 breakpoint_enabled (struct breakpoint *b)
618 {
619 return (b->enable_state == bp_enabled);
620 }
621
622 /* Set breakpoint count to NUM. */
623
624 static void
625 set_breakpoint_count (int num)
626 {
627 prev_breakpoint_count = breakpoint_count;
628 breakpoint_count = num;
629 set_internalvar_integer (lookup_internalvar ("bpnum"), num);
630 }
631
632 /* Used by `start_rbreak_breakpoints' below, to record the current
633 breakpoint count before "rbreak" creates any breakpoint. */
634 static int rbreak_start_breakpoint_count;
635
636 /* Called at the start an "rbreak" command to record the first
637 breakpoint made. */
638
639 void
640 start_rbreak_breakpoints (void)
641 {
642 rbreak_start_breakpoint_count = breakpoint_count;
643 }
644
645 /* Called at the end of an "rbreak" command to record the last
646 breakpoint made. */
647
648 void
649 end_rbreak_breakpoints (void)
650 {
651 prev_breakpoint_count = rbreak_start_breakpoint_count;
652 }
653
654 /* Used in run_command to zero the hit count when a new run starts. */
655
656 void
657 clear_breakpoint_hit_counts (void)
658 {
659 struct breakpoint *b;
660
661 ALL_BREAKPOINTS (b)
662 b->hit_count = 0;
663 }
664
665 /* Allocate a new counted_command_line with reference count of 1.
666 The new structure owns COMMANDS. */
667
668 static struct counted_command_line *
669 alloc_counted_command_line (struct command_line *commands)
670 {
671 struct counted_command_line *result
672 = xmalloc (sizeof (struct counted_command_line));
673
674 result->refc = 1;
675 result->commands = commands;
676 return result;
677 }
678
679 /* Increment reference count. This does nothing if CMD is NULL. */
680
681 static void
682 incref_counted_command_line (struct counted_command_line *cmd)
683 {
684 if (cmd)
685 ++cmd->refc;
686 }
687
688 /* Decrement reference count. If the reference count reaches 0,
689 destroy the counted_command_line. Sets *CMDP to NULL. This does
690 nothing if *CMDP is NULL. */
691
692 static void
693 decref_counted_command_line (struct counted_command_line **cmdp)
694 {
695 if (*cmdp)
696 {
697 if (--(*cmdp)->refc == 0)
698 {
699 free_command_lines (&(*cmdp)->commands);
700 xfree (*cmdp);
701 }
702 *cmdp = NULL;
703 }
704 }
705
706 /* A cleanup function that calls decref_counted_command_line. */
707
708 static void
709 do_cleanup_counted_command_line (void *arg)
710 {
711 decref_counted_command_line (arg);
712 }
713
714 /* Create a cleanup that calls decref_counted_command_line on the
715 argument. */
716
717 static struct cleanup *
718 make_cleanup_decref_counted_command_line (struct counted_command_line **cmdp)
719 {
720 return make_cleanup (do_cleanup_counted_command_line, cmdp);
721 }
722
723 \f
724 /* Return the breakpoint with the specified number, or NULL
725 if the number does not refer to an existing breakpoint. */
726
727 struct breakpoint *
728 get_breakpoint (int num)
729 {
730 struct breakpoint *b;
731
732 ALL_BREAKPOINTS (b)
733 if (b->number == num)
734 return b;
735
736 return NULL;
737 }
738
739 \f
740
741 /* Mark locations as "conditions have changed" in case the target supports
742 evaluating conditions on its side. */
743
744 static void
745 mark_breakpoint_modified (struct breakpoint *b)
746 {
747 struct bp_location *loc;
748
749 /* This is only meaningful if the target is
750 evaluating conditions and if the user has
751 opted for condition evaluation on the target's
752 side. */
753 if (gdb_evaluates_breakpoint_condition_p ()
754 || !target_supports_evaluation_of_breakpoint_conditions ())
755 return;
756
757 if (!is_breakpoint (b))
758 return;
759
760 for (loc = b->loc; loc; loc = loc->next)
761 loc->condition_changed = condition_modified;
762 }
763
764 /* Mark location as "conditions have changed" in case the target supports
765 evaluating conditions on its side. */
766
767 static void
768 mark_breakpoint_location_modified (struct bp_location *loc)
769 {
770 /* This is only meaningful if the target is
771 evaluating conditions and if the user has
772 opted for condition evaluation on the target's
773 side. */
774 if (gdb_evaluates_breakpoint_condition_p ()
775 || !target_supports_evaluation_of_breakpoint_conditions ())
776
777 return;
778
779 if (!is_breakpoint (loc->owner))
780 return;
781
782 loc->condition_changed = condition_modified;
783 }
784
785 /* Sets the condition-evaluation mode using the static global
786 condition_evaluation_mode. */
787
788 static void
789 set_condition_evaluation_mode (char *args, int from_tty,
790 struct cmd_list_element *c)
791 {
792 const char *old_mode, *new_mode;
793
794 if ((condition_evaluation_mode_1 == condition_evaluation_target)
795 && !target_supports_evaluation_of_breakpoint_conditions ())
796 {
797 condition_evaluation_mode_1 = condition_evaluation_mode;
798 warning (_("Target does not support breakpoint condition evaluation.\n"
799 "Using host evaluation mode instead."));
800 return;
801 }
802
803 new_mode = translate_condition_evaluation_mode (condition_evaluation_mode_1);
804 old_mode = translate_condition_evaluation_mode (condition_evaluation_mode);
805
806 /* Flip the switch. Flip it even if OLD_MODE == NEW_MODE as one of the
807 settings was "auto". */
808 condition_evaluation_mode = condition_evaluation_mode_1;
809
810 /* Only update the mode if the user picked a different one. */
811 if (new_mode != old_mode)
812 {
813 struct bp_location *loc, **loc_tmp;
814 /* If the user switched to a different evaluation mode, we
815 need to synch the changes with the target as follows:
816
817 "host" -> "target": Send all (valid) conditions to the target.
818 "target" -> "host": Remove all the conditions from the target.
819 */
820
821 if (new_mode == condition_evaluation_target)
822 {
823 /* Mark everything modified and synch conditions with the
824 target. */
825 ALL_BP_LOCATIONS (loc, loc_tmp)
826 mark_breakpoint_location_modified (loc);
827 }
828 else
829 {
830 /* Manually mark non-duplicate locations to synch conditions
831 with the target. We do this to remove all the conditions the
832 target knows about. */
833 ALL_BP_LOCATIONS (loc, loc_tmp)
834 if (is_breakpoint (loc->owner) && loc->inserted)
835 loc->needs_update = 1;
836 }
837
838 /* Do the update. */
839 update_global_location_list (1);
840 }
841
842 return;
843 }
844
845 /* Shows the current mode of breakpoint condition evaluation. Explicitly shows
846 what "auto" is translating to. */
847
848 static void
849 show_condition_evaluation_mode (struct ui_file *file, int from_tty,
850 struct cmd_list_element *c, const char *value)
851 {
852 if (condition_evaluation_mode == condition_evaluation_auto)
853 fprintf_filtered (file,
854 _("Breakpoint condition evaluation "
855 "mode is %s (currently %s).\n"),
856 value,
857 breakpoint_condition_evaluation_mode ());
858 else
859 fprintf_filtered (file, _("Breakpoint condition evaluation mode is %s.\n"),
860 value);
861 }
862
863 /* A comparison function for bp_location AP and BP that is used by
864 bsearch. This comparison function only cares about addresses, unlike
865 the more general bp_location_compare function. */
866
867 static int
868 bp_location_compare_addrs (const void *ap, const void *bp)
869 {
870 struct bp_location *a = *(void **) ap;
871 struct bp_location *b = *(void **) bp;
872
873 if (a->address == b->address)
874 return 0;
875 else
876 return ((a->address > b->address) - (a->address < b->address));
877 }
878
879 /* Helper function to skip all bp_locations with addresses
880 less than ADDRESS. It returns the first bp_location that
881 is greater than or equal to ADDRESS. If none is found, just
882 return NULL. */
883
884 static struct bp_location **
885 get_first_locp_gte_addr (CORE_ADDR address)
886 {
887 struct bp_location dummy_loc;
888 struct bp_location *dummy_locp = &dummy_loc;
889 struct bp_location **locp_found = NULL;
890
891 /* Initialize the dummy location's address field. */
892 memset (&dummy_loc, 0, sizeof (struct bp_location));
893 dummy_loc.address = address;
894
895 /* Find a close match to the first location at ADDRESS. */
896 locp_found = bsearch (&dummy_locp, bp_location, bp_location_count,
897 sizeof (struct bp_location **),
898 bp_location_compare_addrs);
899
900 /* Nothing was found, nothing left to do. */
901 if (locp_found == NULL)
902 return NULL;
903
904 /* We may have found a location that is at ADDRESS but is not the first in the
905 location's list. Go backwards (if possible) and locate the first one. */
906 while ((locp_found - 1) >= bp_location
907 && (*(locp_found - 1))->address == address)
908 locp_found--;
909
910 return locp_found;
911 }
912
913 void
914 set_breakpoint_condition (struct breakpoint *b, char *exp,
915 int from_tty)
916 {
917 xfree (b->cond_string);
918 b->cond_string = NULL;
919
920 if (is_watchpoint (b))
921 {
922 struct watchpoint *w = (struct watchpoint *) b;
923
924 xfree (w->cond_exp);
925 w->cond_exp = NULL;
926 }
927 else
928 {
929 struct bp_location *loc;
930
931 for (loc = b->loc; loc; loc = loc->next)
932 {
933 xfree (loc->cond);
934 loc->cond = NULL;
935
936 /* No need to free the condition agent expression
937 bytecode (if we have one). We will handle this
938 when we go through update_global_location_list. */
939 }
940 }
941
942 if (*exp == 0)
943 {
944 if (from_tty)
945 printf_filtered (_("Breakpoint %d now unconditional.\n"), b->number);
946 }
947 else
948 {
949 char *arg = exp;
950
951 /* I don't know if it matters whether this is the string the user
952 typed in or the decompiled expression. */
953 b->cond_string = xstrdup (arg);
954 b->condition_not_parsed = 0;
955
956 if (is_watchpoint (b))
957 {
958 struct watchpoint *w = (struct watchpoint *) b;
959
960 innermost_block = NULL;
961 arg = exp;
962 w->cond_exp = parse_exp_1 (&arg, 0, 0, 0);
963 if (*arg)
964 error (_("Junk at end of expression"));
965 w->cond_exp_valid_block = innermost_block;
966 }
967 else
968 {
969 struct bp_location *loc;
970
971 for (loc = b->loc; loc; loc = loc->next)
972 {
973 arg = exp;
974 loc->cond =
975 parse_exp_1 (&arg, loc->address,
976 block_for_pc (loc->address), 0);
977 if (*arg)
978 error (_("Junk at end of expression"));
979 }
980 }
981 }
982 mark_breakpoint_modified (b);
983
984 breakpoints_changed ();
985 observer_notify_breakpoint_modified (b);
986 }
987
988 /* Completion for the "condition" command. */
989
990 static VEC (char_ptr) *
991 condition_completer (struct cmd_list_element *cmd, char *text, char *word)
992 {
993 char *space;
994
995 text = skip_spaces (text);
996 space = skip_to_space (text);
997 if (*space == '\0')
998 {
999 int len;
1000 struct breakpoint *b;
1001 VEC (char_ptr) *result = NULL;
1002
1003 if (text[0] == '$')
1004 {
1005 /* We don't support completion of history indices. */
1006 if (isdigit (text[1]))
1007 return NULL;
1008 return complete_internalvar (&text[1]);
1009 }
1010
1011 /* We're completing the breakpoint number. */
1012 len = strlen (text);
1013
1014 ALL_BREAKPOINTS (b)
1015 {
1016 int single = b->loc->next == NULL;
1017 struct bp_location *loc;
1018 int count = 1;
1019
1020 for (loc = b->loc; loc; loc = loc->next)
1021 {
1022 char location[50];
1023
1024 if (single)
1025 sprintf (location, "%d", b->number);
1026 else
1027 sprintf (location, "%d.%d", b->number, count);
1028
1029 if (strncmp (location, text, len) == 0)
1030 VEC_safe_push (char_ptr, result, xstrdup (location));
1031
1032 ++count;
1033 }
1034 }
1035
1036 return result;
1037 }
1038
1039 /* We're completing the expression part. */
1040 text = skip_spaces (space);
1041 return expression_completer (cmd, text, word);
1042 }
1043
1044 /* condition N EXP -- set break condition of breakpoint N to EXP. */
1045
1046 static void
1047 condition_command (char *arg, int from_tty)
1048 {
1049 struct breakpoint *b;
1050 char *p;
1051 int bnum;
1052
1053 if (arg == 0)
1054 error_no_arg (_("breakpoint number"));
1055
1056 p = arg;
1057 bnum = get_number (&p);
1058 if (bnum == 0)
1059 error (_("Bad breakpoint argument: '%s'"), arg);
1060
1061 ALL_BREAKPOINTS (b)
1062 if (b->number == bnum)
1063 {
1064 /* Check if this breakpoint has a Python object assigned to
1065 it, and if it has a definition of the "stop"
1066 method. This method and conditions entered into GDB from
1067 the CLI are mutually exclusive. */
1068 if (b->py_bp_object
1069 && gdbpy_breakpoint_has_py_cond (b->py_bp_object))
1070 error (_("Cannot set a condition where a Python 'stop' "
1071 "method has been defined in the breakpoint."));
1072 set_breakpoint_condition (b, p, from_tty);
1073
1074 if (is_breakpoint (b))
1075 update_global_location_list (1);
1076
1077 return;
1078 }
1079
1080 error (_("No breakpoint number %d."), bnum);
1081 }
1082
1083 /* Check that COMMAND do not contain commands that are suitable
1084 only for tracepoints and not suitable for ordinary breakpoints.
1085 Throw if any such commands is found. */
1086
1087 static void
1088 check_no_tracepoint_commands (struct command_line *commands)
1089 {
1090 struct command_line *c;
1091
1092 for (c = commands; c; c = c->next)
1093 {
1094 int i;
1095
1096 if (c->control_type == while_stepping_control)
1097 error (_("The 'while-stepping' command can "
1098 "only be used for tracepoints"));
1099
1100 for (i = 0; i < c->body_count; ++i)
1101 check_no_tracepoint_commands ((c->body_list)[i]);
1102
1103 /* Not that command parsing removes leading whitespace and comment
1104 lines and also empty lines. So, we only need to check for
1105 command directly. */
1106 if (strstr (c->line, "collect ") == c->line)
1107 error (_("The 'collect' command can only be used for tracepoints"));
1108
1109 if (strstr (c->line, "teval ") == c->line)
1110 error (_("The 'teval' command can only be used for tracepoints"));
1111 }
1112 }
1113
1114 /* Encapsulate tests for different types of tracepoints. */
1115
1116 static int
1117 is_tracepoint_type (enum bptype type)
1118 {
1119 return (type == bp_tracepoint
1120 || type == bp_fast_tracepoint
1121 || type == bp_static_tracepoint);
1122 }
1123
1124 int
1125 is_tracepoint (const struct breakpoint *b)
1126 {
1127 return is_tracepoint_type (b->type);
1128 }
1129
1130 /* A helper function that validates that COMMANDS are valid for a
1131 breakpoint. This function will throw an exception if a problem is
1132 found. */
1133
1134 static void
1135 validate_commands_for_breakpoint (struct breakpoint *b,
1136 struct command_line *commands)
1137 {
1138 if (is_tracepoint (b))
1139 {
1140 /* We need to verify that each top-level element of commands is
1141 valid for tracepoints, that there's at most one
1142 while-stepping element, and that while-stepping's body has
1143 valid tracing commands excluding nested while-stepping. */
1144 struct command_line *c;
1145 struct command_line *while_stepping = 0;
1146 for (c = commands; c; c = c->next)
1147 {
1148 if (c->control_type == while_stepping_control)
1149 {
1150 if (b->type == bp_fast_tracepoint)
1151 error (_("The 'while-stepping' command "
1152 "cannot be used for fast tracepoint"));
1153 else if (b->type == bp_static_tracepoint)
1154 error (_("The 'while-stepping' command "
1155 "cannot be used for static tracepoint"));
1156
1157 if (while_stepping)
1158 error (_("The 'while-stepping' command "
1159 "can be used only once"));
1160 else
1161 while_stepping = c;
1162 }
1163 }
1164 if (while_stepping)
1165 {
1166 struct command_line *c2;
1167
1168 gdb_assert (while_stepping->body_count == 1);
1169 c2 = while_stepping->body_list[0];
1170 for (; c2; c2 = c2->next)
1171 {
1172 if (c2->control_type == while_stepping_control)
1173 error (_("The 'while-stepping' command cannot be nested"));
1174 }
1175 }
1176 }
1177 else
1178 {
1179 check_no_tracepoint_commands (commands);
1180 }
1181 }
1182
1183 /* Return a vector of all the static tracepoints set at ADDR. The
1184 caller is responsible for releasing the vector. */
1185
1186 VEC(breakpoint_p) *
1187 static_tracepoints_here (CORE_ADDR addr)
1188 {
1189 struct breakpoint *b;
1190 VEC(breakpoint_p) *found = 0;
1191 struct bp_location *loc;
1192
1193 ALL_BREAKPOINTS (b)
1194 if (b->type == bp_static_tracepoint)
1195 {
1196 for (loc = b->loc; loc; loc = loc->next)
1197 if (loc->address == addr)
1198 VEC_safe_push(breakpoint_p, found, b);
1199 }
1200
1201 return found;
1202 }
1203
1204 /* Set the command list of B to COMMANDS. If breakpoint is tracepoint,
1205 validate that only allowed commands are included. */
1206
1207 void
1208 breakpoint_set_commands (struct breakpoint *b,
1209 struct command_line *commands)
1210 {
1211 validate_commands_for_breakpoint (b, commands);
1212
1213 decref_counted_command_line (&b->commands);
1214 b->commands = alloc_counted_command_line (commands);
1215 breakpoints_changed ();
1216 observer_notify_breakpoint_modified (b);
1217 }
1218
1219 /* Set the internal `silent' flag on the breakpoint. Note that this
1220 is not the same as the "silent" that may appear in the breakpoint's
1221 commands. */
1222
1223 void
1224 breakpoint_set_silent (struct breakpoint *b, int silent)
1225 {
1226 int old_silent = b->silent;
1227
1228 b->silent = silent;
1229 if (old_silent != silent)
1230 observer_notify_breakpoint_modified (b);
1231 }
1232
1233 /* Set the thread for this breakpoint. If THREAD is -1, make the
1234 breakpoint work for any thread. */
1235
1236 void
1237 breakpoint_set_thread (struct breakpoint *b, int thread)
1238 {
1239 int old_thread = b->thread;
1240
1241 b->thread = thread;
1242 if (old_thread != thread)
1243 observer_notify_breakpoint_modified (b);
1244 }
1245
1246 /* Set the task for this breakpoint. If TASK is 0, make the
1247 breakpoint work for any task. */
1248
1249 void
1250 breakpoint_set_task (struct breakpoint *b, int task)
1251 {
1252 int old_task = b->task;
1253
1254 b->task = task;
1255 if (old_task != task)
1256 observer_notify_breakpoint_modified (b);
1257 }
1258
1259 void
1260 check_tracepoint_command (char *line, void *closure)
1261 {
1262 struct breakpoint *b = closure;
1263
1264 validate_actionline (&line, b);
1265 }
1266
1267 /* A structure used to pass information through
1268 map_breakpoint_numbers. */
1269
1270 struct commands_info
1271 {
1272 /* True if the command was typed at a tty. */
1273 int from_tty;
1274
1275 /* The breakpoint range spec. */
1276 char *arg;
1277
1278 /* Non-NULL if the body of the commands are being read from this
1279 already-parsed command. */
1280 struct command_line *control;
1281
1282 /* The command lines read from the user, or NULL if they have not
1283 yet been read. */
1284 struct counted_command_line *cmd;
1285 };
1286
1287 /* A callback for map_breakpoint_numbers that sets the commands for
1288 commands_command. */
1289
1290 static void
1291 do_map_commands_command (struct breakpoint *b, void *data)
1292 {
1293 struct commands_info *info = data;
1294
1295 if (info->cmd == NULL)
1296 {
1297 struct command_line *l;
1298
1299 if (info->control != NULL)
1300 l = copy_command_lines (info->control->body_list[0]);
1301 else
1302 {
1303 struct cleanup *old_chain;
1304 char *str;
1305
1306 str = xstrprintf (_("Type commands for breakpoint(s) "
1307 "%s, one per line."),
1308 info->arg);
1309
1310 old_chain = make_cleanup (xfree, str);
1311
1312 l = read_command_lines (str,
1313 info->from_tty, 1,
1314 (is_tracepoint (b)
1315 ? check_tracepoint_command : 0),
1316 b);
1317
1318 do_cleanups (old_chain);
1319 }
1320
1321 info->cmd = alloc_counted_command_line (l);
1322 }
1323
1324 /* If a breakpoint was on the list more than once, we don't need to
1325 do anything. */
1326 if (b->commands != info->cmd)
1327 {
1328 validate_commands_for_breakpoint (b, info->cmd->commands);
1329 incref_counted_command_line (info->cmd);
1330 decref_counted_command_line (&b->commands);
1331 b->commands = info->cmd;
1332 breakpoints_changed ();
1333 observer_notify_breakpoint_modified (b);
1334 }
1335 }
1336
1337 static void
1338 commands_command_1 (char *arg, int from_tty,
1339 struct command_line *control)
1340 {
1341 struct cleanup *cleanups;
1342 struct commands_info info;
1343
1344 info.from_tty = from_tty;
1345 info.control = control;
1346 info.cmd = NULL;
1347 /* If we read command lines from the user, then `info' will hold an
1348 extra reference to the commands that we must clean up. */
1349 cleanups = make_cleanup_decref_counted_command_line (&info.cmd);
1350
1351 if (arg == NULL || !*arg)
1352 {
1353 if (breakpoint_count - prev_breakpoint_count > 1)
1354 arg = xstrprintf ("%d-%d", prev_breakpoint_count + 1,
1355 breakpoint_count);
1356 else if (breakpoint_count > 0)
1357 arg = xstrprintf ("%d", breakpoint_count);
1358 else
1359 {
1360 /* So that we don't try to free the incoming non-NULL
1361 argument in the cleanup below. Mapping breakpoint
1362 numbers will fail in this case. */
1363 arg = NULL;
1364 }
1365 }
1366 else
1367 /* The command loop has some static state, so we need to preserve
1368 our argument. */
1369 arg = xstrdup (arg);
1370
1371 if (arg != NULL)
1372 make_cleanup (xfree, arg);
1373
1374 info.arg = arg;
1375
1376 map_breakpoint_numbers (arg, do_map_commands_command, &info);
1377
1378 if (info.cmd == NULL)
1379 error (_("No breakpoints specified."));
1380
1381 do_cleanups (cleanups);
1382 }
1383
1384 static void
1385 commands_command (char *arg, int from_tty)
1386 {
1387 commands_command_1 (arg, from_tty, NULL);
1388 }
1389
1390 /* Like commands_command, but instead of reading the commands from
1391 input stream, takes them from an already parsed command structure.
1392
1393 This is used by cli-script.c to DTRT with breakpoint commands
1394 that are part of if and while bodies. */
1395 enum command_control_type
1396 commands_from_control_command (char *arg, struct command_line *cmd)
1397 {
1398 commands_command_1 (arg, 0, cmd);
1399 return simple_control;
1400 }
1401
1402 /* Return non-zero if BL->TARGET_INFO contains valid information. */
1403
1404 static int
1405 bp_location_has_shadow (struct bp_location *bl)
1406 {
1407 if (bl->loc_type != bp_loc_software_breakpoint)
1408 return 0;
1409 if (!bl->inserted)
1410 return 0;
1411 if (bl->target_info.shadow_len == 0)
1412 /* BL isn't valid, or doesn't shadow memory. */
1413 return 0;
1414 return 1;
1415 }
1416
1417 /* Update BUF, which is LEN bytes read from the target address MEMADDR,
1418 by replacing any memory breakpoints with their shadowed contents.
1419
1420 If READBUF is not NULL, this buffer must not overlap with any of
1421 the breakpoint location's shadow_contents buffers. Otherwise,
1422 a failed assertion internal error will be raised.
1423
1424 The range of shadowed area by each bp_location is:
1425 bl->address - bp_location_placed_address_before_address_max
1426 up to bl->address + bp_location_shadow_len_after_address_max
1427 The range we were requested to resolve shadows for is:
1428 memaddr ... memaddr + len
1429 Thus the safe cutoff boundaries for performance optimization are
1430 memaddr + len <= (bl->address
1431 - bp_location_placed_address_before_address_max)
1432 and:
1433 bl->address + bp_location_shadow_len_after_address_max <= memaddr */
1434
1435 void
1436 breakpoint_xfer_memory (gdb_byte *readbuf, gdb_byte *writebuf,
1437 const gdb_byte *writebuf_org,
1438 ULONGEST memaddr, LONGEST len)
1439 {
1440 /* Left boundary, right boundary and median element of our binary
1441 search. */
1442 unsigned bc_l, bc_r, bc;
1443
1444 /* Find BC_L which is a leftmost element which may affect BUF
1445 content. It is safe to report lower value but a failure to
1446 report higher one. */
1447
1448 bc_l = 0;
1449 bc_r = bp_location_count;
1450 while (bc_l + 1 < bc_r)
1451 {
1452 struct bp_location *bl;
1453
1454 bc = (bc_l + bc_r) / 2;
1455 bl = bp_location[bc];
1456
1457 /* Check first BL->ADDRESS will not overflow due to the added
1458 constant. Then advance the left boundary only if we are sure
1459 the BC element can in no way affect the BUF content (MEMADDR
1460 to MEMADDR + LEN range).
1461
1462 Use the BP_LOCATION_SHADOW_LEN_AFTER_ADDRESS_MAX safety
1463 offset so that we cannot miss a breakpoint with its shadow
1464 range tail still reaching MEMADDR. */
1465
1466 if ((bl->address + bp_location_shadow_len_after_address_max
1467 >= bl->address)
1468 && (bl->address + bp_location_shadow_len_after_address_max
1469 <= memaddr))
1470 bc_l = bc;
1471 else
1472 bc_r = bc;
1473 }
1474
1475 /* Due to the binary search above, we need to make sure we pick the
1476 first location that's at BC_L's address. E.g., if there are
1477 multiple locations at the same address, BC_L may end up pointing
1478 at a duplicate location, and miss the "master"/"inserted"
1479 location. Say, given locations L1, L2 and L3 at addresses A and
1480 B:
1481
1482 L1@A, L2@A, L3@B, ...
1483
1484 BC_L could end up pointing at location L2, while the "master"
1485 location could be L1. Since the `loc->inserted' flag is only set
1486 on "master" locations, we'd forget to restore the shadow of L1
1487 and L2. */
1488 while (bc_l > 0
1489 && bp_location[bc_l]->address == bp_location[bc_l - 1]->address)
1490 bc_l--;
1491
1492 /* Now do full processing of the found relevant range of elements. */
1493
1494 for (bc = bc_l; bc < bp_location_count; bc++)
1495 {
1496 struct bp_location *bl = bp_location[bc];
1497 CORE_ADDR bp_addr = 0;
1498 int bp_size = 0;
1499 int bptoffset = 0;
1500
1501 /* bp_location array has BL->OWNER always non-NULL. */
1502 if (bl->owner->type == bp_none)
1503 warning (_("reading through apparently deleted breakpoint #%d?"),
1504 bl->owner->number);
1505
1506 /* Performance optimization: any further element can no longer affect BUF
1507 content. */
1508
1509 if (bl->address >= bp_location_placed_address_before_address_max
1510 && memaddr + len <= (bl->address
1511 - bp_location_placed_address_before_address_max))
1512 break;
1513
1514 if (!bp_location_has_shadow (bl))
1515 continue;
1516 if (!breakpoint_address_match (bl->target_info.placed_address_space, 0,
1517 current_program_space->aspace, 0))
1518 continue;
1519
1520 /* Addresses and length of the part of the breakpoint that
1521 we need to copy. */
1522 bp_addr = bl->target_info.placed_address;
1523 bp_size = bl->target_info.shadow_len;
1524
1525 if (bp_addr + bp_size <= memaddr)
1526 /* The breakpoint is entirely before the chunk of memory we
1527 are reading. */
1528 continue;
1529
1530 if (bp_addr >= memaddr + len)
1531 /* The breakpoint is entirely after the chunk of memory we are
1532 reading. */
1533 continue;
1534
1535 /* Offset within shadow_contents. */
1536 if (bp_addr < memaddr)
1537 {
1538 /* Only copy the second part of the breakpoint. */
1539 bp_size -= memaddr - bp_addr;
1540 bptoffset = memaddr - bp_addr;
1541 bp_addr = memaddr;
1542 }
1543
1544 if (bp_addr + bp_size > memaddr + len)
1545 {
1546 /* Only copy the first part of the breakpoint. */
1547 bp_size -= (bp_addr + bp_size) - (memaddr + len);
1548 }
1549
1550 if (readbuf != NULL)
1551 {
1552 /* Verify that the readbuf buffer does not overlap with
1553 the shadow_contents buffer. */
1554 gdb_assert (bl->target_info.shadow_contents >= readbuf + len
1555 || readbuf >= (bl->target_info.shadow_contents
1556 + bl->target_info.shadow_len));
1557
1558 /* Update the read buffer with this inserted breakpoint's
1559 shadow. */
1560 memcpy (readbuf + bp_addr - memaddr,
1561 bl->target_info.shadow_contents + bptoffset, bp_size);
1562 }
1563 else
1564 {
1565 struct gdbarch *gdbarch = bl->gdbarch;
1566 const unsigned char *bp;
1567 CORE_ADDR placed_address = bl->target_info.placed_address;
1568 unsigned placed_size = bl->target_info.placed_size;
1569
1570 /* Update the shadow with what we want to write to memory. */
1571 memcpy (bl->target_info.shadow_contents + bptoffset,
1572 writebuf_org + bp_addr - memaddr, bp_size);
1573
1574 /* Determine appropriate breakpoint contents and size for this
1575 address. */
1576 bp = gdbarch_breakpoint_from_pc (gdbarch, &placed_address, &placed_size);
1577
1578 /* Update the final write buffer with this inserted
1579 breakpoint's INSN. */
1580 memcpy (writebuf + bp_addr - memaddr, bp + bptoffset, bp_size);
1581 }
1582 }
1583 }
1584 \f
1585
1586 /* Return true if BPT is either a software breakpoint or a hardware
1587 breakpoint. */
1588
1589 int
1590 is_breakpoint (const struct breakpoint *bpt)
1591 {
1592 return (bpt->type == bp_breakpoint
1593 || bpt->type == bp_hardware_breakpoint
1594 || bpt->type == bp_dprintf);
1595 }
1596
1597 /* Return true if BPT is of any hardware watchpoint kind. */
1598
1599 static int
1600 is_hardware_watchpoint (const struct breakpoint *bpt)
1601 {
1602 return (bpt->type == bp_hardware_watchpoint
1603 || bpt->type == bp_read_watchpoint
1604 || bpt->type == bp_access_watchpoint);
1605 }
1606
1607 /* Return true if BPT is of any watchpoint kind, hardware or
1608 software. */
1609
1610 int
1611 is_watchpoint (const struct breakpoint *bpt)
1612 {
1613 return (is_hardware_watchpoint (bpt)
1614 || bpt->type == bp_watchpoint);
1615 }
1616
1617 /* Returns true if the current thread and its running state are safe
1618 to evaluate or update watchpoint B. Watchpoints on local
1619 expressions need to be evaluated in the context of the thread that
1620 was current when the watchpoint was created, and, that thread needs
1621 to be stopped to be able to select the correct frame context.
1622 Watchpoints on global expressions can be evaluated on any thread,
1623 and in any state. It is presently left to the target allowing
1624 memory accesses when threads are running. */
1625
1626 static int
1627 watchpoint_in_thread_scope (struct watchpoint *b)
1628 {
1629 return (b->base.pspace == current_program_space
1630 && (ptid_equal (b->watchpoint_thread, null_ptid)
1631 || (ptid_equal (inferior_ptid, b->watchpoint_thread)
1632 && !is_executing (inferior_ptid))));
1633 }
1634
1635 /* Set watchpoint B to disp_del_at_next_stop, even including its possible
1636 associated bp_watchpoint_scope breakpoint. */
1637
1638 static void
1639 watchpoint_del_at_next_stop (struct watchpoint *w)
1640 {
1641 struct breakpoint *b = &w->base;
1642
1643 if (b->related_breakpoint != b)
1644 {
1645 gdb_assert (b->related_breakpoint->type == bp_watchpoint_scope);
1646 gdb_assert (b->related_breakpoint->related_breakpoint == b);
1647 b->related_breakpoint->disposition = disp_del_at_next_stop;
1648 b->related_breakpoint->related_breakpoint = b->related_breakpoint;
1649 b->related_breakpoint = b;
1650 }
1651 b->disposition = disp_del_at_next_stop;
1652 }
1653
1654 /* Assuming that B is a watchpoint:
1655 - Reparse watchpoint expression, if REPARSE is non-zero
1656 - Evaluate expression and store the result in B->val
1657 - Evaluate the condition if there is one, and store the result
1658 in b->loc->cond.
1659 - Update the list of values that must be watched in B->loc.
1660
1661 If the watchpoint disposition is disp_del_at_next_stop, then do
1662 nothing. If this is local watchpoint that is out of scope, delete
1663 it.
1664
1665 Even with `set breakpoint always-inserted on' the watchpoints are
1666 removed + inserted on each stop here. Normal breakpoints must
1667 never be removed because they might be missed by a running thread
1668 when debugging in non-stop mode. On the other hand, hardware
1669 watchpoints (is_hardware_watchpoint; processed here) are specific
1670 to each LWP since they are stored in each LWP's hardware debug
1671 registers. Therefore, such LWP must be stopped first in order to
1672 be able to modify its hardware watchpoints.
1673
1674 Hardware watchpoints must be reset exactly once after being
1675 presented to the user. It cannot be done sooner, because it would
1676 reset the data used to present the watchpoint hit to the user. And
1677 it must not be done later because it could display the same single
1678 watchpoint hit during multiple GDB stops. Note that the latter is
1679 relevant only to the hardware watchpoint types bp_read_watchpoint
1680 and bp_access_watchpoint. False hit by bp_hardware_watchpoint is
1681 not user-visible - its hit is suppressed if the memory content has
1682 not changed.
1683
1684 The following constraints influence the location where we can reset
1685 hardware watchpoints:
1686
1687 * target_stopped_by_watchpoint and target_stopped_data_address are
1688 called several times when GDB stops.
1689
1690 [linux]
1691 * Multiple hardware watchpoints can be hit at the same time,
1692 causing GDB to stop. GDB only presents one hardware watchpoint
1693 hit at a time as the reason for stopping, and all the other hits
1694 are presented later, one after the other, each time the user
1695 requests the execution to be resumed. Execution is not resumed
1696 for the threads still having pending hit event stored in
1697 LWP_INFO->STATUS. While the watchpoint is already removed from
1698 the inferior on the first stop the thread hit event is kept being
1699 reported from its cached value by linux_nat_stopped_data_address
1700 until the real thread resume happens after the watchpoint gets
1701 presented and thus its LWP_INFO->STATUS gets reset.
1702
1703 Therefore the hardware watchpoint hit can get safely reset on the
1704 watchpoint removal from inferior. */
1705
1706 static void
1707 update_watchpoint (struct watchpoint *b, int reparse)
1708 {
1709 int within_current_scope;
1710 struct frame_id saved_frame_id;
1711 int frame_saved;
1712
1713 /* If this is a local watchpoint, we only want to check if the
1714 watchpoint frame is in scope if the current thread is the thread
1715 that was used to create the watchpoint. */
1716 if (!watchpoint_in_thread_scope (b))
1717 return;
1718
1719 if (b->base.disposition == disp_del_at_next_stop)
1720 return;
1721
1722 frame_saved = 0;
1723
1724 /* Determine if the watchpoint is within scope. */
1725 if (b->exp_valid_block == NULL)
1726 within_current_scope = 1;
1727 else
1728 {
1729 struct frame_info *fi = get_current_frame ();
1730 struct gdbarch *frame_arch = get_frame_arch (fi);
1731 CORE_ADDR frame_pc = get_frame_pc (fi);
1732
1733 /* If we're in a function epilogue, unwinding may not work
1734 properly, so do not attempt to recreate locations at this
1735 point. See similar comments in watchpoint_check. */
1736 if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc))
1737 return;
1738
1739 /* Save the current frame's ID so we can restore it after
1740 evaluating the watchpoint expression on its own frame. */
1741 /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
1742 took a frame parameter, so that we didn't have to change the
1743 selected frame. */
1744 frame_saved = 1;
1745 saved_frame_id = get_frame_id (get_selected_frame (NULL));
1746
1747 fi = frame_find_by_id (b->watchpoint_frame);
1748 within_current_scope = (fi != NULL);
1749 if (within_current_scope)
1750 select_frame (fi);
1751 }
1752
1753 /* We don't free locations. They are stored in the bp_location array
1754 and update_global_location_list will eventually delete them and
1755 remove breakpoints if needed. */
1756 b->base.loc = NULL;
1757
1758 if (within_current_scope && reparse)
1759 {
1760 char *s;
1761
1762 if (b->exp)
1763 {
1764 xfree (b->exp);
1765 b->exp = NULL;
1766 }
1767 s = b->exp_string_reparse ? b->exp_string_reparse : b->exp_string;
1768 b->exp = parse_exp_1 (&s, 0, b->exp_valid_block, 0);
1769 /* If the meaning of expression itself changed, the old value is
1770 no longer relevant. We don't want to report a watchpoint hit
1771 to the user when the old value and the new value may actually
1772 be completely different objects. */
1773 value_free (b->val);
1774 b->val = NULL;
1775 b->val_valid = 0;
1776
1777 /* Note that unlike with breakpoints, the watchpoint's condition
1778 expression is stored in the breakpoint object, not in the
1779 locations (re)created below. */
1780 if (b->base.cond_string != NULL)
1781 {
1782 if (b->cond_exp != NULL)
1783 {
1784 xfree (b->cond_exp);
1785 b->cond_exp = NULL;
1786 }
1787
1788 s = b->base.cond_string;
1789 b->cond_exp = parse_exp_1 (&s, 0, b->cond_exp_valid_block, 0);
1790 }
1791 }
1792
1793 /* If we failed to parse the expression, for example because
1794 it refers to a global variable in a not-yet-loaded shared library,
1795 don't try to insert watchpoint. We don't automatically delete
1796 such watchpoint, though, since failure to parse expression
1797 is different from out-of-scope watchpoint. */
1798 if ( !target_has_execution)
1799 {
1800 /* Without execution, memory can't change. No use to try and
1801 set watchpoint locations. The watchpoint will be reset when
1802 the target gains execution, through breakpoint_re_set. */
1803 }
1804 else if (within_current_scope && b->exp)
1805 {
1806 int pc = 0;
1807 struct value *val_chain, *v, *result, *next;
1808 struct program_space *frame_pspace;
1809
1810 fetch_subexp_value (b->exp, &pc, &v, &result, &val_chain);
1811
1812 /* Avoid setting b->val if it's already set. The meaning of
1813 b->val is 'the last value' user saw, and we should update
1814 it only if we reported that last value to user. As it
1815 happens, the code that reports it updates b->val directly.
1816 We don't keep track of the memory value for masked
1817 watchpoints. */
1818 if (!b->val_valid && !is_masked_watchpoint (&b->base))
1819 {
1820 b->val = v;
1821 b->val_valid = 1;
1822 }
1823
1824 frame_pspace = get_frame_program_space (get_selected_frame (NULL));
1825
1826 /* Look at each value on the value chain. */
1827 for (v = val_chain; v; v = value_next (v))
1828 {
1829 /* If it's a memory location, and GDB actually needed
1830 its contents to evaluate the expression, then we
1831 must watch it. If the first value returned is
1832 still lazy, that means an error occurred reading it;
1833 watch it anyway in case it becomes readable. */
1834 if (VALUE_LVAL (v) == lval_memory
1835 && (v == val_chain || ! value_lazy (v)))
1836 {
1837 struct type *vtype = check_typedef (value_type (v));
1838
1839 /* We only watch structs and arrays if user asked
1840 for it explicitly, never if they just happen to
1841 appear in the middle of some value chain. */
1842 if (v == result
1843 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
1844 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
1845 {
1846 CORE_ADDR addr;
1847 int len, type;
1848 struct bp_location *loc, **tmp;
1849
1850 addr = value_address (v);
1851 len = TYPE_LENGTH (value_type (v));
1852 type = hw_write;
1853 if (b->base.type == bp_read_watchpoint)
1854 type = hw_read;
1855 else if (b->base.type == bp_access_watchpoint)
1856 type = hw_access;
1857
1858 loc = allocate_bp_location (&b->base);
1859 for (tmp = &(b->base.loc); *tmp != NULL; tmp = &((*tmp)->next))
1860 ;
1861 *tmp = loc;
1862 loc->gdbarch = get_type_arch (value_type (v));
1863
1864 loc->pspace = frame_pspace;
1865 loc->address = addr;
1866 loc->length = len;
1867 loc->watchpoint_type = type;
1868 }
1869 }
1870 }
1871
1872 /* Change the type of breakpoint between hardware assisted or
1873 an ordinary watchpoint depending on the hardware support
1874 and free hardware slots. REPARSE is set when the inferior
1875 is started. */
1876 if (reparse)
1877 {
1878 int reg_cnt;
1879 enum bp_loc_type loc_type;
1880 struct bp_location *bl;
1881
1882 reg_cnt = can_use_hardware_watchpoint (val_chain);
1883
1884 if (reg_cnt)
1885 {
1886 int i, target_resources_ok, other_type_used;
1887 enum bptype type;
1888
1889 /* Use an exact watchpoint when there's only one memory region to be
1890 watched, and only one debug register is needed to watch it. */
1891 b->exact = target_exact_watchpoints && reg_cnt == 1;
1892
1893 /* We need to determine how many resources are already
1894 used for all other hardware watchpoints plus this one
1895 to see if we still have enough resources to also fit
1896 this watchpoint in as well. */
1897
1898 /* If this is a software watchpoint, we try to turn it
1899 to a hardware one -- count resources as if B was of
1900 hardware watchpoint type. */
1901 type = b->base.type;
1902 if (type == bp_watchpoint)
1903 type = bp_hardware_watchpoint;
1904
1905 /* This watchpoint may or may not have been placed on
1906 the list yet at this point (it won't be in the list
1907 if we're trying to create it for the first time,
1908 through watch_command), so always account for it
1909 manually. */
1910
1911 /* Count resources used by all watchpoints except B. */
1912 i = hw_watchpoint_used_count_others (&b->base, type, &other_type_used);
1913
1914 /* Add in the resources needed for B. */
1915 i += hw_watchpoint_use_count (&b->base);
1916
1917 target_resources_ok
1918 = target_can_use_hardware_watchpoint (type, i, other_type_used);
1919 if (target_resources_ok <= 0)
1920 {
1921 int sw_mode = b->base.ops->works_in_software_mode (&b->base);
1922
1923 if (target_resources_ok == 0 && !sw_mode)
1924 error (_("Target does not support this type of "
1925 "hardware watchpoint."));
1926 else if (target_resources_ok < 0 && !sw_mode)
1927 error (_("There are not enough available hardware "
1928 "resources for this watchpoint."));
1929
1930 /* Downgrade to software watchpoint. */
1931 b->base.type = bp_watchpoint;
1932 }
1933 else
1934 {
1935 /* If this was a software watchpoint, we've just
1936 found we have enough resources to turn it to a
1937 hardware watchpoint. Otherwise, this is a
1938 nop. */
1939 b->base.type = type;
1940 }
1941 }
1942 else if (!b->base.ops->works_in_software_mode (&b->base))
1943 error (_("Expression cannot be implemented with "
1944 "read/access watchpoint."));
1945 else
1946 b->base.type = bp_watchpoint;
1947
1948 loc_type = (b->base.type == bp_watchpoint? bp_loc_other
1949 : bp_loc_hardware_watchpoint);
1950 for (bl = b->base.loc; bl; bl = bl->next)
1951 bl->loc_type = loc_type;
1952 }
1953
1954 for (v = val_chain; v; v = next)
1955 {
1956 next = value_next (v);
1957 if (v != b->val)
1958 value_free (v);
1959 }
1960
1961 /* If a software watchpoint is not watching any memory, then the
1962 above left it without any location set up. But,
1963 bpstat_stop_status requires a location to be able to report
1964 stops, so make sure there's at least a dummy one. */
1965 if (b->base.type == bp_watchpoint && b->base.loc == NULL)
1966 {
1967 struct breakpoint *base = &b->base;
1968 base->loc = allocate_bp_location (base);
1969 base->loc->pspace = frame_pspace;
1970 base->loc->address = -1;
1971 base->loc->length = -1;
1972 base->loc->watchpoint_type = -1;
1973 }
1974 }
1975 else if (!within_current_scope)
1976 {
1977 printf_filtered (_("\
1978 Watchpoint %d deleted because the program has left the block\n\
1979 in which its expression is valid.\n"),
1980 b->base.number);
1981 watchpoint_del_at_next_stop (b);
1982 }
1983
1984 /* Restore the selected frame. */
1985 if (frame_saved)
1986 select_frame (frame_find_by_id (saved_frame_id));
1987 }
1988
1989
1990 /* Returns 1 iff breakpoint location should be
1991 inserted in the inferior. We don't differentiate the type of BL's owner
1992 (breakpoint vs. tracepoint), although insert_location in tracepoint's
1993 breakpoint_ops is not defined, because in insert_bp_location,
1994 tracepoint's insert_location will not be called. */
1995 static int
1996 should_be_inserted (struct bp_location *bl)
1997 {
1998 if (bl->owner == NULL || !breakpoint_enabled (bl->owner))
1999 return 0;
2000
2001 if (bl->owner->disposition == disp_del_at_next_stop)
2002 return 0;
2003
2004 if (!bl->enabled || bl->shlib_disabled || bl->duplicate)
2005 return 0;
2006
2007 if (user_breakpoint_p (bl->owner) && bl->pspace->executing_startup)
2008 return 0;
2009
2010 /* This is set for example, when we're attached to the parent of a
2011 vfork, and have detached from the child. The child is running
2012 free, and we expect it to do an exec or exit, at which point the
2013 OS makes the parent schedulable again (and the target reports
2014 that the vfork is done). Until the child is done with the shared
2015 memory region, do not insert breakpoints in the parent, otherwise
2016 the child could still trip on the parent's breakpoints. Since
2017 the parent is blocked anyway, it won't miss any breakpoint. */
2018 if (bl->pspace->breakpoints_not_allowed)
2019 return 0;
2020
2021 return 1;
2022 }
2023
2024 /* Same as should_be_inserted but does the check assuming
2025 that the location is not duplicated. */
2026
2027 static int
2028 unduplicated_should_be_inserted (struct bp_location *bl)
2029 {
2030 int result;
2031 const int save_duplicate = bl->duplicate;
2032
2033 bl->duplicate = 0;
2034 result = should_be_inserted (bl);
2035 bl->duplicate = save_duplicate;
2036 return result;
2037 }
2038
2039 /* Parses a conditional described by an expression COND into an
2040 agent expression bytecode suitable for evaluation
2041 by the bytecode interpreter. Return NULL if there was
2042 any error during parsing. */
2043
2044 static struct agent_expr *
2045 parse_cond_to_aexpr (CORE_ADDR scope, struct expression *cond)
2046 {
2047 struct agent_expr *aexpr = NULL;
2048 struct cleanup *old_chain = NULL;
2049 volatile struct gdb_exception ex;
2050
2051 if (!cond)
2052 return NULL;
2053
2054 /* We don't want to stop processing, so catch any errors
2055 that may show up. */
2056 TRY_CATCH (ex, RETURN_MASK_ERROR)
2057 {
2058 aexpr = gen_eval_for_expr (scope, cond);
2059 }
2060
2061 if (ex.reason < 0)
2062 {
2063 /* If we got here, it means the condition could not be parsed to a valid
2064 bytecode expression and thus can't be evaluated on the target's side.
2065 It's no use iterating through the conditions. */
2066 return NULL;
2067 }
2068
2069 /* We have a valid agent expression. */
2070 return aexpr;
2071 }
2072
2073 /* Based on location BL, create a list of breakpoint conditions to be
2074 passed on to the target. If we have duplicated locations with different
2075 conditions, we will add such conditions to the list. The idea is that the
2076 target will evaluate the list of conditions and will only notify GDB when
2077 one of them is true. */
2078
2079 static void
2080 build_target_condition_list (struct bp_location *bl)
2081 {
2082 struct bp_location **locp = NULL, **loc2p;
2083 int null_condition_or_parse_error = 0;
2084 int modified = bl->needs_update;
2085 struct bp_location *loc;
2086
2087 /* This is only meaningful if the target is
2088 evaluating conditions and if the user has
2089 opted for condition evaluation on the target's
2090 side. */
2091 if (gdb_evaluates_breakpoint_condition_p ()
2092 || !target_supports_evaluation_of_breakpoint_conditions ())
2093 return;
2094
2095 /* Do a first pass to check for locations with no assigned
2096 conditions or conditions that fail to parse to a valid agent expression
2097 bytecode. If any of these happen, then it's no use to send conditions
2098 to the target since this location will always trigger and generate a
2099 response back to GDB. */
2100 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2101 {
2102 loc = (*loc2p);
2103 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2104 {
2105 if (modified)
2106 {
2107 struct agent_expr *aexpr;
2108
2109 /* Re-parse the conditions since something changed. In that
2110 case we already freed the condition bytecodes (see
2111 force_breakpoint_reinsertion). We just
2112 need to parse the condition to bytecodes again. */
2113 aexpr = parse_cond_to_aexpr (bl->address, loc->cond);
2114 loc->cond_bytecode = aexpr;
2115
2116 /* Check if we managed to parse the conditional expression
2117 correctly. If not, we will not send this condition
2118 to the target. */
2119 if (aexpr)
2120 continue;
2121 }
2122
2123 /* If we have a NULL bytecode expression, it means something
2124 went wrong or we have a null condition expression. */
2125 if (!loc->cond_bytecode)
2126 {
2127 null_condition_or_parse_error = 1;
2128 break;
2129 }
2130 }
2131 }
2132
2133 /* If any of these happened, it means we will have to evaluate the conditions
2134 for the location's address on gdb's side. It is no use keeping bytecodes
2135 for all the other duplicate locations, thus we free all of them here.
2136
2137 This is so we have a finer control over which locations' conditions are
2138 being evaluated by GDB or the remote stub. */
2139 if (null_condition_or_parse_error)
2140 {
2141 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2142 {
2143 loc = (*loc2p);
2144 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2145 {
2146 /* Only go as far as the first NULL bytecode is
2147 located. */
2148 if (!loc->cond_bytecode)
2149 return;
2150
2151 free_agent_expr (loc->cond_bytecode);
2152 loc->cond_bytecode = NULL;
2153 }
2154 }
2155 }
2156
2157 /* No NULL conditions or failed bytecode generation. Build a condition list
2158 for this location's address. */
2159 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2160 {
2161 loc = (*loc2p);
2162 if (loc->cond
2163 && is_breakpoint (loc->owner)
2164 && loc->pspace->num == bl->pspace->num
2165 && loc->owner->enable_state == bp_enabled
2166 && loc->enabled)
2167 /* Add the condition to the vector. This will be used later to send the
2168 conditions to the target. */
2169 VEC_safe_push (agent_expr_p, bl->target_info.conditions,
2170 loc->cond_bytecode);
2171 }
2172
2173 return;
2174 }
2175
2176 /* Parses a command described by string CMD into an agent expression
2177 bytecode suitable for evaluation by the bytecode interpreter.
2178 Return NULL if there was any error during parsing. */
2179
2180 static struct agent_expr *
2181 parse_cmd_to_aexpr (CORE_ADDR scope, char *cmd)
2182 {
2183 struct cleanup *old_cleanups = 0;
2184 struct expression *expr, **argvec;
2185 struct agent_expr *aexpr = NULL;
2186 struct cleanup *old_chain = NULL;
2187 volatile struct gdb_exception ex;
2188 char *cmdrest;
2189 char *format_start, *format_end;
2190 struct format_piece *fpieces;
2191 int nargs;
2192 struct gdbarch *gdbarch = get_current_arch ();
2193
2194 if (!cmd)
2195 return NULL;
2196
2197 cmdrest = cmd;
2198
2199 if (*cmdrest == ',')
2200 ++cmdrest;
2201 cmdrest = skip_spaces (cmdrest);
2202
2203 if (*cmdrest++ != '"')
2204 error (_("No format string following the location"));
2205
2206 format_start = cmdrest;
2207
2208 fpieces = parse_format_string (&cmdrest);
2209
2210 old_cleanups = make_cleanup (free_format_pieces_cleanup, &fpieces);
2211
2212 format_end = cmdrest;
2213
2214 if (*cmdrest++ != '"')
2215 error (_("Bad format string, non-terminated '\"'."));
2216
2217 cmdrest = skip_spaces (cmdrest);
2218
2219 if (!(*cmdrest == ',' || *cmdrest == '\0'))
2220 error (_("Invalid argument syntax"));
2221
2222 if (*cmdrest == ',')
2223 cmdrest++;
2224 cmdrest = skip_spaces (cmdrest);
2225
2226 /* For each argument, make an expression. */
2227
2228 argvec = (struct expression **) alloca (strlen (cmd)
2229 * sizeof (struct expression *));
2230
2231 nargs = 0;
2232 while (*cmdrest != '\0')
2233 {
2234 char *cmd1;
2235
2236 cmd1 = cmdrest;
2237 expr = parse_exp_1 (&cmd1, scope, block_for_pc (scope), 1);
2238 argvec[nargs++] = expr;
2239 cmdrest = cmd1;
2240 if (*cmdrest == ',')
2241 ++cmdrest;
2242 }
2243
2244 /* We don't want to stop processing, so catch any errors
2245 that may show up. */
2246 TRY_CATCH (ex, RETURN_MASK_ERROR)
2247 {
2248 aexpr = gen_printf (scope, gdbarch, 0, 0,
2249 format_start, format_end - format_start,
2250 fpieces, nargs, argvec);
2251 }
2252
2253 if (ex.reason < 0)
2254 {
2255 /* If we got here, it means the command could not be parsed to a valid
2256 bytecode expression and thus can't be evaluated on the target's side.
2257 It's no use iterating through the other commands. */
2258 return NULL;
2259 }
2260
2261 do_cleanups (old_cleanups);
2262
2263 /* We have a valid agent expression, return it. */
2264 return aexpr;
2265 }
2266
2267 /* Based on location BL, create a list of breakpoint commands to be
2268 passed on to the target. If we have duplicated locations with
2269 different commands, we will add any such to the list. */
2270
2271 static void
2272 build_target_command_list (struct bp_location *bl)
2273 {
2274 struct bp_location **locp = NULL, **loc2p;
2275 int null_command_or_parse_error = 0;
2276 int modified = bl->needs_update;
2277 struct bp_location *loc;
2278
2279 /* For now, limit to agent-style dprintf breakpoints. */
2280 if (bl->owner->type != bp_dprintf
2281 || strcmp (dprintf_style, dprintf_style_agent) != 0)
2282 return;
2283
2284 if (!target_can_run_breakpoint_commands ())
2285 return;
2286
2287 /* Do a first pass to check for locations with no assigned
2288 conditions or conditions that fail to parse to a valid agent expression
2289 bytecode. If any of these happen, then it's no use to send conditions
2290 to the target since this location will always trigger and generate a
2291 response back to GDB. */
2292 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2293 {
2294 loc = (*loc2p);
2295 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2296 {
2297 if (modified)
2298 {
2299 struct agent_expr *aexpr;
2300
2301 /* Re-parse the commands since something changed. In that
2302 case we already freed the command bytecodes (see
2303 force_breakpoint_reinsertion). We just
2304 need to parse the command to bytecodes again. */
2305 aexpr = parse_cmd_to_aexpr (bl->address,
2306 loc->owner->extra_string);
2307 loc->cmd_bytecode = aexpr;
2308
2309 if (!aexpr)
2310 continue;
2311 }
2312
2313 /* If we have a NULL bytecode expression, it means something
2314 went wrong or we have a null command expression. */
2315 if (!loc->cmd_bytecode)
2316 {
2317 null_command_or_parse_error = 1;
2318 break;
2319 }
2320 }
2321 }
2322
2323 /* If anything failed, then we're not doing target-side commands,
2324 and so clean up. */
2325 if (null_command_or_parse_error)
2326 {
2327 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2328 {
2329 loc = (*loc2p);
2330 if (is_breakpoint (loc->owner)
2331 && loc->pspace->num == bl->pspace->num)
2332 {
2333 /* Only go as far as the first NULL bytecode is
2334 located. */
2335 if (!loc->cond_bytecode)
2336 return;
2337
2338 free_agent_expr (loc->cond_bytecode);
2339 loc->cond_bytecode = NULL;
2340 }
2341 }
2342 }
2343
2344 /* No NULL commands or failed bytecode generation. Build a command list
2345 for this location's address. */
2346 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2347 {
2348 loc = (*loc2p);
2349 if (loc->owner->extra_string
2350 && is_breakpoint (loc->owner)
2351 && loc->pspace->num == bl->pspace->num
2352 && loc->owner->enable_state == bp_enabled
2353 && loc->enabled)
2354 /* Add the command to the vector. This will be used later
2355 to send the commands to the target. */
2356 VEC_safe_push (agent_expr_p, bl->target_info.tcommands,
2357 loc->cmd_bytecode);
2358 }
2359
2360 bl->target_info.persist = 0;
2361 /* Maybe flag this location as persistent. */
2362 if (bl->owner->type == bp_dprintf && disconnected_dprintf)
2363 bl->target_info.persist = 1;
2364 }
2365
2366 /* Insert a low-level "breakpoint" of some type. BL is the breakpoint
2367 location. Any error messages are printed to TMP_ERROR_STREAM; and
2368 DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems.
2369 Returns 0 for success, 1 if the bp_location type is not supported or
2370 -1 for failure.
2371
2372 NOTE drow/2003-09-09: This routine could be broken down to an
2373 object-style method for each breakpoint or catchpoint type. */
2374 static int
2375 insert_bp_location (struct bp_location *bl,
2376 struct ui_file *tmp_error_stream,
2377 int *disabled_breaks,
2378 int *hw_breakpoint_error,
2379 int *hw_bp_error_explained_already)
2380 {
2381 int val = 0;
2382 char *hw_bp_err_string = NULL;
2383 struct gdb_exception e;
2384
2385 if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
2386 return 0;
2387
2388 /* Note we don't initialize bl->target_info, as that wipes out
2389 the breakpoint location's shadow_contents if the breakpoint
2390 is still inserted at that location. This in turn breaks
2391 target_read_memory which depends on these buffers when
2392 a memory read is requested at the breakpoint location:
2393 Once the target_info has been wiped, we fail to see that
2394 we have a breakpoint inserted at that address and thus
2395 read the breakpoint instead of returning the data saved in
2396 the breakpoint location's shadow contents. */
2397 bl->target_info.placed_address = bl->address;
2398 bl->target_info.placed_address_space = bl->pspace->aspace;
2399 bl->target_info.length = bl->length;
2400
2401 /* When working with target-side conditions, we must pass all the conditions
2402 for the same breakpoint address down to the target since GDB will not
2403 insert those locations. With a list of breakpoint conditions, the target
2404 can decide when to stop and notify GDB. */
2405
2406 if (is_breakpoint (bl->owner))
2407 {
2408 build_target_condition_list (bl);
2409 build_target_command_list (bl);
2410 /* Reset the modification marker. */
2411 bl->needs_update = 0;
2412 }
2413
2414 if (bl->loc_type == bp_loc_software_breakpoint
2415 || bl->loc_type == bp_loc_hardware_breakpoint)
2416 {
2417 if (bl->owner->type != bp_hardware_breakpoint)
2418 {
2419 /* If the explicitly specified breakpoint type
2420 is not hardware breakpoint, check the memory map to see
2421 if the breakpoint address is in read only memory or not.
2422
2423 Two important cases are:
2424 - location type is not hardware breakpoint, memory
2425 is readonly. We change the type of the location to
2426 hardware breakpoint.
2427 - location type is hardware breakpoint, memory is
2428 read-write. This means we've previously made the
2429 location hardware one, but then the memory map changed,
2430 so we undo.
2431
2432 When breakpoints are removed, remove_breakpoints will use
2433 location types we've just set here, the only possible
2434 problem is that memory map has changed during running
2435 program, but it's not going to work anyway with current
2436 gdb. */
2437 struct mem_region *mr
2438 = lookup_mem_region (bl->target_info.placed_address);
2439
2440 if (mr)
2441 {
2442 if (automatic_hardware_breakpoints)
2443 {
2444 enum bp_loc_type new_type;
2445
2446 if (mr->attrib.mode != MEM_RW)
2447 new_type = bp_loc_hardware_breakpoint;
2448 else
2449 new_type = bp_loc_software_breakpoint;
2450
2451 if (new_type != bl->loc_type)
2452 {
2453 static int said = 0;
2454
2455 bl->loc_type = new_type;
2456 if (!said)
2457 {
2458 fprintf_filtered (gdb_stdout,
2459 _("Note: automatically using "
2460 "hardware breakpoints for "
2461 "read-only addresses.\n"));
2462 said = 1;
2463 }
2464 }
2465 }
2466 else if (bl->loc_type == bp_loc_software_breakpoint
2467 && mr->attrib.mode != MEM_RW)
2468 warning (_("cannot set software breakpoint "
2469 "at readonly address %s"),
2470 paddress (bl->gdbarch, bl->address));
2471 }
2472 }
2473
2474 /* First check to see if we have to handle an overlay. */
2475 if (overlay_debugging == ovly_off
2476 || bl->section == NULL
2477 || !(section_is_overlay (bl->section)))
2478 {
2479 /* No overlay handling: just set the breakpoint. */
2480 TRY_CATCH (e, RETURN_MASK_ALL)
2481 {
2482 val = bl->owner->ops->insert_location (bl);
2483 }
2484 if (e.reason < 0)
2485 {
2486 val = 1;
2487 hw_bp_err_string = (char *) e.message;
2488 }
2489 }
2490 else
2491 {
2492 /* This breakpoint is in an overlay section.
2493 Shall we set a breakpoint at the LMA? */
2494 if (!overlay_events_enabled)
2495 {
2496 /* Yes -- overlay event support is not active,
2497 so we must try to set a breakpoint at the LMA.
2498 This will not work for a hardware breakpoint. */
2499 if (bl->loc_type == bp_loc_hardware_breakpoint)
2500 warning (_("hardware breakpoint %d not supported in overlay!"),
2501 bl->owner->number);
2502 else
2503 {
2504 CORE_ADDR addr = overlay_unmapped_address (bl->address,
2505 bl->section);
2506 /* Set a software (trap) breakpoint at the LMA. */
2507 bl->overlay_target_info = bl->target_info;
2508 bl->overlay_target_info.placed_address = addr;
2509 val = target_insert_breakpoint (bl->gdbarch,
2510 &bl->overlay_target_info);
2511 if (val != 0)
2512 fprintf_unfiltered (tmp_error_stream,
2513 "Overlay breakpoint %d "
2514 "failed: in ROM?\n",
2515 bl->owner->number);
2516 }
2517 }
2518 /* Shall we set a breakpoint at the VMA? */
2519 if (section_is_mapped (bl->section))
2520 {
2521 /* Yes. This overlay section is mapped into memory. */
2522 TRY_CATCH (e, RETURN_MASK_ALL)
2523 {
2524 val = bl->owner->ops->insert_location (bl);
2525 }
2526 if (e.reason < 0)
2527 {
2528 val = 1;
2529 hw_bp_err_string = (char *) e.message;
2530 }
2531 }
2532 else
2533 {
2534 /* No. This breakpoint will not be inserted.
2535 No error, but do not mark the bp as 'inserted'. */
2536 return 0;
2537 }
2538 }
2539
2540 if (val)
2541 {
2542 /* Can't set the breakpoint. */
2543 if (solib_name_from_address (bl->pspace, bl->address))
2544 {
2545 /* See also: disable_breakpoints_in_shlibs. */
2546 val = 0;
2547 bl->shlib_disabled = 1;
2548 observer_notify_breakpoint_modified (bl->owner);
2549 if (!*disabled_breaks)
2550 {
2551 fprintf_unfiltered (tmp_error_stream,
2552 "Cannot insert breakpoint %d.\n",
2553 bl->owner->number);
2554 fprintf_unfiltered (tmp_error_stream,
2555 "Temporarily disabling shared "
2556 "library breakpoints:\n");
2557 }
2558 *disabled_breaks = 1;
2559 fprintf_unfiltered (tmp_error_stream,
2560 "breakpoint #%d\n", bl->owner->number);
2561 }
2562 else
2563 {
2564 if (bl->loc_type == bp_loc_hardware_breakpoint)
2565 {
2566 *hw_breakpoint_error = 1;
2567 *hw_bp_error_explained_already = hw_bp_err_string != NULL;
2568 fprintf_unfiltered (tmp_error_stream,
2569 "Cannot insert hardware breakpoint %d%s",
2570 bl->owner->number, hw_bp_err_string ? ":" : ".\n");
2571 if (hw_bp_err_string)
2572 fprintf_unfiltered (tmp_error_stream, "%s.\n", hw_bp_err_string);
2573 }
2574 else
2575 {
2576 fprintf_unfiltered (tmp_error_stream,
2577 "Cannot insert breakpoint %d.\n",
2578 bl->owner->number);
2579 fprintf_filtered (tmp_error_stream,
2580 "Error accessing memory address ");
2581 fputs_filtered (paddress (bl->gdbarch, bl->address),
2582 tmp_error_stream);
2583 fprintf_filtered (tmp_error_stream, ": %s.\n",
2584 safe_strerror (val));
2585 }
2586
2587 }
2588 }
2589 else
2590 bl->inserted = 1;
2591
2592 return val;
2593 }
2594
2595 else if (bl->loc_type == bp_loc_hardware_watchpoint
2596 /* NOTE drow/2003-09-08: This state only exists for removing
2597 watchpoints. It's not clear that it's necessary... */
2598 && bl->owner->disposition != disp_del_at_next_stop)
2599 {
2600 gdb_assert (bl->owner->ops != NULL
2601 && bl->owner->ops->insert_location != NULL);
2602
2603 val = bl->owner->ops->insert_location (bl);
2604
2605 /* If trying to set a read-watchpoint, and it turns out it's not
2606 supported, try emulating one with an access watchpoint. */
2607 if (val == 1 && bl->watchpoint_type == hw_read)
2608 {
2609 struct bp_location *loc, **loc_temp;
2610
2611 /* But don't try to insert it, if there's already another
2612 hw_access location that would be considered a duplicate
2613 of this one. */
2614 ALL_BP_LOCATIONS (loc, loc_temp)
2615 if (loc != bl
2616 && loc->watchpoint_type == hw_access
2617 && watchpoint_locations_match (bl, loc))
2618 {
2619 bl->duplicate = 1;
2620 bl->inserted = 1;
2621 bl->target_info = loc->target_info;
2622 bl->watchpoint_type = hw_access;
2623 val = 0;
2624 break;
2625 }
2626
2627 if (val == 1)
2628 {
2629 bl->watchpoint_type = hw_access;
2630 val = bl->owner->ops->insert_location (bl);
2631
2632 if (val)
2633 /* Back to the original value. */
2634 bl->watchpoint_type = hw_read;
2635 }
2636 }
2637
2638 bl->inserted = (val == 0);
2639 }
2640
2641 else if (bl->owner->type == bp_catchpoint)
2642 {
2643 gdb_assert (bl->owner->ops != NULL
2644 && bl->owner->ops->insert_location != NULL);
2645
2646 val = bl->owner->ops->insert_location (bl);
2647 if (val)
2648 {
2649 bl->owner->enable_state = bp_disabled;
2650
2651 if (val == 1)
2652 warning (_("\
2653 Error inserting catchpoint %d: Your system does not support this type\n\
2654 of catchpoint."), bl->owner->number);
2655 else
2656 warning (_("Error inserting catchpoint %d."), bl->owner->number);
2657 }
2658
2659 bl->inserted = (val == 0);
2660
2661 /* We've already printed an error message if there was a problem
2662 inserting this catchpoint, and we've disabled the catchpoint,
2663 so just return success. */
2664 return 0;
2665 }
2666
2667 return 0;
2668 }
2669
2670 /* This function is called when program space PSPACE is about to be
2671 deleted. It takes care of updating breakpoints to not reference
2672 PSPACE anymore. */
2673
2674 void
2675 breakpoint_program_space_exit (struct program_space *pspace)
2676 {
2677 struct breakpoint *b, *b_temp;
2678 struct bp_location *loc, **loc_temp;
2679
2680 /* Remove any breakpoint that was set through this program space. */
2681 ALL_BREAKPOINTS_SAFE (b, b_temp)
2682 {
2683 if (b->pspace == pspace)
2684 delete_breakpoint (b);
2685 }
2686
2687 /* Breakpoints set through other program spaces could have locations
2688 bound to PSPACE as well. Remove those. */
2689 ALL_BP_LOCATIONS (loc, loc_temp)
2690 {
2691 struct bp_location *tmp;
2692
2693 if (loc->pspace == pspace)
2694 {
2695 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
2696 if (loc->owner->loc == loc)
2697 loc->owner->loc = loc->next;
2698 else
2699 for (tmp = loc->owner->loc; tmp->next != NULL; tmp = tmp->next)
2700 if (tmp->next == loc)
2701 {
2702 tmp->next = loc->next;
2703 break;
2704 }
2705 }
2706 }
2707
2708 /* Now update the global location list to permanently delete the
2709 removed locations above. */
2710 update_global_location_list (0);
2711 }
2712
2713 /* Make sure all breakpoints are inserted in inferior.
2714 Throws exception on any error.
2715 A breakpoint that is already inserted won't be inserted
2716 again, so calling this function twice is safe. */
2717 void
2718 insert_breakpoints (void)
2719 {
2720 struct breakpoint *bpt;
2721
2722 ALL_BREAKPOINTS (bpt)
2723 if (is_hardware_watchpoint (bpt))
2724 {
2725 struct watchpoint *w = (struct watchpoint *) bpt;
2726
2727 update_watchpoint (w, 0 /* don't reparse. */);
2728 }
2729
2730 update_global_location_list (1);
2731
2732 /* update_global_location_list does not insert breakpoints when
2733 always_inserted_mode is not enabled. Explicitly insert them
2734 now. */
2735 if (!breakpoints_always_inserted_mode ())
2736 insert_breakpoint_locations ();
2737 }
2738
2739 /* Invoke CALLBACK for each of bp_location. */
2740
2741 void
2742 iterate_over_bp_locations (walk_bp_location_callback callback)
2743 {
2744 struct bp_location *loc, **loc_tmp;
2745
2746 ALL_BP_LOCATIONS (loc, loc_tmp)
2747 {
2748 callback (loc, NULL);
2749 }
2750 }
2751
2752 /* This is used when we need to synch breakpoint conditions between GDB and the
2753 target. It is the case with deleting and disabling of breakpoints when using
2754 always-inserted mode. */
2755
2756 static void
2757 update_inserted_breakpoint_locations (void)
2758 {
2759 struct bp_location *bl, **blp_tmp;
2760 int error_flag = 0;
2761 int val = 0;
2762 int disabled_breaks = 0;
2763 int hw_breakpoint_error = 0;
2764 int hw_bp_details_reported = 0;
2765
2766 struct ui_file *tmp_error_stream = mem_fileopen ();
2767 struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_error_stream);
2768
2769 /* Explicitly mark the warning -- this will only be printed if
2770 there was an error. */
2771 fprintf_unfiltered (tmp_error_stream, "Warning:\n");
2772
2773 save_current_space_and_thread ();
2774
2775 ALL_BP_LOCATIONS (bl, blp_tmp)
2776 {
2777 /* We only want to update software breakpoints and hardware
2778 breakpoints. */
2779 if (!is_breakpoint (bl->owner))
2780 continue;
2781
2782 /* We only want to update locations that are already inserted
2783 and need updating. This is to avoid unwanted insertion during
2784 deletion of breakpoints. */
2785 if (!bl->inserted || (bl->inserted && !bl->needs_update))
2786 continue;
2787
2788 switch_to_program_space_and_thread (bl->pspace);
2789
2790 /* For targets that support global breakpoints, there's no need
2791 to select an inferior to insert breakpoint to. In fact, even
2792 if we aren't attached to any process yet, we should still
2793 insert breakpoints. */
2794 if (!gdbarch_has_global_breakpoints (target_gdbarch)
2795 && ptid_equal (inferior_ptid, null_ptid))
2796 continue;
2797
2798 val = insert_bp_location (bl, tmp_error_stream, &disabled_breaks,
2799 &hw_breakpoint_error, &hw_bp_details_reported);
2800 if (val)
2801 error_flag = val;
2802 }
2803
2804 if (error_flag)
2805 {
2806 target_terminal_ours_for_output ();
2807 error_stream (tmp_error_stream);
2808 }
2809
2810 do_cleanups (cleanups);
2811 }
2812
2813 /* Used when starting or continuing the program. */
2814
2815 static void
2816 insert_breakpoint_locations (void)
2817 {
2818 struct breakpoint *bpt;
2819 struct bp_location *bl, **blp_tmp;
2820 int error_flag = 0;
2821 int val = 0;
2822 int disabled_breaks = 0;
2823 int hw_breakpoint_error = 0;
2824 int hw_bp_error_explained_already = 0;
2825
2826 struct ui_file *tmp_error_stream = mem_fileopen ();
2827 struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_error_stream);
2828
2829 /* Explicitly mark the warning -- this will only be printed if
2830 there was an error. */
2831 fprintf_unfiltered (tmp_error_stream, "Warning:\n");
2832
2833 save_current_space_and_thread ();
2834
2835 ALL_BP_LOCATIONS (bl, blp_tmp)
2836 {
2837 if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
2838 continue;
2839
2840 /* There is no point inserting thread-specific breakpoints if
2841 the thread no longer exists. ALL_BP_LOCATIONS bp_location
2842 has BL->OWNER always non-NULL. */
2843 if (bl->owner->thread != -1
2844 && !valid_thread_id (bl->owner->thread))
2845 continue;
2846
2847 switch_to_program_space_and_thread (bl->pspace);
2848
2849 /* For targets that support global breakpoints, there's no need
2850 to select an inferior to insert breakpoint to. In fact, even
2851 if we aren't attached to any process yet, we should still
2852 insert breakpoints. */
2853 if (!gdbarch_has_global_breakpoints (target_gdbarch)
2854 && ptid_equal (inferior_ptid, null_ptid))
2855 continue;
2856
2857 val = insert_bp_location (bl, tmp_error_stream, &disabled_breaks,
2858 &hw_breakpoint_error, &hw_bp_error_explained_already);
2859 if (val)
2860 error_flag = val;
2861 }
2862
2863 /* If we failed to insert all locations of a watchpoint, remove
2864 them, as half-inserted watchpoint is of limited use. */
2865 ALL_BREAKPOINTS (bpt)
2866 {
2867 int some_failed = 0;
2868 struct bp_location *loc;
2869
2870 if (!is_hardware_watchpoint (bpt))
2871 continue;
2872
2873 if (!breakpoint_enabled (bpt))
2874 continue;
2875
2876 if (bpt->disposition == disp_del_at_next_stop)
2877 continue;
2878
2879 for (loc = bpt->loc; loc; loc = loc->next)
2880 if (!loc->inserted && should_be_inserted (loc))
2881 {
2882 some_failed = 1;
2883 break;
2884 }
2885 if (some_failed)
2886 {
2887 for (loc = bpt->loc; loc; loc = loc->next)
2888 if (loc->inserted)
2889 remove_breakpoint (loc, mark_uninserted);
2890
2891 hw_breakpoint_error = 1;
2892 fprintf_unfiltered (tmp_error_stream,
2893 "Could not insert hardware watchpoint %d.\n",
2894 bpt->number);
2895 error_flag = -1;
2896 }
2897 }
2898
2899 if (error_flag)
2900 {
2901 /* If a hardware breakpoint or watchpoint was inserted, add a
2902 message about possibly exhausted resources. */
2903 if (hw_breakpoint_error && !hw_bp_error_explained_already)
2904 {
2905 fprintf_unfiltered (tmp_error_stream,
2906 "Could not insert hardware breakpoints:\n\
2907 You may have requested too many hardware breakpoints/watchpoints.\n");
2908 }
2909 target_terminal_ours_for_output ();
2910 error_stream (tmp_error_stream);
2911 }
2912
2913 do_cleanups (cleanups);
2914 }
2915
2916 /* Used when the program stops.
2917 Returns zero if successful, or non-zero if there was a problem
2918 removing a breakpoint location. */
2919
2920 int
2921 remove_breakpoints (void)
2922 {
2923 struct bp_location *bl, **blp_tmp;
2924 int val = 0;
2925
2926 ALL_BP_LOCATIONS (bl, blp_tmp)
2927 {
2928 if (bl->inserted && !is_tracepoint (bl->owner))
2929 val |= remove_breakpoint (bl, mark_uninserted);
2930 }
2931 return val;
2932 }
2933
2934 /* Remove breakpoints of process PID. */
2935
2936 int
2937 remove_breakpoints_pid (int pid)
2938 {
2939 struct bp_location *bl, **blp_tmp;
2940 int val;
2941 struct inferior *inf = find_inferior_pid (pid);
2942
2943 ALL_BP_LOCATIONS (bl, blp_tmp)
2944 {
2945 if (bl->pspace != inf->pspace)
2946 continue;
2947
2948 if (bl->owner->type == bp_dprintf)
2949 continue;
2950
2951 if (bl->inserted)
2952 {
2953 val = remove_breakpoint (bl, mark_uninserted);
2954 if (val != 0)
2955 return val;
2956 }
2957 }
2958 return 0;
2959 }
2960
2961 int
2962 reattach_breakpoints (int pid)
2963 {
2964 struct cleanup *old_chain;
2965 struct bp_location *bl, **blp_tmp;
2966 int val;
2967 struct ui_file *tmp_error_stream;
2968 int dummy1 = 0, dummy2 = 0, dummy3 = 0;
2969 struct inferior *inf;
2970 struct thread_info *tp;
2971
2972 tp = any_live_thread_of_process (pid);
2973 if (tp == NULL)
2974 return 1;
2975
2976 inf = find_inferior_pid (pid);
2977 old_chain = save_inferior_ptid ();
2978
2979 inferior_ptid = tp->ptid;
2980
2981 tmp_error_stream = mem_fileopen ();
2982 make_cleanup_ui_file_delete (tmp_error_stream);
2983
2984 ALL_BP_LOCATIONS (bl, blp_tmp)
2985 {
2986 if (bl->pspace != inf->pspace)
2987 continue;
2988
2989 if (bl->inserted)
2990 {
2991 bl->inserted = 0;
2992 val = insert_bp_location (bl, tmp_error_stream, &dummy1, &dummy2, &dummy3);
2993 if (val != 0)
2994 {
2995 do_cleanups (old_chain);
2996 return val;
2997 }
2998 }
2999 }
3000 do_cleanups (old_chain);
3001 return 0;
3002 }
3003
3004 static int internal_breakpoint_number = -1;
3005
3006 /* Set the breakpoint number of B, depending on the value of INTERNAL.
3007 If INTERNAL is non-zero, the breakpoint number will be populated
3008 from internal_breakpoint_number and that variable decremented.
3009 Otherwise the breakpoint number will be populated from
3010 breakpoint_count and that value incremented. Internal breakpoints
3011 do not set the internal var bpnum. */
3012 static void
3013 set_breakpoint_number (int internal, struct breakpoint *b)
3014 {
3015 if (internal)
3016 b->number = internal_breakpoint_number--;
3017 else
3018 {
3019 set_breakpoint_count (breakpoint_count + 1);
3020 b->number = breakpoint_count;
3021 }
3022 }
3023
3024 static struct breakpoint *
3025 create_internal_breakpoint (struct gdbarch *gdbarch,
3026 CORE_ADDR address, enum bptype type,
3027 const struct breakpoint_ops *ops)
3028 {
3029 struct symtab_and_line sal;
3030 struct breakpoint *b;
3031
3032 init_sal (&sal); /* Initialize to zeroes. */
3033
3034 sal.pc = address;
3035 sal.section = find_pc_overlay (sal.pc);
3036 sal.pspace = current_program_space;
3037
3038 b = set_raw_breakpoint (gdbarch, sal, type, ops);
3039 b->number = internal_breakpoint_number--;
3040 b->disposition = disp_donttouch;
3041
3042 return b;
3043 }
3044
3045 static const char *const longjmp_names[] =
3046 {
3047 "longjmp", "_longjmp", "siglongjmp", "_siglongjmp"
3048 };
3049 #define NUM_LONGJMP_NAMES ARRAY_SIZE(longjmp_names)
3050
3051 /* Per-objfile data private to breakpoint.c. */
3052 struct breakpoint_objfile_data
3053 {
3054 /* Minimal symbol for "_ovly_debug_event" (if any). */
3055 struct minimal_symbol *overlay_msym;
3056
3057 /* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any). */
3058 struct minimal_symbol *longjmp_msym[NUM_LONGJMP_NAMES];
3059
3060 /* True if we have looked for longjmp probes. */
3061 int longjmp_searched;
3062
3063 /* SystemTap probe points for longjmp (if any). */
3064 VEC (probe_p) *longjmp_probes;
3065
3066 /* Minimal symbol for "std::terminate()" (if any). */
3067 struct minimal_symbol *terminate_msym;
3068
3069 /* Minimal symbol for "_Unwind_DebugHook" (if any). */
3070 struct minimal_symbol *exception_msym;
3071
3072 /* True if we have looked for exception probes. */
3073 int exception_searched;
3074
3075 /* SystemTap probe points for unwinding (if any). */
3076 VEC (probe_p) *exception_probes;
3077 };
3078
3079 static const struct objfile_data *breakpoint_objfile_key;
3080
3081 /* Minimal symbol not found sentinel. */
3082 static struct minimal_symbol msym_not_found;
3083
3084 /* Returns TRUE if MSYM point to the "not found" sentinel. */
3085
3086 static int
3087 msym_not_found_p (const struct minimal_symbol *msym)
3088 {
3089 return msym == &msym_not_found;
3090 }
3091
3092 /* Return per-objfile data needed by breakpoint.c.
3093 Allocate the data if necessary. */
3094
3095 static struct breakpoint_objfile_data *
3096 get_breakpoint_objfile_data (struct objfile *objfile)
3097 {
3098 struct breakpoint_objfile_data *bp_objfile_data;
3099
3100 bp_objfile_data = objfile_data (objfile, breakpoint_objfile_key);
3101 if (bp_objfile_data == NULL)
3102 {
3103 bp_objfile_data = obstack_alloc (&objfile->objfile_obstack,
3104 sizeof (*bp_objfile_data));
3105
3106 memset (bp_objfile_data, 0, sizeof (*bp_objfile_data));
3107 set_objfile_data (objfile, breakpoint_objfile_key, bp_objfile_data);
3108 }
3109 return bp_objfile_data;
3110 }
3111
3112 static void
3113 free_breakpoint_probes (struct objfile *obj, void *data)
3114 {
3115 struct breakpoint_objfile_data *bp_objfile_data = data;
3116
3117 VEC_free (probe_p, bp_objfile_data->longjmp_probes);
3118 VEC_free (probe_p, bp_objfile_data->exception_probes);
3119 }
3120
3121 static void
3122 create_overlay_event_breakpoint (void)
3123 {
3124 struct objfile *objfile;
3125 const char *const func_name = "_ovly_debug_event";
3126
3127 ALL_OBJFILES (objfile)
3128 {
3129 struct breakpoint *b;
3130 struct breakpoint_objfile_data *bp_objfile_data;
3131 CORE_ADDR addr;
3132
3133 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3134
3135 if (msym_not_found_p (bp_objfile_data->overlay_msym))
3136 continue;
3137
3138 if (bp_objfile_data->overlay_msym == NULL)
3139 {
3140 struct minimal_symbol *m;
3141
3142 m = lookup_minimal_symbol_text (func_name, objfile);
3143 if (m == NULL)
3144 {
3145 /* Avoid future lookups in this objfile. */
3146 bp_objfile_data->overlay_msym = &msym_not_found;
3147 continue;
3148 }
3149 bp_objfile_data->overlay_msym = m;
3150 }
3151
3152 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym);
3153 b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
3154 bp_overlay_event,
3155 &internal_breakpoint_ops);
3156 b->addr_string = xstrdup (func_name);
3157
3158 if (overlay_debugging == ovly_auto)
3159 {
3160 b->enable_state = bp_enabled;
3161 overlay_events_enabled = 1;
3162 }
3163 else
3164 {
3165 b->enable_state = bp_disabled;
3166 overlay_events_enabled = 0;
3167 }
3168 }
3169 update_global_location_list (1);
3170 }
3171
3172 static void
3173 create_longjmp_master_breakpoint (void)
3174 {
3175 struct program_space *pspace;
3176 struct cleanup *old_chain;
3177
3178 old_chain = save_current_program_space ();
3179
3180 ALL_PSPACES (pspace)
3181 {
3182 struct objfile *objfile;
3183
3184 set_current_program_space (pspace);
3185
3186 ALL_OBJFILES (objfile)
3187 {
3188 int i;
3189 struct gdbarch *gdbarch;
3190 struct breakpoint_objfile_data *bp_objfile_data;
3191
3192 gdbarch = get_objfile_arch (objfile);
3193 if (!gdbarch_get_longjmp_target_p (gdbarch))
3194 continue;
3195
3196 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3197
3198 if (!bp_objfile_data->longjmp_searched)
3199 {
3200 bp_objfile_data->longjmp_probes
3201 = find_probes_in_objfile (objfile, "libc", "longjmp");
3202 bp_objfile_data->longjmp_searched = 1;
3203 }
3204
3205 if (bp_objfile_data->longjmp_probes != NULL)
3206 {
3207 int i;
3208 struct probe *probe;
3209 struct gdbarch *gdbarch = get_objfile_arch (objfile);
3210
3211 for (i = 0;
3212 VEC_iterate (probe_p,
3213 bp_objfile_data->longjmp_probes,
3214 i, probe);
3215 ++i)
3216 {
3217 struct breakpoint *b;
3218
3219 b = create_internal_breakpoint (gdbarch, probe->address,
3220 bp_longjmp_master,
3221 &internal_breakpoint_ops);
3222 b->addr_string = xstrdup ("-probe-stap libc:longjmp");
3223 b->enable_state = bp_disabled;
3224 }
3225
3226 continue;
3227 }
3228
3229 for (i = 0; i < NUM_LONGJMP_NAMES; i++)
3230 {
3231 struct breakpoint *b;
3232 const char *func_name;
3233 CORE_ADDR addr;
3234
3235 if (msym_not_found_p (bp_objfile_data->longjmp_msym[i]))
3236 continue;
3237
3238 func_name = longjmp_names[i];
3239 if (bp_objfile_data->longjmp_msym[i] == NULL)
3240 {
3241 struct minimal_symbol *m;
3242
3243 m = lookup_minimal_symbol_text (func_name, objfile);
3244 if (m == NULL)
3245 {
3246 /* Prevent future lookups in this objfile. */
3247 bp_objfile_data->longjmp_msym[i] = &msym_not_found;
3248 continue;
3249 }
3250 bp_objfile_data->longjmp_msym[i] = m;
3251 }
3252
3253 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]);
3254 b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master,
3255 &internal_breakpoint_ops);
3256 b->addr_string = xstrdup (func_name);
3257 b->enable_state = bp_disabled;
3258 }
3259 }
3260 }
3261 update_global_location_list (1);
3262
3263 do_cleanups (old_chain);
3264 }
3265
3266 /* Create a master std::terminate breakpoint. */
3267 static void
3268 create_std_terminate_master_breakpoint (void)
3269 {
3270 struct program_space *pspace;
3271 struct cleanup *old_chain;
3272 const char *const func_name = "std::terminate()";
3273
3274 old_chain = save_current_program_space ();
3275
3276 ALL_PSPACES (pspace)
3277 {
3278 struct objfile *objfile;
3279 CORE_ADDR addr;
3280
3281 set_current_program_space (pspace);
3282
3283 ALL_OBJFILES (objfile)
3284 {
3285 struct breakpoint *b;
3286 struct breakpoint_objfile_data *bp_objfile_data;
3287
3288 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3289
3290 if (msym_not_found_p (bp_objfile_data->terminate_msym))
3291 continue;
3292
3293 if (bp_objfile_data->terminate_msym == NULL)
3294 {
3295 struct minimal_symbol *m;
3296
3297 m = lookup_minimal_symbol (func_name, NULL, objfile);
3298 if (m == NULL || (MSYMBOL_TYPE (m) != mst_text
3299 && MSYMBOL_TYPE (m) != mst_file_text))
3300 {
3301 /* Prevent future lookups in this objfile. */
3302 bp_objfile_data->terminate_msym = &msym_not_found;
3303 continue;
3304 }
3305 bp_objfile_data->terminate_msym = m;
3306 }
3307
3308 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym);
3309 b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
3310 bp_std_terminate_master,
3311 &internal_breakpoint_ops);
3312 b->addr_string = xstrdup (func_name);
3313 b->enable_state = bp_disabled;
3314 }
3315 }
3316
3317 update_global_location_list (1);
3318
3319 do_cleanups (old_chain);
3320 }
3321
3322 /* Install a master breakpoint on the unwinder's debug hook. */
3323
3324 static void
3325 create_exception_master_breakpoint (void)
3326 {
3327 struct objfile *objfile;
3328 const char *const func_name = "_Unwind_DebugHook";
3329
3330 ALL_OBJFILES (objfile)
3331 {
3332 struct breakpoint *b;
3333 struct gdbarch *gdbarch;
3334 struct breakpoint_objfile_data *bp_objfile_data;
3335 CORE_ADDR addr;
3336
3337 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3338
3339 /* We prefer the SystemTap probe point if it exists. */
3340 if (!bp_objfile_data->exception_searched)
3341 {
3342 bp_objfile_data->exception_probes
3343 = find_probes_in_objfile (objfile, "libgcc", "unwind");
3344 bp_objfile_data->exception_searched = 1;
3345 }
3346
3347 if (bp_objfile_data->exception_probes != NULL)
3348 {
3349 struct gdbarch *gdbarch = get_objfile_arch (objfile);
3350 int i;
3351 struct probe *probe;
3352
3353 for (i = 0;
3354 VEC_iterate (probe_p,
3355 bp_objfile_data->exception_probes,
3356 i, probe);
3357 ++i)
3358 {
3359 struct breakpoint *b;
3360
3361 b = create_internal_breakpoint (gdbarch, probe->address,
3362 bp_exception_master,
3363 &internal_breakpoint_ops);
3364 b->addr_string = xstrdup ("-probe-stap libgcc:unwind");
3365 b->enable_state = bp_disabled;
3366 }
3367
3368 continue;
3369 }
3370
3371 /* Otherwise, try the hook function. */
3372
3373 if (msym_not_found_p (bp_objfile_data->exception_msym))
3374 continue;
3375
3376 gdbarch = get_objfile_arch (objfile);
3377
3378 if (bp_objfile_data->exception_msym == NULL)
3379 {
3380 struct minimal_symbol *debug_hook;
3381
3382 debug_hook = lookup_minimal_symbol (func_name, NULL, objfile);
3383 if (debug_hook == NULL)
3384 {
3385 bp_objfile_data->exception_msym = &msym_not_found;
3386 continue;
3387 }
3388
3389 bp_objfile_data->exception_msym = debug_hook;
3390 }
3391
3392 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
3393 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
3394 &current_target);
3395 b = create_internal_breakpoint (gdbarch, addr, bp_exception_master,
3396 &internal_breakpoint_ops);
3397 b->addr_string = xstrdup (func_name);
3398 b->enable_state = bp_disabled;
3399 }
3400
3401 update_global_location_list (1);
3402 }
3403
3404 void
3405 update_breakpoints_after_exec (void)
3406 {
3407 struct breakpoint *b, *b_tmp;
3408 struct bp_location *bploc, **bplocp_tmp;
3409
3410 /* We're about to delete breakpoints from GDB's lists. If the
3411 INSERTED flag is true, GDB will try to lift the breakpoints by
3412 writing the breakpoints' "shadow contents" back into memory. The
3413 "shadow contents" are NOT valid after an exec, so GDB should not
3414 do that. Instead, the target is responsible from marking
3415 breakpoints out as soon as it detects an exec. We don't do that
3416 here instead, because there may be other attempts to delete
3417 breakpoints after detecting an exec and before reaching here. */
3418 ALL_BP_LOCATIONS (bploc, bplocp_tmp)
3419 if (bploc->pspace == current_program_space)
3420 gdb_assert (!bploc->inserted);
3421
3422 ALL_BREAKPOINTS_SAFE (b, b_tmp)
3423 {
3424 if (b->pspace != current_program_space)
3425 continue;
3426
3427 /* Solib breakpoints must be explicitly reset after an exec(). */
3428 if (b->type == bp_shlib_event)
3429 {
3430 delete_breakpoint (b);
3431 continue;
3432 }
3433
3434 /* JIT breakpoints must be explicitly reset after an exec(). */
3435 if (b->type == bp_jit_event)
3436 {
3437 delete_breakpoint (b);
3438 continue;
3439 }
3440
3441 /* Thread event breakpoints must be set anew after an exec(),
3442 as must overlay event and longjmp master breakpoints. */
3443 if (b->type == bp_thread_event || b->type == bp_overlay_event
3444 || b->type == bp_longjmp_master || b->type == bp_std_terminate_master
3445 || b->type == bp_exception_master)
3446 {
3447 delete_breakpoint (b);
3448 continue;
3449 }
3450
3451 /* Step-resume breakpoints are meaningless after an exec(). */
3452 if (b->type == bp_step_resume || b->type == bp_hp_step_resume)
3453 {
3454 delete_breakpoint (b);
3455 continue;
3456 }
3457
3458 /* Longjmp and longjmp-resume breakpoints are also meaningless
3459 after an exec. */
3460 if (b->type == bp_longjmp || b->type == bp_longjmp_resume
3461 || b->type == bp_longjmp_call_dummy
3462 || b->type == bp_exception || b->type == bp_exception_resume)
3463 {
3464 delete_breakpoint (b);
3465 continue;
3466 }
3467
3468 if (b->type == bp_catchpoint)
3469 {
3470 /* For now, none of the bp_catchpoint breakpoints need to
3471 do anything at this point. In the future, if some of
3472 the catchpoints need to something, we will need to add
3473 a new method, and call this method from here. */
3474 continue;
3475 }
3476
3477 /* bp_finish is a special case. The only way we ought to be able
3478 to see one of these when an exec() has happened, is if the user
3479 caught a vfork, and then said "finish". Ordinarily a finish just
3480 carries them to the call-site of the current callee, by setting
3481 a temporary bp there and resuming. But in this case, the finish
3482 will carry them entirely through the vfork & exec.
3483
3484 We don't want to allow a bp_finish to remain inserted now. But
3485 we can't safely delete it, 'cause finish_command has a handle to
3486 the bp on a bpstat, and will later want to delete it. There's a
3487 chance (and I've seen it happen) that if we delete the bp_finish
3488 here, that its storage will get reused by the time finish_command
3489 gets 'round to deleting the "use to be a bp_finish" breakpoint.
3490 We really must allow finish_command to delete a bp_finish.
3491
3492 In the absence of a general solution for the "how do we know
3493 it's safe to delete something others may have handles to?"
3494 problem, what we'll do here is just uninsert the bp_finish, and
3495 let finish_command delete it.
3496
3497 (We know the bp_finish is "doomed" in the sense that it's
3498 momentary, and will be deleted as soon as finish_command sees
3499 the inferior stopped. So it doesn't matter that the bp's
3500 address is probably bogus in the new a.out, unlike e.g., the
3501 solib breakpoints.) */
3502
3503 if (b->type == bp_finish)
3504 {
3505 continue;
3506 }
3507
3508 /* Without a symbolic address, we have little hope of the
3509 pre-exec() address meaning the same thing in the post-exec()
3510 a.out. */
3511 if (b->addr_string == NULL)
3512 {
3513 delete_breakpoint (b);
3514 continue;
3515 }
3516 }
3517 /* FIXME what about longjmp breakpoints? Re-create them here? */
3518 create_overlay_event_breakpoint ();
3519 create_longjmp_master_breakpoint ();
3520 create_std_terminate_master_breakpoint ();
3521 create_exception_master_breakpoint ();
3522 }
3523
3524 int
3525 detach_breakpoints (ptid_t ptid)
3526 {
3527 struct bp_location *bl, **blp_tmp;
3528 int val = 0;
3529 struct cleanup *old_chain = save_inferior_ptid ();
3530 struct inferior *inf = current_inferior ();
3531
3532 if (PIDGET (ptid) == PIDGET (inferior_ptid))
3533 error (_("Cannot detach breakpoints of inferior_ptid"));
3534
3535 /* Set inferior_ptid; remove_breakpoint_1 uses this global. */
3536 inferior_ptid = ptid;
3537 ALL_BP_LOCATIONS (bl, blp_tmp)
3538 {
3539 if (bl->pspace != inf->pspace)
3540 continue;
3541
3542 if (bl->inserted)
3543 val |= remove_breakpoint_1 (bl, mark_inserted);
3544 }
3545
3546 /* Detach single-step breakpoints as well. */
3547 detach_single_step_breakpoints ();
3548
3549 do_cleanups (old_chain);
3550 return val;
3551 }
3552
3553 /* Remove the breakpoint location BL from the current address space.
3554 Note that this is used to detach breakpoints from a child fork.
3555 When we get here, the child isn't in the inferior list, and neither
3556 do we have objects to represent its address space --- we should
3557 *not* look at bl->pspace->aspace here. */
3558
3559 static int
3560 remove_breakpoint_1 (struct bp_location *bl, insertion_state_t is)
3561 {
3562 int val;
3563
3564 /* BL is never in moribund_locations by our callers. */
3565 gdb_assert (bl->owner != NULL);
3566
3567 if (bl->owner->enable_state == bp_permanent)
3568 /* Permanent breakpoints cannot be inserted or removed. */
3569 return 0;
3570
3571 /* The type of none suggests that owner is actually deleted.
3572 This should not ever happen. */
3573 gdb_assert (bl->owner->type != bp_none);
3574
3575 if (bl->loc_type == bp_loc_software_breakpoint
3576 || bl->loc_type == bp_loc_hardware_breakpoint)
3577 {
3578 /* "Normal" instruction breakpoint: either the standard
3579 trap-instruction bp (bp_breakpoint), or a
3580 bp_hardware_breakpoint. */
3581
3582 /* First check to see if we have to handle an overlay. */
3583 if (overlay_debugging == ovly_off
3584 || bl->section == NULL
3585 || !(section_is_overlay (bl->section)))
3586 {
3587 /* No overlay handling: just remove the breakpoint. */
3588 val = bl->owner->ops->remove_location (bl);
3589 }
3590 else
3591 {
3592 /* This breakpoint is in an overlay section.
3593 Did we set a breakpoint at the LMA? */
3594 if (!overlay_events_enabled)
3595 {
3596 /* Yes -- overlay event support is not active, so we
3597 should have set a breakpoint at the LMA. Remove it.
3598 */
3599 /* Ignore any failures: if the LMA is in ROM, we will
3600 have already warned when we failed to insert it. */
3601 if (bl->loc_type == bp_loc_hardware_breakpoint)
3602 target_remove_hw_breakpoint (bl->gdbarch,
3603 &bl->overlay_target_info);
3604 else
3605 target_remove_breakpoint (bl->gdbarch,
3606 &bl->overlay_target_info);
3607 }
3608 /* Did we set a breakpoint at the VMA?
3609 If so, we will have marked the breakpoint 'inserted'. */
3610 if (bl->inserted)
3611 {
3612 /* Yes -- remove it. Previously we did not bother to
3613 remove the breakpoint if the section had been
3614 unmapped, but let's not rely on that being safe. We
3615 don't know what the overlay manager might do. */
3616
3617 /* However, we should remove *software* breakpoints only
3618 if the section is still mapped, or else we overwrite
3619 wrong code with the saved shadow contents. */
3620 if (bl->loc_type == bp_loc_hardware_breakpoint
3621 || section_is_mapped (bl->section))
3622 val = bl->owner->ops->remove_location (bl);
3623 else
3624 val = 0;
3625 }
3626 else
3627 {
3628 /* No -- not inserted, so no need to remove. No error. */
3629 val = 0;
3630 }
3631 }
3632
3633 /* In some cases, we might not be able to remove a breakpoint
3634 in a shared library that has already been removed, but we
3635 have not yet processed the shlib unload event. */
3636 if (val && solib_name_from_address (bl->pspace, bl->address))
3637 val = 0;
3638
3639 if (val)
3640 return val;
3641 bl->inserted = (is == mark_inserted);
3642 }
3643 else if (bl->loc_type == bp_loc_hardware_watchpoint)
3644 {
3645 gdb_assert (bl->owner->ops != NULL
3646 && bl->owner->ops->remove_location != NULL);
3647
3648 bl->inserted = (is == mark_inserted);
3649 bl->owner->ops->remove_location (bl);
3650
3651 /* Failure to remove any of the hardware watchpoints comes here. */
3652 if ((is == mark_uninserted) && (bl->inserted))
3653 warning (_("Could not remove hardware watchpoint %d."),
3654 bl->owner->number);
3655 }
3656 else if (bl->owner->type == bp_catchpoint
3657 && breakpoint_enabled (bl->owner)
3658 && !bl->duplicate)
3659 {
3660 gdb_assert (bl->owner->ops != NULL
3661 && bl->owner->ops->remove_location != NULL);
3662
3663 val = bl->owner->ops->remove_location (bl);
3664 if (val)
3665 return val;
3666
3667 bl->inserted = (is == mark_inserted);
3668 }
3669
3670 return 0;
3671 }
3672
3673 static int
3674 remove_breakpoint (struct bp_location *bl, insertion_state_t is)
3675 {
3676 int ret;
3677 struct cleanup *old_chain;
3678
3679 /* BL is never in moribund_locations by our callers. */
3680 gdb_assert (bl->owner != NULL);
3681
3682 if (bl->owner->enable_state == bp_permanent)
3683 /* Permanent breakpoints cannot be inserted or removed. */
3684 return 0;
3685
3686 /* The type of none suggests that owner is actually deleted.
3687 This should not ever happen. */
3688 gdb_assert (bl->owner->type != bp_none);
3689
3690 old_chain = save_current_space_and_thread ();
3691
3692 switch_to_program_space_and_thread (bl->pspace);
3693
3694 ret = remove_breakpoint_1 (bl, is);
3695
3696 do_cleanups (old_chain);
3697 return ret;
3698 }
3699
3700 /* Clear the "inserted" flag in all breakpoints. */
3701
3702 void
3703 mark_breakpoints_out (void)
3704 {
3705 struct bp_location *bl, **blp_tmp;
3706
3707 ALL_BP_LOCATIONS (bl, blp_tmp)
3708 if (bl->pspace == current_program_space)
3709 bl->inserted = 0;
3710 }
3711
3712 /* Clear the "inserted" flag in all breakpoints and delete any
3713 breakpoints which should go away between runs of the program.
3714
3715 Plus other such housekeeping that has to be done for breakpoints
3716 between runs.
3717
3718 Note: this function gets called at the end of a run (by
3719 generic_mourn_inferior) and when a run begins (by
3720 init_wait_for_inferior). */
3721
3722
3723
3724 void
3725 breakpoint_init_inferior (enum inf_context context)
3726 {
3727 struct breakpoint *b, *b_tmp;
3728 struct bp_location *bl, **blp_tmp;
3729 int ix;
3730 struct program_space *pspace = current_program_space;
3731
3732 /* If breakpoint locations are shared across processes, then there's
3733 nothing to do. */
3734 if (gdbarch_has_global_breakpoints (target_gdbarch))
3735 return;
3736
3737 ALL_BP_LOCATIONS (bl, blp_tmp)
3738 {
3739 /* ALL_BP_LOCATIONS bp_location has BL->OWNER always non-NULL. */
3740 if (bl->pspace == pspace
3741 && bl->owner->enable_state != bp_permanent)
3742 bl->inserted = 0;
3743 }
3744
3745 ALL_BREAKPOINTS_SAFE (b, b_tmp)
3746 {
3747 if (b->loc && b->loc->pspace != pspace)
3748 continue;
3749
3750 switch (b->type)
3751 {
3752 case bp_call_dummy:
3753 case bp_longjmp_call_dummy:
3754
3755 /* If the call dummy breakpoint is at the entry point it will
3756 cause problems when the inferior is rerun, so we better get
3757 rid of it. */
3758
3759 case bp_watchpoint_scope:
3760
3761 /* Also get rid of scope breakpoints. */
3762
3763 case bp_shlib_event:
3764
3765 /* Also remove solib event breakpoints. Their addresses may
3766 have changed since the last time we ran the program.
3767 Actually we may now be debugging against different target;
3768 and so the solib backend that installed this breakpoint may
3769 not be used in by the target. E.g.,
3770
3771 (gdb) file prog-linux
3772 (gdb) run # native linux target
3773 ...
3774 (gdb) kill
3775 (gdb) file prog-win.exe
3776 (gdb) tar rem :9999 # remote Windows gdbserver.
3777 */
3778
3779 case bp_step_resume:
3780
3781 /* Also remove step-resume breakpoints. */
3782
3783 delete_breakpoint (b);
3784 break;
3785
3786 case bp_watchpoint:
3787 case bp_hardware_watchpoint:
3788 case bp_read_watchpoint:
3789 case bp_access_watchpoint:
3790 {
3791 struct watchpoint *w = (struct watchpoint *) b;
3792
3793 /* Likewise for watchpoints on local expressions. */
3794 if (w->exp_valid_block != NULL)
3795 delete_breakpoint (b);
3796 else if (context == inf_starting)
3797 {
3798 /* Reset val field to force reread of starting value in
3799 insert_breakpoints. */
3800 if (w->val)
3801 value_free (w->val);
3802 w->val = NULL;
3803 w->val_valid = 0;
3804 }
3805 }
3806 break;
3807 default:
3808 break;
3809 }
3810 }
3811
3812 /* Get rid of the moribund locations. */
3813 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, bl); ++ix)
3814 decref_bp_location (&bl);
3815 VEC_free (bp_location_p, moribund_locations);
3816 }
3817
3818 /* These functions concern about actual breakpoints inserted in the
3819 target --- to e.g. check if we need to do decr_pc adjustment or if
3820 we need to hop over the bkpt --- so we check for address space
3821 match, not program space. */
3822
3823 /* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint
3824 exists at PC. It returns ordinary_breakpoint_here if it's an
3825 ordinary breakpoint, or permanent_breakpoint_here if it's a
3826 permanent breakpoint.
3827 - When continuing from a location with an ordinary breakpoint, we
3828 actually single step once before calling insert_breakpoints.
3829 - When continuing from a location with a permanent breakpoint, we
3830 need to use the `SKIP_PERMANENT_BREAKPOINT' macro, provided by
3831 the target, to advance the PC past the breakpoint. */
3832
3833 enum breakpoint_here
3834 breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
3835 {
3836 struct bp_location *bl, **blp_tmp;
3837 int any_breakpoint_here = 0;
3838
3839 ALL_BP_LOCATIONS (bl, blp_tmp)
3840 {
3841 if (bl->loc_type != bp_loc_software_breakpoint
3842 && bl->loc_type != bp_loc_hardware_breakpoint)
3843 continue;
3844
3845 /* ALL_BP_LOCATIONS bp_location has BL->OWNER always non-NULL. */
3846 if ((breakpoint_enabled (bl->owner)
3847 || bl->owner->enable_state == bp_permanent)
3848 && breakpoint_location_address_match (bl, aspace, pc))
3849 {
3850 if (overlay_debugging
3851 && section_is_overlay (bl->section)
3852 && !section_is_mapped (bl->section))
3853 continue; /* unmapped overlay -- can't be a match */
3854 else if (bl->owner->enable_state == bp_permanent)
3855 return permanent_breakpoint_here;
3856 else
3857 any_breakpoint_here = 1;
3858 }
3859 }
3860
3861 return any_breakpoint_here ? ordinary_breakpoint_here : 0;
3862 }
3863
3864 /* Return true if there's a moribund breakpoint at PC. */
3865
3866 int
3867 moribund_breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
3868 {
3869 struct bp_location *loc;
3870 int ix;
3871
3872 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
3873 if (breakpoint_location_address_match (loc, aspace, pc))
3874 return 1;
3875
3876 return 0;
3877 }
3878
3879 /* Returns non-zero if there's a breakpoint inserted at PC, which is
3880 inserted using regular breakpoint_chain / bp_location array
3881 mechanism. This does not check for single-step breakpoints, which
3882 are inserted and removed using direct target manipulation. */
3883
3884 int
3885 regular_breakpoint_inserted_here_p (struct address_space *aspace,
3886 CORE_ADDR pc)
3887 {
3888 struct bp_location *bl, **blp_tmp;
3889
3890 ALL_BP_LOCATIONS (bl, blp_tmp)
3891 {
3892 if (bl->loc_type != bp_loc_software_breakpoint
3893 && bl->loc_type != bp_loc_hardware_breakpoint)
3894 continue;
3895
3896 if (bl->inserted
3897 && breakpoint_location_address_match (bl, aspace, pc))
3898 {
3899 if (overlay_debugging
3900 && section_is_overlay (bl->section)
3901 && !section_is_mapped (bl->section))
3902 continue; /* unmapped overlay -- can't be a match */
3903 else
3904 return 1;
3905 }
3906 }
3907 return 0;
3908 }
3909
3910 /* Returns non-zero iff there's either regular breakpoint
3911 or a single step breakpoint inserted at PC. */
3912
3913 int
3914 breakpoint_inserted_here_p (struct address_space *aspace, CORE_ADDR pc)
3915 {
3916 if (regular_breakpoint_inserted_here_p (aspace, pc))
3917 return 1;
3918
3919 if (single_step_breakpoint_inserted_here_p (aspace, pc))
3920 return 1;
3921
3922 return 0;
3923 }
3924
3925 /* This function returns non-zero iff there is a software breakpoint
3926 inserted at PC. */
3927
3928 int
3929 software_breakpoint_inserted_here_p (struct address_space *aspace,
3930 CORE_ADDR pc)
3931 {
3932 struct bp_location *bl, **blp_tmp;
3933
3934 ALL_BP_LOCATIONS (bl, blp_tmp)
3935 {
3936 if (bl->loc_type != bp_loc_software_breakpoint)
3937 continue;
3938
3939 if (bl->inserted
3940 && breakpoint_address_match (bl->pspace->aspace, bl->address,
3941 aspace, pc))
3942 {
3943 if (overlay_debugging
3944 && section_is_overlay (bl->section)
3945 && !section_is_mapped (bl->section))
3946 continue; /* unmapped overlay -- can't be a match */
3947 else
3948 return 1;
3949 }
3950 }
3951
3952 /* Also check for software single-step breakpoints. */
3953 if (single_step_breakpoint_inserted_here_p (aspace, pc))
3954 return 1;
3955
3956 return 0;
3957 }
3958
3959 int
3960 hardware_watchpoint_inserted_in_range (struct address_space *aspace,
3961 CORE_ADDR addr, ULONGEST len)
3962 {
3963 struct breakpoint *bpt;
3964
3965 ALL_BREAKPOINTS (bpt)
3966 {
3967 struct bp_location *loc;
3968
3969 if (bpt->type != bp_hardware_watchpoint
3970 && bpt->type != bp_access_watchpoint)
3971 continue;
3972
3973 if (!breakpoint_enabled (bpt))
3974 continue;
3975
3976 for (loc = bpt->loc; loc; loc = loc->next)
3977 if (loc->pspace->aspace == aspace && loc->inserted)
3978 {
3979 CORE_ADDR l, h;
3980
3981 /* Check for intersection. */
3982 l = max (loc->address, addr);
3983 h = min (loc->address + loc->length, addr + len);
3984 if (l < h)
3985 return 1;
3986 }
3987 }
3988 return 0;
3989 }
3990
3991 /* breakpoint_thread_match (PC, PTID) returns true if the breakpoint at
3992 PC is valid for process/thread PTID. */
3993
3994 int
3995 breakpoint_thread_match (struct address_space *aspace, CORE_ADDR pc,
3996 ptid_t ptid)
3997 {
3998 struct bp_location *bl, **blp_tmp;
3999 /* The thread and task IDs associated to PTID, computed lazily. */
4000 int thread = -1;
4001 int task = 0;
4002
4003 ALL_BP_LOCATIONS (bl, blp_tmp)
4004 {
4005 if (bl->loc_type != bp_loc_software_breakpoint
4006 && bl->loc_type != bp_loc_hardware_breakpoint)
4007 continue;
4008
4009 /* ALL_BP_LOCATIONS bp_location has bl->OWNER always non-NULL. */
4010 if (!breakpoint_enabled (bl->owner)
4011 && bl->owner->enable_state != bp_permanent)
4012 continue;
4013
4014 if (!breakpoint_location_address_match (bl, aspace, pc))
4015 continue;
4016
4017 if (bl->owner->thread != -1)
4018 {
4019 /* This is a thread-specific breakpoint. Check that ptid
4020 matches that thread. If thread hasn't been computed yet,
4021 it is now time to do so. */
4022 if (thread == -1)
4023 thread = pid_to_thread_id (ptid);
4024 if (bl->owner->thread != thread)
4025 continue;
4026 }
4027
4028 if (bl->owner->task != 0)
4029 {
4030 /* This is a task-specific breakpoint. Check that ptid
4031 matches that task. If task hasn't been computed yet,
4032 it is now time to do so. */
4033 if (task == 0)
4034 task = ada_get_task_number (ptid);
4035 if (bl->owner->task != task)
4036 continue;
4037 }
4038
4039 if (overlay_debugging
4040 && section_is_overlay (bl->section)
4041 && !section_is_mapped (bl->section))
4042 continue; /* unmapped overlay -- can't be a match */
4043
4044 return 1;
4045 }
4046
4047 return 0;
4048 }
4049 \f
4050
4051 /* bpstat stuff. External routines' interfaces are documented
4052 in breakpoint.h. */
4053
4054 int
4055 is_catchpoint (struct breakpoint *ep)
4056 {
4057 return (ep->type == bp_catchpoint);
4058 }
4059
4060 /* Frees any storage that is part of a bpstat. Does not walk the
4061 'next' chain. */
4062
4063 static void
4064 bpstat_free (bpstat bs)
4065 {
4066 if (bs->old_val != NULL)
4067 value_free (bs->old_val);
4068 decref_counted_command_line (&bs->commands);
4069 decref_bp_location (&bs->bp_location_at);
4070 xfree (bs);
4071 }
4072
4073 /* Clear a bpstat so that it says we are not at any breakpoint.
4074 Also free any storage that is part of a bpstat. */
4075
4076 void
4077 bpstat_clear (bpstat *bsp)
4078 {
4079 bpstat p;
4080 bpstat q;
4081
4082 if (bsp == 0)
4083 return;
4084 p = *bsp;
4085 while (p != NULL)
4086 {
4087 q = p->next;
4088 bpstat_free (p);
4089 p = q;
4090 }
4091 *bsp = NULL;
4092 }
4093
4094 /* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
4095 is part of the bpstat is copied as well. */
4096
4097 bpstat
4098 bpstat_copy (bpstat bs)
4099 {
4100 bpstat p = NULL;
4101 bpstat tmp;
4102 bpstat retval = NULL;
4103
4104 if (bs == NULL)
4105 return bs;
4106
4107 for (; bs != NULL; bs = bs->next)
4108 {
4109 tmp = (bpstat) xmalloc (sizeof (*tmp));
4110 memcpy (tmp, bs, sizeof (*tmp));
4111 incref_counted_command_line (tmp->commands);
4112 incref_bp_location (tmp->bp_location_at);
4113 if (bs->old_val != NULL)
4114 {
4115 tmp->old_val = value_copy (bs->old_val);
4116 release_value (tmp->old_val);
4117 }
4118
4119 if (p == NULL)
4120 /* This is the first thing in the chain. */
4121 retval = tmp;
4122 else
4123 p->next = tmp;
4124 p = tmp;
4125 }
4126 p->next = NULL;
4127 return retval;
4128 }
4129
4130 /* Find the bpstat associated with this breakpoint. */
4131
4132 bpstat
4133 bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
4134 {
4135 if (bsp == NULL)
4136 return NULL;
4137
4138 for (; bsp != NULL; bsp = bsp->next)
4139 {
4140 if (bsp->breakpoint_at == breakpoint)
4141 return bsp;
4142 }
4143 return NULL;
4144 }
4145
4146 /* Put in *NUM the breakpoint number of the first breakpoint we are
4147 stopped at. *BSP upon return is a bpstat which points to the
4148 remaining breakpoints stopped at (but which is not guaranteed to be
4149 good for anything but further calls to bpstat_num).
4150
4151 Return 0 if passed a bpstat which does not indicate any breakpoints.
4152 Return -1 if stopped at a breakpoint that has been deleted since
4153 we set it.
4154 Return 1 otherwise. */
4155
4156 int
4157 bpstat_num (bpstat *bsp, int *num)
4158 {
4159 struct breakpoint *b;
4160
4161 if ((*bsp) == NULL)
4162 return 0; /* No more breakpoint values */
4163
4164 /* We assume we'll never have several bpstats that correspond to a
4165 single breakpoint -- otherwise, this function might return the
4166 same number more than once and this will look ugly. */
4167 b = (*bsp)->breakpoint_at;
4168 *bsp = (*bsp)->next;
4169 if (b == NULL)
4170 return -1; /* breakpoint that's been deleted since */
4171
4172 *num = b->number; /* We have its number */
4173 return 1;
4174 }
4175
4176 /* See breakpoint.h. */
4177
4178 void
4179 bpstat_clear_actions (void)
4180 {
4181 struct thread_info *tp;
4182 bpstat bs;
4183
4184 if (ptid_equal (inferior_ptid, null_ptid))
4185 return;
4186
4187 tp = find_thread_ptid (inferior_ptid);
4188 if (tp == NULL)
4189 return;
4190
4191 for (bs = tp->control.stop_bpstat; bs != NULL; bs = bs->next)
4192 {
4193 decref_counted_command_line (&bs->commands);
4194
4195 if (bs->old_val != NULL)
4196 {
4197 value_free (bs->old_val);
4198 bs->old_val = NULL;
4199 }
4200 }
4201 }
4202
4203 /* Called when a command is about to proceed the inferior. */
4204
4205 static void
4206 breakpoint_about_to_proceed (void)
4207 {
4208 if (!ptid_equal (inferior_ptid, null_ptid))
4209 {
4210 struct thread_info *tp = inferior_thread ();
4211
4212 /* Allow inferior function calls in breakpoint commands to not
4213 interrupt the command list. When the call finishes
4214 successfully, the inferior will be standing at the same
4215 breakpoint as if nothing happened. */
4216 if (tp->control.in_infcall)
4217 return;
4218 }
4219
4220 breakpoint_proceeded = 1;
4221 }
4222
4223 /* Stub for cleaning up our state if we error-out of a breakpoint
4224 command. */
4225 static void
4226 cleanup_executing_breakpoints (void *ignore)
4227 {
4228 executing_breakpoint_commands = 0;
4229 }
4230
4231 /* Return non-zero iff CMD as the first line of a command sequence is `silent'
4232 or its equivalent. */
4233
4234 static int
4235 command_line_is_silent (struct command_line *cmd)
4236 {
4237 return cmd && (strcmp ("silent", cmd->line) == 0
4238 || (xdb_commands && strcmp ("Q", cmd->line) == 0));
4239 }
4240
4241 /* Execute all the commands associated with all the breakpoints at
4242 this location. Any of these commands could cause the process to
4243 proceed beyond this point, etc. We look out for such changes by
4244 checking the global "breakpoint_proceeded" after each command.
4245
4246 Returns true if a breakpoint command resumed the inferior. In that
4247 case, it is the caller's responsibility to recall it again with the
4248 bpstat of the current thread. */
4249
4250 static int
4251 bpstat_do_actions_1 (bpstat *bsp)
4252 {
4253 bpstat bs;
4254 struct cleanup *old_chain;
4255 int again = 0;
4256
4257 /* Avoid endless recursion if a `source' command is contained
4258 in bs->commands. */
4259 if (executing_breakpoint_commands)
4260 return 0;
4261
4262 executing_breakpoint_commands = 1;
4263 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
4264
4265 prevent_dont_repeat ();
4266
4267 /* This pointer will iterate over the list of bpstat's. */
4268 bs = *bsp;
4269
4270 breakpoint_proceeded = 0;
4271 for (; bs != NULL; bs = bs->next)
4272 {
4273 struct counted_command_line *ccmd;
4274 struct command_line *cmd;
4275 struct cleanup *this_cmd_tree_chain;
4276
4277 /* Take ownership of the BSP's command tree, if it has one.
4278
4279 The command tree could legitimately contain commands like
4280 'step' and 'next', which call clear_proceed_status, which
4281 frees stop_bpstat's command tree. To make sure this doesn't
4282 free the tree we're executing out from under us, we need to
4283 take ownership of the tree ourselves. Since a given bpstat's
4284 commands are only executed once, we don't need to copy it; we
4285 can clear the pointer in the bpstat, and make sure we free
4286 the tree when we're done. */
4287 ccmd = bs->commands;
4288 bs->commands = NULL;
4289 this_cmd_tree_chain = make_cleanup_decref_counted_command_line (&ccmd);
4290 cmd = ccmd ? ccmd->commands : NULL;
4291 if (command_line_is_silent (cmd))
4292 {
4293 /* The action has been already done by bpstat_stop_status. */
4294 cmd = cmd->next;
4295 }
4296
4297 while (cmd != NULL)
4298 {
4299 execute_control_command (cmd);
4300
4301 if (breakpoint_proceeded)
4302 break;
4303 else
4304 cmd = cmd->next;
4305 }
4306
4307 /* We can free this command tree now. */
4308 do_cleanups (this_cmd_tree_chain);
4309
4310 if (breakpoint_proceeded)
4311 {
4312 if (target_can_async_p ())
4313 /* If we are in async mode, then the target might be still
4314 running, not stopped at any breakpoint, so nothing for
4315 us to do here -- just return to the event loop. */
4316 ;
4317 else
4318 /* In sync mode, when execute_control_command returns
4319 we're already standing on the next breakpoint.
4320 Breakpoint commands for that stop were not run, since
4321 execute_command does not run breakpoint commands --
4322 only command_line_handler does, but that one is not
4323 involved in execution of breakpoint commands. So, we
4324 can now execute breakpoint commands. It should be
4325 noted that making execute_command do bpstat actions is
4326 not an option -- in this case we'll have recursive
4327 invocation of bpstat for each breakpoint with a
4328 command, and can easily blow up GDB stack. Instead, we
4329 return true, which will trigger the caller to recall us
4330 with the new stop_bpstat. */
4331 again = 1;
4332 break;
4333 }
4334 }
4335 do_cleanups (old_chain);
4336 return again;
4337 }
4338
4339 void
4340 bpstat_do_actions (void)
4341 {
4342 struct cleanup *cleanup_if_error = make_bpstat_clear_actions_cleanup ();
4343
4344 /* Do any commands attached to breakpoint we are stopped at. */
4345 while (!ptid_equal (inferior_ptid, null_ptid)
4346 && target_has_execution
4347 && !is_exited (inferior_ptid)
4348 && !is_executing (inferior_ptid))
4349 /* Since in sync mode, bpstat_do_actions may resume the inferior,
4350 and only return when it is stopped at the next breakpoint, we
4351 keep doing breakpoint actions until it returns false to
4352 indicate the inferior was not resumed. */
4353 if (!bpstat_do_actions_1 (&inferior_thread ()->control.stop_bpstat))
4354 break;
4355
4356 discard_cleanups (cleanup_if_error);
4357 }
4358
4359 /* Print out the (old or new) value associated with a watchpoint. */
4360
4361 static void
4362 watchpoint_value_print (struct value *val, struct ui_file *stream)
4363 {
4364 if (val == NULL)
4365 fprintf_unfiltered (stream, _("<unreadable>"));
4366 else
4367 {
4368 struct value_print_options opts;
4369 get_user_print_options (&opts);
4370 value_print (val, stream, &opts);
4371 }
4372 }
4373
4374 /* Generic routine for printing messages indicating why we
4375 stopped. The behavior of this function depends on the value
4376 'print_it' in the bpstat structure. Under some circumstances we
4377 may decide not to print anything here and delegate the task to
4378 normal_stop(). */
4379
4380 static enum print_stop_action
4381 print_bp_stop_message (bpstat bs)
4382 {
4383 switch (bs->print_it)
4384 {
4385 case print_it_noop:
4386 /* Nothing should be printed for this bpstat entry. */
4387 return PRINT_UNKNOWN;
4388 break;
4389
4390 case print_it_done:
4391 /* We still want to print the frame, but we already printed the
4392 relevant messages. */
4393 return PRINT_SRC_AND_LOC;
4394 break;
4395
4396 case print_it_normal:
4397 {
4398 struct breakpoint *b = bs->breakpoint_at;
4399
4400 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
4401 which has since been deleted. */
4402 if (b == NULL)
4403 return PRINT_UNKNOWN;
4404
4405 /* Normal case. Call the breakpoint's print_it method. */
4406 return b->ops->print_it (bs);
4407 }
4408 break;
4409
4410 default:
4411 internal_error (__FILE__, __LINE__,
4412 _("print_bp_stop_message: unrecognized enum value"));
4413 break;
4414 }
4415 }
4416
4417 /* A helper function that prints a shared library stopped event. */
4418
4419 static void
4420 print_solib_event (int is_catchpoint)
4421 {
4422 int any_deleted
4423 = !VEC_empty (char_ptr, current_program_space->deleted_solibs);
4424 int any_added
4425 = !VEC_empty (so_list_ptr, current_program_space->added_solibs);
4426
4427 if (!is_catchpoint)
4428 {
4429 if (any_added || any_deleted)
4430 ui_out_text (current_uiout,
4431 _("Stopped due to shared library event:\n"));
4432 else
4433 ui_out_text (current_uiout,
4434 _("Stopped due to shared library event (no "
4435 "libraries added or removed)\n"));
4436 }
4437
4438 if (ui_out_is_mi_like_p (current_uiout))
4439 ui_out_field_string (current_uiout, "reason",
4440 async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
4441
4442 if (any_deleted)
4443 {
4444 struct cleanup *cleanup;
4445 char *name;
4446 int ix;
4447
4448 ui_out_text (current_uiout, _(" Inferior unloaded "));
4449 cleanup = make_cleanup_ui_out_list_begin_end (current_uiout,
4450 "removed");
4451 for (ix = 0;
4452 VEC_iterate (char_ptr, current_program_space->deleted_solibs,
4453 ix, name);
4454 ++ix)
4455 {
4456 if (ix > 0)
4457 ui_out_text (current_uiout, " ");
4458 ui_out_field_string (current_uiout, "library", name);
4459 ui_out_text (current_uiout, "\n");
4460 }
4461
4462 do_cleanups (cleanup);
4463 }
4464
4465 if (any_added)
4466 {
4467 struct so_list *iter;
4468 int ix;
4469 struct cleanup *cleanup;
4470
4471 ui_out_text (current_uiout, _(" Inferior loaded "));
4472 cleanup = make_cleanup_ui_out_list_begin_end (current_uiout,
4473 "added");
4474 for (ix = 0;
4475 VEC_iterate (so_list_ptr, current_program_space->added_solibs,
4476 ix, iter);
4477 ++ix)
4478 {
4479 if (ix > 0)
4480 ui_out_text (current_uiout, " ");
4481 ui_out_field_string (current_uiout, "library", iter->so_name);
4482 ui_out_text (current_uiout, "\n");
4483 }
4484
4485 do_cleanups (cleanup);
4486 }
4487 }
4488
4489 /* Print a message indicating what happened. This is called from
4490 normal_stop(). The input to this routine is the head of the bpstat
4491 list - a list of the eventpoints that caused this stop. KIND is
4492 the target_waitkind for the stopping event. This
4493 routine calls the generic print routine for printing a message
4494 about reasons for stopping. This will print (for example) the
4495 "Breakpoint n," part of the output. The return value of this
4496 routine is one of:
4497
4498 PRINT_UNKNOWN: Means we printed nothing.
4499 PRINT_SRC_AND_LOC: Means we printed something, and expect subsequent
4500 code to print the location. An example is
4501 "Breakpoint 1, " which should be followed by
4502 the location.
4503 PRINT_SRC_ONLY: Means we printed something, but there is no need
4504 to also print the location part of the message.
4505 An example is the catch/throw messages, which
4506 don't require a location appended to the end.
4507 PRINT_NOTHING: We have done some printing and we don't need any
4508 further info to be printed. */
4509
4510 enum print_stop_action
4511 bpstat_print (bpstat bs, int kind)
4512 {
4513 int val;
4514
4515 /* Maybe another breakpoint in the chain caused us to stop.
4516 (Currently all watchpoints go on the bpstat whether hit or not.
4517 That probably could (should) be changed, provided care is taken
4518 with respect to bpstat_explains_signal). */
4519 for (; bs; bs = bs->next)
4520 {
4521 val = print_bp_stop_message (bs);
4522 if (val == PRINT_SRC_ONLY
4523 || val == PRINT_SRC_AND_LOC
4524 || val == PRINT_NOTHING)
4525 return val;
4526 }
4527
4528 /* If we had hit a shared library event breakpoint,
4529 print_bp_stop_message would print out this message. If we hit an
4530 OS-level shared library event, do the same thing. */
4531 if (kind == TARGET_WAITKIND_LOADED)
4532 {
4533 print_solib_event (0);
4534 return PRINT_NOTHING;
4535 }
4536
4537 /* We reached the end of the chain, or we got a null BS to start
4538 with and nothing was printed. */
4539 return PRINT_UNKNOWN;
4540 }
4541
4542 /* Evaluate the expression EXP and return 1 if value is zero. This is
4543 used inside a catch_errors to evaluate the breakpoint condition.
4544 The argument is a "struct expression *" that has been cast to a
4545 "char *" to make it pass through catch_errors. */
4546
4547 static int
4548 breakpoint_cond_eval (void *exp)
4549 {
4550 struct value *mark = value_mark ();
4551 int i = !value_true (evaluate_expression ((struct expression *) exp));
4552
4553 value_free_to_mark (mark);
4554 return i;
4555 }
4556
4557 /* Allocate a new bpstat. Link it to the FIFO list by BS_LINK_POINTER. */
4558
4559 static bpstat
4560 bpstat_alloc (struct bp_location *bl, bpstat **bs_link_pointer)
4561 {
4562 bpstat bs;
4563
4564 bs = (bpstat) xmalloc (sizeof (*bs));
4565 bs->next = NULL;
4566 **bs_link_pointer = bs;
4567 *bs_link_pointer = &bs->next;
4568 bs->breakpoint_at = bl->owner;
4569 bs->bp_location_at = bl;
4570 incref_bp_location (bl);
4571 /* If the condition is false, etc., don't do the commands. */
4572 bs->commands = NULL;
4573 bs->old_val = NULL;
4574 bs->print_it = print_it_normal;
4575 return bs;
4576 }
4577 \f
4578 /* The target has stopped with waitstatus WS. Check if any hardware
4579 watchpoints have triggered, according to the target. */
4580
4581 int
4582 watchpoints_triggered (struct target_waitstatus *ws)
4583 {
4584 int stopped_by_watchpoint = target_stopped_by_watchpoint ();
4585 CORE_ADDR addr;
4586 struct breakpoint *b;
4587
4588 if (!stopped_by_watchpoint)
4589 {
4590 /* We were not stopped by a watchpoint. Mark all watchpoints
4591 as not triggered. */
4592 ALL_BREAKPOINTS (b)
4593 if (is_hardware_watchpoint (b))
4594 {
4595 struct watchpoint *w = (struct watchpoint *) b;
4596
4597 w->watchpoint_triggered = watch_triggered_no;
4598 }
4599
4600 return 0;
4601 }
4602
4603 if (!target_stopped_data_address (&current_target, &addr))
4604 {
4605 /* We were stopped by a watchpoint, but we don't know where.
4606 Mark all watchpoints as unknown. */
4607 ALL_BREAKPOINTS (b)
4608 if (is_hardware_watchpoint (b))
4609 {
4610 struct watchpoint *w = (struct watchpoint *) b;
4611
4612 w->watchpoint_triggered = watch_triggered_unknown;
4613 }
4614
4615 return stopped_by_watchpoint;
4616 }
4617
4618 /* The target could report the data address. Mark watchpoints
4619 affected by this data address as triggered, and all others as not
4620 triggered. */
4621
4622 ALL_BREAKPOINTS (b)
4623 if (is_hardware_watchpoint (b))
4624 {
4625 struct watchpoint *w = (struct watchpoint *) b;
4626 struct bp_location *loc;
4627
4628 w->watchpoint_triggered = watch_triggered_no;
4629 for (loc = b->loc; loc; loc = loc->next)
4630 {
4631 if (is_masked_watchpoint (b))
4632 {
4633 CORE_ADDR newaddr = addr & w->hw_wp_mask;
4634 CORE_ADDR start = loc->address & w->hw_wp_mask;
4635
4636 if (newaddr == start)
4637 {
4638 w->watchpoint_triggered = watch_triggered_yes;
4639 break;
4640 }
4641 }
4642 /* Exact match not required. Within range is sufficient. */
4643 else if (target_watchpoint_addr_within_range (&current_target,
4644 addr, loc->address,
4645 loc->length))
4646 {
4647 w->watchpoint_triggered = watch_triggered_yes;
4648 break;
4649 }
4650 }
4651 }
4652
4653 return 1;
4654 }
4655
4656 /* Possible return values for watchpoint_check (this can't be an enum
4657 because of check_errors). */
4658 /* The watchpoint has been deleted. */
4659 #define WP_DELETED 1
4660 /* The value has changed. */
4661 #define WP_VALUE_CHANGED 2
4662 /* The value has not changed. */
4663 #define WP_VALUE_NOT_CHANGED 3
4664 /* Ignore this watchpoint, no matter if the value changed or not. */
4665 #define WP_IGNORE 4
4666
4667 #define BP_TEMPFLAG 1
4668 #define BP_HARDWAREFLAG 2
4669
4670 /* Evaluate watchpoint condition expression and check if its value
4671 changed.
4672
4673 P should be a pointer to struct bpstat, but is defined as a void *
4674 in order for this function to be usable with catch_errors. */
4675
4676 static int
4677 watchpoint_check (void *p)
4678 {
4679 bpstat bs = (bpstat) p;
4680 struct watchpoint *b;
4681 struct frame_info *fr;
4682 int within_current_scope;
4683
4684 /* BS is built from an existing struct breakpoint. */
4685 gdb_assert (bs->breakpoint_at != NULL);
4686 b = (struct watchpoint *) bs->breakpoint_at;
4687
4688 /* If this is a local watchpoint, we only want to check if the
4689 watchpoint frame is in scope if the current thread is the thread
4690 that was used to create the watchpoint. */
4691 if (!watchpoint_in_thread_scope (b))
4692 return WP_IGNORE;
4693
4694 if (b->exp_valid_block == NULL)
4695 within_current_scope = 1;
4696 else
4697 {
4698 struct frame_info *frame = get_current_frame ();
4699 struct gdbarch *frame_arch = get_frame_arch (frame);
4700 CORE_ADDR frame_pc = get_frame_pc (frame);
4701
4702 /* in_function_epilogue_p() returns a non-zero value if we're
4703 still in the function but the stack frame has already been
4704 invalidated. Since we can't rely on the values of local
4705 variables after the stack has been destroyed, we are treating
4706 the watchpoint in that state as `not changed' without further
4707 checking. Don't mark watchpoints as changed if the current
4708 frame is in an epilogue - even if they are in some other
4709 frame, our view of the stack is likely to be wrong and
4710 frame_find_by_id could error out. */
4711 if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc))
4712 return WP_IGNORE;
4713
4714 fr = frame_find_by_id (b->watchpoint_frame);
4715 within_current_scope = (fr != NULL);
4716
4717 /* If we've gotten confused in the unwinder, we might have
4718 returned a frame that can't describe this variable. */
4719 if (within_current_scope)
4720 {
4721 struct symbol *function;
4722
4723 function = get_frame_function (fr);
4724 if (function == NULL
4725 || !contained_in (b->exp_valid_block,
4726 SYMBOL_BLOCK_VALUE (function)))
4727 within_current_scope = 0;
4728 }
4729
4730 if (within_current_scope)
4731 /* If we end up stopping, the current frame will get selected
4732 in normal_stop. So this call to select_frame won't affect
4733 the user. */
4734 select_frame (fr);
4735 }
4736
4737 if (within_current_scope)
4738 {
4739 /* We use value_{,free_to_}mark because it could be a *long*
4740 time before we return to the command level and call
4741 free_all_values. We can't call free_all_values because we
4742 might be in the middle of evaluating a function call. */
4743
4744 int pc = 0;
4745 struct value *mark;
4746 struct value *new_val;
4747
4748 if (is_masked_watchpoint (&b->base))
4749 /* Since we don't know the exact trigger address (from
4750 stopped_data_address), just tell the user we've triggered
4751 a mask watchpoint. */
4752 return WP_VALUE_CHANGED;
4753
4754 mark = value_mark ();
4755 fetch_subexp_value (b->exp, &pc, &new_val, NULL, NULL);
4756
4757 /* We use value_equal_contents instead of value_equal because
4758 the latter coerces an array to a pointer, thus comparing just
4759 the address of the array instead of its contents. This is
4760 not what we want. */
4761 if ((b->val != NULL) != (new_val != NULL)
4762 || (b->val != NULL && !value_equal_contents (b->val, new_val)))
4763 {
4764 if (new_val != NULL)
4765 {
4766 release_value (new_val);
4767 value_free_to_mark (mark);
4768 }
4769 bs->old_val = b->val;
4770 b->val = new_val;
4771 b->val_valid = 1;
4772 return WP_VALUE_CHANGED;
4773 }
4774 else
4775 {
4776 /* Nothing changed. */
4777 value_free_to_mark (mark);
4778 return WP_VALUE_NOT_CHANGED;
4779 }
4780 }
4781 else
4782 {
4783 struct ui_out *uiout = current_uiout;
4784
4785 /* This seems like the only logical thing to do because
4786 if we temporarily ignored the watchpoint, then when
4787 we reenter the block in which it is valid it contains
4788 garbage (in the case of a function, it may have two
4789 garbage values, one before and one after the prologue).
4790 So we can't even detect the first assignment to it and
4791 watch after that (since the garbage may or may not equal
4792 the first value assigned). */
4793 /* We print all the stop information in
4794 breakpoint_ops->print_it, but in this case, by the time we
4795 call breakpoint_ops->print_it this bp will be deleted
4796 already. So we have no choice but print the information
4797 here. */
4798 if (ui_out_is_mi_like_p (uiout))
4799 ui_out_field_string
4800 (uiout, "reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_SCOPE));
4801 ui_out_text (uiout, "\nWatchpoint ");
4802 ui_out_field_int (uiout, "wpnum", b->base.number);
4803 ui_out_text (uiout,
4804 " deleted because the program has left the block in\n\
4805 which its expression is valid.\n");
4806
4807 /* Make sure the watchpoint's commands aren't executed. */
4808 decref_counted_command_line (&b->base.commands);
4809 watchpoint_del_at_next_stop (b);
4810
4811 return WP_DELETED;
4812 }
4813 }
4814
4815 /* Return true if it looks like target has stopped due to hitting
4816 breakpoint location BL. This function does not check if we should
4817 stop, only if BL explains the stop. */
4818
4819 static int
4820 bpstat_check_location (const struct bp_location *bl,
4821 struct address_space *aspace, CORE_ADDR bp_addr,
4822 const struct target_waitstatus *ws)
4823 {
4824 struct breakpoint *b = bl->owner;
4825
4826 /* BL is from an existing breakpoint. */
4827 gdb_assert (b != NULL);
4828
4829 return b->ops->breakpoint_hit (bl, aspace, bp_addr, ws);
4830 }
4831
4832 /* Determine if the watched values have actually changed, and we
4833 should stop. If not, set BS->stop to 0. */
4834
4835 static void
4836 bpstat_check_watchpoint (bpstat bs)
4837 {
4838 const struct bp_location *bl;
4839 struct watchpoint *b;
4840
4841 /* BS is built for existing struct breakpoint. */
4842 bl = bs->bp_location_at;
4843 gdb_assert (bl != NULL);
4844 b = (struct watchpoint *) bs->breakpoint_at;
4845 gdb_assert (b != NULL);
4846
4847 {
4848 int must_check_value = 0;
4849
4850 if (b->base.type == bp_watchpoint)
4851 /* For a software watchpoint, we must always check the
4852 watched value. */
4853 must_check_value = 1;
4854 else if (b->watchpoint_triggered == watch_triggered_yes)
4855 /* We have a hardware watchpoint (read, write, or access)
4856 and the target earlier reported an address watched by
4857 this watchpoint. */
4858 must_check_value = 1;
4859 else if (b->watchpoint_triggered == watch_triggered_unknown
4860 && b->base.type == bp_hardware_watchpoint)
4861 /* We were stopped by a hardware watchpoint, but the target could
4862 not report the data address. We must check the watchpoint's
4863 value. Access and read watchpoints are out of luck; without
4864 a data address, we can't figure it out. */
4865 must_check_value = 1;
4866
4867 if (must_check_value)
4868 {
4869 char *message
4870 = xstrprintf ("Error evaluating expression for watchpoint %d\n",
4871 b->base.number);
4872 struct cleanup *cleanups = make_cleanup (xfree, message);
4873 int e = catch_errors (watchpoint_check, bs, message,
4874 RETURN_MASK_ALL);
4875 do_cleanups (cleanups);
4876 switch (e)
4877 {
4878 case WP_DELETED:
4879 /* We've already printed what needs to be printed. */
4880 bs->print_it = print_it_done;
4881 /* Stop. */
4882 break;
4883 case WP_IGNORE:
4884 bs->print_it = print_it_noop;
4885 bs->stop = 0;
4886 break;
4887 case WP_VALUE_CHANGED:
4888 if (b->base.type == bp_read_watchpoint)
4889 {
4890 /* There are two cases to consider here:
4891
4892 1. We're watching the triggered memory for reads.
4893 In that case, trust the target, and always report
4894 the watchpoint hit to the user. Even though
4895 reads don't cause value changes, the value may
4896 have changed since the last time it was read, and
4897 since we're not trapping writes, we will not see
4898 those, and as such we should ignore our notion of
4899 old value.
4900
4901 2. We're watching the triggered memory for both
4902 reads and writes. There are two ways this may
4903 happen:
4904
4905 2.1. This is a target that can't break on data
4906 reads only, but can break on accesses (reads or
4907 writes), such as e.g., x86. We detect this case
4908 at the time we try to insert read watchpoints.
4909
4910 2.2. Otherwise, the target supports read
4911 watchpoints, but, the user set an access or write
4912 watchpoint watching the same memory as this read
4913 watchpoint.
4914
4915 If we're watching memory writes as well as reads,
4916 ignore watchpoint hits when we find that the
4917 value hasn't changed, as reads don't cause
4918 changes. This still gives false positives when
4919 the program writes the same value to memory as
4920 what there was already in memory (we will confuse
4921 it for a read), but it's much better than
4922 nothing. */
4923
4924 int other_write_watchpoint = 0;
4925
4926 if (bl->watchpoint_type == hw_read)
4927 {
4928 struct breakpoint *other_b;
4929
4930 ALL_BREAKPOINTS (other_b)
4931 if (other_b->type == bp_hardware_watchpoint
4932 || other_b->type == bp_access_watchpoint)
4933 {
4934 struct watchpoint *other_w =
4935 (struct watchpoint *) other_b;
4936
4937 if (other_w->watchpoint_triggered
4938 == watch_triggered_yes)
4939 {
4940 other_write_watchpoint = 1;
4941 break;
4942 }
4943 }
4944 }
4945
4946 if (other_write_watchpoint
4947 || bl->watchpoint_type == hw_access)
4948 {
4949 /* We're watching the same memory for writes,
4950 and the value changed since the last time we
4951 updated it, so this trap must be for a write.
4952 Ignore it. */
4953 bs->print_it = print_it_noop;
4954 bs->stop = 0;
4955 }
4956 }
4957 break;
4958 case WP_VALUE_NOT_CHANGED:
4959 if (b->base.type == bp_hardware_watchpoint
4960 || b->base.type == bp_watchpoint)
4961 {
4962 /* Don't stop: write watchpoints shouldn't fire if
4963 the value hasn't changed. */
4964 bs->print_it = print_it_noop;
4965 bs->stop = 0;
4966 }
4967 /* Stop. */
4968 break;
4969 default:
4970 /* Can't happen. */
4971 case 0:
4972 /* Error from catch_errors. */
4973 printf_filtered (_("Watchpoint %d deleted.\n"), b->base.number);
4974 watchpoint_del_at_next_stop (b);
4975 /* We've already printed what needs to be printed. */
4976 bs->print_it = print_it_done;
4977 break;
4978 }
4979 }
4980 else /* must_check_value == 0 */
4981 {
4982 /* This is a case where some watchpoint(s) triggered, but
4983 not at the address of this watchpoint, or else no
4984 watchpoint triggered after all. So don't print
4985 anything for this watchpoint. */
4986 bs->print_it = print_it_noop;
4987 bs->stop = 0;
4988 }
4989 }
4990 }
4991
4992
4993 /* Check conditions (condition proper, frame, thread and ignore count)
4994 of breakpoint referred to by BS. If we should not stop for this
4995 breakpoint, set BS->stop to 0. */
4996
4997 static void
4998 bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
4999 {
5000 int thread_id = pid_to_thread_id (ptid);
5001 const struct bp_location *bl;
5002 struct breakpoint *b;
5003
5004 /* BS is built for existing struct breakpoint. */
5005 bl = bs->bp_location_at;
5006 gdb_assert (bl != NULL);
5007 b = bs->breakpoint_at;
5008 gdb_assert (b != NULL);
5009
5010 /* Even if the target evaluated the condition on its end and notified GDB, we
5011 need to do so again since GDB does not know if we stopped due to a
5012 breakpoint or a single step breakpoint. */
5013
5014 if (frame_id_p (b->frame_id)
5015 && !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ())))
5016 bs->stop = 0;
5017 else if (bs->stop)
5018 {
5019 int value_is_zero = 0;
5020 struct expression *cond;
5021
5022 /* Evaluate Python breakpoints that have a "stop"
5023 method implemented. */
5024 if (b->py_bp_object)
5025 bs->stop = gdbpy_should_stop (b->py_bp_object);
5026
5027 if (is_watchpoint (b))
5028 {
5029 struct watchpoint *w = (struct watchpoint *) b;
5030
5031 cond = w->cond_exp;
5032 }
5033 else
5034 cond = bl->cond;
5035
5036 if (cond && b->disposition != disp_del_at_next_stop)
5037 {
5038 int within_current_scope = 1;
5039 struct watchpoint * w;
5040
5041 /* We use value_mark and value_free_to_mark because it could
5042 be a long time before we return to the command level and
5043 call free_all_values. We can't call free_all_values
5044 because we might be in the middle of evaluating a
5045 function call. */
5046 struct value *mark = value_mark ();
5047
5048 if (is_watchpoint (b))
5049 w = (struct watchpoint *) b;
5050 else
5051 w = NULL;
5052
5053 /* Need to select the frame, with all that implies so that
5054 the conditions will have the right context. Because we
5055 use the frame, we will not see an inlined function's
5056 variables when we arrive at a breakpoint at the start
5057 of the inlined function; the current frame will be the
5058 call site. */
5059 if (w == NULL || w->cond_exp_valid_block == NULL)
5060 select_frame (get_current_frame ());
5061 else
5062 {
5063 struct frame_info *frame;
5064
5065 /* For local watchpoint expressions, which particular
5066 instance of a local is being watched matters, so we
5067 keep track of the frame to evaluate the expression
5068 in. To evaluate the condition however, it doesn't
5069 really matter which instantiation of the function
5070 where the condition makes sense triggers the
5071 watchpoint. This allows an expression like "watch
5072 global if q > 10" set in `func', catch writes to
5073 global on all threads that call `func', or catch
5074 writes on all recursive calls of `func' by a single
5075 thread. We simply always evaluate the condition in
5076 the innermost frame that's executing where it makes
5077 sense to evaluate the condition. It seems
5078 intuitive. */
5079 frame = block_innermost_frame (w->cond_exp_valid_block);
5080 if (frame != NULL)
5081 select_frame (frame);
5082 else
5083 within_current_scope = 0;
5084 }
5085 if (within_current_scope)
5086 value_is_zero
5087 = catch_errors (breakpoint_cond_eval, cond,
5088 "Error in testing breakpoint condition:\n",
5089 RETURN_MASK_ALL);
5090 else
5091 {
5092 warning (_("Watchpoint condition cannot be tested "
5093 "in the current scope"));
5094 /* If we failed to set the right context for this
5095 watchpoint, unconditionally report it. */
5096 value_is_zero = 0;
5097 }
5098 /* FIXME-someday, should give breakpoint #. */
5099 value_free_to_mark (mark);
5100 }
5101
5102 if (cond && value_is_zero)
5103 {
5104 bs->stop = 0;
5105 }
5106 else if (b->thread != -1 && b->thread != thread_id)
5107 {
5108 bs->stop = 0;
5109 }
5110 else if (b->ignore_count > 0)
5111 {
5112 b->ignore_count--;
5113 annotate_ignore_count_change ();
5114 bs->stop = 0;
5115 /* Increase the hit count even though we don't stop. */
5116 ++(b->hit_count);
5117 observer_notify_breakpoint_modified (b);
5118 }
5119 }
5120 }
5121
5122
5123 /* Get a bpstat associated with having just stopped at address
5124 BP_ADDR in thread PTID.
5125
5126 Determine whether we stopped at a breakpoint, etc, or whether we
5127 don't understand this stop. Result is a chain of bpstat's such
5128 that:
5129
5130 if we don't understand the stop, the result is a null pointer.
5131
5132 if we understand why we stopped, the result is not null.
5133
5134 Each element of the chain refers to a particular breakpoint or
5135 watchpoint at which we have stopped. (We may have stopped for
5136 several reasons concurrently.)
5137
5138 Each element of the chain has valid next, breakpoint_at,
5139 commands, FIXME??? fields. */
5140
5141 bpstat
5142 bpstat_stop_status (struct address_space *aspace,
5143 CORE_ADDR bp_addr, ptid_t ptid,
5144 const struct target_waitstatus *ws)
5145 {
5146 struct breakpoint *b = NULL;
5147 struct bp_location *bl;
5148 struct bp_location *loc;
5149 /* First item of allocated bpstat's. */
5150 bpstat bs_head = NULL, *bs_link = &bs_head;
5151 /* Pointer to the last thing in the chain currently. */
5152 bpstat bs;
5153 int ix;
5154 int need_remove_insert;
5155 int removed_any;
5156
5157 /* First, build the bpstat chain with locations that explain a
5158 target stop, while being careful to not set the target running,
5159 as that may invalidate locations (in particular watchpoint
5160 locations are recreated). Resuming will happen here with
5161 breakpoint conditions or watchpoint expressions that include
5162 inferior function calls. */
5163
5164 ALL_BREAKPOINTS (b)
5165 {
5166 if (!breakpoint_enabled (b) && b->enable_state != bp_permanent)
5167 continue;
5168
5169 for (bl = b->loc; bl != NULL; bl = bl->next)
5170 {
5171 /* For hardware watchpoints, we look only at the first
5172 location. The watchpoint_check function will work on the
5173 entire expression, not the individual locations. For
5174 read watchpoints, the watchpoints_triggered function has
5175 checked all locations already. */
5176 if (b->type == bp_hardware_watchpoint && bl != b->loc)
5177 break;
5178
5179 if (bl->shlib_disabled)
5180 continue;
5181
5182 if (!bpstat_check_location (bl, aspace, bp_addr, ws))
5183 continue;
5184
5185 /* Come here if it's a watchpoint, or if the break address
5186 matches. */
5187
5188 bs = bpstat_alloc (bl, &bs_link); /* Alloc a bpstat to
5189 explain stop. */
5190
5191 /* Assume we stop. Should we find a watchpoint that is not
5192 actually triggered, or if the condition of the breakpoint
5193 evaluates as false, we'll reset 'stop' to 0. */
5194 bs->stop = 1;
5195 bs->print = 1;
5196
5197 /* If this is a scope breakpoint, mark the associated
5198 watchpoint as triggered so that we will handle the
5199 out-of-scope event. We'll get to the watchpoint next
5200 iteration. */
5201 if (b->type == bp_watchpoint_scope && b->related_breakpoint != b)
5202 {
5203 struct watchpoint *w = (struct watchpoint *) b->related_breakpoint;
5204
5205 w->watchpoint_triggered = watch_triggered_yes;
5206 }
5207 }
5208 }
5209
5210 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
5211 {
5212 if (breakpoint_location_address_match (loc, aspace, bp_addr))
5213 {
5214 bs = bpstat_alloc (loc, &bs_link);
5215 /* For hits of moribund locations, we should just proceed. */
5216 bs->stop = 0;
5217 bs->print = 0;
5218 bs->print_it = print_it_noop;
5219 }
5220 }
5221
5222 /* A bit of special processing for shlib breakpoints. We need to
5223 process solib loading here, so that the lists of loaded and
5224 unloaded libraries are correct before we handle "catch load" and
5225 "catch unload". */
5226 for (bs = bs_head; bs != NULL; bs = bs->next)
5227 {
5228 if (bs->breakpoint_at && bs->breakpoint_at->type == bp_shlib_event)
5229 {
5230 handle_solib_event ();
5231 break;
5232 }
5233 }
5234
5235 /* Now go through the locations that caused the target to stop, and
5236 check whether we're interested in reporting this stop to higher
5237 layers, or whether we should resume the target transparently. */
5238
5239 removed_any = 0;
5240
5241 for (bs = bs_head; bs != NULL; bs = bs->next)
5242 {
5243 if (!bs->stop)
5244 continue;
5245
5246 b = bs->breakpoint_at;
5247 b->ops->check_status (bs);
5248 if (bs->stop)
5249 {
5250 bpstat_check_breakpoint_conditions (bs, ptid);
5251
5252 if (bs->stop)
5253 {
5254 ++(b->hit_count);
5255 observer_notify_breakpoint_modified (b);
5256
5257 /* We will stop here. */
5258 if (b->disposition == disp_disable)
5259 {
5260 --(b->enable_count);
5261 if (b->enable_count <= 0
5262 && b->enable_state != bp_permanent)
5263 b->enable_state = bp_disabled;
5264 removed_any = 1;
5265 }
5266 if (b->silent)
5267 bs->print = 0;
5268 bs->commands = b->commands;
5269 incref_counted_command_line (bs->commands);
5270 if (command_line_is_silent (bs->commands
5271 ? bs->commands->commands : NULL))
5272 bs->print = 0;
5273 }
5274
5275 }
5276
5277 /* Print nothing for this entry if we don't stop or don't
5278 print. */
5279 if (!bs->stop || !bs->print)
5280 bs->print_it = print_it_noop;
5281 }
5282
5283 /* If we aren't stopping, the value of some hardware watchpoint may
5284 not have changed, but the intermediate memory locations we are
5285 watching may have. Don't bother if we're stopping; this will get
5286 done later. */
5287 need_remove_insert = 0;
5288 if (! bpstat_causes_stop (bs_head))
5289 for (bs = bs_head; bs != NULL; bs = bs->next)
5290 if (!bs->stop
5291 && bs->breakpoint_at
5292 && is_hardware_watchpoint (bs->breakpoint_at))
5293 {
5294 struct watchpoint *w = (struct watchpoint *) bs->breakpoint_at;
5295
5296 update_watchpoint (w, 0 /* don't reparse. */);
5297 need_remove_insert = 1;
5298 }
5299
5300 if (need_remove_insert)
5301 update_global_location_list (1);
5302 else if (removed_any)
5303 update_global_location_list (0);
5304
5305 return bs_head;
5306 }
5307
5308 static void
5309 handle_jit_event (void)
5310 {
5311 struct frame_info *frame;
5312 struct gdbarch *gdbarch;
5313
5314 /* Switch terminal for any messages produced by
5315 breakpoint_re_set. */
5316 target_terminal_ours_for_output ();
5317
5318 frame = get_current_frame ();
5319 gdbarch = get_frame_arch (frame);
5320
5321 jit_event_handler (gdbarch);
5322
5323 target_terminal_inferior ();
5324 }
5325
5326 /* Handle an solib event by calling solib_add. */
5327
5328 void
5329 handle_solib_event (void)
5330 {
5331 clear_program_space_solib_cache (current_inferior ()->pspace);
5332
5333 /* Check for any newly added shared libraries if we're supposed to
5334 be adding them automatically. Switch terminal for any messages
5335 produced by breakpoint_re_set. */
5336 target_terminal_ours_for_output ();
5337 #ifdef SOLIB_ADD
5338 SOLIB_ADD (NULL, 0, &current_target, auto_solib_add);
5339 #else
5340 solib_add (NULL, 0, &current_target, auto_solib_add);
5341 #endif
5342 target_terminal_inferior ();
5343 }
5344
5345 /* Prepare WHAT final decision for infrun. */
5346
5347 /* Decide what infrun needs to do with this bpstat. */
5348
5349 struct bpstat_what
5350 bpstat_what (bpstat bs_head)
5351 {
5352 struct bpstat_what retval;
5353 int jit_event = 0;
5354 bpstat bs;
5355
5356 retval.main_action = BPSTAT_WHAT_KEEP_CHECKING;
5357 retval.call_dummy = STOP_NONE;
5358 retval.is_longjmp = 0;
5359
5360 for (bs = bs_head; bs != NULL; bs = bs->next)
5361 {
5362 /* Extract this BS's action. After processing each BS, we check
5363 if its action overrides all we've seem so far. */
5364 enum bpstat_what_main_action this_action = BPSTAT_WHAT_KEEP_CHECKING;
5365 enum bptype bptype;
5366
5367 if (bs->breakpoint_at == NULL)
5368 {
5369 /* I suspect this can happen if it was a momentary
5370 breakpoint which has since been deleted. */
5371 bptype = bp_none;
5372 }
5373 else
5374 bptype = bs->breakpoint_at->type;
5375
5376 switch (bptype)
5377 {
5378 case bp_none:
5379 break;
5380 case bp_breakpoint:
5381 case bp_hardware_breakpoint:
5382 case bp_until:
5383 case bp_finish:
5384 case bp_shlib_event:
5385 if (bs->stop)
5386 {
5387 if (bs->print)
5388 this_action = BPSTAT_WHAT_STOP_NOISY;
5389 else
5390 this_action = BPSTAT_WHAT_STOP_SILENT;
5391 }
5392 else
5393 this_action = BPSTAT_WHAT_SINGLE;
5394 break;
5395 case bp_watchpoint:
5396 case bp_hardware_watchpoint:
5397 case bp_read_watchpoint:
5398 case bp_access_watchpoint:
5399 if (bs->stop)
5400 {
5401 if (bs->print)
5402 this_action = BPSTAT_WHAT_STOP_NOISY;
5403 else
5404 this_action = BPSTAT_WHAT_STOP_SILENT;
5405 }
5406 else
5407 {
5408 /* There was a watchpoint, but we're not stopping.
5409 This requires no further action. */
5410 }
5411 break;
5412 case bp_longjmp:
5413 case bp_longjmp_call_dummy:
5414 case bp_exception:
5415 this_action = BPSTAT_WHAT_SET_LONGJMP_RESUME;
5416 retval.is_longjmp = bptype != bp_exception;
5417 break;
5418 case bp_longjmp_resume:
5419 case bp_exception_resume:
5420 this_action = BPSTAT_WHAT_CLEAR_LONGJMP_RESUME;
5421 retval.is_longjmp = bptype == bp_longjmp_resume;
5422 break;
5423 case bp_step_resume:
5424 if (bs->stop)
5425 this_action = BPSTAT_WHAT_STEP_RESUME;
5426 else
5427 {
5428 /* It is for the wrong frame. */
5429 this_action = BPSTAT_WHAT_SINGLE;
5430 }
5431 break;
5432 case bp_hp_step_resume:
5433 if (bs->stop)
5434 this_action = BPSTAT_WHAT_HP_STEP_RESUME;
5435 else
5436 {
5437 /* It is for the wrong frame. */
5438 this_action = BPSTAT_WHAT_SINGLE;
5439 }
5440 break;
5441 case bp_watchpoint_scope:
5442 case bp_thread_event:
5443 case bp_overlay_event:
5444 case bp_longjmp_master:
5445 case bp_std_terminate_master:
5446 case bp_exception_master:
5447 this_action = BPSTAT_WHAT_SINGLE;
5448 break;
5449 case bp_catchpoint:
5450 if (bs->stop)
5451 {
5452 if (bs->print)
5453 this_action = BPSTAT_WHAT_STOP_NOISY;
5454 else
5455 this_action = BPSTAT_WHAT_STOP_SILENT;
5456 }
5457 else
5458 {
5459 /* There was a catchpoint, but we're not stopping.
5460 This requires no further action. */
5461 }
5462 break;
5463 case bp_jit_event:
5464 jit_event = 1;
5465 this_action = BPSTAT_WHAT_SINGLE;
5466 break;
5467 case bp_call_dummy:
5468 /* Make sure the action is stop (silent or noisy),
5469 so infrun.c pops the dummy frame. */
5470 retval.call_dummy = STOP_STACK_DUMMY;
5471 this_action = BPSTAT_WHAT_STOP_SILENT;
5472 break;
5473 case bp_std_terminate:
5474 /* Make sure the action is stop (silent or noisy),
5475 so infrun.c pops the dummy frame. */
5476 retval.call_dummy = STOP_STD_TERMINATE;
5477 this_action = BPSTAT_WHAT_STOP_SILENT;
5478 break;
5479 case bp_tracepoint:
5480 case bp_fast_tracepoint:
5481 case bp_static_tracepoint:
5482 /* Tracepoint hits should not be reported back to GDB, and
5483 if one got through somehow, it should have been filtered
5484 out already. */
5485 internal_error (__FILE__, __LINE__,
5486 _("bpstat_what: tracepoint encountered"));
5487 break;
5488 case bp_gnu_ifunc_resolver:
5489 /* Step over it (and insert bp_gnu_ifunc_resolver_return). */
5490 this_action = BPSTAT_WHAT_SINGLE;
5491 break;
5492 case bp_gnu_ifunc_resolver_return:
5493 /* The breakpoint will be removed, execution will restart from the
5494 PC of the former breakpoint. */
5495 this_action = BPSTAT_WHAT_KEEP_CHECKING;
5496 break;
5497
5498 case bp_dprintf:
5499 this_action = BPSTAT_WHAT_STOP_SILENT;
5500 break;
5501
5502 default:
5503 internal_error (__FILE__, __LINE__,
5504 _("bpstat_what: unhandled bptype %d"), (int) bptype);
5505 }
5506
5507 retval.main_action = max (retval.main_action, this_action);
5508 }
5509
5510 /* These operations may affect the bs->breakpoint_at state so they are
5511 delayed after MAIN_ACTION is decided above. */
5512
5513 if (jit_event)
5514 {
5515 if (debug_infrun)
5516 fprintf_unfiltered (gdb_stdlog, "bpstat_what: bp_jit_event\n");
5517
5518 handle_jit_event ();
5519 }
5520
5521 for (bs = bs_head; bs != NULL; bs = bs->next)
5522 {
5523 struct breakpoint *b = bs->breakpoint_at;
5524
5525 if (b == NULL)
5526 continue;
5527 switch (b->type)
5528 {
5529 case bp_gnu_ifunc_resolver:
5530 gnu_ifunc_resolver_stop (b);
5531 break;
5532 case bp_gnu_ifunc_resolver_return:
5533 gnu_ifunc_resolver_return_stop (b);
5534 break;
5535 }
5536 }
5537
5538 return retval;
5539 }
5540
5541 /* Nonzero if we should step constantly (e.g. watchpoints on machines
5542 without hardware support). This isn't related to a specific bpstat,
5543 just to things like whether watchpoints are set. */
5544
5545 int
5546 bpstat_should_step (void)
5547 {
5548 struct breakpoint *b;
5549
5550 ALL_BREAKPOINTS (b)
5551 if (breakpoint_enabled (b) && b->type == bp_watchpoint && b->loc != NULL)
5552 return 1;
5553 return 0;
5554 }
5555
5556 int
5557 bpstat_causes_stop (bpstat bs)
5558 {
5559 for (; bs != NULL; bs = bs->next)
5560 if (bs->stop)
5561 return 1;
5562
5563 return 0;
5564 }
5565
5566 \f
5567
5568 /* Compute a string of spaces suitable to indent the next line
5569 so it starts at the position corresponding to the table column
5570 named COL_NAME in the currently active table of UIOUT. */
5571
5572 static char *
5573 wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
5574 {
5575 static char wrap_indent[80];
5576 int i, total_width, width, align;
5577 char *text;
5578
5579 total_width = 0;
5580 for (i = 1; ui_out_query_field (uiout, i, &width, &align, &text); i++)
5581 {
5582 if (strcmp (text, col_name) == 0)
5583 {
5584 gdb_assert (total_width < sizeof wrap_indent);
5585 memset (wrap_indent, ' ', total_width);
5586 wrap_indent[total_width] = 0;
5587
5588 return wrap_indent;
5589 }
5590
5591 total_width += width + 1;
5592 }
5593
5594 return NULL;
5595 }
5596
5597 /* Determine if the locations of this breakpoint will have their conditions
5598 evaluated by the target, host or a mix of both. Returns the following:
5599
5600 "host": Host evals condition.
5601 "host or target": Host or Target evals condition.
5602 "target": Target evals condition.
5603 */
5604
5605 static const char *
5606 bp_condition_evaluator (struct breakpoint *b)
5607 {
5608 struct bp_location *bl;
5609 char host_evals = 0;
5610 char target_evals = 0;
5611
5612 if (!b)
5613 return NULL;
5614
5615 if (!is_breakpoint (b))
5616 return NULL;
5617
5618 if (gdb_evaluates_breakpoint_condition_p ()
5619 || !target_supports_evaluation_of_breakpoint_conditions ())
5620 return condition_evaluation_host;
5621
5622 for (bl = b->loc; bl; bl = bl->next)
5623 {
5624 if (bl->cond_bytecode)
5625 target_evals++;
5626 else
5627 host_evals++;
5628 }
5629
5630 if (host_evals && target_evals)
5631 return condition_evaluation_both;
5632 else if (target_evals)
5633 return condition_evaluation_target;
5634 else
5635 return condition_evaluation_host;
5636 }
5637
5638 /* Determine the breakpoint location's condition evaluator. This is
5639 similar to bp_condition_evaluator, but for locations. */
5640
5641 static const char *
5642 bp_location_condition_evaluator (struct bp_location *bl)
5643 {
5644 if (bl && !is_breakpoint (bl->owner))
5645 return NULL;
5646
5647 if (gdb_evaluates_breakpoint_condition_p ()
5648 || !target_supports_evaluation_of_breakpoint_conditions ())
5649 return condition_evaluation_host;
5650
5651 if (bl && bl->cond_bytecode)
5652 return condition_evaluation_target;
5653 else
5654 return condition_evaluation_host;
5655 }
5656
5657 /* Print the LOC location out of the list of B->LOC locations. */
5658
5659 static void
5660 print_breakpoint_location (struct breakpoint *b,
5661 struct bp_location *loc)
5662 {
5663 struct ui_out *uiout = current_uiout;
5664 struct cleanup *old_chain = save_current_program_space ();
5665
5666 if (loc != NULL && loc->shlib_disabled)
5667 loc = NULL;
5668
5669 if (loc != NULL)
5670 set_current_program_space (loc->pspace);
5671
5672 if (b->display_canonical)
5673 ui_out_field_string (uiout, "what", b->addr_string);
5674 else if (loc && loc->source_file)
5675 {
5676 struct symbol *sym
5677 = find_pc_sect_function (loc->address, loc->section);
5678 if (sym)
5679 {
5680 ui_out_text (uiout, "in ");
5681 ui_out_field_string (uiout, "func",
5682 SYMBOL_PRINT_NAME (sym));
5683 ui_out_text (uiout, " ");
5684 ui_out_wrap_hint (uiout, wrap_indent_at_field (uiout, "what"));
5685 ui_out_text (uiout, "at ");
5686 }
5687 ui_out_field_string (uiout, "file", loc->source_file);
5688 ui_out_text (uiout, ":");
5689
5690 if (ui_out_is_mi_like_p (uiout))
5691 {
5692 struct symtab_and_line sal = find_pc_line (loc->address, 0);
5693 char *fullname = symtab_to_fullname (sal.symtab);
5694
5695 if (fullname)
5696 ui_out_field_string (uiout, "fullname", fullname);
5697 }
5698
5699 ui_out_field_int (uiout, "line", loc->line_number);
5700 }
5701 else if (loc)
5702 {
5703 struct ui_file *stb = mem_fileopen ();
5704 struct cleanup *stb_chain = make_cleanup_ui_file_delete (stb);
5705
5706 print_address_symbolic (loc->gdbarch, loc->address, stb,
5707 demangle, "");
5708 ui_out_field_stream (uiout, "at", stb);
5709
5710 do_cleanups (stb_chain);
5711 }
5712 else
5713 ui_out_field_string (uiout, "pending", b->addr_string);
5714
5715 if (loc && is_breakpoint (b)
5716 && breakpoint_condition_evaluation_mode () == condition_evaluation_target
5717 && bp_condition_evaluator (b) == condition_evaluation_both)
5718 {
5719 ui_out_text (uiout, " (");
5720 ui_out_field_string (uiout, "evaluated-by",
5721 bp_location_condition_evaluator (loc));
5722 ui_out_text (uiout, ")");
5723 }
5724
5725 do_cleanups (old_chain);
5726 }
5727
5728 static const char *
5729 bptype_string (enum bptype type)
5730 {
5731 struct ep_type_description
5732 {
5733 enum bptype type;
5734 char *description;
5735 };
5736 static struct ep_type_description bptypes[] =
5737 {
5738 {bp_none, "?deleted?"},
5739 {bp_breakpoint, "breakpoint"},
5740 {bp_hardware_breakpoint, "hw breakpoint"},
5741 {bp_until, "until"},
5742 {bp_finish, "finish"},
5743 {bp_watchpoint, "watchpoint"},
5744 {bp_hardware_watchpoint, "hw watchpoint"},
5745 {bp_read_watchpoint, "read watchpoint"},
5746 {bp_access_watchpoint, "acc watchpoint"},
5747 {bp_longjmp, "longjmp"},
5748 {bp_longjmp_resume, "longjmp resume"},
5749 {bp_longjmp_call_dummy, "longjmp for call dummy"},
5750 {bp_exception, "exception"},
5751 {bp_exception_resume, "exception resume"},
5752 {bp_step_resume, "step resume"},
5753 {bp_hp_step_resume, "high-priority step resume"},
5754 {bp_watchpoint_scope, "watchpoint scope"},
5755 {bp_call_dummy, "call dummy"},
5756 {bp_std_terminate, "std::terminate"},
5757 {bp_shlib_event, "shlib events"},
5758 {bp_thread_event, "thread events"},
5759 {bp_overlay_event, "overlay events"},
5760 {bp_longjmp_master, "longjmp master"},
5761 {bp_std_terminate_master, "std::terminate master"},
5762 {bp_exception_master, "exception master"},
5763 {bp_catchpoint, "catchpoint"},
5764 {bp_tracepoint, "tracepoint"},
5765 {bp_fast_tracepoint, "fast tracepoint"},
5766 {bp_static_tracepoint, "static tracepoint"},
5767 {bp_dprintf, "dprintf"},
5768 {bp_jit_event, "jit events"},
5769 {bp_gnu_ifunc_resolver, "STT_GNU_IFUNC resolver"},
5770 {bp_gnu_ifunc_resolver_return, "STT_GNU_IFUNC resolver return"},
5771 };
5772
5773 if (((int) type >= (sizeof (bptypes) / sizeof (bptypes[0])))
5774 || ((int) type != bptypes[(int) type].type))
5775 internal_error (__FILE__, __LINE__,
5776 _("bptypes table does not describe type #%d."),
5777 (int) type);
5778
5779 return bptypes[(int) type].description;
5780 }
5781
5782 /* Print B to gdb_stdout. */
5783
5784 static void
5785 print_one_breakpoint_location (struct breakpoint *b,
5786 struct bp_location *loc,
5787 int loc_number,
5788 struct bp_location **last_loc,
5789 int allflag)
5790 {
5791 struct command_line *l;
5792 static char bpenables[] = "nynny";
5793
5794 struct ui_out *uiout = current_uiout;
5795 int header_of_multiple = 0;
5796 int part_of_multiple = (loc != NULL);
5797 struct value_print_options opts;
5798
5799 get_user_print_options (&opts);
5800
5801 gdb_assert (!loc || loc_number != 0);
5802 /* See comment in print_one_breakpoint concerning treatment of
5803 breakpoints with single disabled location. */
5804 if (loc == NULL
5805 && (b->loc != NULL
5806 && (b->loc->next != NULL || !b->loc->enabled)))
5807 header_of_multiple = 1;
5808 if (loc == NULL)
5809 loc = b->loc;
5810
5811 annotate_record ();
5812
5813 /* 1 */
5814 annotate_field (0);
5815 if (part_of_multiple)
5816 {
5817 char *formatted;
5818 formatted = xstrprintf ("%d.%d", b->number, loc_number);
5819 ui_out_field_string (uiout, "number", formatted);
5820 xfree (formatted);
5821 }
5822 else
5823 {
5824 ui_out_field_int (uiout, "number", b->number);
5825 }
5826
5827 /* 2 */
5828 annotate_field (1);
5829 if (part_of_multiple)
5830 ui_out_field_skip (uiout, "type");
5831 else
5832 ui_out_field_string (uiout, "type", bptype_string (b->type));
5833
5834 /* 3 */
5835 annotate_field (2);
5836 if (part_of_multiple)
5837 ui_out_field_skip (uiout, "disp");
5838 else
5839 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
5840
5841
5842 /* 4 */
5843 annotate_field (3);
5844 if (part_of_multiple)
5845 ui_out_field_string (uiout, "enabled", loc->enabled ? "y" : "n");
5846 else
5847 ui_out_field_fmt (uiout, "enabled", "%c",
5848 bpenables[(int) b->enable_state]);
5849 ui_out_spaces (uiout, 2);
5850
5851
5852 /* 5 and 6 */
5853 if (b->ops != NULL && b->ops->print_one != NULL)
5854 {
5855 /* Although the print_one can possibly print all locations,
5856 calling it here is not likely to get any nice result. So,
5857 make sure there's just one location. */
5858 gdb_assert (b->loc == NULL || b->loc->next == NULL);
5859 b->ops->print_one (b, last_loc);
5860 }
5861 else
5862 switch (b->type)
5863 {
5864 case bp_none:
5865 internal_error (__FILE__, __LINE__,
5866 _("print_one_breakpoint: bp_none encountered\n"));
5867 break;
5868
5869 case bp_watchpoint:
5870 case bp_hardware_watchpoint:
5871 case bp_read_watchpoint:
5872 case bp_access_watchpoint:
5873 {
5874 struct watchpoint *w = (struct watchpoint *) b;
5875
5876 /* Field 4, the address, is omitted (which makes the columns
5877 not line up too nicely with the headers, but the effect
5878 is relatively readable). */
5879 if (opts.addressprint)
5880 ui_out_field_skip (uiout, "addr");
5881 annotate_field (5);
5882 ui_out_field_string (uiout, "what", w->exp_string);
5883 }
5884 break;
5885
5886 case bp_breakpoint:
5887 case bp_hardware_breakpoint:
5888 case bp_until:
5889 case bp_finish:
5890 case bp_longjmp:
5891 case bp_longjmp_resume:
5892 case bp_longjmp_call_dummy:
5893 case bp_exception:
5894 case bp_exception_resume:
5895 case bp_step_resume:
5896 case bp_hp_step_resume:
5897 case bp_watchpoint_scope:
5898 case bp_call_dummy:
5899 case bp_std_terminate:
5900 case bp_shlib_event:
5901 case bp_thread_event:
5902 case bp_overlay_event:
5903 case bp_longjmp_master:
5904 case bp_std_terminate_master:
5905 case bp_exception_master:
5906 case bp_tracepoint:
5907 case bp_fast_tracepoint:
5908 case bp_static_tracepoint:
5909 case bp_dprintf:
5910 case bp_jit_event:
5911 case bp_gnu_ifunc_resolver:
5912 case bp_gnu_ifunc_resolver_return:
5913 if (opts.addressprint)
5914 {
5915 annotate_field (4);
5916 if (header_of_multiple)
5917 ui_out_field_string (uiout, "addr", "<MULTIPLE>");
5918 else if (b->loc == NULL || loc->shlib_disabled)
5919 ui_out_field_string (uiout, "addr", "<PENDING>");
5920 else
5921 ui_out_field_core_addr (uiout, "addr",
5922 loc->gdbarch, loc->address);
5923 }
5924 annotate_field (5);
5925 if (!header_of_multiple)
5926 print_breakpoint_location (b, loc);
5927 if (b->loc)
5928 *last_loc = b->loc;
5929 break;
5930 }
5931
5932
5933 /* For backward compatibility, don't display inferiors unless there
5934 are several. */
5935 if (loc != NULL
5936 && !header_of_multiple
5937 && (allflag
5938 || (!gdbarch_has_global_breakpoints (target_gdbarch)
5939 && (number_of_program_spaces () > 1
5940 || number_of_inferiors () > 1)
5941 /* LOC is for existing B, it cannot be in
5942 moribund_locations and thus having NULL OWNER. */
5943 && loc->owner->type != bp_catchpoint)))
5944 {
5945 struct inferior *inf;
5946 int first = 1;
5947
5948 for (inf = inferior_list; inf != NULL; inf = inf->next)
5949 {
5950 if (inf->pspace == loc->pspace)
5951 {
5952 if (first)
5953 {
5954 first = 0;
5955 ui_out_text (uiout, " inf ");
5956 }
5957 else
5958 ui_out_text (uiout, ", ");
5959 ui_out_text (uiout, plongest (inf->num));
5960 }
5961 }
5962 }
5963
5964 if (!part_of_multiple)
5965 {
5966 if (b->thread != -1)
5967 {
5968 /* FIXME: This seems to be redundant and lost here; see the
5969 "stop only in" line a little further down. */
5970 ui_out_text (uiout, " thread ");
5971 ui_out_field_int (uiout, "thread", b->thread);
5972 }
5973 else if (b->task != 0)
5974 {
5975 ui_out_text (uiout, " task ");
5976 ui_out_field_int (uiout, "task", b->task);
5977 }
5978 }
5979
5980 ui_out_text (uiout, "\n");
5981
5982 if (!part_of_multiple)
5983 b->ops->print_one_detail (b, uiout);
5984
5985 if (part_of_multiple && frame_id_p (b->frame_id))
5986 {
5987 annotate_field (6);
5988 ui_out_text (uiout, "\tstop only in stack frame at ");
5989 /* FIXME: cagney/2002-12-01: Shouldn't be poking around inside
5990 the frame ID. */
5991 ui_out_field_core_addr (uiout, "frame",
5992 b->gdbarch, b->frame_id.stack_addr);
5993 ui_out_text (uiout, "\n");
5994 }
5995
5996 if (!part_of_multiple && b->cond_string)
5997 {
5998 annotate_field (7);
5999 if (is_tracepoint (b))
6000 ui_out_text (uiout, "\ttrace only if ");
6001 else
6002 ui_out_text (uiout, "\tstop only if ");
6003 ui_out_field_string (uiout, "cond", b->cond_string);
6004
6005 /* Print whether the target is doing the breakpoint's condition
6006 evaluation. If GDB is doing the evaluation, don't print anything. */
6007 if (is_breakpoint (b)
6008 && breakpoint_condition_evaluation_mode ()
6009 == condition_evaluation_target)
6010 {
6011 ui_out_text (uiout, " (");
6012 ui_out_field_string (uiout, "evaluated-by",
6013 bp_condition_evaluator (b));
6014 ui_out_text (uiout, " evals)");
6015 }
6016 ui_out_text (uiout, "\n");
6017 }
6018
6019 if (!part_of_multiple && b->thread != -1)
6020 {
6021 /* FIXME should make an annotation for this. */
6022 ui_out_text (uiout, "\tstop only in thread ");
6023 ui_out_field_int (uiout, "thread", b->thread);
6024 ui_out_text (uiout, "\n");
6025 }
6026
6027 if (!part_of_multiple && b->hit_count)
6028 {
6029 /* FIXME should make an annotation for this. */
6030 if (is_catchpoint (b))
6031 ui_out_text (uiout, "\tcatchpoint");
6032 else if (is_tracepoint (b))
6033 ui_out_text (uiout, "\ttracepoint");
6034 else
6035 ui_out_text (uiout, "\tbreakpoint");
6036 ui_out_text (uiout, " already hit ");
6037 ui_out_field_int (uiout, "times", b->hit_count);
6038 if (b->hit_count == 1)
6039 ui_out_text (uiout, " time\n");
6040 else
6041 ui_out_text (uiout, " times\n");
6042 }
6043
6044 /* Output the count also if it is zero, but only if this is mi.
6045 FIXME: Should have a better test for this. */
6046 if (ui_out_is_mi_like_p (uiout))
6047 if (!part_of_multiple && b->hit_count == 0)
6048 ui_out_field_int (uiout, "times", b->hit_count);
6049
6050 if (!part_of_multiple && b->ignore_count)
6051 {
6052 annotate_field (8);
6053 ui_out_text (uiout, "\tignore next ");
6054 ui_out_field_int (uiout, "ignore", b->ignore_count);
6055 ui_out_text (uiout, " hits\n");
6056 }
6057
6058 /* Note that an enable count of 1 corresponds to "enable once"
6059 behavior, which is reported by the combination of enablement and
6060 disposition, so we don't need to mention it here. */
6061 if (!part_of_multiple && b->enable_count > 1)
6062 {
6063 annotate_field (8);
6064 ui_out_text (uiout, "\tdisable after ");
6065 /* Tweak the wording to clarify that ignore and enable counts
6066 are distinct, and have additive effect. */
6067 if (b->ignore_count)
6068 ui_out_text (uiout, "additional ");
6069 else
6070 ui_out_text (uiout, "next ");
6071 ui_out_field_int (uiout, "enable", b->enable_count);
6072 ui_out_text (uiout, " hits\n");
6073 }
6074
6075 if (!part_of_multiple && is_tracepoint (b))
6076 {
6077 struct tracepoint *tp = (struct tracepoint *) b;
6078
6079 if (tp->traceframe_usage)
6080 {
6081 ui_out_text (uiout, "\ttrace buffer usage ");
6082 ui_out_field_int (uiout, "traceframe-usage", tp->traceframe_usage);
6083 ui_out_text (uiout, " bytes\n");
6084 }
6085 }
6086
6087 if (!part_of_multiple && b->extra_string
6088 && b->type == bp_dprintf && !b->commands)
6089 {
6090 annotate_field (7);
6091 ui_out_text (uiout, "\t(agent printf) ");
6092 ui_out_field_string (uiout, "printf", b->extra_string);
6093 ui_out_text (uiout, "\n");
6094 }
6095
6096 l = b->commands ? b->commands->commands : NULL;
6097 if (!part_of_multiple && l)
6098 {
6099 struct cleanup *script_chain;
6100
6101 annotate_field (9);
6102 script_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "script");
6103 print_command_lines (uiout, l, 4);
6104 do_cleanups (script_chain);
6105 }
6106
6107 if (is_tracepoint (b))
6108 {
6109 struct tracepoint *t = (struct tracepoint *) b;
6110
6111 if (!part_of_multiple && t->pass_count)
6112 {
6113 annotate_field (10);
6114 ui_out_text (uiout, "\tpass count ");
6115 ui_out_field_int (uiout, "pass", t->pass_count);
6116 ui_out_text (uiout, " \n");
6117 }
6118 }
6119
6120 if (ui_out_is_mi_like_p (uiout) && !part_of_multiple)
6121 {
6122 if (is_watchpoint (b))
6123 {
6124 struct watchpoint *w = (struct watchpoint *) b;
6125
6126 ui_out_field_string (uiout, "original-location", w->exp_string);
6127 }
6128 else if (b->addr_string)
6129 ui_out_field_string (uiout, "original-location", b->addr_string);
6130 }
6131 }
6132
6133 static void
6134 print_one_breakpoint (struct breakpoint *b,
6135 struct bp_location **last_loc,
6136 int allflag)
6137 {
6138 struct cleanup *bkpt_chain;
6139 struct ui_out *uiout = current_uiout;
6140
6141 bkpt_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "bkpt");
6142
6143 print_one_breakpoint_location (b, NULL, 0, last_loc, allflag);
6144 do_cleanups (bkpt_chain);
6145
6146 /* If this breakpoint has custom print function,
6147 it's already printed. Otherwise, print individual
6148 locations, if any. */
6149 if (b->ops == NULL || b->ops->print_one == NULL)
6150 {
6151 /* If breakpoint has a single location that is disabled, we
6152 print it as if it had several locations, since otherwise it's
6153 hard to represent "breakpoint enabled, location disabled"
6154 situation.
6155
6156 Note that while hardware watchpoints have several locations
6157 internally, that's not a property exposed to user. */
6158 if (b->loc
6159 && !is_hardware_watchpoint (b)
6160 && (b->loc->next || !b->loc->enabled))
6161 {
6162 struct bp_location *loc;
6163 int n = 1;
6164
6165 for (loc = b->loc; loc; loc = loc->next, ++n)
6166 {
6167 struct cleanup *inner2 =
6168 make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
6169 print_one_breakpoint_location (b, loc, n, last_loc, allflag);
6170 do_cleanups (inner2);
6171 }
6172 }
6173 }
6174 }
6175
6176 static int
6177 breakpoint_address_bits (struct breakpoint *b)
6178 {
6179 int print_address_bits = 0;
6180 struct bp_location *loc;
6181
6182 for (loc = b->loc; loc; loc = loc->next)
6183 {
6184 int addr_bit;
6185
6186 /* Software watchpoints that aren't watching memory don't have
6187 an address to print. */
6188 if (b->type == bp_watchpoint && loc->watchpoint_type == -1)
6189 continue;
6190
6191 addr_bit = gdbarch_addr_bit (loc->gdbarch);
6192 if (addr_bit > print_address_bits)
6193 print_address_bits = addr_bit;
6194 }
6195
6196 return print_address_bits;
6197 }
6198
6199 struct captured_breakpoint_query_args
6200 {
6201 int bnum;
6202 };
6203
6204 static int
6205 do_captured_breakpoint_query (struct ui_out *uiout, void *data)
6206 {
6207 struct captured_breakpoint_query_args *args = data;
6208 struct breakpoint *b;
6209 struct bp_location *dummy_loc = NULL;
6210
6211 ALL_BREAKPOINTS (b)
6212 {
6213 if (args->bnum == b->number)
6214 {
6215 print_one_breakpoint (b, &dummy_loc, 0);
6216 return GDB_RC_OK;
6217 }
6218 }
6219 return GDB_RC_NONE;
6220 }
6221
6222 enum gdb_rc
6223 gdb_breakpoint_query (struct ui_out *uiout, int bnum,
6224 char **error_message)
6225 {
6226 struct captured_breakpoint_query_args args;
6227
6228 args.bnum = bnum;
6229 /* For the moment we don't trust print_one_breakpoint() to not throw
6230 an error. */
6231 if (catch_exceptions_with_msg (uiout, do_captured_breakpoint_query, &args,
6232 error_message, RETURN_MASK_ALL) < 0)
6233 return GDB_RC_FAIL;
6234 else
6235 return GDB_RC_OK;
6236 }
6237
6238 /* Return true if this breakpoint was set by the user, false if it is
6239 internal or momentary. */
6240
6241 int
6242 user_breakpoint_p (struct breakpoint *b)
6243 {
6244 return b->number > 0;
6245 }
6246
6247 /* Print information on user settable breakpoint (watchpoint, etc)
6248 number BNUM. If BNUM is -1 print all user-settable breakpoints.
6249 If ALLFLAG is non-zero, include non-user-settable breakpoints. If
6250 FILTER is non-NULL, call it on each breakpoint and only include the
6251 ones for which it returns non-zero. Return the total number of
6252 breakpoints listed. */
6253
6254 static int
6255 breakpoint_1 (char *args, int allflag,
6256 int (*filter) (const struct breakpoint *))
6257 {
6258 struct breakpoint *b;
6259 struct bp_location *last_loc = NULL;
6260 int nr_printable_breakpoints;
6261 struct cleanup *bkpttbl_chain;
6262 struct value_print_options opts;
6263 int print_address_bits = 0;
6264 int print_type_col_width = 14;
6265 struct ui_out *uiout = current_uiout;
6266
6267 get_user_print_options (&opts);
6268
6269 /* Compute the number of rows in the table, as well as the size
6270 required for address fields. */
6271 nr_printable_breakpoints = 0;
6272 ALL_BREAKPOINTS (b)
6273 {
6274 /* If we have a filter, only list the breakpoints it accepts. */
6275 if (filter && !filter (b))
6276 continue;
6277
6278 /* If we have an "args" string, it is a list of breakpoints to
6279 accept. Skip the others. */
6280 if (args != NULL && *args != '\0')
6281 {
6282 if (allflag && parse_and_eval_long (args) != b->number)
6283 continue;
6284 if (!allflag && !number_is_in_list (args, b->number))
6285 continue;
6286 }
6287
6288 if (allflag || user_breakpoint_p (b))
6289 {
6290 int addr_bit, type_len;
6291
6292 addr_bit = breakpoint_address_bits (b);
6293 if (addr_bit > print_address_bits)
6294 print_address_bits = addr_bit;
6295
6296 type_len = strlen (bptype_string (b->type));
6297 if (type_len > print_type_col_width)
6298 print_type_col_width = type_len;
6299
6300 nr_printable_breakpoints++;
6301 }
6302 }
6303
6304 if (opts.addressprint)
6305 bkpttbl_chain
6306 = make_cleanup_ui_out_table_begin_end (uiout, 6,
6307 nr_printable_breakpoints,
6308 "BreakpointTable");
6309 else
6310 bkpttbl_chain
6311 = make_cleanup_ui_out_table_begin_end (uiout, 5,
6312 nr_printable_breakpoints,
6313 "BreakpointTable");
6314
6315 if (nr_printable_breakpoints > 0)
6316 annotate_breakpoints_headers ();
6317 if (nr_printable_breakpoints > 0)
6318 annotate_field (0);
6319 ui_out_table_header (uiout, 7, ui_left, "number", "Num"); /* 1 */
6320 if (nr_printable_breakpoints > 0)
6321 annotate_field (1);
6322 ui_out_table_header (uiout, print_type_col_width, ui_left,
6323 "type", "Type"); /* 2 */
6324 if (nr_printable_breakpoints > 0)
6325 annotate_field (2);
6326 ui_out_table_header (uiout, 4, ui_left, "disp", "Disp"); /* 3 */
6327 if (nr_printable_breakpoints > 0)
6328 annotate_field (3);
6329 ui_out_table_header (uiout, 3, ui_left, "enabled", "Enb"); /* 4 */
6330 if (opts.addressprint)
6331 {
6332 if (nr_printable_breakpoints > 0)
6333 annotate_field (4);
6334 if (print_address_bits <= 32)
6335 ui_out_table_header (uiout, 10, ui_left,
6336 "addr", "Address"); /* 5 */
6337 else
6338 ui_out_table_header (uiout, 18, ui_left,
6339 "addr", "Address"); /* 5 */
6340 }
6341 if (nr_printable_breakpoints > 0)
6342 annotate_field (5);
6343 ui_out_table_header (uiout, 40, ui_noalign, "what", "What"); /* 6 */
6344 ui_out_table_body (uiout);
6345 if (nr_printable_breakpoints > 0)
6346 annotate_breakpoints_table ();
6347
6348 ALL_BREAKPOINTS (b)
6349 {
6350 QUIT;
6351 /* If we have a filter, only list the breakpoints it accepts. */
6352 if (filter && !filter (b))
6353 continue;
6354
6355 /* If we have an "args" string, it is a list of breakpoints to
6356 accept. Skip the others. */
6357
6358 if (args != NULL && *args != '\0')
6359 {
6360 if (allflag) /* maintenance info breakpoint */
6361 {
6362 if (parse_and_eval_long (args) != b->number)
6363 continue;
6364 }
6365 else /* all others */
6366 {
6367 if (!number_is_in_list (args, b->number))
6368 continue;
6369 }
6370 }
6371 /* We only print out user settable breakpoints unless the
6372 allflag is set. */
6373 if (allflag || user_breakpoint_p (b))
6374 print_one_breakpoint (b, &last_loc, allflag);
6375 }
6376
6377 do_cleanups (bkpttbl_chain);
6378
6379 if (nr_printable_breakpoints == 0)
6380 {
6381 /* If there's a filter, let the caller decide how to report
6382 empty list. */
6383 if (!filter)
6384 {
6385 if (args == NULL || *args == '\0')
6386 ui_out_message (uiout, 0, "No breakpoints or watchpoints.\n");
6387 else
6388 ui_out_message (uiout, 0,
6389 "No breakpoint or watchpoint matching '%s'.\n",
6390 args);
6391 }
6392 }
6393 else
6394 {
6395 if (last_loc && !server_command)
6396 set_next_address (last_loc->gdbarch, last_loc->address);
6397 }
6398
6399 /* FIXME? Should this be moved up so that it is only called when
6400 there have been breakpoints? */
6401 annotate_breakpoints_table_end ();
6402
6403 return nr_printable_breakpoints;
6404 }
6405
6406 /* Display the value of default-collect in a way that is generally
6407 compatible with the breakpoint list. */
6408
6409 static void
6410 default_collect_info (void)
6411 {
6412 struct ui_out *uiout = current_uiout;
6413
6414 /* If it has no value (which is frequently the case), say nothing; a
6415 message like "No default-collect." gets in user's face when it's
6416 not wanted. */
6417 if (!*default_collect)
6418 return;
6419
6420 /* The following phrase lines up nicely with per-tracepoint collect
6421 actions. */
6422 ui_out_text (uiout, "default collect ");
6423 ui_out_field_string (uiout, "default-collect", default_collect);
6424 ui_out_text (uiout, " \n");
6425 }
6426
6427 static void
6428 breakpoints_info (char *args, int from_tty)
6429 {
6430 breakpoint_1 (args, 0, NULL);
6431
6432 default_collect_info ();
6433 }
6434
6435 static void
6436 watchpoints_info (char *args, int from_tty)
6437 {
6438 int num_printed = breakpoint_1 (args, 0, is_watchpoint);
6439 struct ui_out *uiout = current_uiout;
6440
6441 if (num_printed == 0)
6442 {
6443 if (args == NULL || *args == '\0')
6444 ui_out_message (uiout, 0, "No watchpoints.\n");
6445 else
6446 ui_out_message (uiout, 0, "No watchpoint matching '%s'.\n", args);
6447 }
6448 }
6449
6450 static void
6451 maintenance_info_breakpoints (char *args, int from_tty)
6452 {
6453 breakpoint_1 (args, 1, NULL);
6454
6455 default_collect_info ();
6456 }
6457
6458 static int
6459 breakpoint_has_pc (struct breakpoint *b,
6460 struct program_space *pspace,
6461 CORE_ADDR pc, struct obj_section *section)
6462 {
6463 struct bp_location *bl = b->loc;
6464
6465 for (; bl; bl = bl->next)
6466 {
6467 if (bl->pspace == pspace
6468 && bl->address == pc
6469 && (!overlay_debugging || bl->section == section))
6470 return 1;
6471 }
6472 return 0;
6473 }
6474
6475 /* Print a message describing any user-breakpoints set at PC. This
6476 concerns with logical breakpoints, so we match program spaces, not
6477 address spaces. */
6478
6479 static void
6480 describe_other_breakpoints (struct gdbarch *gdbarch,
6481 struct program_space *pspace, CORE_ADDR pc,
6482 struct obj_section *section, int thread)
6483 {
6484 int others = 0;
6485 struct breakpoint *b;
6486
6487 ALL_BREAKPOINTS (b)
6488 others += (user_breakpoint_p (b)
6489 && breakpoint_has_pc (b, pspace, pc, section));
6490 if (others > 0)
6491 {
6492 if (others == 1)
6493 printf_filtered (_("Note: breakpoint "));
6494 else /* if (others == ???) */
6495 printf_filtered (_("Note: breakpoints "));
6496 ALL_BREAKPOINTS (b)
6497 if (user_breakpoint_p (b) && breakpoint_has_pc (b, pspace, pc, section))
6498 {
6499 others--;
6500 printf_filtered ("%d", b->number);
6501 if (b->thread == -1 && thread != -1)
6502 printf_filtered (" (all threads)");
6503 else if (b->thread != -1)
6504 printf_filtered (" (thread %d)", b->thread);
6505 printf_filtered ("%s%s ",
6506 ((b->enable_state == bp_disabled
6507 || b->enable_state == bp_call_disabled)
6508 ? " (disabled)"
6509 : b->enable_state == bp_permanent
6510 ? " (permanent)"
6511 : ""),
6512 (others > 1) ? ","
6513 : ((others == 1) ? " and" : ""));
6514 }
6515 printf_filtered (_("also set at pc "));
6516 fputs_filtered (paddress (gdbarch, pc), gdb_stdout);
6517 printf_filtered (".\n");
6518 }
6519 }
6520 \f
6521
6522 /* Return true iff it is meaningful to use the address member of
6523 BPT. For some breakpoint types, the address member is irrelevant
6524 and it makes no sense to attempt to compare it to other addresses
6525 (or use it for any other purpose either).
6526
6527 More specifically, each of the following breakpoint types will
6528 always have a zero valued address and we don't want to mark
6529 breakpoints of any of these types to be a duplicate of an actual
6530 breakpoint at address zero:
6531
6532 bp_watchpoint
6533 bp_catchpoint
6534
6535 */
6536
6537 static int
6538 breakpoint_address_is_meaningful (struct breakpoint *bpt)
6539 {
6540 enum bptype type = bpt->type;
6541
6542 return (type != bp_watchpoint && type != bp_catchpoint);
6543 }
6544
6545 /* Assuming LOC1 and LOC2's owners are hardware watchpoints, returns
6546 true if LOC1 and LOC2 represent the same watchpoint location. */
6547
6548 static int
6549 watchpoint_locations_match (struct bp_location *loc1,
6550 struct bp_location *loc2)
6551 {
6552 struct watchpoint *w1 = (struct watchpoint *) loc1->owner;
6553 struct watchpoint *w2 = (struct watchpoint *) loc2->owner;
6554
6555 /* Both of them must exist. */
6556 gdb_assert (w1 != NULL);
6557 gdb_assert (w2 != NULL);
6558
6559 /* If the target can evaluate the condition expression in hardware,
6560 then we we need to insert both watchpoints even if they are at
6561 the same place. Otherwise the watchpoint will only trigger when
6562 the condition of whichever watchpoint was inserted evaluates to
6563 true, not giving a chance for GDB to check the condition of the
6564 other watchpoint. */
6565 if ((w1->cond_exp
6566 && target_can_accel_watchpoint_condition (loc1->address,
6567 loc1->length,
6568 loc1->watchpoint_type,
6569 w1->cond_exp))
6570 || (w2->cond_exp
6571 && target_can_accel_watchpoint_condition (loc2->address,
6572 loc2->length,
6573 loc2->watchpoint_type,
6574 w2->cond_exp)))
6575 return 0;
6576
6577 /* Note that this checks the owner's type, not the location's. In
6578 case the target does not support read watchpoints, but does
6579 support access watchpoints, we'll have bp_read_watchpoint
6580 watchpoints with hw_access locations. Those should be considered
6581 duplicates of hw_read locations. The hw_read locations will
6582 become hw_access locations later. */
6583 return (loc1->owner->type == loc2->owner->type
6584 && loc1->pspace->aspace == loc2->pspace->aspace
6585 && loc1->address == loc2->address
6586 && loc1->length == loc2->length);
6587 }
6588
6589 /* Returns true if {ASPACE1,ADDR1} and {ASPACE2,ADDR2} represent the
6590 same breakpoint location. In most targets, this can only be true
6591 if ASPACE1 matches ASPACE2. On targets that have global
6592 breakpoints, the address space doesn't really matter. */
6593
6594 static int
6595 breakpoint_address_match (struct address_space *aspace1, CORE_ADDR addr1,
6596 struct address_space *aspace2, CORE_ADDR addr2)
6597 {
6598 return ((gdbarch_has_global_breakpoints (target_gdbarch)
6599 || aspace1 == aspace2)
6600 && addr1 == addr2);
6601 }
6602
6603 /* Returns true if {ASPACE2,ADDR2} falls within the range determined by
6604 {ASPACE1,ADDR1,LEN1}. In most targets, this can only be true if ASPACE1
6605 matches ASPACE2. On targets that have global breakpoints, the address
6606 space doesn't really matter. */
6607
6608 static int
6609 breakpoint_address_match_range (struct address_space *aspace1, CORE_ADDR addr1,
6610 int len1, struct address_space *aspace2,
6611 CORE_ADDR addr2)
6612 {
6613 return ((gdbarch_has_global_breakpoints (target_gdbarch)
6614 || aspace1 == aspace2)
6615 && addr2 >= addr1 && addr2 < addr1 + len1);
6616 }
6617
6618 /* Returns true if {ASPACE,ADDR} matches the breakpoint BL. BL may be
6619 a ranged breakpoint. In most targets, a match happens only if ASPACE
6620 matches the breakpoint's address space. On targets that have global
6621 breakpoints, the address space doesn't really matter. */
6622
6623 static int
6624 breakpoint_location_address_match (struct bp_location *bl,
6625 struct address_space *aspace,
6626 CORE_ADDR addr)
6627 {
6628 return (breakpoint_address_match (bl->pspace->aspace, bl->address,
6629 aspace, addr)
6630 || (bl->length
6631 && breakpoint_address_match_range (bl->pspace->aspace,
6632 bl->address, bl->length,
6633 aspace, addr)));
6634 }
6635
6636 /* If LOC1 and LOC2's owners are not tracepoints, returns false directly.
6637 Then, if LOC1 and LOC2 represent the same tracepoint location, returns
6638 true, otherwise returns false. */
6639
6640 static int
6641 tracepoint_locations_match (struct bp_location *loc1,
6642 struct bp_location *loc2)
6643 {
6644 if (is_tracepoint (loc1->owner) && is_tracepoint (loc2->owner))
6645 /* Since tracepoint locations are never duplicated with others', tracepoint
6646 locations at the same address of different tracepoints are regarded as
6647 different locations. */
6648 return (loc1->address == loc2->address && loc1->owner == loc2->owner);
6649 else
6650 return 0;
6651 }
6652
6653 /* Assuming LOC1 and LOC2's types' have meaningful target addresses
6654 (breakpoint_address_is_meaningful), returns true if LOC1 and LOC2
6655 represent the same location. */
6656
6657 static int
6658 breakpoint_locations_match (struct bp_location *loc1,
6659 struct bp_location *loc2)
6660 {
6661 int hw_point1, hw_point2;
6662
6663 /* Both of them must not be in moribund_locations. */
6664 gdb_assert (loc1->owner != NULL);
6665 gdb_assert (loc2->owner != NULL);
6666
6667 hw_point1 = is_hardware_watchpoint (loc1->owner);
6668 hw_point2 = is_hardware_watchpoint (loc2->owner);
6669
6670 if (hw_point1 != hw_point2)
6671 return 0;
6672 else if (hw_point1)
6673 return watchpoint_locations_match (loc1, loc2);
6674 else if (is_tracepoint (loc1->owner) || is_tracepoint (loc2->owner))
6675 return tracepoint_locations_match (loc1, loc2);
6676 else
6677 /* We compare bp_location.length in order to cover ranged breakpoints. */
6678 return (breakpoint_address_match (loc1->pspace->aspace, loc1->address,
6679 loc2->pspace->aspace, loc2->address)
6680 && loc1->length == loc2->length);
6681 }
6682
6683 static void
6684 breakpoint_adjustment_warning (CORE_ADDR from_addr, CORE_ADDR to_addr,
6685 int bnum, int have_bnum)
6686 {
6687 /* The longest string possibly returned by hex_string_custom
6688 is 50 chars. These must be at least that big for safety. */
6689 char astr1[64];
6690 char astr2[64];
6691
6692 strcpy (astr1, hex_string_custom ((unsigned long) from_addr, 8));
6693 strcpy (astr2, hex_string_custom ((unsigned long) to_addr, 8));
6694 if (have_bnum)
6695 warning (_("Breakpoint %d address previously adjusted from %s to %s."),
6696 bnum, astr1, astr2);
6697 else
6698 warning (_("Breakpoint address adjusted from %s to %s."), astr1, astr2);
6699 }
6700
6701 /* Adjust a breakpoint's address to account for architectural
6702 constraints on breakpoint placement. Return the adjusted address.
6703 Note: Very few targets require this kind of adjustment. For most
6704 targets, this function is simply the identity function. */
6705
6706 static CORE_ADDR
6707 adjust_breakpoint_address (struct gdbarch *gdbarch,
6708 CORE_ADDR bpaddr, enum bptype bptype)
6709 {
6710 if (!gdbarch_adjust_breakpoint_address_p (gdbarch))
6711 {
6712 /* Very few targets need any kind of breakpoint adjustment. */
6713 return bpaddr;
6714 }
6715 else if (bptype == bp_watchpoint
6716 || bptype == bp_hardware_watchpoint
6717 || bptype == bp_read_watchpoint
6718 || bptype == bp_access_watchpoint
6719 || bptype == bp_catchpoint)
6720 {
6721 /* Watchpoints and the various bp_catch_* eventpoints should not
6722 have their addresses modified. */
6723 return bpaddr;
6724 }
6725 else
6726 {
6727 CORE_ADDR adjusted_bpaddr;
6728
6729 /* Some targets have architectural constraints on the placement
6730 of breakpoint instructions. Obtain the adjusted address. */
6731 adjusted_bpaddr = gdbarch_adjust_breakpoint_address (gdbarch, bpaddr);
6732
6733 /* An adjusted breakpoint address can significantly alter
6734 a user's expectations. Print a warning if an adjustment
6735 is required. */
6736 if (adjusted_bpaddr != bpaddr)
6737 breakpoint_adjustment_warning (bpaddr, adjusted_bpaddr, 0, 0);
6738
6739 return adjusted_bpaddr;
6740 }
6741 }
6742
6743 void
6744 init_bp_location (struct bp_location *loc, const struct bp_location_ops *ops,
6745 struct breakpoint *owner)
6746 {
6747 memset (loc, 0, sizeof (*loc));
6748
6749 gdb_assert (ops != NULL);
6750
6751 loc->ops = ops;
6752 loc->owner = owner;
6753 loc->cond = NULL;
6754 loc->cond_bytecode = NULL;
6755 loc->shlib_disabled = 0;
6756 loc->enabled = 1;
6757
6758 switch (owner->type)
6759 {
6760 case bp_breakpoint:
6761 case bp_until:
6762 case bp_finish:
6763 case bp_longjmp:
6764 case bp_longjmp_resume:
6765 case bp_longjmp_call_dummy:
6766 case bp_exception:
6767 case bp_exception_resume:
6768 case bp_step_resume:
6769 case bp_hp_step_resume:
6770 case bp_watchpoint_scope:
6771 case bp_call_dummy:
6772 case bp_std_terminate:
6773 case bp_shlib_event:
6774 case bp_thread_event:
6775 case bp_overlay_event:
6776 case bp_jit_event:
6777 case bp_longjmp_master:
6778 case bp_std_terminate_master:
6779 case bp_exception_master:
6780 case bp_gnu_ifunc_resolver:
6781 case bp_gnu_ifunc_resolver_return:
6782 case bp_dprintf:
6783 loc->loc_type = bp_loc_software_breakpoint;
6784 mark_breakpoint_location_modified (loc);
6785 break;
6786 case bp_hardware_breakpoint:
6787 loc->loc_type = bp_loc_hardware_breakpoint;
6788 mark_breakpoint_location_modified (loc);
6789 break;
6790 case bp_hardware_watchpoint:
6791 case bp_read_watchpoint:
6792 case bp_access_watchpoint:
6793 loc->loc_type = bp_loc_hardware_watchpoint;
6794 break;
6795 case bp_watchpoint:
6796 case bp_catchpoint:
6797 case bp_tracepoint:
6798 case bp_fast_tracepoint:
6799 case bp_static_tracepoint:
6800 loc->loc_type = bp_loc_other;
6801 break;
6802 default:
6803 internal_error (__FILE__, __LINE__, _("unknown breakpoint type"));
6804 }
6805
6806 loc->refc = 1;
6807 }
6808
6809 /* Allocate a struct bp_location. */
6810
6811 static struct bp_location *
6812 allocate_bp_location (struct breakpoint *bpt)
6813 {
6814 return bpt->ops->allocate_location (bpt);
6815 }
6816
6817 static void
6818 free_bp_location (struct bp_location *loc)
6819 {
6820 loc->ops->dtor (loc);
6821 xfree (loc);
6822 }
6823
6824 /* Increment reference count. */
6825
6826 static void
6827 incref_bp_location (struct bp_location *bl)
6828 {
6829 ++bl->refc;
6830 }
6831
6832 /* Decrement reference count. If the reference count reaches 0,
6833 destroy the bp_location. Sets *BLP to NULL. */
6834
6835 static void
6836 decref_bp_location (struct bp_location **blp)
6837 {
6838 gdb_assert ((*blp)->refc > 0);
6839
6840 if (--(*blp)->refc == 0)
6841 free_bp_location (*blp);
6842 *blp = NULL;
6843 }
6844
6845 /* Add breakpoint B at the end of the global breakpoint chain. */
6846
6847 static void
6848 add_to_breakpoint_chain (struct breakpoint *b)
6849 {
6850 struct breakpoint *b1;
6851
6852 /* Add this breakpoint to the end of the chain so that a list of
6853 breakpoints will come out in order of increasing numbers. */
6854
6855 b1 = breakpoint_chain;
6856 if (b1 == 0)
6857 breakpoint_chain = b;
6858 else
6859 {
6860 while (b1->next)
6861 b1 = b1->next;
6862 b1->next = b;
6863 }
6864 }
6865
6866 /* Initializes breakpoint B with type BPTYPE and no locations yet. */
6867
6868 static void
6869 init_raw_breakpoint_without_location (struct breakpoint *b,
6870 struct gdbarch *gdbarch,
6871 enum bptype bptype,
6872 const struct breakpoint_ops *ops)
6873 {
6874 memset (b, 0, sizeof (*b));
6875
6876 gdb_assert (ops != NULL);
6877
6878 b->ops = ops;
6879 b->type = bptype;
6880 b->gdbarch = gdbarch;
6881 b->language = current_language->la_language;
6882 b->input_radix = input_radix;
6883 b->thread = -1;
6884 b->enable_state = bp_enabled;
6885 b->next = 0;
6886 b->silent = 0;
6887 b->ignore_count = 0;
6888 b->commands = NULL;
6889 b->frame_id = null_frame_id;
6890 b->condition_not_parsed = 0;
6891 b->py_bp_object = NULL;
6892 b->related_breakpoint = b;
6893 }
6894
6895 /* Helper to set_raw_breakpoint below. Creates a breakpoint
6896 that has type BPTYPE and has no locations as yet. */
6897
6898 static struct breakpoint *
6899 set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
6900 enum bptype bptype,
6901 const struct breakpoint_ops *ops)
6902 {
6903 struct breakpoint *b = XNEW (struct breakpoint);
6904
6905 init_raw_breakpoint_without_location (b, gdbarch, bptype, ops);
6906 add_to_breakpoint_chain (b);
6907 return b;
6908 }
6909
6910 /* Initialize loc->function_name. EXPLICIT_LOC says no indirect function
6911 resolutions should be made as the user specified the location explicitly
6912 enough. */
6913
6914 static void
6915 set_breakpoint_location_function (struct bp_location *loc, int explicit_loc)
6916 {
6917 gdb_assert (loc->owner != NULL);
6918
6919 if (loc->owner->type == bp_breakpoint
6920 || loc->owner->type == bp_hardware_breakpoint
6921 || is_tracepoint (loc->owner))
6922 {
6923 int is_gnu_ifunc;
6924 const char *function_name;
6925 CORE_ADDR func_addr;
6926
6927 find_pc_partial_function_gnu_ifunc (loc->address, &function_name,
6928 &func_addr, NULL, &is_gnu_ifunc);
6929
6930 if (is_gnu_ifunc && !explicit_loc)
6931 {
6932 struct breakpoint *b = loc->owner;
6933
6934 gdb_assert (loc->pspace == current_program_space);
6935 if (gnu_ifunc_resolve_name (function_name,
6936 &loc->requested_address))
6937 {
6938 /* Recalculate ADDRESS based on new REQUESTED_ADDRESS. */
6939 loc->address = adjust_breakpoint_address (loc->gdbarch,
6940 loc->requested_address,
6941 b->type);
6942 }
6943 else if (b->type == bp_breakpoint && b->loc == loc
6944 && loc->next == NULL && b->related_breakpoint == b)
6945 {
6946 /* Create only the whole new breakpoint of this type but do not
6947 mess more complicated breakpoints with multiple locations. */
6948 b->type = bp_gnu_ifunc_resolver;
6949 /* Remember the resolver's address for use by the return
6950 breakpoint. */
6951 loc->related_address = func_addr;
6952 }
6953 }
6954
6955 if (function_name)
6956 loc->function_name = xstrdup (function_name);
6957 }
6958 }
6959
6960 /* Attempt to determine architecture of location identified by SAL. */
6961 struct gdbarch *
6962 get_sal_arch (struct symtab_and_line sal)
6963 {
6964 if (sal.section)
6965 return get_objfile_arch (sal.section->objfile);
6966 if (sal.symtab)
6967 return get_objfile_arch (sal.symtab->objfile);
6968
6969 return NULL;
6970 }
6971
6972 /* Low level routine for partially initializing a breakpoint of type
6973 BPTYPE. The newly created breakpoint's address, section, source
6974 file name, and line number are provided by SAL.
6975
6976 It is expected that the caller will complete the initialization of
6977 the newly created breakpoint struct as well as output any status
6978 information regarding the creation of a new breakpoint. */
6979
6980 static void
6981 init_raw_breakpoint (struct breakpoint *b, struct gdbarch *gdbarch,
6982 struct symtab_and_line sal, enum bptype bptype,
6983 const struct breakpoint_ops *ops)
6984 {
6985 init_raw_breakpoint_without_location (b, gdbarch, bptype, ops);
6986
6987 add_location_to_breakpoint (b, &sal);
6988
6989 if (bptype != bp_catchpoint)
6990 gdb_assert (sal.pspace != NULL);
6991
6992 /* Store the program space that was used to set the breakpoint,
6993 except for ordinary breakpoints, which are independent of the
6994 program space. */
6995 if (bptype != bp_breakpoint && bptype != bp_hardware_breakpoint)
6996 b->pspace = sal.pspace;
6997
6998 breakpoints_changed ();
6999 }
7000
7001 /* set_raw_breakpoint is a low level routine for allocating and
7002 partially initializing a breakpoint of type BPTYPE. The newly
7003 created breakpoint's address, section, source file name, and line
7004 number are provided by SAL. The newly created and partially
7005 initialized breakpoint is added to the breakpoint chain and
7006 is also returned as the value of this function.
7007
7008 It is expected that the caller will complete the initialization of
7009 the newly created breakpoint struct as well as output any status
7010 information regarding the creation of a new breakpoint. In
7011 particular, set_raw_breakpoint does NOT set the breakpoint
7012 number! Care should be taken to not allow an error to occur
7013 prior to completing the initialization of the breakpoint. If this
7014 should happen, a bogus breakpoint will be left on the chain. */
7015
7016 struct breakpoint *
7017 set_raw_breakpoint (struct gdbarch *gdbarch,
7018 struct symtab_and_line sal, enum bptype bptype,
7019 const struct breakpoint_ops *ops)
7020 {
7021 struct breakpoint *b = XNEW (struct breakpoint);
7022
7023 init_raw_breakpoint (b, gdbarch, sal, bptype, ops);
7024 add_to_breakpoint_chain (b);
7025 return b;
7026 }
7027
7028
7029 /* Note that the breakpoint object B describes a permanent breakpoint
7030 instruction, hard-wired into the inferior's code. */
7031 void
7032 make_breakpoint_permanent (struct breakpoint *b)
7033 {
7034 struct bp_location *bl;
7035
7036 b->enable_state = bp_permanent;
7037
7038 /* By definition, permanent breakpoints are already present in the
7039 code. Mark all locations as inserted. For now,
7040 make_breakpoint_permanent is called in just one place, so it's
7041 hard to say if it's reasonable to have permanent breakpoint with
7042 multiple locations or not, but it's easy to implement. */
7043 for (bl = b->loc; bl; bl = bl->next)
7044 bl->inserted = 1;
7045 }
7046
7047 /* Call this routine when stepping and nexting to enable a breakpoint
7048 if we do a longjmp() or 'throw' in TP. FRAME is the frame which
7049 initiated the operation. */
7050
7051 void
7052 set_longjmp_breakpoint (struct thread_info *tp, struct frame_id frame)
7053 {
7054 struct breakpoint *b, *b_tmp;
7055 int thread = tp->num;
7056
7057 /* To avoid having to rescan all objfile symbols at every step,
7058 we maintain a list of continually-inserted but always disabled
7059 longjmp "master" breakpoints. Here, we simply create momentary
7060 clones of those and enable them for the requested thread. */
7061 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7062 if (b->pspace == current_program_space
7063 && (b->type == bp_longjmp_master
7064 || b->type == bp_exception_master))
7065 {
7066 enum bptype type = b->type == bp_longjmp_master ? bp_longjmp : bp_exception;
7067 struct breakpoint *clone;
7068
7069 /* longjmp_breakpoint_ops ensures INITIATING_FRAME is cleared again
7070 after their removal. */
7071 clone = momentary_breakpoint_from_master (b, type,
7072 &longjmp_breakpoint_ops);
7073 clone->thread = thread;
7074 }
7075
7076 tp->initiating_frame = frame;
7077 }
7078
7079 /* Delete all longjmp breakpoints from THREAD. */
7080 void
7081 delete_longjmp_breakpoint (int thread)
7082 {
7083 struct breakpoint *b, *b_tmp;
7084
7085 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7086 if (b->type == bp_longjmp || b->type == bp_exception)
7087 {
7088 if (b->thread == thread)
7089 delete_breakpoint (b);
7090 }
7091 }
7092
7093 void
7094 delete_longjmp_breakpoint_at_next_stop (int thread)
7095 {
7096 struct breakpoint *b, *b_tmp;
7097
7098 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7099 if (b->type == bp_longjmp || b->type == bp_exception)
7100 {
7101 if (b->thread == thread)
7102 b->disposition = disp_del_at_next_stop;
7103 }
7104 }
7105
7106 /* Place breakpoints of type bp_longjmp_call_dummy to catch longjmp for
7107 INFERIOR_PTID thread. Chain them all by RELATED_BREAKPOINT and return
7108 pointer to any of them. Return NULL if this system cannot place longjmp
7109 breakpoints. */
7110
7111 struct breakpoint *
7112 set_longjmp_breakpoint_for_call_dummy (void)
7113 {
7114 struct breakpoint *b, *retval = NULL;
7115
7116 ALL_BREAKPOINTS (b)
7117 if (b->pspace == current_program_space && b->type == bp_longjmp_master)
7118 {
7119 struct breakpoint *new_b;
7120
7121 new_b = momentary_breakpoint_from_master (b, bp_longjmp_call_dummy,
7122 &momentary_breakpoint_ops);
7123 new_b->thread = pid_to_thread_id (inferior_ptid);
7124
7125 /* Link NEW_B into the chain of RETVAL breakpoints. */
7126
7127 gdb_assert (new_b->related_breakpoint == new_b);
7128 if (retval == NULL)
7129 retval = new_b;
7130 new_b->related_breakpoint = retval;
7131 while (retval->related_breakpoint != new_b->related_breakpoint)
7132 retval = retval->related_breakpoint;
7133 retval->related_breakpoint = new_b;
7134 }
7135
7136 return retval;
7137 }
7138
7139 /* Verify all existing dummy frames and their associated breakpoints for
7140 THREAD. Remove those which can no longer be found in the current frame
7141 stack.
7142
7143 You should call this function only at places where it is safe to currently
7144 unwind the whole stack. Failed stack unwind would discard live dummy
7145 frames. */
7146
7147 void
7148 check_longjmp_breakpoint_for_call_dummy (int thread)
7149 {
7150 struct breakpoint *b, *b_tmp;
7151
7152 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7153 if (b->type == bp_longjmp_call_dummy && b->thread == thread)
7154 {
7155 struct breakpoint *dummy_b = b->related_breakpoint;
7156
7157 while (dummy_b != b && dummy_b->type != bp_call_dummy)
7158 dummy_b = dummy_b->related_breakpoint;
7159 if (dummy_b->type != bp_call_dummy
7160 || frame_find_by_id (dummy_b->frame_id) != NULL)
7161 continue;
7162
7163 dummy_frame_discard (dummy_b->frame_id);
7164
7165 while (b->related_breakpoint != b)
7166 {
7167 if (b_tmp == b->related_breakpoint)
7168 b_tmp = b->related_breakpoint->next;
7169 delete_breakpoint (b->related_breakpoint);
7170 }
7171 delete_breakpoint (b);
7172 }
7173 }
7174
7175 void
7176 enable_overlay_breakpoints (void)
7177 {
7178 struct breakpoint *b;
7179
7180 ALL_BREAKPOINTS (b)
7181 if (b->type == bp_overlay_event)
7182 {
7183 b->enable_state = bp_enabled;
7184 update_global_location_list (1);
7185 overlay_events_enabled = 1;
7186 }
7187 }
7188
7189 void
7190 disable_overlay_breakpoints (void)
7191 {
7192 struct breakpoint *b;
7193
7194 ALL_BREAKPOINTS (b)
7195 if (b->type == bp_overlay_event)
7196 {
7197 b->enable_state = bp_disabled;
7198 update_global_location_list (0);
7199 overlay_events_enabled = 0;
7200 }
7201 }
7202
7203 /* Set an active std::terminate breakpoint for each std::terminate
7204 master breakpoint. */
7205 void
7206 set_std_terminate_breakpoint (void)
7207 {
7208 struct breakpoint *b, *b_tmp;
7209
7210 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7211 if (b->pspace == current_program_space
7212 && b->type == bp_std_terminate_master)
7213 {
7214 momentary_breakpoint_from_master (b, bp_std_terminate,
7215 &momentary_breakpoint_ops);
7216 }
7217 }
7218
7219 /* Delete all the std::terminate breakpoints. */
7220 void
7221 delete_std_terminate_breakpoint (void)
7222 {
7223 struct breakpoint *b, *b_tmp;
7224
7225 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7226 if (b->type == bp_std_terminate)
7227 delete_breakpoint (b);
7228 }
7229
7230 struct breakpoint *
7231 create_thread_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
7232 {
7233 struct breakpoint *b;
7234
7235 b = create_internal_breakpoint (gdbarch, address, bp_thread_event,
7236 &internal_breakpoint_ops);
7237
7238 b->enable_state = bp_enabled;
7239 /* addr_string has to be used or breakpoint_re_set will delete me. */
7240 b->addr_string
7241 = xstrprintf ("*%s", paddress (b->loc->gdbarch, b->loc->address));
7242
7243 update_global_location_list_nothrow (1);
7244
7245 return b;
7246 }
7247
7248 void
7249 remove_thread_event_breakpoints (void)
7250 {
7251 struct breakpoint *b, *b_tmp;
7252
7253 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7254 if (b->type == bp_thread_event
7255 && b->loc->pspace == current_program_space)
7256 delete_breakpoint (b);
7257 }
7258
7259 struct lang_and_radix
7260 {
7261 enum language lang;
7262 int radix;
7263 };
7264
7265 /* Create a breakpoint for JIT code registration and unregistration. */
7266
7267 struct breakpoint *
7268 create_jit_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
7269 {
7270 struct breakpoint *b;
7271
7272 b = create_internal_breakpoint (gdbarch, address, bp_jit_event,
7273 &internal_breakpoint_ops);
7274 update_global_location_list_nothrow (1);
7275 return b;
7276 }
7277
7278 /* Remove JIT code registration and unregistration breakpoint(s). */
7279
7280 void
7281 remove_jit_event_breakpoints (void)
7282 {
7283 struct breakpoint *b, *b_tmp;
7284
7285 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7286 if (b->type == bp_jit_event
7287 && b->loc->pspace == current_program_space)
7288 delete_breakpoint (b);
7289 }
7290
7291 void
7292 remove_solib_event_breakpoints (void)
7293 {
7294 struct breakpoint *b, *b_tmp;
7295
7296 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7297 if (b->type == bp_shlib_event
7298 && b->loc->pspace == current_program_space)
7299 delete_breakpoint (b);
7300 }
7301
7302 struct breakpoint *
7303 create_solib_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
7304 {
7305 struct breakpoint *b;
7306
7307 b = create_internal_breakpoint (gdbarch, address, bp_shlib_event,
7308 &internal_breakpoint_ops);
7309 update_global_location_list_nothrow (1);
7310 return b;
7311 }
7312
7313 /* Disable any breakpoints that are on code in shared libraries. Only
7314 apply to enabled breakpoints, disabled ones can just stay disabled. */
7315
7316 void
7317 disable_breakpoints_in_shlibs (void)
7318 {
7319 struct bp_location *loc, **locp_tmp;
7320
7321 ALL_BP_LOCATIONS (loc, locp_tmp)
7322 {
7323 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
7324 struct breakpoint *b = loc->owner;
7325
7326 /* We apply the check to all breakpoints, including disabled for
7327 those with loc->duplicate set. This is so that when breakpoint
7328 becomes enabled, or the duplicate is removed, gdb will try to
7329 insert all breakpoints. If we don't set shlib_disabled here,
7330 we'll try to insert those breakpoints and fail. */
7331 if (((b->type == bp_breakpoint)
7332 || (b->type == bp_jit_event)
7333 || (b->type == bp_hardware_breakpoint)
7334 || (is_tracepoint (b)))
7335 && loc->pspace == current_program_space
7336 && !loc->shlib_disabled
7337 #ifdef PC_SOLIB
7338 && PC_SOLIB (loc->address)
7339 #else
7340 && solib_name_from_address (loc->pspace, loc->address)
7341 #endif
7342 )
7343 {
7344 loc->shlib_disabled = 1;
7345 }
7346 }
7347 }
7348
7349 /* Disable any breakpoints and tracepoints that are in an unloaded shared
7350 library. Only apply to enabled breakpoints, disabled ones can just stay
7351 disabled. */
7352
7353 static void
7354 disable_breakpoints_in_unloaded_shlib (struct so_list *solib)
7355 {
7356 struct bp_location *loc, **locp_tmp;
7357 int disabled_shlib_breaks = 0;
7358
7359 /* SunOS a.out shared libraries are always mapped, so do not
7360 disable breakpoints; they will only be reported as unloaded
7361 through clear_solib when GDB discards its shared library
7362 list. See clear_solib for more information. */
7363 if (exec_bfd != NULL
7364 && bfd_get_flavour (exec_bfd) == bfd_target_aout_flavour)
7365 return;
7366
7367 ALL_BP_LOCATIONS (loc, locp_tmp)
7368 {
7369 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
7370 struct breakpoint *b = loc->owner;
7371
7372 if (solib->pspace == loc->pspace
7373 && !loc->shlib_disabled
7374 && (((b->type == bp_breakpoint
7375 || b->type == bp_jit_event
7376 || b->type == bp_hardware_breakpoint)
7377 && (loc->loc_type == bp_loc_hardware_breakpoint
7378 || loc->loc_type == bp_loc_software_breakpoint))
7379 || is_tracepoint (b))
7380 && solib_contains_address_p (solib, loc->address))
7381 {
7382 loc->shlib_disabled = 1;
7383 /* At this point, we cannot rely on remove_breakpoint
7384 succeeding so we must mark the breakpoint as not inserted
7385 to prevent future errors occurring in remove_breakpoints. */
7386 loc->inserted = 0;
7387
7388 /* This may cause duplicate notifications for the same breakpoint. */
7389 observer_notify_breakpoint_modified (b);
7390
7391 if (!disabled_shlib_breaks)
7392 {
7393 target_terminal_ours_for_output ();
7394 warning (_("Temporarily disabling breakpoints "
7395 "for unloaded shared library \"%s\""),
7396 solib->so_name);
7397 }
7398 disabled_shlib_breaks = 1;
7399 }
7400 }
7401 }
7402
7403 /* FORK & VFORK catchpoints. */
7404
7405 /* An instance of this type is used to represent a fork or vfork
7406 catchpoint. It includes a "struct breakpoint" as a kind of base
7407 class; users downcast to "struct breakpoint *" when needed. A
7408 breakpoint is really of this type iff its ops pointer points to
7409 CATCH_FORK_BREAKPOINT_OPS. */
7410
7411 struct fork_catchpoint
7412 {
7413 /* The base class. */
7414 struct breakpoint base;
7415
7416 /* Process id of a child process whose forking triggered this
7417 catchpoint. This field is only valid immediately after this
7418 catchpoint has triggered. */
7419 ptid_t forked_inferior_pid;
7420 };
7421
7422 /* Implement the "insert" breakpoint_ops method for fork
7423 catchpoints. */
7424
7425 static int
7426 insert_catch_fork (struct bp_location *bl)
7427 {
7428 return target_insert_fork_catchpoint (PIDGET (inferior_ptid));
7429 }
7430
7431 /* Implement the "remove" breakpoint_ops method for fork
7432 catchpoints. */
7433
7434 static int
7435 remove_catch_fork (struct bp_location *bl)
7436 {
7437 return target_remove_fork_catchpoint (PIDGET (inferior_ptid));
7438 }
7439
7440 /* Implement the "breakpoint_hit" breakpoint_ops method for fork
7441 catchpoints. */
7442
7443 static int
7444 breakpoint_hit_catch_fork (const struct bp_location *bl,
7445 struct address_space *aspace, CORE_ADDR bp_addr,
7446 const struct target_waitstatus *ws)
7447 {
7448 struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
7449
7450 if (ws->kind != TARGET_WAITKIND_FORKED)
7451 return 0;
7452
7453 c->forked_inferior_pid = ws->value.related_pid;
7454 return 1;
7455 }
7456
7457 /* Implement the "print_it" breakpoint_ops method for fork
7458 catchpoints. */
7459
7460 static enum print_stop_action
7461 print_it_catch_fork (bpstat bs)
7462 {
7463 struct ui_out *uiout = current_uiout;
7464 struct breakpoint *b = bs->breakpoint_at;
7465 struct fork_catchpoint *c = (struct fork_catchpoint *) bs->breakpoint_at;
7466
7467 annotate_catchpoint (b->number);
7468 if (b->disposition == disp_del)
7469 ui_out_text (uiout, "\nTemporary catchpoint ");
7470 else
7471 ui_out_text (uiout, "\nCatchpoint ");
7472 if (ui_out_is_mi_like_p (uiout))
7473 {
7474 ui_out_field_string (uiout, "reason",
7475 async_reason_lookup (EXEC_ASYNC_FORK));
7476 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
7477 }
7478 ui_out_field_int (uiout, "bkptno", b->number);
7479 ui_out_text (uiout, " (forked process ");
7480 ui_out_field_int (uiout, "newpid", ptid_get_pid (c->forked_inferior_pid));
7481 ui_out_text (uiout, "), ");
7482 return PRINT_SRC_AND_LOC;
7483 }
7484
7485 /* Implement the "print_one" breakpoint_ops method for fork
7486 catchpoints. */
7487
7488 static void
7489 print_one_catch_fork (struct breakpoint *b, struct bp_location **last_loc)
7490 {
7491 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
7492 struct value_print_options opts;
7493 struct ui_out *uiout = current_uiout;
7494
7495 get_user_print_options (&opts);
7496
7497 /* Field 4, the address, is omitted (which makes the columns not
7498 line up too nicely with the headers, but the effect is relatively
7499 readable). */
7500 if (opts.addressprint)
7501 ui_out_field_skip (uiout, "addr");
7502 annotate_field (5);
7503 ui_out_text (uiout, "fork");
7504 if (!ptid_equal (c->forked_inferior_pid, null_ptid))
7505 {
7506 ui_out_text (uiout, ", process ");
7507 ui_out_field_int (uiout, "what",
7508 ptid_get_pid (c->forked_inferior_pid));
7509 ui_out_spaces (uiout, 1);
7510 }
7511 }
7512
7513 /* Implement the "print_mention" breakpoint_ops method for fork
7514 catchpoints. */
7515
7516 static void
7517 print_mention_catch_fork (struct breakpoint *b)
7518 {
7519 printf_filtered (_("Catchpoint %d (fork)"), b->number);
7520 }
7521
7522 /* Implement the "print_recreate" breakpoint_ops method for fork
7523 catchpoints. */
7524
7525 static void
7526 print_recreate_catch_fork (struct breakpoint *b, struct ui_file *fp)
7527 {
7528 fprintf_unfiltered (fp, "catch fork");
7529 print_recreate_thread (b, fp);
7530 }
7531
7532 /* The breakpoint_ops structure to be used in fork catchpoints. */
7533
7534 static struct breakpoint_ops catch_fork_breakpoint_ops;
7535
7536 /* Implement the "insert" breakpoint_ops method for vfork
7537 catchpoints. */
7538
7539 static int
7540 insert_catch_vfork (struct bp_location *bl)
7541 {
7542 return target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
7543 }
7544
7545 /* Implement the "remove" breakpoint_ops method for vfork
7546 catchpoints. */
7547
7548 static int
7549 remove_catch_vfork (struct bp_location *bl)
7550 {
7551 return target_remove_vfork_catchpoint (PIDGET (inferior_ptid));
7552 }
7553
7554 /* Implement the "breakpoint_hit" breakpoint_ops method for vfork
7555 catchpoints. */
7556
7557 static int
7558 breakpoint_hit_catch_vfork (const struct bp_location *bl,
7559 struct address_space *aspace, CORE_ADDR bp_addr,
7560 const struct target_waitstatus *ws)
7561 {
7562 struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
7563
7564 if (ws->kind != TARGET_WAITKIND_VFORKED)
7565 return 0;
7566
7567 c->forked_inferior_pid = ws->value.related_pid;
7568 return 1;
7569 }
7570
7571 /* Implement the "print_it" breakpoint_ops method for vfork
7572 catchpoints. */
7573
7574 static enum print_stop_action
7575 print_it_catch_vfork (bpstat bs)
7576 {
7577 struct ui_out *uiout = current_uiout;
7578 struct breakpoint *b = bs->breakpoint_at;
7579 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
7580
7581 annotate_catchpoint (b->number);
7582 if (b->disposition == disp_del)
7583 ui_out_text (uiout, "\nTemporary catchpoint ");
7584 else
7585 ui_out_text (uiout, "\nCatchpoint ");
7586 if (ui_out_is_mi_like_p (uiout))
7587 {
7588 ui_out_field_string (uiout, "reason",
7589 async_reason_lookup (EXEC_ASYNC_VFORK));
7590 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
7591 }
7592 ui_out_field_int (uiout, "bkptno", b->number);
7593 ui_out_text (uiout, " (vforked process ");
7594 ui_out_field_int (uiout, "newpid", ptid_get_pid (c->forked_inferior_pid));
7595 ui_out_text (uiout, "), ");
7596 return PRINT_SRC_AND_LOC;
7597 }
7598
7599 /* Implement the "print_one" breakpoint_ops method for vfork
7600 catchpoints. */
7601
7602 static void
7603 print_one_catch_vfork (struct breakpoint *b, struct bp_location **last_loc)
7604 {
7605 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
7606 struct value_print_options opts;
7607 struct ui_out *uiout = current_uiout;
7608
7609 get_user_print_options (&opts);
7610 /* Field 4, the address, is omitted (which makes the columns not
7611 line up too nicely with the headers, but the effect is relatively
7612 readable). */
7613 if (opts.addressprint)
7614 ui_out_field_skip (uiout, "addr");
7615 annotate_field (5);
7616 ui_out_text (uiout, "vfork");
7617 if (!ptid_equal (c->forked_inferior_pid, null_ptid))
7618 {
7619 ui_out_text (uiout, ", process ");
7620 ui_out_field_int (uiout, "what",
7621 ptid_get_pid (c->forked_inferior_pid));
7622 ui_out_spaces (uiout, 1);
7623 }
7624 }
7625
7626 /* Implement the "print_mention" breakpoint_ops method for vfork
7627 catchpoints. */
7628
7629 static void
7630 print_mention_catch_vfork (struct breakpoint *b)
7631 {
7632 printf_filtered (_("Catchpoint %d (vfork)"), b->number);
7633 }
7634
7635 /* Implement the "print_recreate" breakpoint_ops method for vfork
7636 catchpoints. */
7637
7638 static void
7639 print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
7640 {
7641 fprintf_unfiltered (fp, "catch vfork");
7642 print_recreate_thread (b, fp);
7643 }
7644
7645 /* The breakpoint_ops structure to be used in vfork catchpoints. */
7646
7647 static struct breakpoint_ops catch_vfork_breakpoint_ops;
7648
7649 /* An instance of this type is used to represent an solib catchpoint.
7650 It includes a "struct breakpoint" as a kind of base class; users
7651 downcast to "struct breakpoint *" when needed. A breakpoint is
7652 really of this type iff its ops pointer points to
7653 CATCH_SOLIB_BREAKPOINT_OPS. */
7654
7655 struct solib_catchpoint
7656 {
7657 /* The base class. */
7658 struct breakpoint base;
7659
7660 /* True for "catch load", false for "catch unload". */
7661 unsigned char is_load;
7662
7663 /* Regular expression to match, if any. COMPILED is only valid when
7664 REGEX is non-NULL. */
7665 char *regex;
7666 regex_t compiled;
7667 };
7668
7669 static void
7670 dtor_catch_solib (struct breakpoint *b)
7671 {
7672 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
7673
7674 if (self->regex)
7675 regfree (&self->compiled);
7676 xfree (self->regex);
7677
7678 base_breakpoint_ops.dtor (b);
7679 }
7680
7681 static int
7682 insert_catch_solib (struct bp_location *ignore)
7683 {
7684 return 0;
7685 }
7686
7687 static int
7688 remove_catch_solib (struct bp_location *ignore)
7689 {
7690 return 0;
7691 }
7692
7693 static int
7694 breakpoint_hit_catch_solib (const struct bp_location *bl,
7695 struct address_space *aspace,
7696 CORE_ADDR bp_addr,
7697 const struct target_waitstatus *ws)
7698 {
7699 struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
7700 struct breakpoint *other;
7701
7702 if (ws->kind == TARGET_WAITKIND_LOADED)
7703 return 1;
7704
7705 ALL_BREAKPOINTS (other)
7706 {
7707 struct bp_location *other_bl;
7708
7709 if (other == bl->owner)
7710 continue;
7711
7712 if (other->type != bp_shlib_event)
7713 continue;
7714
7715 if (self->base.pspace != NULL && other->pspace != self->base.pspace)
7716 continue;
7717
7718 for (other_bl = other->loc; other_bl != NULL; other_bl = other_bl->next)
7719 {
7720 if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
7721 return 1;
7722 }
7723 }
7724
7725 return 0;
7726 }
7727
7728 static void
7729 check_status_catch_solib (struct bpstats *bs)
7730 {
7731 struct solib_catchpoint *self
7732 = (struct solib_catchpoint *) bs->breakpoint_at;
7733 int ix;
7734
7735 if (self->is_load)
7736 {
7737 struct so_list *iter;
7738
7739 for (ix = 0;
7740 VEC_iterate (so_list_ptr, current_program_space->added_solibs,
7741 ix, iter);
7742 ++ix)
7743 {
7744 if (!self->regex
7745 || regexec (&self->compiled, iter->so_name, 0, NULL, 0) == 0)
7746 return;
7747 }
7748 }
7749 else
7750 {
7751 char *iter;
7752
7753 for (ix = 0;
7754 VEC_iterate (char_ptr, current_program_space->deleted_solibs,
7755 ix, iter);
7756 ++ix)
7757 {
7758 if (!self->regex
7759 || regexec (&self->compiled, iter, 0, NULL, 0) == 0)
7760 return;
7761 }
7762 }
7763
7764 bs->stop = 0;
7765 bs->print_it = print_it_noop;
7766 }
7767
7768 static enum print_stop_action
7769 print_it_catch_solib (bpstat bs)
7770 {
7771 struct breakpoint *b = bs->breakpoint_at;
7772 struct ui_out *uiout = current_uiout;
7773
7774 annotate_catchpoint (b->number);
7775 if (b->disposition == disp_del)
7776 ui_out_text (uiout, "\nTemporary catchpoint ");
7777 else
7778 ui_out_text (uiout, "\nCatchpoint ");
7779 ui_out_field_int (uiout, "bkptno", b->number);
7780 ui_out_text (uiout, "\n");
7781 if (ui_out_is_mi_like_p (uiout))
7782 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
7783 print_solib_event (1);
7784 return PRINT_SRC_AND_LOC;
7785 }
7786
7787 static void
7788 print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
7789 {
7790 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
7791 struct value_print_options opts;
7792 struct ui_out *uiout = current_uiout;
7793 char *msg;
7794
7795 get_user_print_options (&opts);
7796 /* Field 4, the address, is omitted (which makes the columns not
7797 line up too nicely with the headers, but the effect is relatively
7798 readable). */
7799 if (opts.addressprint)
7800 {
7801 annotate_field (4);
7802 ui_out_field_skip (uiout, "addr");
7803 }
7804
7805 annotate_field (5);
7806 if (self->is_load)
7807 {
7808 if (self->regex)
7809 msg = xstrprintf (_("load of library matching %s"), self->regex);
7810 else
7811 msg = xstrdup (_("load of library"));
7812 }
7813 else
7814 {
7815 if (self->regex)
7816 msg = xstrprintf (_("unload of library matching %s"), self->regex);
7817 else
7818 msg = xstrdup (_("unload of library"));
7819 }
7820 ui_out_field_string (uiout, "what", msg);
7821 xfree (msg);
7822 }
7823
7824 static void
7825 print_mention_catch_solib (struct breakpoint *b)
7826 {
7827 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
7828
7829 printf_filtered (_("Catchpoint %d (%s)"), b->number,
7830 self->is_load ? "load" : "unload");
7831 }
7832
7833 static void
7834 print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
7835 {
7836 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
7837
7838 fprintf_unfiltered (fp, "%s %s",
7839 b->disposition == disp_del ? "tcatch" : "catch",
7840 self->is_load ? "load" : "unload");
7841 if (self->regex)
7842 fprintf_unfiltered (fp, " %s", self->regex);
7843 fprintf_unfiltered (fp, "\n");
7844 }
7845
7846 static struct breakpoint_ops catch_solib_breakpoint_ops;
7847
7848 /* A helper function that does all the work for "catch load" and
7849 "catch unload". */
7850
7851 static void
7852 catch_load_or_unload (char *arg, int from_tty, int is_load,
7853 struct cmd_list_element *command)
7854 {
7855 struct solib_catchpoint *c;
7856 struct gdbarch *gdbarch = get_current_arch ();
7857 int tempflag;
7858 struct cleanup *cleanup;
7859
7860 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
7861
7862 if (!arg)
7863 arg = "";
7864 arg = skip_spaces (arg);
7865
7866 c = XCNEW (struct solib_catchpoint);
7867 cleanup = make_cleanup (xfree, c);
7868
7869 if (*arg != '\0')
7870 {
7871 int errcode;
7872
7873 errcode = regcomp (&c->compiled, arg, REG_NOSUB);
7874 if (errcode != 0)
7875 {
7876 char *err = get_regcomp_error (errcode, &c->compiled);
7877
7878 make_cleanup (xfree, err);
7879 error (_("Invalid regexp (%s): %s"), err, arg);
7880 }
7881 c->regex = xstrdup (arg);
7882 }
7883
7884 c->is_load = is_load;
7885 init_catchpoint (&c->base, gdbarch, tempflag, NULL,
7886 &catch_solib_breakpoint_ops);
7887
7888 discard_cleanups (cleanup);
7889 install_breakpoint (0, &c->base, 1);
7890 }
7891
7892 static void
7893 catch_load_command_1 (char *arg, int from_tty,
7894 struct cmd_list_element *command)
7895 {
7896 catch_load_or_unload (arg, from_tty, 1, command);
7897 }
7898
7899 static void
7900 catch_unload_command_1 (char *arg, int from_tty,
7901 struct cmd_list_element *command)
7902 {
7903 catch_load_or_unload (arg, from_tty, 0, command);
7904 }
7905
7906 DEF_VEC_I(int);
7907
7908 /* An instance of this type is used to represent a syscall catchpoint.
7909 It includes a "struct breakpoint" as a kind of base class; users
7910 downcast to "struct breakpoint *" when needed. A breakpoint is
7911 really of this type iff its ops pointer points to
7912 CATCH_SYSCALL_BREAKPOINT_OPS. */
7913
7914 struct syscall_catchpoint
7915 {
7916 /* The base class. */
7917 struct breakpoint base;
7918
7919 /* Syscall numbers used for the 'catch syscall' feature. If no
7920 syscall has been specified for filtering, its value is NULL.
7921 Otherwise, it holds a list of all syscalls to be caught. The
7922 list elements are allocated with xmalloc. */
7923 VEC(int) *syscalls_to_be_caught;
7924 };
7925
7926 /* Implement the "dtor" breakpoint_ops method for syscall
7927 catchpoints. */
7928
7929 static void
7930 dtor_catch_syscall (struct breakpoint *b)
7931 {
7932 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
7933
7934 VEC_free (int, c->syscalls_to_be_caught);
7935
7936 base_breakpoint_ops.dtor (b);
7937 }
7938
7939 static const struct inferior_data *catch_syscall_inferior_data = NULL;
7940
7941 struct catch_syscall_inferior_data
7942 {
7943 /* We keep a count of the number of times the user has requested a
7944 particular syscall to be tracked, and pass this information to the
7945 target. This lets capable targets implement filtering directly. */
7946
7947 /* Number of times that "any" syscall is requested. */
7948 int any_syscall_count;
7949
7950 /* Count of each system call. */
7951 VEC(int) *syscalls_counts;
7952
7953 /* This counts all syscall catch requests, so we can readily determine
7954 if any catching is necessary. */
7955 int total_syscalls_count;
7956 };
7957
7958 static struct catch_syscall_inferior_data*
7959 get_catch_syscall_inferior_data (struct inferior *inf)
7960 {
7961 struct catch_syscall_inferior_data *inf_data;
7962
7963 inf_data = inferior_data (inf, catch_syscall_inferior_data);
7964 if (inf_data == NULL)
7965 {
7966 inf_data = XZALLOC (struct catch_syscall_inferior_data);
7967 set_inferior_data (inf, catch_syscall_inferior_data, inf_data);
7968 }
7969
7970 return inf_data;
7971 }
7972
7973 static void
7974 catch_syscall_inferior_data_cleanup (struct inferior *inf, void *arg)
7975 {
7976 xfree (arg);
7977 }
7978
7979
7980 /* Implement the "insert" breakpoint_ops method for syscall
7981 catchpoints. */
7982
7983 static int
7984 insert_catch_syscall (struct bp_location *bl)
7985 {
7986 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
7987 struct inferior *inf = current_inferior ();
7988 struct catch_syscall_inferior_data *inf_data
7989 = get_catch_syscall_inferior_data (inf);
7990
7991 ++inf_data->total_syscalls_count;
7992 if (!c->syscalls_to_be_caught)
7993 ++inf_data->any_syscall_count;
7994 else
7995 {
7996 int i, iter;
7997
7998 for (i = 0;
7999 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
8000 i++)
8001 {
8002 int elem;
8003
8004 if (iter >= VEC_length (int, inf_data->syscalls_counts))
8005 {
8006 int old_size = VEC_length (int, inf_data->syscalls_counts);
8007 uintptr_t vec_addr_offset
8008 = old_size * ((uintptr_t) sizeof (int));
8009 uintptr_t vec_addr;
8010 VEC_safe_grow (int, inf_data->syscalls_counts, iter + 1);
8011 vec_addr = ((uintptr_t) VEC_address (int,
8012 inf_data->syscalls_counts)
8013 + vec_addr_offset);
8014 memset ((void *) vec_addr, 0,
8015 (iter + 1 - old_size) * sizeof (int));
8016 }
8017 elem = VEC_index (int, inf_data->syscalls_counts, iter);
8018 VEC_replace (int, inf_data->syscalls_counts, iter, ++elem);
8019 }
8020 }
8021
8022 return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
8023 inf_data->total_syscalls_count != 0,
8024 inf_data->any_syscall_count,
8025 VEC_length (int,
8026 inf_data->syscalls_counts),
8027 VEC_address (int,
8028 inf_data->syscalls_counts));
8029 }
8030
8031 /* Implement the "remove" breakpoint_ops method for syscall
8032 catchpoints. */
8033
8034 static int
8035 remove_catch_syscall (struct bp_location *bl)
8036 {
8037 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
8038 struct inferior *inf = current_inferior ();
8039 struct catch_syscall_inferior_data *inf_data
8040 = get_catch_syscall_inferior_data (inf);
8041
8042 --inf_data->total_syscalls_count;
8043 if (!c->syscalls_to_be_caught)
8044 --inf_data->any_syscall_count;
8045 else
8046 {
8047 int i, iter;
8048
8049 for (i = 0;
8050 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
8051 i++)
8052 {
8053 int elem;
8054 if (iter >= VEC_length (int, inf_data->syscalls_counts))
8055 /* Shouldn't happen. */
8056 continue;
8057 elem = VEC_index (int, inf_data->syscalls_counts, iter);
8058 VEC_replace (int, inf_data->syscalls_counts, iter, --elem);
8059 }
8060 }
8061
8062 return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
8063 inf_data->total_syscalls_count != 0,
8064 inf_data->any_syscall_count,
8065 VEC_length (int,
8066 inf_data->syscalls_counts),
8067 VEC_address (int,
8068 inf_data->syscalls_counts));
8069 }
8070
8071 /* Implement the "breakpoint_hit" breakpoint_ops method for syscall
8072 catchpoints. */
8073
8074 static int
8075 breakpoint_hit_catch_syscall (const struct bp_location *bl,
8076 struct address_space *aspace, CORE_ADDR bp_addr,
8077 const struct target_waitstatus *ws)
8078 {
8079 /* We must check if we are catching specific syscalls in this
8080 breakpoint. If we are, then we must guarantee that the called
8081 syscall is the same syscall we are catching. */
8082 int syscall_number = 0;
8083 const struct syscall_catchpoint *c
8084 = (const struct syscall_catchpoint *) bl->owner;
8085
8086 if (ws->kind != TARGET_WAITKIND_SYSCALL_ENTRY
8087 && ws->kind != TARGET_WAITKIND_SYSCALL_RETURN)
8088 return 0;
8089
8090 syscall_number = ws->value.syscall_number;
8091
8092 /* Now, checking if the syscall is the same. */
8093 if (c->syscalls_to_be_caught)
8094 {
8095 int i, iter;
8096
8097 for (i = 0;
8098 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
8099 i++)
8100 if (syscall_number == iter)
8101 break;
8102 /* Not the same. */
8103 if (!iter)
8104 return 0;
8105 }
8106
8107 return 1;
8108 }
8109
8110 /* Implement the "print_it" breakpoint_ops method for syscall
8111 catchpoints. */
8112
8113 static enum print_stop_action
8114 print_it_catch_syscall (bpstat bs)
8115 {
8116 struct ui_out *uiout = current_uiout;
8117 struct breakpoint *b = bs->breakpoint_at;
8118 /* These are needed because we want to know in which state a
8119 syscall is. It can be in the TARGET_WAITKIND_SYSCALL_ENTRY
8120 or TARGET_WAITKIND_SYSCALL_RETURN, and depending on it we
8121 must print "called syscall" or "returned from syscall". */
8122 ptid_t ptid;
8123 struct target_waitstatus last;
8124 struct syscall s;
8125
8126 get_last_target_status (&ptid, &last);
8127
8128 get_syscall_by_number (last.value.syscall_number, &s);
8129
8130 annotate_catchpoint (b->number);
8131
8132 if (b->disposition == disp_del)
8133 ui_out_text (uiout, "\nTemporary catchpoint ");
8134 else
8135 ui_out_text (uiout, "\nCatchpoint ");
8136 if (ui_out_is_mi_like_p (uiout))
8137 {
8138 ui_out_field_string (uiout, "reason",
8139 async_reason_lookup (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY
8140 ? EXEC_ASYNC_SYSCALL_ENTRY
8141 : EXEC_ASYNC_SYSCALL_RETURN));
8142 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
8143 }
8144 ui_out_field_int (uiout, "bkptno", b->number);
8145
8146 if (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY)
8147 ui_out_text (uiout, " (call to syscall ");
8148 else
8149 ui_out_text (uiout, " (returned from syscall ");
8150
8151 if (s.name == NULL || ui_out_is_mi_like_p (uiout))
8152 ui_out_field_int (uiout, "syscall-number", last.value.syscall_number);
8153 if (s.name != NULL)
8154 ui_out_field_string (uiout, "syscall-name", s.name);
8155
8156 ui_out_text (uiout, "), ");
8157
8158 return PRINT_SRC_AND_LOC;
8159 }
8160
8161 /* Implement the "print_one" breakpoint_ops method for syscall
8162 catchpoints. */
8163
8164 static void
8165 print_one_catch_syscall (struct breakpoint *b,
8166 struct bp_location **last_loc)
8167 {
8168 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
8169 struct value_print_options opts;
8170 struct ui_out *uiout = current_uiout;
8171
8172 get_user_print_options (&opts);
8173 /* Field 4, the address, is omitted (which makes the columns not
8174 line up too nicely with the headers, but the effect is relatively
8175 readable). */
8176 if (opts.addressprint)
8177 ui_out_field_skip (uiout, "addr");
8178 annotate_field (5);
8179
8180 if (c->syscalls_to_be_caught
8181 && VEC_length (int, c->syscalls_to_be_caught) > 1)
8182 ui_out_text (uiout, "syscalls \"");
8183 else
8184 ui_out_text (uiout, "syscall \"");
8185
8186 if (c->syscalls_to_be_caught)
8187 {
8188 int i, iter;
8189 char *text = xstrprintf ("%s", "");
8190
8191 for (i = 0;
8192 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
8193 i++)
8194 {
8195 char *x = text;
8196 struct syscall s;
8197 get_syscall_by_number (iter, &s);
8198
8199 if (s.name != NULL)
8200 text = xstrprintf ("%s%s, ", text, s.name);
8201 else
8202 text = xstrprintf ("%s%d, ", text, iter);
8203
8204 /* We have to xfree the last 'text' (now stored at 'x')
8205 because xstrprintf dynamically allocates new space for it
8206 on every call. */
8207 xfree (x);
8208 }
8209 /* Remove the last comma. */
8210 text[strlen (text) - 2] = '\0';
8211 ui_out_field_string (uiout, "what", text);
8212 }
8213 else
8214 ui_out_field_string (uiout, "what", "<any syscall>");
8215 ui_out_text (uiout, "\" ");
8216 }
8217
8218 /* Implement the "print_mention" breakpoint_ops method for syscall
8219 catchpoints. */
8220
8221 static void
8222 print_mention_catch_syscall (struct breakpoint *b)
8223 {
8224 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
8225
8226 if (c->syscalls_to_be_caught)
8227 {
8228 int i, iter;
8229
8230 if (VEC_length (int, c->syscalls_to_be_caught) > 1)
8231 printf_filtered (_("Catchpoint %d (syscalls"), b->number);
8232 else
8233 printf_filtered (_("Catchpoint %d (syscall"), b->number);
8234
8235 for (i = 0;
8236 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
8237 i++)
8238 {
8239 struct syscall s;
8240 get_syscall_by_number (iter, &s);
8241
8242 if (s.name)
8243 printf_filtered (" '%s' [%d]", s.name, s.number);
8244 else
8245 printf_filtered (" %d", s.number);
8246 }
8247 printf_filtered (")");
8248 }
8249 else
8250 printf_filtered (_("Catchpoint %d (any syscall)"),
8251 b->number);
8252 }
8253
8254 /* Implement the "print_recreate" breakpoint_ops method for syscall
8255 catchpoints. */
8256
8257 static void
8258 print_recreate_catch_syscall (struct breakpoint *b, struct ui_file *fp)
8259 {
8260 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
8261
8262 fprintf_unfiltered (fp, "catch syscall");
8263
8264 if (c->syscalls_to_be_caught)
8265 {
8266 int i, iter;
8267
8268 for (i = 0;
8269 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
8270 i++)
8271 {
8272 struct syscall s;
8273
8274 get_syscall_by_number (iter, &s);
8275 if (s.name)
8276 fprintf_unfiltered (fp, " %s", s.name);
8277 else
8278 fprintf_unfiltered (fp, " %d", s.number);
8279 }
8280 }
8281 print_recreate_thread (b, fp);
8282 }
8283
8284 /* The breakpoint_ops structure to be used in syscall catchpoints. */
8285
8286 static struct breakpoint_ops catch_syscall_breakpoint_ops;
8287
8288 /* Returns non-zero if 'b' is a syscall catchpoint. */
8289
8290 static int
8291 syscall_catchpoint_p (struct breakpoint *b)
8292 {
8293 return (b->ops == &catch_syscall_breakpoint_ops);
8294 }
8295
8296 /* Initialize a new breakpoint of the bp_catchpoint kind. If TEMPFLAG
8297 is non-zero, then make the breakpoint temporary. If COND_STRING is
8298 not NULL, then store it in the breakpoint. OPS, if not NULL, is
8299 the breakpoint_ops structure associated to the catchpoint. */
8300
8301 static void
8302 init_catchpoint (struct breakpoint *b,
8303 struct gdbarch *gdbarch, int tempflag,
8304 char *cond_string,
8305 const struct breakpoint_ops *ops)
8306 {
8307 struct symtab_and_line sal;
8308
8309 init_sal (&sal);
8310 sal.pspace = current_program_space;
8311
8312 init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
8313
8314 b->cond_string = (cond_string == NULL) ? NULL : xstrdup (cond_string);
8315 b->disposition = tempflag ? disp_del : disp_donttouch;
8316 }
8317
8318 void
8319 install_breakpoint (int internal, struct breakpoint *b, int update_gll)
8320 {
8321 add_to_breakpoint_chain (b);
8322 set_breakpoint_number (internal, b);
8323 if (!internal)
8324 mention (b);
8325 observer_notify_breakpoint_created (b);
8326
8327 if (update_gll)
8328 update_global_location_list (1);
8329 }
8330
8331 static void
8332 create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
8333 int tempflag, char *cond_string,
8334 const struct breakpoint_ops *ops)
8335 {
8336 struct fork_catchpoint *c = XNEW (struct fork_catchpoint);
8337
8338 init_catchpoint (&c->base, gdbarch, tempflag, cond_string, ops);
8339
8340 c->forked_inferior_pid = null_ptid;
8341
8342 install_breakpoint (0, &c->base, 1);
8343 }
8344
8345 /* Exec catchpoints. */
8346
8347 /* An instance of this type is used to represent an exec catchpoint.
8348 It includes a "struct breakpoint" as a kind of base class; users
8349 downcast to "struct breakpoint *" when needed. A breakpoint is
8350 really of this type iff its ops pointer points to
8351 CATCH_EXEC_BREAKPOINT_OPS. */
8352
8353 struct exec_catchpoint
8354 {
8355 /* The base class. */
8356 struct breakpoint base;
8357
8358 /* Filename of a program whose exec triggered this catchpoint.
8359 This field is only valid immediately after this catchpoint has
8360 triggered. */
8361 char *exec_pathname;
8362 };
8363
8364 /* Implement the "dtor" breakpoint_ops method for exec
8365 catchpoints. */
8366
8367 static void
8368 dtor_catch_exec (struct breakpoint *b)
8369 {
8370 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
8371
8372 xfree (c->exec_pathname);
8373
8374 base_breakpoint_ops.dtor (b);
8375 }
8376
8377 static int
8378 insert_catch_exec (struct bp_location *bl)
8379 {
8380 return target_insert_exec_catchpoint (PIDGET (inferior_ptid));
8381 }
8382
8383 static int
8384 remove_catch_exec (struct bp_location *bl)
8385 {
8386 return target_remove_exec_catchpoint (PIDGET (inferior_ptid));
8387 }
8388
8389 static int
8390 breakpoint_hit_catch_exec (const struct bp_location *bl,
8391 struct address_space *aspace, CORE_ADDR bp_addr,
8392 const struct target_waitstatus *ws)
8393 {
8394 struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
8395
8396 if (ws->kind != TARGET_WAITKIND_EXECD)
8397 return 0;
8398
8399 c->exec_pathname = xstrdup (ws->value.execd_pathname);
8400 return 1;
8401 }
8402
8403 static enum print_stop_action
8404 print_it_catch_exec (bpstat bs)
8405 {
8406 struct ui_out *uiout = current_uiout;
8407 struct breakpoint *b = bs->breakpoint_at;
8408 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
8409
8410 annotate_catchpoint (b->number);
8411 if (b->disposition == disp_del)
8412 ui_out_text (uiout, "\nTemporary catchpoint ");
8413 else
8414 ui_out_text (uiout, "\nCatchpoint ");
8415 if (ui_out_is_mi_like_p (uiout))
8416 {
8417 ui_out_field_string (uiout, "reason",
8418 async_reason_lookup (EXEC_ASYNC_EXEC));
8419 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
8420 }
8421 ui_out_field_int (uiout, "bkptno", b->number);
8422 ui_out_text (uiout, " (exec'd ");
8423 ui_out_field_string (uiout, "new-exec", c->exec_pathname);
8424 ui_out_text (uiout, "), ");
8425
8426 return PRINT_SRC_AND_LOC;
8427 }
8428
8429 static void
8430 print_one_catch_exec (struct breakpoint *b, struct bp_location **last_loc)
8431 {
8432 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
8433 struct value_print_options opts;
8434 struct ui_out *uiout = current_uiout;
8435
8436 get_user_print_options (&opts);
8437
8438 /* Field 4, the address, is omitted (which makes the columns
8439 not line up too nicely with the headers, but the effect
8440 is relatively readable). */
8441 if (opts.addressprint)
8442 ui_out_field_skip (uiout, "addr");
8443 annotate_field (5);
8444 ui_out_text (uiout, "exec");
8445 if (c->exec_pathname != NULL)
8446 {
8447 ui_out_text (uiout, ", program \"");
8448 ui_out_field_string (uiout, "what", c->exec_pathname);
8449 ui_out_text (uiout, "\" ");
8450 }
8451 }
8452
8453 static void
8454 print_mention_catch_exec (struct breakpoint *b)
8455 {
8456 printf_filtered (_("Catchpoint %d (exec)"), b->number);
8457 }
8458
8459 /* Implement the "print_recreate" breakpoint_ops method for exec
8460 catchpoints. */
8461
8462 static void
8463 print_recreate_catch_exec (struct breakpoint *b, struct ui_file *fp)
8464 {
8465 fprintf_unfiltered (fp, "catch exec");
8466 print_recreate_thread (b, fp);
8467 }
8468
8469 static struct breakpoint_ops catch_exec_breakpoint_ops;
8470
8471 static void
8472 create_syscall_event_catchpoint (int tempflag, VEC(int) *filter,
8473 const struct breakpoint_ops *ops)
8474 {
8475 struct syscall_catchpoint *c;
8476 struct gdbarch *gdbarch = get_current_arch ();
8477
8478 c = XNEW (struct syscall_catchpoint);
8479 init_catchpoint (&c->base, gdbarch, tempflag, NULL, ops);
8480 c->syscalls_to_be_caught = filter;
8481
8482 install_breakpoint (0, &c->base, 1);
8483 }
8484
8485 static int
8486 hw_breakpoint_used_count (void)
8487 {
8488 int i = 0;
8489 struct breakpoint *b;
8490 struct bp_location *bl;
8491
8492 ALL_BREAKPOINTS (b)
8493 {
8494 if (b->type == bp_hardware_breakpoint && breakpoint_enabled (b))
8495 for (bl = b->loc; bl; bl = bl->next)
8496 {
8497 /* Special types of hardware breakpoints may use more than
8498 one register. */
8499 i += b->ops->resources_needed (bl);
8500 }
8501 }
8502
8503 return i;
8504 }
8505
8506 /* Returns the resources B would use if it were a hardware
8507 watchpoint. */
8508
8509 static int
8510 hw_watchpoint_use_count (struct breakpoint *b)
8511 {
8512 int i = 0;
8513 struct bp_location *bl;
8514
8515 if (!breakpoint_enabled (b))
8516 return 0;
8517
8518 for (bl = b->loc; bl; bl = bl->next)
8519 {
8520 /* Special types of hardware watchpoints may use more than
8521 one register. */
8522 i += b->ops->resources_needed (bl);
8523 }
8524
8525 return i;
8526 }
8527
8528 /* Returns the sum the used resources of all hardware watchpoints of
8529 type TYPE in the breakpoints list. Also returns in OTHER_TYPE_USED
8530 the sum of the used resources of all hardware watchpoints of other
8531 types _not_ TYPE. */
8532
8533 static int
8534 hw_watchpoint_used_count_others (struct breakpoint *except,
8535 enum bptype type, int *other_type_used)
8536 {
8537 int i = 0;
8538 struct breakpoint *b;
8539
8540 *other_type_used = 0;
8541 ALL_BREAKPOINTS (b)
8542 {
8543 if (b == except)
8544 continue;
8545 if (!breakpoint_enabled (b))
8546 continue;
8547
8548 if (b->type == type)
8549 i += hw_watchpoint_use_count (b);
8550 else if (is_hardware_watchpoint (b))
8551 *other_type_used = 1;
8552 }
8553
8554 return i;
8555 }
8556
8557 void
8558 disable_watchpoints_before_interactive_call_start (void)
8559 {
8560 struct breakpoint *b;
8561
8562 ALL_BREAKPOINTS (b)
8563 {
8564 if (is_watchpoint (b) && breakpoint_enabled (b))
8565 {
8566 b->enable_state = bp_call_disabled;
8567 update_global_location_list (0);
8568 }
8569 }
8570 }
8571
8572 void
8573 enable_watchpoints_after_interactive_call_stop (void)
8574 {
8575 struct breakpoint *b;
8576
8577 ALL_BREAKPOINTS (b)
8578 {
8579 if (is_watchpoint (b) && b->enable_state == bp_call_disabled)
8580 {
8581 b->enable_state = bp_enabled;
8582 update_global_location_list (1);
8583 }
8584 }
8585 }
8586
8587 void
8588 disable_breakpoints_before_startup (void)
8589 {
8590 current_program_space->executing_startup = 1;
8591 update_global_location_list (0);
8592 }
8593
8594 void
8595 enable_breakpoints_after_startup (void)
8596 {
8597 current_program_space->executing_startup = 0;
8598 breakpoint_re_set ();
8599 }
8600
8601
8602 /* Set a breakpoint that will evaporate an end of command
8603 at address specified by SAL.
8604 Restrict it to frame FRAME if FRAME is nonzero. */
8605
8606 struct breakpoint *
8607 set_momentary_breakpoint (struct gdbarch *gdbarch, struct symtab_and_line sal,
8608 struct frame_id frame_id, enum bptype type)
8609 {
8610 struct breakpoint *b;
8611
8612 /* If FRAME_ID is valid, it should be a real frame, not an inlined
8613 one. */
8614 gdb_assert (!frame_id_inlined_p (frame_id));
8615
8616 b = set_raw_breakpoint (gdbarch, sal, type, &momentary_breakpoint_ops);
8617 b->enable_state = bp_enabled;
8618 b->disposition = disp_donttouch;
8619 b->frame_id = frame_id;
8620
8621 /* If we're debugging a multi-threaded program, then we want
8622 momentary breakpoints to be active in only a single thread of
8623 control. */
8624 if (in_thread_list (inferior_ptid))
8625 b->thread = pid_to_thread_id (inferior_ptid);
8626
8627 update_global_location_list_nothrow (1);
8628
8629 return b;
8630 }
8631
8632 /* Make a momentary breakpoint based on the master breakpoint ORIG.
8633 The new breakpoint will have type TYPE, and use OPS as it
8634 breakpoint_ops. */
8635
8636 static struct breakpoint *
8637 momentary_breakpoint_from_master (struct breakpoint *orig,
8638 enum bptype type,
8639 const struct breakpoint_ops *ops)
8640 {
8641 struct breakpoint *copy;
8642
8643 copy = set_raw_breakpoint_without_location (orig->gdbarch, type, ops);
8644 copy->loc = allocate_bp_location (copy);
8645 set_breakpoint_location_function (copy->loc, 1);
8646
8647 copy->loc->gdbarch = orig->loc->gdbarch;
8648 copy->loc->requested_address = orig->loc->requested_address;
8649 copy->loc->address = orig->loc->address;
8650 copy->loc->section = orig->loc->section;
8651 copy->loc->pspace = orig->loc->pspace;
8652 copy->loc->probe = orig->loc->probe;
8653
8654 if (orig->loc->source_file != NULL)
8655 copy->loc->source_file = xstrdup (orig->loc->source_file);
8656
8657 copy->loc->line_number = orig->loc->line_number;
8658 copy->frame_id = orig->frame_id;
8659 copy->thread = orig->thread;
8660 copy->pspace = orig->pspace;
8661
8662 copy->enable_state = bp_enabled;
8663 copy->disposition = disp_donttouch;
8664 copy->number = internal_breakpoint_number--;
8665
8666 update_global_location_list_nothrow (0);
8667 return copy;
8668 }
8669
8670 /* Make a deep copy of momentary breakpoint ORIG. Returns NULL if
8671 ORIG is NULL. */
8672
8673 struct breakpoint *
8674 clone_momentary_breakpoint (struct breakpoint *orig)
8675 {
8676 /* If there's nothing to clone, then return nothing. */
8677 if (orig == NULL)
8678 return NULL;
8679
8680 return momentary_breakpoint_from_master (orig, orig->type, orig->ops);
8681 }
8682
8683 struct breakpoint *
8684 set_momentary_breakpoint_at_pc (struct gdbarch *gdbarch, CORE_ADDR pc,
8685 enum bptype type)
8686 {
8687 struct symtab_and_line sal;
8688
8689 sal = find_pc_line (pc, 0);
8690 sal.pc = pc;
8691 sal.section = find_pc_overlay (pc);
8692 sal.explicit_pc = 1;
8693
8694 return set_momentary_breakpoint (gdbarch, sal, null_frame_id, type);
8695 }
8696 \f
8697
8698 /* Tell the user we have just set a breakpoint B. */
8699
8700 static void
8701 mention (struct breakpoint *b)
8702 {
8703 b->ops->print_mention (b);
8704 if (ui_out_is_mi_like_p (current_uiout))
8705 return;
8706 printf_filtered ("\n");
8707 }
8708 \f
8709
8710 static struct bp_location *
8711 add_location_to_breakpoint (struct breakpoint *b,
8712 const struct symtab_and_line *sal)
8713 {
8714 struct bp_location *loc, **tmp;
8715 CORE_ADDR adjusted_address;
8716 struct gdbarch *loc_gdbarch = get_sal_arch (*sal);
8717
8718 if (loc_gdbarch == NULL)
8719 loc_gdbarch = b->gdbarch;
8720
8721 /* Adjust the breakpoint's address prior to allocating a location.
8722 Once we call allocate_bp_location(), that mostly uninitialized
8723 location will be placed on the location chain. Adjustment of the
8724 breakpoint may cause target_read_memory() to be called and we do
8725 not want its scan of the location chain to find a breakpoint and
8726 location that's only been partially initialized. */
8727 adjusted_address = adjust_breakpoint_address (loc_gdbarch,
8728 sal->pc, b->type);
8729
8730 loc = allocate_bp_location (b);
8731 for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
8732 ;
8733 *tmp = loc;
8734
8735 loc->requested_address = sal->pc;
8736 loc->address = adjusted_address;
8737 loc->pspace = sal->pspace;
8738 loc->probe = sal->probe;
8739 gdb_assert (loc->pspace != NULL);
8740 loc->section = sal->section;
8741 loc->gdbarch = loc_gdbarch;
8742
8743 if (sal->symtab != NULL)
8744 loc->source_file = xstrdup (sal->symtab->filename);
8745 loc->line_number = sal->line;
8746
8747 set_breakpoint_location_function (loc,
8748 sal->explicit_pc || sal->explicit_line);
8749 return loc;
8750 }
8751 \f
8752
8753 /* Return 1 if LOC is pointing to a permanent breakpoint,
8754 return 0 otherwise. */
8755
8756 static int
8757 bp_loc_is_permanent (struct bp_location *loc)
8758 {
8759 int len;
8760 CORE_ADDR addr;
8761 const gdb_byte *bpoint;
8762 gdb_byte *target_mem;
8763 struct cleanup *cleanup;
8764 int retval = 0;
8765
8766 gdb_assert (loc != NULL);
8767
8768 addr = loc->address;
8769 bpoint = gdbarch_breakpoint_from_pc (loc->gdbarch, &addr, &len);
8770
8771 /* Software breakpoints unsupported? */
8772 if (bpoint == NULL)
8773 return 0;
8774
8775 target_mem = alloca (len);
8776
8777 /* Enable the automatic memory restoration from breakpoints while
8778 we read the memory. Otherwise we could say about our temporary
8779 breakpoints they are permanent. */
8780 cleanup = save_current_space_and_thread ();
8781
8782 switch_to_program_space_and_thread (loc->pspace);
8783 make_show_memory_breakpoints_cleanup (0);
8784
8785 if (target_read_memory (loc->address, target_mem, len) == 0
8786 && memcmp (target_mem, bpoint, len) == 0)
8787 retval = 1;
8788
8789 do_cleanups (cleanup);
8790
8791 return retval;
8792 }
8793
8794 /* Build a command list for the dprintf corresponding to the current
8795 settings of the dprintf style options. */
8796
8797 static void
8798 update_dprintf_command_list (struct breakpoint *b)
8799 {
8800 char *dprintf_args = b->extra_string;
8801 char *printf_line = NULL;
8802
8803 if (!dprintf_args)
8804 return;
8805
8806 dprintf_args = skip_spaces (dprintf_args);
8807
8808 /* Allow a comma, as it may have terminated a location, but don't
8809 insist on it. */
8810 if (*dprintf_args == ',')
8811 ++dprintf_args;
8812 dprintf_args = skip_spaces (dprintf_args);
8813
8814 if (*dprintf_args != '"')
8815 error (_("Bad format string, missing '\"'."));
8816
8817 if (strcmp (dprintf_style, dprintf_style_gdb) == 0)
8818 printf_line = xstrprintf ("printf %s", dprintf_args);
8819 else if (strcmp (dprintf_style, dprintf_style_call) == 0)
8820 {
8821 if (!dprintf_function)
8822 error (_("No function supplied for dprintf call"));
8823
8824 if (dprintf_channel && strlen (dprintf_channel) > 0)
8825 printf_line = xstrprintf ("call (void) %s (%s,%s)",
8826 dprintf_function,
8827 dprintf_channel,
8828 dprintf_args);
8829 else
8830 printf_line = xstrprintf ("call (void) %s (%s)",
8831 dprintf_function,
8832 dprintf_args);
8833 }
8834 else if (strcmp (dprintf_style, dprintf_style_agent) == 0)
8835 {
8836 if (target_can_run_breakpoint_commands ())
8837 printf_line = xstrprintf ("agent-printf %s", dprintf_args);
8838 else
8839 {
8840 warning (_("Target cannot run dprintf commands, falling back to GDB printf"));
8841 printf_line = xstrprintf ("printf %s", dprintf_args);
8842 }
8843 }
8844 else
8845 internal_error (__FILE__, __LINE__,
8846 _("Invalid dprintf style."));
8847
8848 /* Manufacture a printf/continue sequence. */
8849 if (printf_line)
8850 {
8851 struct command_line *printf_cmd_line, *cont_cmd_line = NULL;
8852
8853 if (strcmp (dprintf_style, dprintf_style_agent) != 0)
8854 {
8855 cont_cmd_line = xmalloc (sizeof (struct command_line));
8856 cont_cmd_line->control_type = simple_control;
8857 cont_cmd_line->body_count = 0;
8858 cont_cmd_line->body_list = NULL;
8859 cont_cmd_line->next = NULL;
8860 cont_cmd_line->line = xstrdup ("continue");
8861 }
8862
8863 printf_cmd_line = xmalloc (sizeof (struct command_line));
8864 printf_cmd_line->control_type = simple_control;
8865 printf_cmd_line->body_count = 0;
8866 printf_cmd_line->body_list = NULL;
8867 printf_cmd_line->next = cont_cmd_line;
8868 printf_cmd_line->line = printf_line;
8869
8870 breakpoint_set_commands (b, printf_cmd_line);
8871 }
8872 }
8873
8874 /* Update all dprintf commands, making their command lists reflect
8875 current style settings. */
8876
8877 static void
8878 update_dprintf_commands (char *args, int from_tty,
8879 struct cmd_list_element *c)
8880 {
8881 struct breakpoint *b;
8882
8883 ALL_BREAKPOINTS (b)
8884 {
8885 if (b->type == bp_dprintf)
8886 update_dprintf_command_list (b);
8887 }
8888 }
8889
8890 /* Create a breakpoint with SAL as location. Use ADDR_STRING
8891 as textual description of the location, and COND_STRING
8892 as condition expression. */
8893
8894 static void
8895 init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
8896 struct symtabs_and_lines sals, char *addr_string,
8897 char *filter, char *cond_string,
8898 char *extra_string,
8899 enum bptype type, enum bpdisp disposition,
8900 int thread, int task, int ignore_count,
8901 const struct breakpoint_ops *ops, int from_tty,
8902 int enabled, int internal, unsigned flags,
8903 int display_canonical)
8904 {
8905 int i;
8906
8907 if (type == bp_hardware_breakpoint)
8908 {
8909 int target_resources_ok;
8910
8911 i = hw_breakpoint_used_count ();
8912 target_resources_ok =
8913 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
8914 i + 1, 0);
8915 if (target_resources_ok == 0)
8916 error (_("No hardware breakpoint support in the target."));
8917 else if (target_resources_ok < 0)
8918 error (_("Hardware breakpoints used exceeds limit."));
8919 }
8920
8921 gdb_assert (sals.nelts > 0);
8922
8923 for (i = 0; i < sals.nelts; ++i)
8924 {
8925 struct symtab_and_line sal = sals.sals[i];
8926 struct bp_location *loc;
8927
8928 if (from_tty)
8929 {
8930 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
8931 if (!loc_gdbarch)
8932 loc_gdbarch = gdbarch;
8933
8934 describe_other_breakpoints (loc_gdbarch,
8935 sal.pspace, sal.pc, sal.section, thread);
8936 }
8937
8938 if (i == 0)
8939 {
8940 init_raw_breakpoint (b, gdbarch, sal, type, ops);
8941 b->thread = thread;
8942 b->task = task;
8943
8944 b->cond_string = cond_string;
8945 b->extra_string = extra_string;
8946 b->ignore_count = ignore_count;
8947 b->enable_state = enabled ? bp_enabled : bp_disabled;
8948 b->disposition = disposition;
8949
8950 if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
8951 b->loc->inserted = 1;
8952
8953 if (type == bp_static_tracepoint)
8954 {
8955 struct tracepoint *t = (struct tracepoint *) b;
8956 struct static_tracepoint_marker marker;
8957
8958 if (strace_marker_p (b))
8959 {
8960 /* We already know the marker exists, otherwise, we
8961 wouldn't see a sal for it. */
8962 char *p = &addr_string[3];
8963 char *endp;
8964 char *marker_str;
8965
8966 p = skip_spaces (p);
8967
8968 endp = skip_to_space (p);
8969
8970 marker_str = savestring (p, endp - p);
8971 t->static_trace_marker_id = marker_str;
8972
8973 printf_filtered (_("Probed static tracepoint "
8974 "marker \"%s\"\n"),
8975 t->static_trace_marker_id);
8976 }
8977 else if (target_static_tracepoint_marker_at (sal.pc, &marker))
8978 {
8979 t->static_trace_marker_id = xstrdup (marker.str_id);
8980 release_static_tracepoint_marker (&marker);
8981
8982 printf_filtered (_("Probed static tracepoint "
8983 "marker \"%s\"\n"),
8984 t->static_trace_marker_id);
8985 }
8986 else
8987 warning (_("Couldn't determine the static "
8988 "tracepoint marker to probe"));
8989 }
8990
8991 loc = b->loc;
8992 }
8993 else
8994 {
8995 loc = add_location_to_breakpoint (b, &sal);
8996 if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
8997 loc->inserted = 1;
8998 }
8999
9000 if (bp_loc_is_permanent (loc))
9001 make_breakpoint_permanent (b);
9002
9003 if (b->cond_string)
9004 {
9005 char *arg = b->cond_string;
9006 loc->cond = parse_exp_1 (&arg, loc->address,
9007 block_for_pc (loc->address), 0);
9008 if (*arg)
9009 error (_("Garbage '%s' follows condition"), arg);
9010 }
9011
9012 /* Dynamic printf requires and uses additional arguments on the
9013 command line, otherwise it's an error. */
9014 if (type == bp_dprintf)
9015 {
9016 if (b->extra_string)
9017 update_dprintf_command_list (b);
9018 else
9019 error (_("Format string required"));
9020 }
9021 else if (b->extra_string)
9022 error (_("Garbage '%s' at end of command"), b->extra_string);
9023 }
9024
9025 b->display_canonical = display_canonical;
9026 if (addr_string)
9027 b->addr_string = addr_string;
9028 else
9029 /* addr_string has to be used or breakpoint_re_set will delete
9030 me. */
9031 b->addr_string
9032 = xstrprintf ("*%s", paddress (b->loc->gdbarch, b->loc->address));
9033 b->filter = filter;
9034 }
9035
9036 static void
9037 create_breakpoint_sal (struct gdbarch *gdbarch,
9038 struct symtabs_and_lines sals, char *addr_string,
9039 char *filter, char *cond_string,
9040 char *extra_string,
9041 enum bptype type, enum bpdisp disposition,
9042 int thread, int task, int ignore_count,
9043 const struct breakpoint_ops *ops, int from_tty,
9044 int enabled, int internal, unsigned flags,
9045 int display_canonical)
9046 {
9047 struct breakpoint *b;
9048 struct cleanup *old_chain;
9049
9050 if (is_tracepoint_type (type))
9051 {
9052 struct tracepoint *t;
9053
9054 t = XCNEW (struct tracepoint);
9055 b = &t->base;
9056 }
9057 else
9058 b = XNEW (struct breakpoint);
9059
9060 old_chain = make_cleanup (xfree, b);
9061
9062 init_breakpoint_sal (b, gdbarch,
9063 sals, addr_string,
9064 filter, cond_string, extra_string,
9065 type, disposition,
9066 thread, task, ignore_count,
9067 ops, from_tty,
9068 enabled, internal, flags,
9069 display_canonical);
9070 discard_cleanups (old_chain);
9071
9072 install_breakpoint (internal, b, 0);
9073 }
9074
9075 /* Add SALS.nelts breakpoints to the breakpoint table. For each
9076 SALS.sal[i] breakpoint, include the corresponding ADDR_STRING[i]
9077 value. COND_STRING, if not NULL, specified the condition to be
9078 used for all breakpoints. Essentially the only case where
9079 SALS.nelts is not 1 is when we set a breakpoint on an overloaded
9080 function. In that case, it's still not possible to specify
9081 separate conditions for different overloaded functions, so
9082 we take just a single condition string.
9083
9084 NOTE: If the function succeeds, the caller is expected to cleanup
9085 the arrays ADDR_STRING, COND_STRING, and SALS (but not the
9086 array contents). If the function fails (error() is called), the
9087 caller is expected to cleanups both the ADDR_STRING, COND_STRING,
9088 COND and SALS arrays and each of those arrays contents. */
9089
9090 static void
9091 create_breakpoints_sal (struct gdbarch *gdbarch,
9092 struct linespec_result *canonical,
9093 char *cond_string, char *extra_string,
9094 enum bptype type, enum bpdisp disposition,
9095 int thread, int task, int ignore_count,
9096 const struct breakpoint_ops *ops, int from_tty,
9097 int enabled, int internal, unsigned flags)
9098 {
9099 int i;
9100 struct linespec_sals *lsal;
9101
9102 if (canonical->pre_expanded)
9103 gdb_assert (VEC_length (linespec_sals, canonical->sals) == 1);
9104
9105 for (i = 0; VEC_iterate (linespec_sals, canonical->sals, i, lsal); ++i)
9106 {
9107 /* Note that 'addr_string' can be NULL in the case of a plain
9108 'break', without arguments. */
9109 char *addr_string = (canonical->addr_string
9110 ? xstrdup (canonical->addr_string)
9111 : NULL);
9112 char *filter_string = lsal->canonical ? xstrdup (lsal->canonical) : NULL;
9113 struct cleanup *inner = make_cleanup (xfree, addr_string);
9114
9115 make_cleanup (xfree, filter_string);
9116 create_breakpoint_sal (gdbarch, lsal->sals,
9117 addr_string,
9118 filter_string,
9119 cond_string, extra_string,
9120 type, disposition,
9121 thread, task, ignore_count, ops,
9122 from_tty, enabled, internal, flags,
9123 canonical->special_display);
9124 discard_cleanups (inner);
9125 }
9126 }
9127
9128 /* Parse ADDRESS which is assumed to be a SAL specification possibly
9129 followed by conditionals. On return, SALS contains an array of SAL
9130 addresses found. ADDR_STRING contains a vector of (canonical)
9131 address strings. ADDRESS points to the end of the SAL.
9132
9133 The array and the line spec strings are allocated on the heap, it is
9134 the caller's responsibility to free them. */
9135
9136 static void
9137 parse_breakpoint_sals (char **address,
9138 struct linespec_result *canonical)
9139 {
9140 /* If no arg given, or if first arg is 'if ', use the default
9141 breakpoint. */
9142 if ((*address) == NULL
9143 || (strncmp ((*address), "if", 2) == 0 && isspace ((*address)[2])))
9144 {
9145 /* The last displayed codepoint, if it's valid, is our default breakpoint
9146 address. */
9147 if (last_displayed_sal_is_valid ())
9148 {
9149 struct linespec_sals lsal;
9150 struct symtab_and_line sal;
9151 CORE_ADDR pc;
9152
9153 init_sal (&sal); /* Initialize to zeroes. */
9154 lsal.sals.sals = (struct symtab_and_line *)
9155 xmalloc (sizeof (struct symtab_and_line));
9156
9157 /* Set sal's pspace, pc, symtab, and line to the values
9158 corresponding to the last call to print_frame_info.
9159 Be sure to reinitialize LINE with NOTCURRENT == 0
9160 as the breakpoint line number is inappropriate otherwise.
9161 find_pc_line would adjust PC, re-set it back. */
9162 get_last_displayed_sal (&sal);
9163 pc = sal.pc;
9164 sal = find_pc_line (pc, 0);
9165
9166 /* "break" without arguments is equivalent to "break *PC"
9167 where PC is the last displayed codepoint's address. So
9168 make sure to set sal.explicit_pc to prevent GDB from
9169 trying to expand the list of sals to include all other
9170 instances with the same symtab and line. */
9171 sal.pc = pc;
9172 sal.explicit_pc = 1;
9173
9174 lsal.sals.sals[0] = sal;
9175 lsal.sals.nelts = 1;
9176 lsal.canonical = NULL;
9177
9178 VEC_safe_push (linespec_sals, canonical->sals, &lsal);
9179 }
9180 else
9181 error (_("No default breakpoint address now."));
9182 }
9183 else
9184 {
9185 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
9186
9187 /* Force almost all breakpoints to be in terms of the
9188 current_source_symtab (which is decode_line_1's default).
9189 This should produce the results we want almost all of the
9190 time while leaving default_breakpoint_* alone.
9191
9192 ObjC: However, don't match an Objective-C method name which
9193 may have a '+' or '-' succeeded by a '['. */
9194 if (last_displayed_sal_is_valid ()
9195 && (!cursal.symtab
9196 || ((strchr ("+-", (*address)[0]) != NULL)
9197 && ((*address)[1] != '['))))
9198 decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
9199 get_last_displayed_symtab (),
9200 get_last_displayed_line (),
9201 canonical, NULL, NULL);
9202 else
9203 decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
9204 cursal.symtab, cursal.line, canonical, NULL, NULL);
9205 }
9206 }
9207
9208
9209 /* Convert each SAL into a real PC. Verify that the PC can be
9210 inserted as a breakpoint. If it can't throw an error. */
9211
9212 static void
9213 breakpoint_sals_to_pc (struct symtabs_and_lines *sals)
9214 {
9215 int i;
9216
9217 for (i = 0; i < sals->nelts; i++)
9218 resolve_sal_pc (&sals->sals[i]);
9219 }
9220
9221 /* Fast tracepoints may have restrictions on valid locations. For
9222 instance, a fast tracepoint using a jump instead of a trap will
9223 likely have to overwrite more bytes than a trap would, and so can
9224 only be placed where the instruction is longer than the jump, or a
9225 multi-instruction sequence does not have a jump into the middle of
9226 it, etc. */
9227
9228 static void
9229 check_fast_tracepoint_sals (struct gdbarch *gdbarch,
9230 struct symtabs_and_lines *sals)
9231 {
9232 int i, rslt;
9233 struct symtab_and_line *sal;
9234 char *msg;
9235 struct cleanup *old_chain;
9236
9237 for (i = 0; i < sals->nelts; i++)
9238 {
9239 struct gdbarch *sarch;
9240
9241 sal = &sals->sals[i];
9242
9243 sarch = get_sal_arch (*sal);
9244 /* We fall back to GDBARCH if there is no architecture
9245 associated with SAL. */
9246 if (sarch == NULL)
9247 sarch = gdbarch;
9248 rslt = gdbarch_fast_tracepoint_valid_at (sarch, sal->pc,
9249 NULL, &msg);
9250 old_chain = make_cleanup (xfree, msg);
9251
9252 if (!rslt)
9253 error (_("May not have a fast tracepoint at 0x%s%s"),
9254 paddress (sarch, sal->pc), (msg ? msg : ""));
9255
9256 do_cleanups (old_chain);
9257 }
9258 }
9259
9260 /* Issue an invalid thread ID error. */
9261
9262 static void ATTRIBUTE_NORETURN
9263 invalid_thread_id_error (int id)
9264 {
9265 error (_("Unknown thread %d."), id);
9266 }
9267
9268 /* Given TOK, a string specification of condition and thread, as
9269 accepted by the 'break' command, extract the condition
9270 string and thread number and set *COND_STRING and *THREAD.
9271 PC identifies the context at which the condition should be parsed.
9272 If no condition is found, *COND_STRING is set to NULL.
9273 If no thread is found, *THREAD is set to -1. */
9274
9275 static void
9276 find_condition_and_thread (char *tok, CORE_ADDR pc,
9277 char **cond_string, int *thread, int *task,
9278 char **rest)
9279 {
9280 *cond_string = NULL;
9281 *thread = -1;
9282 *task = 0;
9283 *rest = NULL;
9284
9285 while (tok && *tok)
9286 {
9287 char *end_tok;
9288 int toklen;
9289 char *cond_start = NULL;
9290 char *cond_end = NULL;
9291
9292 tok = skip_spaces (tok);
9293
9294 if ((*tok == '"' || *tok == ',') && rest)
9295 {
9296 *rest = savestring (tok, strlen (tok));
9297 return;
9298 }
9299
9300 end_tok = skip_to_space (tok);
9301
9302 toklen = end_tok - tok;
9303
9304 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
9305 {
9306 struct expression *expr;
9307
9308 tok = cond_start = end_tok + 1;
9309 expr = parse_exp_1 (&tok, pc, block_for_pc (pc), 0);
9310 xfree (expr);
9311 cond_end = tok;
9312 *cond_string = savestring (cond_start, cond_end - cond_start);
9313 }
9314 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
9315 {
9316 char *tmptok;
9317
9318 tok = end_tok + 1;
9319 tmptok = tok;
9320 *thread = strtol (tok, &tok, 0);
9321 if (tok == tmptok)
9322 error (_("Junk after thread keyword."));
9323 if (!valid_thread_id (*thread))
9324 invalid_thread_id_error (*thread);
9325 }
9326 else if (toklen >= 1 && strncmp (tok, "task", toklen) == 0)
9327 {
9328 char *tmptok;
9329
9330 tok = end_tok + 1;
9331 tmptok = tok;
9332 *task = strtol (tok, &tok, 0);
9333 if (tok == tmptok)
9334 error (_("Junk after task keyword."));
9335 if (!valid_task_id (*task))
9336 error (_("Unknown task %d."), *task);
9337 }
9338 else if (rest)
9339 {
9340 *rest = savestring (tok, strlen (tok));
9341 return;
9342 }
9343 else
9344 error (_("Junk at end of arguments."));
9345 }
9346 }
9347
9348 /* Decode a static tracepoint marker spec. */
9349
9350 static struct symtabs_and_lines
9351 decode_static_tracepoint_spec (char **arg_p)
9352 {
9353 VEC(static_tracepoint_marker_p) *markers = NULL;
9354 struct symtabs_and_lines sals;
9355 struct cleanup *old_chain;
9356 char *p = &(*arg_p)[3];
9357 char *endp;
9358 char *marker_str;
9359 int i;
9360
9361 p = skip_spaces (p);
9362
9363 endp = skip_to_space (p);
9364
9365 marker_str = savestring (p, endp - p);
9366 old_chain = make_cleanup (xfree, marker_str);
9367
9368 markers = target_static_tracepoint_markers_by_strid (marker_str);
9369 if (VEC_empty(static_tracepoint_marker_p, markers))
9370 error (_("No known static tracepoint marker named %s"), marker_str);
9371
9372 sals.nelts = VEC_length(static_tracepoint_marker_p, markers);
9373 sals.sals = xmalloc (sizeof *sals.sals * sals.nelts);
9374
9375 for (i = 0; i < sals.nelts; i++)
9376 {
9377 struct static_tracepoint_marker *marker;
9378
9379 marker = VEC_index (static_tracepoint_marker_p, markers, i);
9380
9381 init_sal (&sals.sals[i]);
9382
9383 sals.sals[i] = find_pc_line (marker->address, 0);
9384 sals.sals[i].pc = marker->address;
9385
9386 release_static_tracepoint_marker (marker);
9387 }
9388
9389 do_cleanups (old_chain);
9390
9391 *arg_p = endp;
9392 return sals;
9393 }
9394
9395 /* Set a breakpoint. This function is shared between CLI and MI
9396 functions for setting a breakpoint. This function has two major
9397 modes of operations, selected by the PARSE_CONDITION_AND_THREAD
9398 parameter. If non-zero, the function will parse arg, extracting
9399 breakpoint location, address and thread. Otherwise, ARG is just
9400 the location of breakpoint, with condition and thread specified by
9401 the COND_STRING and THREAD parameters. If INTERNAL is non-zero,
9402 the breakpoint number will be allocated from the internal
9403 breakpoint count. Returns true if any breakpoint was created;
9404 false otherwise. */
9405
9406 int
9407 create_breakpoint (struct gdbarch *gdbarch,
9408 char *arg, char *cond_string,
9409 int thread, char *extra_string,
9410 int parse_condition_and_thread,
9411 int tempflag, enum bptype type_wanted,
9412 int ignore_count,
9413 enum auto_boolean pending_break_support,
9414 const struct breakpoint_ops *ops,
9415 int from_tty, int enabled, int internal,
9416 unsigned flags)
9417 {
9418 volatile struct gdb_exception e;
9419 char *copy_arg = NULL;
9420 char *addr_start = arg;
9421 struct linespec_result canonical;
9422 struct cleanup *old_chain;
9423 struct cleanup *bkpt_chain = NULL;
9424 int pending = 0;
9425 int task = 0;
9426 int prev_bkpt_count = breakpoint_count;
9427
9428 gdb_assert (ops != NULL);
9429
9430 init_linespec_result (&canonical);
9431
9432 TRY_CATCH (e, RETURN_MASK_ALL)
9433 {
9434 ops->create_sals_from_address (&arg, &canonical, type_wanted,
9435 addr_start, &copy_arg);
9436 }
9437
9438 /* If caller is interested in rc value from parse, set value. */
9439 switch (e.reason)
9440 {
9441 case GDB_NO_ERROR:
9442 if (VEC_empty (linespec_sals, canonical.sals))
9443 return 0;
9444 break;
9445 case RETURN_ERROR:
9446 switch (e.error)
9447 {
9448 case NOT_FOUND_ERROR:
9449
9450 /* If pending breakpoint support is turned off, throw
9451 error. */
9452
9453 if (pending_break_support == AUTO_BOOLEAN_FALSE)
9454 throw_exception (e);
9455
9456 exception_print (gdb_stderr, e);
9457
9458 /* If pending breakpoint support is auto query and the user
9459 selects no, then simply return the error code. */
9460 if (pending_break_support == AUTO_BOOLEAN_AUTO
9461 && !nquery (_("Make %s pending on future shared library load? "),
9462 bptype_string (type_wanted)))
9463 return 0;
9464
9465 /* At this point, either the user was queried about setting
9466 a pending breakpoint and selected yes, or pending
9467 breakpoint behavior is on and thus a pending breakpoint
9468 is defaulted on behalf of the user. */
9469 {
9470 struct linespec_sals lsal;
9471
9472 copy_arg = xstrdup (addr_start);
9473 lsal.canonical = xstrdup (copy_arg);
9474 lsal.sals.nelts = 1;
9475 lsal.sals.sals = XNEW (struct symtab_and_line);
9476 init_sal (&lsal.sals.sals[0]);
9477 pending = 1;
9478 VEC_safe_push (linespec_sals, canonical.sals, &lsal);
9479 }
9480 break;
9481 default:
9482 throw_exception (e);
9483 }
9484 break;
9485 default:
9486 throw_exception (e);
9487 }
9488
9489 /* Create a chain of things that always need to be cleaned up. */
9490 old_chain = make_cleanup_destroy_linespec_result (&canonical);
9491
9492 /* ----------------------------- SNIP -----------------------------
9493 Anything added to the cleanup chain beyond this point is assumed
9494 to be part of a breakpoint. If the breakpoint create succeeds
9495 then the memory is not reclaimed. */
9496 bkpt_chain = make_cleanup (null_cleanup, 0);
9497
9498 /* Resolve all line numbers to PC's and verify that the addresses
9499 are ok for the target. */
9500 if (!pending)
9501 {
9502 int ix;
9503 struct linespec_sals *iter;
9504
9505 for (ix = 0; VEC_iterate (linespec_sals, canonical.sals, ix, iter); ++ix)
9506 breakpoint_sals_to_pc (&iter->sals);
9507 }
9508
9509 /* Fast tracepoints may have additional restrictions on location. */
9510 if (!pending && type_wanted == bp_fast_tracepoint)
9511 {
9512 int ix;
9513 struct linespec_sals *iter;
9514
9515 for (ix = 0; VEC_iterate (linespec_sals, canonical.sals, ix, iter); ++ix)
9516 check_fast_tracepoint_sals (gdbarch, &iter->sals);
9517 }
9518
9519 /* Verify that condition can be parsed, before setting any
9520 breakpoints. Allocate a separate condition expression for each
9521 breakpoint. */
9522 if (!pending)
9523 {
9524 struct linespec_sals *lsal;
9525
9526 lsal = VEC_index (linespec_sals, canonical.sals, 0);
9527
9528 if (parse_condition_and_thread)
9529 {
9530 char *rest;
9531 /* Here we only parse 'arg' to separate condition
9532 from thread number, so parsing in context of first
9533 sal is OK. When setting the breakpoint we'll
9534 re-parse it in context of each sal. */
9535
9536 find_condition_and_thread (arg, lsal->sals.sals[0].pc, &cond_string,
9537 &thread, &task, &rest);
9538 if (cond_string)
9539 make_cleanup (xfree, cond_string);
9540 if (rest)
9541 make_cleanup (xfree, rest);
9542 if (rest)
9543 extra_string = rest;
9544 }
9545 else
9546 {
9547 /* Create a private copy of condition string. */
9548 if (cond_string)
9549 {
9550 cond_string = xstrdup (cond_string);
9551 make_cleanup (xfree, cond_string);
9552 }
9553 /* Create a private copy of any extra string. */
9554 if (extra_string)
9555 {
9556 extra_string = xstrdup (extra_string);
9557 make_cleanup (xfree, extra_string);
9558 }
9559 }
9560
9561 ops->create_breakpoints_sal (gdbarch, &canonical, lsal,
9562 cond_string, extra_string, type_wanted,
9563 tempflag ? disp_del : disp_donttouch,
9564 thread, task, ignore_count, ops,
9565 from_tty, enabled, internal, flags);
9566 }
9567 else
9568 {
9569 struct breakpoint *b;
9570
9571 make_cleanup (xfree, copy_arg);
9572
9573 if (is_tracepoint_type (type_wanted))
9574 {
9575 struct tracepoint *t;
9576
9577 t = XCNEW (struct tracepoint);
9578 b = &t->base;
9579 }
9580 else
9581 b = XNEW (struct breakpoint);
9582
9583 init_raw_breakpoint_without_location (b, gdbarch, type_wanted, ops);
9584
9585 b->addr_string = copy_arg;
9586 if (parse_condition_and_thread)
9587 b->cond_string = NULL;
9588 else
9589 {
9590 /* Create a private copy of condition string. */
9591 if (cond_string)
9592 {
9593 cond_string = xstrdup (cond_string);
9594 make_cleanup (xfree, cond_string);
9595 }
9596 b->cond_string = cond_string;
9597 }
9598 b->extra_string = NULL;
9599 b->ignore_count = ignore_count;
9600 b->disposition = tempflag ? disp_del : disp_donttouch;
9601 b->condition_not_parsed = 1;
9602 b->enable_state = enabled ? bp_enabled : bp_disabled;
9603 if ((type_wanted != bp_breakpoint
9604 && type_wanted != bp_hardware_breakpoint) || thread != -1)
9605 b->pspace = current_program_space;
9606
9607 install_breakpoint (internal, b, 0);
9608 }
9609
9610 if (VEC_length (linespec_sals, canonical.sals) > 1)
9611 {
9612 warning (_("Multiple breakpoints were set.\nUse the "
9613 "\"delete\" command to delete unwanted breakpoints."));
9614 prev_breakpoint_count = prev_bkpt_count;
9615 }
9616
9617 /* That's it. Discard the cleanups for data inserted into the
9618 breakpoint. */
9619 discard_cleanups (bkpt_chain);
9620 /* But cleanup everything else. */
9621 do_cleanups (old_chain);
9622
9623 /* error call may happen here - have BKPT_CHAIN already discarded. */
9624 update_global_location_list (1);
9625
9626 return 1;
9627 }
9628
9629 /* Set a breakpoint.
9630 ARG is a string describing breakpoint address,
9631 condition, and thread.
9632 FLAG specifies if a breakpoint is hardware on,
9633 and if breakpoint is temporary, using BP_HARDWARE_FLAG
9634 and BP_TEMPFLAG. */
9635
9636 static void
9637 break_command_1 (char *arg, int flag, int from_tty)
9638 {
9639 int tempflag = flag & BP_TEMPFLAG;
9640 enum bptype type_wanted = (flag & BP_HARDWAREFLAG
9641 ? bp_hardware_breakpoint
9642 : bp_breakpoint);
9643 struct breakpoint_ops *ops;
9644 const char *arg_cp = arg;
9645
9646 /* Matching breakpoints on probes. */
9647 if (arg && probe_linespec_to_ops (&arg_cp) != NULL)
9648 ops = &bkpt_probe_breakpoint_ops;
9649 else
9650 ops = &bkpt_breakpoint_ops;
9651
9652 create_breakpoint (get_current_arch (),
9653 arg,
9654 NULL, 0, NULL, 1 /* parse arg */,
9655 tempflag, type_wanted,
9656 0 /* Ignore count */,
9657 pending_break_support,
9658 ops,
9659 from_tty,
9660 1 /* enabled */,
9661 0 /* internal */,
9662 0);
9663 }
9664
9665 /* Helper function for break_command_1 and disassemble_command. */
9666
9667 void
9668 resolve_sal_pc (struct symtab_and_line *sal)
9669 {
9670 CORE_ADDR pc;
9671
9672 if (sal->pc == 0 && sal->symtab != NULL)
9673 {
9674 if (!find_line_pc (sal->symtab, sal->line, &pc))
9675 error (_("No line %d in file \"%s\"."),
9676 sal->line, sal->symtab->filename);
9677 sal->pc = pc;
9678
9679 /* If this SAL corresponds to a breakpoint inserted using a line
9680 number, then skip the function prologue if necessary. */
9681 if (sal->explicit_line)
9682 skip_prologue_sal (sal);
9683 }
9684
9685 if (sal->section == 0 && sal->symtab != NULL)
9686 {
9687 struct blockvector *bv;
9688 struct block *b;
9689 struct symbol *sym;
9690
9691 bv = blockvector_for_pc_sect (sal->pc, 0, &b, sal->symtab);
9692 if (bv != NULL)
9693 {
9694 sym = block_linkage_function (b);
9695 if (sym != NULL)
9696 {
9697 fixup_symbol_section (sym, sal->symtab->objfile);
9698 sal->section = SYMBOL_OBJ_SECTION (sym);
9699 }
9700 else
9701 {
9702 /* It really is worthwhile to have the section, so we'll
9703 just have to look harder. This case can be executed
9704 if we have line numbers but no functions (as can
9705 happen in assembly source). */
9706
9707 struct minimal_symbol *msym;
9708 struct cleanup *old_chain = save_current_space_and_thread ();
9709
9710 switch_to_program_space_and_thread (sal->pspace);
9711
9712 msym = lookup_minimal_symbol_by_pc (sal->pc);
9713 if (msym)
9714 sal->section = SYMBOL_OBJ_SECTION (msym);
9715
9716 do_cleanups (old_chain);
9717 }
9718 }
9719 }
9720 }
9721
9722 void
9723 break_command (char *arg, int from_tty)
9724 {
9725 break_command_1 (arg, 0, from_tty);
9726 }
9727
9728 void
9729 tbreak_command (char *arg, int from_tty)
9730 {
9731 break_command_1 (arg, BP_TEMPFLAG, from_tty);
9732 }
9733
9734 static void
9735 hbreak_command (char *arg, int from_tty)
9736 {
9737 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
9738 }
9739
9740 static void
9741 thbreak_command (char *arg, int from_tty)
9742 {
9743 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
9744 }
9745
9746 static void
9747 stop_command (char *arg, int from_tty)
9748 {
9749 printf_filtered (_("Specify the type of breakpoint to set.\n\
9750 Usage: stop in <function | address>\n\
9751 stop at <line>\n"));
9752 }
9753
9754 static void
9755 stopin_command (char *arg, int from_tty)
9756 {
9757 int badInput = 0;
9758
9759 if (arg == (char *) NULL)
9760 badInput = 1;
9761 else if (*arg != '*')
9762 {
9763 char *argptr = arg;
9764 int hasColon = 0;
9765
9766 /* Look for a ':'. If this is a line number specification, then
9767 say it is bad, otherwise, it should be an address or
9768 function/method name. */
9769 while (*argptr && !hasColon)
9770 {
9771 hasColon = (*argptr == ':');
9772 argptr++;
9773 }
9774
9775 if (hasColon)
9776 badInput = (*argptr != ':'); /* Not a class::method */
9777 else
9778 badInput = isdigit (*arg); /* a simple line number */
9779 }
9780
9781 if (badInput)
9782 printf_filtered (_("Usage: stop in <function | address>\n"));
9783 else
9784 break_command_1 (arg, 0, from_tty);
9785 }
9786
9787 static void
9788 stopat_command (char *arg, int from_tty)
9789 {
9790 int badInput = 0;
9791
9792 if (arg == (char *) NULL || *arg == '*') /* no line number */
9793 badInput = 1;
9794 else
9795 {
9796 char *argptr = arg;
9797 int hasColon = 0;
9798
9799 /* Look for a ':'. If there is a '::' then get out, otherwise
9800 it is probably a line number. */
9801 while (*argptr && !hasColon)
9802 {
9803 hasColon = (*argptr == ':');
9804 argptr++;
9805 }
9806
9807 if (hasColon)
9808 badInput = (*argptr == ':'); /* we have class::method */
9809 else
9810 badInput = !isdigit (*arg); /* not a line number */
9811 }
9812
9813 if (badInput)
9814 printf_filtered (_("Usage: stop at <line>\n"));
9815 else
9816 break_command_1 (arg, 0, from_tty);
9817 }
9818
9819 void dprintf_command (char *arg, int from_tty);
9820
9821 /* The dynamic printf command is mostly like a regular breakpoint, but
9822 with a prewired command list consisting of a single output command,
9823 built from extra arguments supplied on the dprintf command
9824 line. */
9825
9826 void
9827 dprintf_command (char *arg, int from_tty)
9828 {
9829 create_breakpoint (get_current_arch (),
9830 arg,
9831 NULL, 0, NULL, 1 /* parse arg */,
9832 0, bp_dprintf,
9833 0 /* Ignore count */,
9834 pending_break_support,
9835 &dprintf_breakpoint_ops,
9836 from_tty,
9837 1 /* enabled */,
9838 0 /* internal */,
9839 0);
9840 }
9841
9842 static void
9843 agent_printf_command (char *arg, int from_tty)
9844 {
9845 error (_("May only run agent-printf on the target"));
9846 }
9847
9848 /* Implement the "breakpoint_hit" breakpoint_ops method for
9849 ranged breakpoints. */
9850
9851 static int
9852 breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
9853 struct address_space *aspace,
9854 CORE_ADDR bp_addr,
9855 const struct target_waitstatus *ws)
9856 {
9857 if (ws->kind != TARGET_WAITKIND_STOPPED
9858 || ws->value.sig != GDB_SIGNAL_TRAP)
9859 return 0;
9860
9861 return breakpoint_address_match_range (bl->pspace->aspace, bl->address,
9862 bl->length, aspace, bp_addr);
9863 }
9864
9865 /* Implement the "resources_needed" breakpoint_ops method for
9866 ranged breakpoints. */
9867
9868 static int
9869 resources_needed_ranged_breakpoint (const struct bp_location *bl)
9870 {
9871 return target_ranged_break_num_registers ();
9872 }
9873
9874 /* Implement the "print_it" breakpoint_ops method for
9875 ranged breakpoints. */
9876
9877 static enum print_stop_action
9878 print_it_ranged_breakpoint (bpstat bs)
9879 {
9880 struct breakpoint *b = bs->breakpoint_at;
9881 struct bp_location *bl = b->loc;
9882 struct ui_out *uiout = current_uiout;
9883
9884 gdb_assert (b->type == bp_hardware_breakpoint);
9885
9886 /* Ranged breakpoints have only one location. */
9887 gdb_assert (bl && bl->next == NULL);
9888
9889 annotate_breakpoint (b->number);
9890 if (b->disposition == disp_del)
9891 ui_out_text (uiout, "\nTemporary ranged breakpoint ");
9892 else
9893 ui_out_text (uiout, "\nRanged breakpoint ");
9894 if (ui_out_is_mi_like_p (uiout))
9895 {
9896 ui_out_field_string (uiout, "reason",
9897 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
9898 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
9899 }
9900 ui_out_field_int (uiout, "bkptno", b->number);
9901 ui_out_text (uiout, ", ");
9902
9903 return PRINT_SRC_AND_LOC;
9904 }
9905
9906 /* Implement the "print_one" breakpoint_ops method for
9907 ranged breakpoints. */
9908
9909 static void
9910 print_one_ranged_breakpoint (struct breakpoint *b,
9911 struct bp_location **last_loc)
9912 {
9913 struct bp_location *bl = b->loc;
9914 struct value_print_options opts;
9915 struct ui_out *uiout = current_uiout;
9916
9917 /* Ranged breakpoints have only one location. */
9918 gdb_assert (bl && bl->next == NULL);
9919
9920 get_user_print_options (&opts);
9921
9922 if (opts.addressprint)
9923 /* We don't print the address range here, it will be printed later
9924 by print_one_detail_ranged_breakpoint. */
9925 ui_out_field_skip (uiout, "addr");
9926 annotate_field (5);
9927 print_breakpoint_location (b, bl);
9928 *last_loc = bl;
9929 }
9930
9931 /* Implement the "print_one_detail" breakpoint_ops method for
9932 ranged breakpoints. */
9933
9934 static void
9935 print_one_detail_ranged_breakpoint (const struct breakpoint *b,
9936 struct ui_out *uiout)
9937 {
9938 CORE_ADDR address_start, address_end;
9939 struct bp_location *bl = b->loc;
9940 struct ui_file *stb = mem_fileopen ();
9941 struct cleanup *cleanup = make_cleanup_ui_file_delete (stb);
9942
9943 gdb_assert (bl);
9944
9945 address_start = bl->address;
9946 address_end = address_start + bl->length - 1;
9947
9948 ui_out_text (uiout, "\taddress range: ");
9949 fprintf_unfiltered (stb, "[%s, %s]",
9950 print_core_address (bl->gdbarch, address_start),
9951 print_core_address (bl->gdbarch, address_end));
9952 ui_out_field_stream (uiout, "addr", stb);
9953 ui_out_text (uiout, "\n");
9954
9955 do_cleanups (cleanup);
9956 }
9957
9958 /* Implement the "print_mention" breakpoint_ops method for
9959 ranged breakpoints. */
9960
9961 static void
9962 print_mention_ranged_breakpoint (struct breakpoint *b)
9963 {
9964 struct bp_location *bl = b->loc;
9965 struct ui_out *uiout = current_uiout;
9966
9967 gdb_assert (bl);
9968 gdb_assert (b->type == bp_hardware_breakpoint);
9969
9970 if (ui_out_is_mi_like_p (uiout))
9971 return;
9972
9973 printf_filtered (_("Hardware assisted ranged breakpoint %d from %s to %s."),
9974 b->number, paddress (bl->gdbarch, bl->address),
9975 paddress (bl->gdbarch, bl->address + bl->length - 1));
9976 }
9977
9978 /* Implement the "print_recreate" breakpoint_ops method for
9979 ranged breakpoints. */
9980
9981 static void
9982 print_recreate_ranged_breakpoint (struct breakpoint *b, struct ui_file *fp)
9983 {
9984 fprintf_unfiltered (fp, "break-range %s, %s", b->addr_string,
9985 b->addr_string_range_end);
9986 print_recreate_thread (b, fp);
9987 }
9988
9989 /* The breakpoint_ops structure to be used in ranged breakpoints. */
9990
9991 static struct breakpoint_ops ranged_breakpoint_ops;
9992
9993 /* Find the address where the end of the breakpoint range should be
9994 placed, given the SAL of the end of the range. This is so that if
9995 the user provides a line number, the end of the range is set to the
9996 last instruction of the given line. */
9997
9998 static CORE_ADDR
9999 find_breakpoint_range_end (struct symtab_and_line sal)
10000 {
10001 CORE_ADDR end;
10002
10003 /* If the user provided a PC value, use it. Otherwise,
10004 find the address of the end of the given location. */
10005 if (sal.explicit_pc)
10006 end = sal.pc;
10007 else
10008 {
10009 int ret;
10010 CORE_ADDR start;
10011
10012 ret = find_line_pc_range (sal, &start, &end);
10013 if (!ret)
10014 error (_("Could not find location of the end of the range."));
10015
10016 /* find_line_pc_range returns the start of the next line. */
10017 end--;
10018 }
10019
10020 return end;
10021 }
10022
10023 /* Implement the "break-range" CLI command. */
10024
10025 static void
10026 break_range_command (char *arg, int from_tty)
10027 {
10028 char *arg_start, *addr_string_start, *addr_string_end;
10029 struct linespec_result canonical_start, canonical_end;
10030 int bp_count, can_use_bp, length;
10031 CORE_ADDR end;
10032 struct breakpoint *b;
10033 struct symtab_and_line sal_start, sal_end;
10034 struct cleanup *cleanup_bkpt;
10035 struct linespec_sals *lsal_start, *lsal_end;
10036
10037 /* We don't support software ranged breakpoints. */
10038 if (target_ranged_break_num_registers () < 0)
10039 error (_("This target does not support hardware ranged breakpoints."));
10040
10041 bp_count = hw_breakpoint_used_count ();
10042 bp_count += target_ranged_break_num_registers ();
10043 can_use_bp = target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
10044 bp_count, 0);
10045 if (can_use_bp < 0)
10046 error (_("Hardware breakpoints used exceeds limit."));
10047
10048 arg = skip_spaces (arg);
10049 if (arg == NULL || arg[0] == '\0')
10050 error(_("No address range specified."));
10051
10052 init_linespec_result (&canonical_start);
10053
10054 arg_start = arg;
10055 parse_breakpoint_sals (&arg, &canonical_start);
10056
10057 cleanup_bkpt = make_cleanup_destroy_linespec_result (&canonical_start);
10058
10059 if (arg[0] != ',')
10060 error (_("Too few arguments."));
10061 else if (VEC_empty (linespec_sals, canonical_start.sals))
10062 error (_("Could not find location of the beginning of the range."));
10063
10064 lsal_start = VEC_index (linespec_sals, canonical_start.sals, 0);
10065
10066 if (VEC_length (linespec_sals, canonical_start.sals) > 1
10067 || lsal_start->sals.nelts != 1)
10068 error (_("Cannot create a ranged breakpoint with multiple locations."));
10069
10070 sal_start = lsal_start->sals.sals[0];
10071 addr_string_start = savestring (arg_start, arg - arg_start);
10072 make_cleanup (xfree, addr_string_start);
10073
10074 arg++; /* Skip the comma. */
10075 arg = skip_spaces (arg);
10076
10077 /* Parse the end location. */
10078
10079 init_linespec_result (&canonical_end);
10080 arg_start = arg;
10081
10082 /* We call decode_line_full directly here instead of using
10083 parse_breakpoint_sals because we need to specify the start location's
10084 symtab and line as the default symtab and line for the end of the
10085 range. This makes it possible to have ranges like "foo.c:27, +14",
10086 where +14 means 14 lines from the start location. */
10087 decode_line_full (&arg, DECODE_LINE_FUNFIRSTLINE,
10088 sal_start.symtab, sal_start.line,
10089 &canonical_end, NULL, NULL);
10090
10091 make_cleanup_destroy_linespec_result (&canonical_end);
10092
10093 if (VEC_empty (linespec_sals, canonical_end.sals))
10094 error (_("Could not find location of the end of the range."));
10095
10096 lsal_end = VEC_index (linespec_sals, canonical_end.sals, 0);
10097 if (VEC_length (linespec_sals, canonical_end.sals) > 1
10098 || lsal_end->sals.nelts != 1)
10099 error (_("Cannot create a ranged breakpoint with multiple locations."));
10100
10101 sal_end = lsal_end->sals.sals[0];
10102 addr_string_end = savestring (arg_start, arg - arg_start);
10103 make_cleanup (xfree, addr_string_end);
10104
10105 end = find_breakpoint_range_end (sal_end);
10106 if (sal_start.pc > end)
10107 error (_("Invalid address range, end precedes start."));
10108
10109 length = end - sal_start.pc + 1;
10110 if (length < 0)
10111 /* Length overflowed. */
10112 error (_("Address range too large."));
10113 else if (length == 1)
10114 {
10115 /* This range is simple enough to be handled by
10116 the `hbreak' command. */
10117 hbreak_command (addr_string_start, 1);
10118
10119 do_cleanups (cleanup_bkpt);
10120
10121 return;
10122 }
10123
10124 /* Now set up the breakpoint. */
10125 b = set_raw_breakpoint (get_current_arch (), sal_start,
10126 bp_hardware_breakpoint, &ranged_breakpoint_ops);
10127 set_breakpoint_count (breakpoint_count + 1);
10128 b->number = breakpoint_count;
10129 b->disposition = disp_donttouch;
10130 b->addr_string = xstrdup (addr_string_start);
10131 b->addr_string_range_end = xstrdup (addr_string_end);
10132 b->loc->length = length;
10133
10134 do_cleanups (cleanup_bkpt);
10135
10136 mention (b);
10137 observer_notify_breakpoint_created (b);
10138 update_global_location_list (1);
10139 }
10140
10141 /* Return non-zero if EXP is verified as constant. Returned zero
10142 means EXP is variable. Also the constant detection may fail for
10143 some constant expressions and in such case still falsely return
10144 zero. */
10145
10146 static int
10147 watchpoint_exp_is_const (const struct expression *exp)
10148 {
10149 int i = exp->nelts;
10150
10151 while (i > 0)
10152 {
10153 int oplenp, argsp;
10154
10155 /* We are only interested in the descriptor of each element. */
10156 operator_length (exp, i, &oplenp, &argsp);
10157 i -= oplenp;
10158
10159 switch (exp->elts[i].opcode)
10160 {
10161 case BINOP_ADD:
10162 case BINOP_SUB:
10163 case BINOP_MUL:
10164 case BINOP_DIV:
10165 case BINOP_REM:
10166 case BINOP_MOD:
10167 case BINOP_LSH:
10168 case BINOP_RSH:
10169 case BINOP_LOGICAL_AND:
10170 case BINOP_LOGICAL_OR:
10171 case BINOP_BITWISE_AND:
10172 case BINOP_BITWISE_IOR:
10173 case BINOP_BITWISE_XOR:
10174 case BINOP_EQUAL:
10175 case BINOP_NOTEQUAL:
10176 case BINOP_LESS:
10177 case BINOP_GTR:
10178 case BINOP_LEQ:
10179 case BINOP_GEQ:
10180 case BINOP_REPEAT:
10181 case BINOP_COMMA:
10182 case BINOP_EXP:
10183 case BINOP_MIN:
10184 case BINOP_MAX:
10185 case BINOP_INTDIV:
10186 case BINOP_CONCAT:
10187 case BINOP_IN:
10188 case BINOP_RANGE:
10189 case TERNOP_COND:
10190 case TERNOP_SLICE:
10191
10192 case OP_LONG:
10193 case OP_DOUBLE:
10194 case OP_DECFLOAT:
10195 case OP_LAST:
10196 case OP_COMPLEX:
10197 case OP_STRING:
10198 case OP_ARRAY:
10199 case OP_TYPE:
10200 case OP_TYPEOF:
10201 case OP_DECLTYPE:
10202 case OP_NAME:
10203 case OP_OBJC_NSSTRING:
10204
10205 case UNOP_NEG:
10206 case UNOP_LOGICAL_NOT:
10207 case UNOP_COMPLEMENT:
10208 case UNOP_ADDR:
10209 case UNOP_HIGH:
10210 case UNOP_CAST:
10211
10212 case UNOP_CAST_TYPE:
10213 case UNOP_REINTERPRET_CAST:
10214 case UNOP_DYNAMIC_CAST:
10215 /* Unary, binary and ternary operators: We have to check
10216 their operands. If they are constant, then so is the
10217 result of that operation. For instance, if A and B are
10218 determined to be constants, then so is "A + B".
10219
10220 UNOP_IND is one exception to the rule above, because the
10221 value of *ADDR is not necessarily a constant, even when
10222 ADDR is. */
10223 break;
10224
10225 case OP_VAR_VALUE:
10226 /* Check whether the associated symbol is a constant.
10227
10228 We use SYMBOL_CLASS rather than TYPE_CONST because it's
10229 possible that a buggy compiler could mark a variable as
10230 constant even when it is not, and TYPE_CONST would return
10231 true in this case, while SYMBOL_CLASS wouldn't.
10232
10233 We also have to check for function symbols because they
10234 are always constant. */
10235 {
10236 struct symbol *s = exp->elts[i + 2].symbol;
10237
10238 if (SYMBOL_CLASS (s) != LOC_BLOCK
10239 && SYMBOL_CLASS (s) != LOC_CONST
10240 && SYMBOL_CLASS (s) != LOC_CONST_BYTES)
10241 return 0;
10242 break;
10243 }
10244
10245 /* The default action is to return 0 because we are using
10246 the optimistic approach here: If we don't know something,
10247 then it is not a constant. */
10248 default:
10249 return 0;
10250 }
10251 }
10252
10253 return 1;
10254 }
10255
10256 /* Implement the "dtor" breakpoint_ops method for watchpoints. */
10257
10258 static void
10259 dtor_watchpoint (struct breakpoint *self)
10260 {
10261 struct watchpoint *w = (struct watchpoint *) self;
10262
10263 xfree (w->cond_exp);
10264 xfree (w->exp);
10265 xfree (w->exp_string);
10266 xfree (w->exp_string_reparse);
10267 value_free (w->val);
10268
10269 base_breakpoint_ops.dtor (self);
10270 }
10271
10272 /* Implement the "re_set" breakpoint_ops method for watchpoints. */
10273
10274 static void
10275 re_set_watchpoint (struct breakpoint *b)
10276 {
10277 struct watchpoint *w = (struct watchpoint *) b;
10278
10279 /* Watchpoint can be either on expression using entirely global
10280 variables, or it can be on local variables.
10281
10282 Watchpoints of the first kind are never auto-deleted, and even
10283 persist across program restarts. Since they can use variables
10284 from shared libraries, we need to reparse expression as libraries
10285 are loaded and unloaded.
10286
10287 Watchpoints on local variables can also change meaning as result
10288 of solib event. For example, if a watchpoint uses both a local
10289 and a global variables in expression, it's a local watchpoint,
10290 but unloading of a shared library will make the expression
10291 invalid. This is not a very common use case, but we still
10292 re-evaluate expression, to avoid surprises to the user.
10293
10294 Note that for local watchpoints, we re-evaluate it only if
10295 watchpoints frame id is still valid. If it's not, it means the
10296 watchpoint is out of scope and will be deleted soon. In fact,
10297 I'm not sure we'll ever be called in this case.
10298
10299 If a local watchpoint's frame id is still valid, then
10300 w->exp_valid_block is likewise valid, and we can safely use it.
10301
10302 Don't do anything about disabled watchpoints, since they will be
10303 reevaluated again when enabled. */
10304 update_watchpoint (w, 1 /* reparse */);
10305 }
10306
10307 /* Implement the "insert" breakpoint_ops method for hardware watchpoints. */
10308
10309 static int
10310 insert_watchpoint (struct bp_location *bl)
10311 {
10312 struct watchpoint *w = (struct watchpoint *) bl->owner;
10313 int length = w->exact ? 1 : bl->length;
10314
10315 return target_insert_watchpoint (bl->address, length, bl->watchpoint_type,
10316 w->cond_exp);
10317 }
10318
10319 /* Implement the "remove" breakpoint_ops method for hardware watchpoints. */
10320
10321 static int
10322 remove_watchpoint (struct bp_location *bl)
10323 {
10324 struct watchpoint *w = (struct watchpoint *) bl->owner;
10325 int length = w->exact ? 1 : bl->length;
10326
10327 return target_remove_watchpoint (bl->address, length, bl->watchpoint_type,
10328 w->cond_exp);
10329 }
10330
10331 static int
10332 breakpoint_hit_watchpoint (const struct bp_location *bl,
10333 struct address_space *aspace, CORE_ADDR bp_addr,
10334 const struct target_waitstatus *ws)
10335 {
10336 struct breakpoint *b = bl->owner;
10337 struct watchpoint *w = (struct watchpoint *) b;
10338
10339 /* Continuable hardware watchpoints are treated as non-existent if the
10340 reason we stopped wasn't a hardware watchpoint (we didn't stop on
10341 some data address). Otherwise gdb won't stop on a break instruction
10342 in the code (not from a breakpoint) when a hardware watchpoint has
10343 been defined. Also skip watchpoints which we know did not trigger
10344 (did not match the data address). */
10345 if (is_hardware_watchpoint (b)
10346 && w->watchpoint_triggered == watch_triggered_no)
10347 return 0;
10348
10349 return 1;
10350 }
10351
10352 static void
10353 check_status_watchpoint (bpstat bs)
10354 {
10355 gdb_assert (is_watchpoint (bs->breakpoint_at));
10356
10357 bpstat_check_watchpoint (bs);
10358 }
10359
10360 /* Implement the "resources_needed" breakpoint_ops method for
10361 hardware watchpoints. */
10362
10363 static int
10364 resources_needed_watchpoint (const struct bp_location *bl)
10365 {
10366 struct watchpoint *w = (struct watchpoint *) bl->owner;
10367 int length = w->exact? 1 : bl->length;
10368
10369 return target_region_ok_for_hw_watchpoint (bl->address, length);
10370 }
10371
10372 /* Implement the "works_in_software_mode" breakpoint_ops method for
10373 hardware watchpoints. */
10374
10375 static int
10376 works_in_software_mode_watchpoint (const struct breakpoint *b)
10377 {
10378 /* Read and access watchpoints only work with hardware support. */
10379 return b->type == bp_watchpoint || b->type == bp_hardware_watchpoint;
10380 }
10381
10382 static enum print_stop_action
10383 print_it_watchpoint (bpstat bs)
10384 {
10385 struct cleanup *old_chain;
10386 struct breakpoint *b;
10387 const struct bp_location *bl;
10388 struct ui_file *stb;
10389 enum print_stop_action result;
10390 struct watchpoint *w;
10391 struct ui_out *uiout = current_uiout;
10392
10393 gdb_assert (bs->bp_location_at != NULL);
10394
10395 bl = bs->bp_location_at;
10396 b = bs->breakpoint_at;
10397 w = (struct watchpoint *) b;
10398
10399 stb = mem_fileopen ();
10400 old_chain = make_cleanup_ui_file_delete (stb);
10401
10402 switch (b->type)
10403 {
10404 case bp_watchpoint:
10405 case bp_hardware_watchpoint:
10406 annotate_watchpoint (b->number);
10407 if (ui_out_is_mi_like_p (uiout))
10408 ui_out_field_string
10409 (uiout, "reason",
10410 async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
10411 mention (b);
10412 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
10413 ui_out_text (uiout, "\nOld value = ");
10414 watchpoint_value_print (bs->old_val, stb);
10415 ui_out_field_stream (uiout, "old", stb);
10416 ui_out_text (uiout, "\nNew value = ");
10417 watchpoint_value_print (w->val, stb);
10418 ui_out_field_stream (uiout, "new", stb);
10419 ui_out_text (uiout, "\n");
10420 /* More than one watchpoint may have been triggered. */
10421 result = PRINT_UNKNOWN;
10422 break;
10423
10424 case bp_read_watchpoint:
10425 if (ui_out_is_mi_like_p (uiout))
10426 ui_out_field_string
10427 (uiout, "reason",
10428 async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
10429 mention (b);
10430 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
10431 ui_out_text (uiout, "\nValue = ");
10432 watchpoint_value_print (w->val, stb);
10433 ui_out_field_stream (uiout, "value", stb);
10434 ui_out_text (uiout, "\n");
10435 result = PRINT_UNKNOWN;
10436 break;
10437
10438 case bp_access_watchpoint:
10439 if (bs->old_val != NULL)
10440 {
10441 annotate_watchpoint (b->number);
10442 if (ui_out_is_mi_like_p (uiout))
10443 ui_out_field_string
10444 (uiout, "reason",
10445 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
10446 mention (b);
10447 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
10448 ui_out_text (uiout, "\nOld value = ");
10449 watchpoint_value_print (bs->old_val, stb);
10450 ui_out_field_stream (uiout, "old", stb);
10451 ui_out_text (uiout, "\nNew value = ");
10452 }
10453 else
10454 {
10455 mention (b);
10456 if (ui_out_is_mi_like_p (uiout))
10457 ui_out_field_string
10458 (uiout, "reason",
10459 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
10460 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
10461 ui_out_text (uiout, "\nValue = ");
10462 }
10463 watchpoint_value_print (w->val, stb);
10464 ui_out_field_stream (uiout, "new", stb);
10465 ui_out_text (uiout, "\n");
10466 result = PRINT_UNKNOWN;
10467 break;
10468 default:
10469 result = PRINT_UNKNOWN;
10470 }
10471
10472 do_cleanups (old_chain);
10473 return result;
10474 }
10475
10476 /* Implement the "print_mention" breakpoint_ops method for hardware
10477 watchpoints. */
10478
10479 static void
10480 print_mention_watchpoint (struct breakpoint *b)
10481 {
10482 struct cleanup *ui_out_chain;
10483 struct watchpoint *w = (struct watchpoint *) b;
10484 struct ui_out *uiout = current_uiout;
10485
10486 switch (b->type)
10487 {
10488 case bp_watchpoint:
10489 ui_out_text (uiout, "Watchpoint ");
10490 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
10491 break;
10492 case bp_hardware_watchpoint:
10493 ui_out_text (uiout, "Hardware watchpoint ");
10494 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
10495 break;
10496 case bp_read_watchpoint:
10497 ui_out_text (uiout, "Hardware read watchpoint ");
10498 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt");
10499 break;
10500 case bp_access_watchpoint:
10501 ui_out_text (uiout, "Hardware access (read/write) watchpoint ");
10502 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt");
10503 break;
10504 default:
10505 internal_error (__FILE__, __LINE__,
10506 _("Invalid hardware watchpoint type."));
10507 }
10508
10509 ui_out_field_int (uiout, "number", b->number);
10510 ui_out_text (uiout, ": ");
10511 ui_out_field_string (uiout, "exp", w->exp_string);
10512 do_cleanups (ui_out_chain);
10513 }
10514
10515 /* Implement the "print_recreate" breakpoint_ops method for
10516 watchpoints. */
10517
10518 static void
10519 print_recreate_watchpoint (struct breakpoint *b, struct ui_file *fp)
10520 {
10521 struct watchpoint *w = (struct watchpoint *) b;
10522
10523 switch (b->type)
10524 {
10525 case bp_watchpoint:
10526 case bp_hardware_watchpoint:
10527 fprintf_unfiltered (fp, "watch");
10528 break;
10529 case bp_read_watchpoint:
10530 fprintf_unfiltered (fp, "rwatch");
10531 break;
10532 case bp_access_watchpoint:
10533 fprintf_unfiltered (fp, "awatch");
10534 break;
10535 default:
10536 internal_error (__FILE__, __LINE__,
10537 _("Invalid watchpoint type."));
10538 }
10539
10540 fprintf_unfiltered (fp, " %s", w->exp_string);
10541 print_recreate_thread (b, fp);
10542 }
10543
10544 /* The breakpoint_ops structure to be used in hardware watchpoints. */
10545
10546 static struct breakpoint_ops watchpoint_breakpoint_ops;
10547
10548 /* Implement the "insert" breakpoint_ops method for
10549 masked hardware watchpoints. */
10550
10551 static int
10552 insert_masked_watchpoint (struct bp_location *bl)
10553 {
10554 struct watchpoint *w = (struct watchpoint *) bl->owner;
10555
10556 return target_insert_mask_watchpoint (bl->address, w->hw_wp_mask,
10557 bl->watchpoint_type);
10558 }
10559
10560 /* Implement the "remove" breakpoint_ops method for
10561 masked hardware watchpoints. */
10562
10563 static int
10564 remove_masked_watchpoint (struct bp_location *bl)
10565 {
10566 struct watchpoint *w = (struct watchpoint *) bl->owner;
10567
10568 return target_remove_mask_watchpoint (bl->address, w->hw_wp_mask,
10569 bl->watchpoint_type);
10570 }
10571
10572 /* Implement the "resources_needed" breakpoint_ops method for
10573 masked hardware watchpoints. */
10574
10575 static int
10576 resources_needed_masked_watchpoint (const struct bp_location *bl)
10577 {
10578 struct watchpoint *w = (struct watchpoint *) bl->owner;
10579
10580 return target_masked_watch_num_registers (bl->address, w->hw_wp_mask);
10581 }
10582
10583 /* Implement the "works_in_software_mode" breakpoint_ops method for
10584 masked hardware watchpoints. */
10585
10586 static int
10587 works_in_software_mode_masked_watchpoint (const struct breakpoint *b)
10588 {
10589 return 0;
10590 }
10591
10592 /* Implement the "print_it" breakpoint_ops method for
10593 masked hardware watchpoints. */
10594
10595 static enum print_stop_action
10596 print_it_masked_watchpoint (bpstat bs)
10597 {
10598 struct breakpoint *b = bs->breakpoint_at;
10599 struct ui_out *uiout = current_uiout;
10600
10601 /* Masked watchpoints have only one location. */
10602 gdb_assert (b->loc && b->loc->next == NULL);
10603
10604 switch (b->type)
10605 {
10606 case bp_hardware_watchpoint:
10607 annotate_watchpoint (b->number);
10608 if (ui_out_is_mi_like_p (uiout))
10609 ui_out_field_string
10610 (uiout, "reason",
10611 async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
10612 break;
10613
10614 case bp_read_watchpoint:
10615 if (ui_out_is_mi_like_p (uiout))
10616 ui_out_field_string
10617 (uiout, "reason",
10618 async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
10619 break;
10620
10621 case bp_access_watchpoint:
10622 if (ui_out_is_mi_like_p (uiout))
10623 ui_out_field_string
10624 (uiout, "reason",
10625 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
10626 break;
10627 default:
10628 internal_error (__FILE__, __LINE__,
10629 _("Invalid hardware watchpoint type."));
10630 }
10631
10632 mention (b);
10633 ui_out_text (uiout, _("\n\
10634 Check the underlying instruction at PC for the memory\n\
10635 address and value which triggered this watchpoint.\n"));
10636 ui_out_text (uiout, "\n");
10637
10638 /* More than one watchpoint may have been triggered. */
10639 return PRINT_UNKNOWN;
10640 }
10641
10642 /* Implement the "print_one_detail" breakpoint_ops method for
10643 masked hardware watchpoints. */
10644
10645 static void
10646 print_one_detail_masked_watchpoint (const struct breakpoint *b,
10647 struct ui_out *uiout)
10648 {
10649 struct watchpoint *w = (struct watchpoint *) b;
10650
10651 /* Masked watchpoints have only one location. */
10652 gdb_assert (b->loc && b->loc->next == NULL);
10653
10654 ui_out_text (uiout, "\tmask ");
10655 ui_out_field_core_addr (uiout, "mask", b->loc->gdbarch, w->hw_wp_mask);
10656 ui_out_text (uiout, "\n");
10657 }
10658
10659 /* Implement the "print_mention" breakpoint_ops method for
10660 masked hardware watchpoints. */
10661
10662 static void
10663 print_mention_masked_watchpoint (struct breakpoint *b)
10664 {
10665 struct watchpoint *w = (struct watchpoint *) b;
10666 struct ui_out *uiout = current_uiout;
10667 struct cleanup *ui_out_chain;
10668
10669 switch (b->type)
10670 {
10671 case bp_hardware_watchpoint:
10672 ui_out_text (uiout, "Masked hardware watchpoint ");
10673 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
10674 break;
10675 case bp_read_watchpoint:
10676 ui_out_text (uiout, "Masked hardware read watchpoint ");
10677 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt");
10678 break;
10679 case bp_access_watchpoint:
10680 ui_out_text (uiout, "Masked hardware access (read/write) watchpoint ");
10681 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt");
10682 break;
10683 default:
10684 internal_error (__FILE__, __LINE__,
10685 _("Invalid hardware watchpoint type."));
10686 }
10687
10688 ui_out_field_int (uiout, "number", b->number);
10689 ui_out_text (uiout, ": ");
10690 ui_out_field_string (uiout, "exp", w->exp_string);
10691 do_cleanups (ui_out_chain);
10692 }
10693
10694 /* Implement the "print_recreate" breakpoint_ops method for
10695 masked hardware watchpoints. */
10696
10697 static void
10698 print_recreate_masked_watchpoint (struct breakpoint *b, struct ui_file *fp)
10699 {
10700 struct watchpoint *w = (struct watchpoint *) b;
10701 char tmp[40];
10702
10703 switch (b->type)
10704 {
10705 case bp_hardware_watchpoint:
10706 fprintf_unfiltered (fp, "watch");
10707 break;
10708 case bp_read_watchpoint:
10709 fprintf_unfiltered (fp, "rwatch");
10710 break;
10711 case bp_access_watchpoint:
10712 fprintf_unfiltered (fp, "awatch");
10713 break;
10714 default:
10715 internal_error (__FILE__, __LINE__,
10716 _("Invalid hardware watchpoint type."));
10717 }
10718
10719 sprintf_vma (tmp, w->hw_wp_mask);
10720 fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string, tmp);
10721 print_recreate_thread (b, fp);
10722 }
10723
10724 /* The breakpoint_ops structure to be used in masked hardware watchpoints. */
10725
10726 static struct breakpoint_ops masked_watchpoint_breakpoint_ops;
10727
10728 /* Tell whether the given watchpoint is a masked hardware watchpoint. */
10729
10730 static int
10731 is_masked_watchpoint (const struct breakpoint *b)
10732 {
10733 return b->ops == &masked_watchpoint_breakpoint_ops;
10734 }
10735
10736 /* accessflag: hw_write: watch write,
10737 hw_read: watch read,
10738 hw_access: watch access (read or write) */
10739 static void
10740 watch_command_1 (char *arg, int accessflag, int from_tty,
10741 int just_location, int internal)
10742 {
10743 volatile struct gdb_exception e;
10744 struct breakpoint *b, *scope_breakpoint = NULL;
10745 struct expression *exp;
10746 struct block *exp_valid_block = NULL, *cond_exp_valid_block = NULL;
10747 struct value *val, *mark, *result;
10748 struct frame_info *frame;
10749 char *exp_start = NULL;
10750 char *exp_end = NULL;
10751 char *tok, *end_tok;
10752 int toklen = -1;
10753 char *cond_start = NULL;
10754 char *cond_end = NULL;
10755 enum bptype bp_type;
10756 int thread = -1;
10757 int pc = 0;
10758 /* Flag to indicate whether we are going to use masks for
10759 the hardware watchpoint. */
10760 int use_mask = 0;
10761 CORE_ADDR mask = 0;
10762 struct watchpoint *w;
10763
10764 /* Make sure that we actually have parameters to parse. */
10765 if (arg != NULL && arg[0] != '\0')
10766 {
10767 char *value_start;
10768
10769 /* Look for "parameter value" pairs at the end
10770 of the arguments string. */
10771 for (tok = arg + strlen (arg) - 1; tok > arg; tok--)
10772 {
10773 /* Skip whitespace at the end of the argument list. */
10774 while (tok > arg && (*tok == ' ' || *tok == '\t'))
10775 tok--;
10776
10777 /* Find the beginning of the last token.
10778 This is the value of the parameter. */
10779 while (tok > arg && (*tok != ' ' && *tok != '\t'))
10780 tok--;
10781 value_start = tok + 1;
10782
10783 /* Skip whitespace. */
10784 while (tok > arg && (*tok == ' ' || *tok == '\t'))
10785 tok--;
10786
10787 end_tok = tok;
10788
10789 /* Find the beginning of the second to last token.
10790 This is the parameter itself. */
10791 while (tok > arg && (*tok != ' ' && *tok != '\t'))
10792 tok--;
10793 tok++;
10794 toklen = end_tok - tok + 1;
10795
10796 if (toklen == 6 && !strncmp (tok, "thread", 6))
10797 {
10798 /* At this point we've found a "thread" token, which means
10799 the user is trying to set a watchpoint that triggers
10800 only in a specific thread. */
10801 char *endp;
10802
10803 if (thread != -1)
10804 error(_("You can specify only one thread."));
10805
10806 /* Extract the thread ID from the next token. */
10807 thread = strtol (value_start, &endp, 0);
10808
10809 /* Check if the user provided a valid numeric value for the
10810 thread ID. */
10811 if (*endp != ' ' && *endp != '\t' && *endp != '\0')
10812 error (_("Invalid thread ID specification %s."), value_start);
10813
10814 /* Check if the thread actually exists. */
10815 if (!valid_thread_id (thread))
10816 invalid_thread_id_error (thread);
10817 }
10818 else if (toklen == 4 && !strncmp (tok, "mask", 4))
10819 {
10820 /* We've found a "mask" token, which means the user wants to
10821 create a hardware watchpoint that is going to have the mask
10822 facility. */
10823 struct value *mask_value, *mark;
10824
10825 if (use_mask)
10826 error(_("You can specify only one mask."));
10827
10828 use_mask = just_location = 1;
10829
10830 mark = value_mark ();
10831 mask_value = parse_to_comma_and_eval (&value_start);
10832 mask = value_as_address (mask_value);
10833 value_free_to_mark (mark);
10834 }
10835 else
10836 /* We didn't recognize what we found. We should stop here. */
10837 break;
10838
10839 /* Truncate the string and get rid of the "parameter value" pair before
10840 the arguments string is parsed by the parse_exp_1 function. */
10841 *tok = '\0';
10842 }
10843 }
10844
10845 /* Parse the rest of the arguments. */
10846 innermost_block = NULL;
10847 exp_start = arg;
10848 exp = parse_exp_1 (&arg, 0, 0, 0);
10849 exp_end = arg;
10850 /* Remove trailing whitespace from the expression before saving it.
10851 This makes the eventual display of the expression string a bit
10852 prettier. */
10853 while (exp_end > exp_start && (exp_end[-1] == ' ' || exp_end[-1] == '\t'))
10854 --exp_end;
10855
10856 /* Checking if the expression is not constant. */
10857 if (watchpoint_exp_is_const (exp))
10858 {
10859 int len;
10860
10861 len = exp_end - exp_start;
10862 while (len > 0 && isspace (exp_start[len - 1]))
10863 len--;
10864 error (_("Cannot watch constant value `%.*s'."), len, exp_start);
10865 }
10866
10867 exp_valid_block = innermost_block;
10868 mark = value_mark ();
10869 fetch_subexp_value (exp, &pc, &val, &result, NULL);
10870
10871 if (just_location)
10872 {
10873 int ret;
10874
10875 exp_valid_block = NULL;
10876 val = value_addr (result);
10877 release_value (val);
10878 value_free_to_mark (mark);
10879
10880 if (use_mask)
10881 {
10882 ret = target_masked_watch_num_registers (value_as_address (val),
10883 mask);
10884 if (ret == -1)
10885 error (_("This target does not support masked watchpoints."));
10886 else if (ret == -2)
10887 error (_("Invalid mask or memory region."));
10888 }
10889 }
10890 else if (val != NULL)
10891 release_value (val);
10892
10893 tok = skip_spaces (arg);
10894 end_tok = skip_to_space (tok);
10895
10896 toklen = end_tok - tok;
10897 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
10898 {
10899 struct expression *cond;
10900
10901 innermost_block = NULL;
10902 tok = cond_start = end_tok + 1;
10903 cond = parse_exp_1 (&tok, 0, 0, 0);
10904
10905 /* The watchpoint expression may not be local, but the condition
10906 may still be. E.g.: `watch global if local > 0'. */
10907 cond_exp_valid_block = innermost_block;
10908
10909 xfree (cond);
10910 cond_end = tok;
10911 }
10912 if (*tok)
10913 error (_("Junk at end of command."));
10914
10915 if (accessflag == hw_read)
10916 bp_type = bp_read_watchpoint;
10917 else if (accessflag == hw_access)
10918 bp_type = bp_access_watchpoint;
10919 else
10920 bp_type = bp_hardware_watchpoint;
10921
10922 frame = block_innermost_frame (exp_valid_block);
10923
10924 /* If the expression is "local", then set up a "watchpoint scope"
10925 breakpoint at the point where we've left the scope of the watchpoint
10926 expression. Create the scope breakpoint before the watchpoint, so
10927 that we will encounter it first in bpstat_stop_status. */
10928 if (exp_valid_block && frame)
10929 {
10930 if (frame_id_p (frame_unwind_caller_id (frame)))
10931 {
10932 scope_breakpoint
10933 = create_internal_breakpoint (frame_unwind_caller_arch (frame),
10934 frame_unwind_caller_pc (frame),
10935 bp_watchpoint_scope,
10936 &momentary_breakpoint_ops);
10937
10938 scope_breakpoint->enable_state = bp_enabled;
10939
10940 /* Automatically delete the breakpoint when it hits. */
10941 scope_breakpoint->disposition = disp_del;
10942
10943 /* Only break in the proper frame (help with recursion). */
10944 scope_breakpoint->frame_id = frame_unwind_caller_id (frame);
10945
10946 /* Set the address at which we will stop. */
10947 scope_breakpoint->loc->gdbarch
10948 = frame_unwind_caller_arch (frame);
10949 scope_breakpoint->loc->requested_address
10950 = frame_unwind_caller_pc (frame);
10951 scope_breakpoint->loc->address
10952 = adjust_breakpoint_address (scope_breakpoint->loc->gdbarch,
10953 scope_breakpoint->loc->requested_address,
10954 scope_breakpoint->type);
10955 }
10956 }
10957
10958 /* Now set up the breakpoint. */
10959
10960 w = XCNEW (struct watchpoint);
10961 b = &w->base;
10962 if (use_mask)
10963 init_raw_breakpoint_without_location (b, NULL, bp_type,
10964 &masked_watchpoint_breakpoint_ops);
10965 else
10966 init_raw_breakpoint_without_location (b, NULL, bp_type,
10967 &watchpoint_breakpoint_ops);
10968 b->thread = thread;
10969 b->disposition = disp_donttouch;
10970 b->pspace = current_program_space;
10971 w->exp = exp;
10972 w->exp_valid_block = exp_valid_block;
10973 w->cond_exp_valid_block = cond_exp_valid_block;
10974 if (just_location)
10975 {
10976 struct type *t = value_type (val);
10977 CORE_ADDR addr = value_as_address (val);
10978 char *name;
10979
10980 t = check_typedef (TYPE_TARGET_TYPE (check_typedef (t)));
10981 name = type_to_string (t);
10982
10983 w->exp_string_reparse = xstrprintf ("* (%s *) %s", name,
10984 core_addr_to_string (addr));
10985 xfree (name);
10986
10987 w->exp_string = xstrprintf ("-location %.*s",
10988 (int) (exp_end - exp_start), exp_start);
10989
10990 /* The above expression is in C. */
10991 b->language = language_c;
10992 }
10993 else
10994 w->exp_string = savestring (exp_start, exp_end - exp_start);
10995
10996 if (use_mask)
10997 {
10998 w->hw_wp_mask = mask;
10999 }
11000 else
11001 {
11002 w->val = val;
11003 w->val_valid = 1;
11004 }
11005
11006 if (cond_start)
11007 b->cond_string = savestring (cond_start, cond_end - cond_start);
11008 else
11009 b->cond_string = 0;
11010
11011 if (frame)
11012 {
11013 w->watchpoint_frame = get_frame_id (frame);
11014 w->watchpoint_thread = inferior_ptid;
11015 }
11016 else
11017 {
11018 w->watchpoint_frame = null_frame_id;
11019 w->watchpoint_thread = null_ptid;
11020 }
11021
11022 if (scope_breakpoint != NULL)
11023 {
11024 /* The scope breakpoint is related to the watchpoint. We will
11025 need to act on them together. */
11026 b->related_breakpoint = scope_breakpoint;
11027 scope_breakpoint->related_breakpoint = b;
11028 }
11029
11030 if (!just_location)
11031 value_free_to_mark (mark);
11032
11033 TRY_CATCH (e, RETURN_MASK_ALL)
11034 {
11035 /* Finally update the new watchpoint. This creates the locations
11036 that should be inserted. */
11037 update_watchpoint (w, 1);
11038 }
11039 if (e.reason < 0)
11040 {
11041 delete_breakpoint (b);
11042 throw_exception (e);
11043 }
11044
11045 install_breakpoint (internal, b, 1);
11046 }
11047
11048 /* Return count of debug registers needed to watch the given expression.
11049 If the watchpoint cannot be handled in hardware return zero. */
11050
11051 static int
11052 can_use_hardware_watchpoint (struct value *v)
11053 {
11054 int found_memory_cnt = 0;
11055 struct value *head = v;
11056
11057 /* Did the user specifically forbid us to use hardware watchpoints? */
11058 if (!can_use_hw_watchpoints)
11059 return 0;
11060
11061 /* Make sure that the value of the expression depends only upon
11062 memory contents, and values computed from them within GDB. If we
11063 find any register references or function calls, we can't use a
11064 hardware watchpoint.
11065
11066 The idea here is that evaluating an expression generates a series
11067 of values, one holding the value of every subexpression. (The
11068 expression a*b+c has five subexpressions: a, b, a*b, c, and
11069 a*b+c.) GDB's values hold almost enough information to establish
11070 the criteria given above --- they identify memory lvalues,
11071 register lvalues, computed values, etcetera. So we can evaluate
11072 the expression, and then scan the chain of values that leaves
11073 behind to decide whether we can detect any possible change to the
11074 expression's final value using only hardware watchpoints.
11075
11076 However, I don't think that the values returned by inferior
11077 function calls are special in any way. So this function may not
11078 notice that an expression involving an inferior function call
11079 can't be watched with hardware watchpoints. FIXME. */
11080 for (; v; v = value_next (v))
11081 {
11082 if (VALUE_LVAL (v) == lval_memory)
11083 {
11084 if (v != head && value_lazy (v))
11085 /* A lazy memory lvalue in the chain is one that GDB never
11086 needed to fetch; we either just used its address (e.g.,
11087 `a' in `a.b') or we never needed it at all (e.g., `a'
11088 in `a,b'). This doesn't apply to HEAD; if that is
11089 lazy then it was not readable, but watch it anyway. */
11090 ;
11091 else
11092 {
11093 /* Ahh, memory we actually used! Check if we can cover
11094 it with hardware watchpoints. */
11095 struct type *vtype = check_typedef (value_type (v));
11096
11097 /* We only watch structs and arrays if user asked for it
11098 explicitly, never if they just happen to appear in a
11099 middle of some value chain. */
11100 if (v == head
11101 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
11102 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
11103 {
11104 CORE_ADDR vaddr = value_address (v);
11105 int len;
11106 int num_regs;
11107
11108 len = (target_exact_watchpoints
11109 && is_scalar_type_recursive (vtype))?
11110 1 : TYPE_LENGTH (value_type (v));
11111
11112 num_regs = target_region_ok_for_hw_watchpoint (vaddr, len);
11113 if (!num_regs)
11114 return 0;
11115 else
11116 found_memory_cnt += num_regs;
11117 }
11118 }
11119 }
11120 else if (VALUE_LVAL (v) != not_lval
11121 && deprecated_value_modifiable (v) == 0)
11122 return 0; /* These are values from the history (e.g., $1). */
11123 else if (VALUE_LVAL (v) == lval_register)
11124 return 0; /* Cannot watch a register with a HW watchpoint. */
11125 }
11126
11127 /* The expression itself looks suitable for using a hardware
11128 watchpoint, but give the target machine a chance to reject it. */
11129 return found_memory_cnt;
11130 }
11131
11132 void
11133 watch_command_wrapper (char *arg, int from_tty, int internal)
11134 {
11135 watch_command_1 (arg, hw_write, from_tty, 0, internal);
11136 }
11137
11138 /* A helper function that looks for the "-location" argument and then
11139 calls watch_command_1. */
11140
11141 static void
11142 watch_maybe_just_location (char *arg, int accessflag, int from_tty)
11143 {
11144 int just_location = 0;
11145
11146 if (arg
11147 && (check_for_argument (&arg, "-location", sizeof ("-location") - 1)
11148 || check_for_argument (&arg, "-l", sizeof ("-l") - 1)))
11149 {
11150 arg = skip_spaces (arg);
11151 just_location = 1;
11152 }
11153
11154 watch_command_1 (arg, accessflag, from_tty, just_location, 0);
11155 }
11156
11157 static void
11158 watch_command (char *arg, int from_tty)
11159 {
11160 watch_maybe_just_location (arg, hw_write, from_tty);
11161 }
11162
11163 void
11164 rwatch_command_wrapper (char *arg, int from_tty, int internal)
11165 {
11166 watch_command_1 (arg, hw_read, from_tty, 0, internal);
11167 }
11168
11169 static void
11170 rwatch_command (char *arg, int from_tty)
11171 {
11172 watch_maybe_just_location (arg, hw_read, from_tty);
11173 }
11174
11175 void
11176 awatch_command_wrapper (char *arg, int from_tty, int internal)
11177 {
11178 watch_command_1 (arg, hw_access, from_tty, 0, internal);
11179 }
11180
11181 static void
11182 awatch_command (char *arg, int from_tty)
11183 {
11184 watch_maybe_just_location (arg, hw_access, from_tty);
11185 }
11186 \f
11187
11188 /* Helper routines for the until_command routine in infcmd.c. Here
11189 because it uses the mechanisms of breakpoints. */
11190
11191 struct until_break_command_continuation_args
11192 {
11193 struct breakpoint *breakpoint;
11194 struct breakpoint *breakpoint2;
11195 int thread_num;
11196 };
11197
11198 /* This function is called by fetch_inferior_event via the
11199 cmd_continuation pointer, to complete the until command. It takes
11200 care of cleaning up the temporary breakpoints set up by the until
11201 command. */
11202 static void
11203 until_break_command_continuation (void *arg, int err)
11204 {
11205 struct until_break_command_continuation_args *a = arg;
11206
11207 delete_breakpoint (a->breakpoint);
11208 if (a->breakpoint2)
11209 delete_breakpoint (a->breakpoint2);
11210 delete_longjmp_breakpoint (a->thread_num);
11211 }
11212
11213 void
11214 until_break_command (char *arg, int from_tty, int anywhere)
11215 {
11216 struct symtabs_and_lines sals;
11217 struct symtab_and_line sal;
11218 struct frame_info *frame;
11219 struct gdbarch *frame_gdbarch;
11220 struct frame_id stack_frame_id;
11221 struct frame_id caller_frame_id;
11222 struct breakpoint *breakpoint;
11223 struct breakpoint *breakpoint2 = NULL;
11224 struct cleanup *old_chain;
11225 int thread;
11226 struct thread_info *tp;
11227
11228 clear_proceed_status ();
11229
11230 /* Set a breakpoint where the user wants it and at return from
11231 this function. */
11232
11233 if (last_displayed_sal_is_valid ())
11234 sals = decode_line_1 (&arg, DECODE_LINE_FUNFIRSTLINE,
11235 get_last_displayed_symtab (),
11236 get_last_displayed_line ());
11237 else
11238 sals = decode_line_1 (&arg, DECODE_LINE_FUNFIRSTLINE,
11239 (struct symtab *) NULL, 0);
11240
11241 if (sals.nelts != 1)
11242 error (_("Couldn't get information on specified line."));
11243
11244 sal = sals.sals[0];
11245 xfree (sals.sals); /* malloc'd, so freed. */
11246
11247 if (*arg)
11248 error (_("Junk at end of arguments."));
11249
11250 resolve_sal_pc (&sal);
11251
11252 tp = inferior_thread ();
11253 thread = tp->num;
11254
11255 old_chain = make_cleanup (null_cleanup, NULL);
11256
11257 /* Note linespec handling above invalidates the frame chain.
11258 Installing a breakpoint also invalidates the frame chain (as it
11259 may need to switch threads), so do any frame handling before
11260 that. */
11261
11262 frame = get_selected_frame (NULL);
11263 frame_gdbarch = get_frame_arch (frame);
11264 stack_frame_id = get_stack_frame_id (frame);
11265 caller_frame_id = frame_unwind_caller_id (frame);
11266
11267 /* Keep within the current frame, or in frames called by the current
11268 one. */
11269
11270 if (frame_id_p (caller_frame_id))
11271 {
11272 struct symtab_and_line sal2;
11273
11274 sal2 = find_pc_line (frame_unwind_caller_pc (frame), 0);
11275 sal2.pc = frame_unwind_caller_pc (frame);
11276 breakpoint2 = set_momentary_breakpoint (frame_unwind_caller_arch (frame),
11277 sal2,
11278 caller_frame_id,
11279 bp_until);
11280 make_cleanup_delete_breakpoint (breakpoint2);
11281
11282 set_longjmp_breakpoint (tp, caller_frame_id);
11283 make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
11284 }
11285
11286 /* set_momentary_breakpoint could invalidate FRAME. */
11287 frame = NULL;
11288
11289 if (anywhere)
11290 /* If the user told us to continue until a specified location,
11291 we don't specify a frame at which we need to stop. */
11292 breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
11293 null_frame_id, bp_until);
11294 else
11295 /* Otherwise, specify the selected frame, because we want to stop
11296 only at the very same frame. */
11297 breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
11298 stack_frame_id, bp_until);
11299 make_cleanup_delete_breakpoint (breakpoint);
11300
11301 proceed (-1, GDB_SIGNAL_DEFAULT, 0);
11302
11303 /* If we are running asynchronously, and proceed call above has
11304 actually managed to start the target, arrange for breakpoints to
11305 be deleted when the target stops. Otherwise, we're already
11306 stopped and delete breakpoints via cleanup chain. */
11307
11308 if (target_can_async_p () && is_running (inferior_ptid))
11309 {
11310 struct until_break_command_continuation_args *args;
11311 args = xmalloc (sizeof (*args));
11312
11313 args->breakpoint = breakpoint;
11314 args->breakpoint2 = breakpoint2;
11315 args->thread_num = thread;
11316
11317 discard_cleanups (old_chain);
11318 add_continuation (inferior_thread (),
11319 until_break_command_continuation, args,
11320 xfree);
11321 }
11322 else
11323 do_cleanups (old_chain);
11324 }
11325
11326 /* This function attempts to parse an optional "if <cond>" clause
11327 from the arg string. If one is not found, it returns NULL.
11328
11329 Else, it returns a pointer to the condition string. (It does not
11330 attempt to evaluate the string against a particular block.) And,
11331 it updates arg to point to the first character following the parsed
11332 if clause in the arg string. */
11333
11334 static char *
11335 ep_parse_optional_if_clause (char **arg)
11336 {
11337 char *cond_string;
11338
11339 if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
11340 return NULL;
11341
11342 /* Skip the "if" keyword. */
11343 (*arg) += 2;
11344
11345 /* Skip any extra leading whitespace, and record the start of the
11346 condition string. */
11347 *arg = skip_spaces (*arg);
11348 cond_string = *arg;
11349
11350 /* Assume that the condition occupies the remainder of the arg
11351 string. */
11352 (*arg) += strlen (cond_string);
11353
11354 return cond_string;
11355 }
11356
11357 /* Commands to deal with catching events, such as signals, exceptions,
11358 process start/exit, etc. */
11359
11360 typedef enum
11361 {
11362 catch_fork_temporary, catch_vfork_temporary,
11363 catch_fork_permanent, catch_vfork_permanent
11364 }
11365 catch_fork_kind;
11366
11367 static void
11368 catch_fork_command_1 (char *arg, int from_tty,
11369 struct cmd_list_element *command)
11370 {
11371 struct gdbarch *gdbarch = get_current_arch ();
11372 char *cond_string = NULL;
11373 catch_fork_kind fork_kind;
11374 int tempflag;
11375
11376 fork_kind = (catch_fork_kind) (uintptr_t) get_cmd_context (command);
11377 tempflag = (fork_kind == catch_fork_temporary
11378 || fork_kind == catch_vfork_temporary);
11379
11380 if (!arg)
11381 arg = "";
11382 arg = skip_spaces (arg);
11383
11384 /* The allowed syntax is:
11385 catch [v]fork
11386 catch [v]fork if <cond>
11387
11388 First, check if there's an if clause. */
11389 cond_string = ep_parse_optional_if_clause (&arg);
11390
11391 if ((*arg != '\0') && !isspace (*arg))
11392 error (_("Junk at end of arguments."));
11393
11394 /* If this target supports it, create a fork or vfork catchpoint
11395 and enable reporting of such events. */
11396 switch (fork_kind)
11397 {
11398 case catch_fork_temporary:
11399 case catch_fork_permanent:
11400 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
11401 &catch_fork_breakpoint_ops);
11402 break;
11403 case catch_vfork_temporary:
11404 case catch_vfork_permanent:
11405 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
11406 &catch_vfork_breakpoint_ops);
11407 break;
11408 default:
11409 error (_("unsupported or unknown fork kind; cannot catch it"));
11410 break;
11411 }
11412 }
11413
11414 static void
11415 catch_exec_command_1 (char *arg, int from_tty,
11416 struct cmd_list_element *command)
11417 {
11418 struct exec_catchpoint *c;
11419 struct gdbarch *gdbarch = get_current_arch ();
11420 int tempflag;
11421 char *cond_string = NULL;
11422
11423 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11424
11425 if (!arg)
11426 arg = "";
11427 arg = skip_spaces (arg);
11428
11429 /* The allowed syntax is:
11430 catch exec
11431 catch exec if <cond>
11432
11433 First, check if there's an if clause. */
11434 cond_string = ep_parse_optional_if_clause (&arg);
11435
11436 if ((*arg != '\0') && !isspace (*arg))
11437 error (_("Junk at end of arguments."));
11438
11439 c = XNEW (struct exec_catchpoint);
11440 init_catchpoint (&c->base, gdbarch, tempflag, cond_string,
11441 &catch_exec_breakpoint_ops);
11442 c->exec_pathname = NULL;
11443
11444 install_breakpoint (0, &c->base, 1);
11445 }
11446
11447 static enum print_stop_action
11448 print_it_exception_catchpoint (bpstat bs)
11449 {
11450 struct ui_out *uiout = current_uiout;
11451 struct breakpoint *b = bs->breakpoint_at;
11452 int bp_temp, bp_throw;
11453
11454 annotate_catchpoint (b->number);
11455
11456 bp_throw = strstr (b->addr_string, "throw") != NULL;
11457 if (b->loc->address != b->loc->requested_address)
11458 breakpoint_adjustment_warning (b->loc->requested_address,
11459 b->loc->address,
11460 b->number, 1);
11461 bp_temp = b->disposition == disp_del;
11462 ui_out_text (uiout,
11463 bp_temp ? "Temporary catchpoint "
11464 : "Catchpoint ");
11465 if (!ui_out_is_mi_like_p (uiout))
11466 ui_out_field_int (uiout, "bkptno", b->number);
11467 ui_out_text (uiout,
11468 bp_throw ? " (exception thrown), "
11469 : " (exception caught), ");
11470 if (ui_out_is_mi_like_p (uiout))
11471 {
11472 ui_out_field_string (uiout, "reason",
11473 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11474 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11475 ui_out_field_int (uiout, "bkptno", b->number);
11476 }
11477 return PRINT_SRC_AND_LOC;
11478 }
11479
11480 static void
11481 print_one_exception_catchpoint (struct breakpoint *b,
11482 struct bp_location **last_loc)
11483 {
11484 struct value_print_options opts;
11485 struct ui_out *uiout = current_uiout;
11486
11487 get_user_print_options (&opts);
11488 if (opts.addressprint)
11489 {
11490 annotate_field (4);
11491 if (b->loc == NULL || b->loc->shlib_disabled)
11492 ui_out_field_string (uiout, "addr", "<PENDING>");
11493 else
11494 ui_out_field_core_addr (uiout, "addr",
11495 b->loc->gdbarch, b->loc->address);
11496 }
11497 annotate_field (5);
11498 if (b->loc)
11499 *last_loc = b->loc;
11500 if (strstr (b->addr_string, "throw") != NULL)
11501 ui_out_field_string (uiout, "what", "exception throw");
11502 else
11503 ui_out_field_string (uiout, "what", "exception catch");
11504 }
11505
11506 static void
11507 print_mention_exception_catchpoint (struct breakpoint *b)
11508 {
11509 struct ui_out *uiout = current_uiout;
11510 int bp_temp;
11511 int bp_throw;
11512
11513 bp_temp = b->disposition == disp_del;
11514 bp_throw = strstr (b->addr_string, "throw") != NULL;
11515 ui_out_text (uiout, bp_temp ? _("Temporary catchpoint ")
11516 : _("Catchpoint "));
11517 ui_out_field_int (uiout, "bkptno", b->number);
11518 ui_out_text (uiout, bp_throw ? _(" (throw)")
11519 : _(" (catch)"));
11520 }
11521
11522 /* Implement the "print_recreate" breakpoint_ops method for throw and
11523 catch catchpoints. */
11524
11525 static void
11526 print_recreate_exception_catchpoint (struct breakpoint *b,
11527 struct ui_file *fp)
11528 {
11529 int bp_temp;
11530 int bp_throw;
11531
11532 bp_temp = b->disposition == disp_del;
11533 bp_throw = strstr (b->addr_string, "throw") != NULL;
11534 fprintf_unfiltered (fp, bp_temp ? "tcatch " : "catch ");
11535 fprintf_unfiltered (fp, bp_throw ? "throw" : "catch");
11536 print_recreate_thread (b, fp);
11537 }
11538
11539 static struct breakpoint_ops gnu_v3_exception_catchpoint_ops;
11540
11541 static int
11542 handle_gnu_v3_exceptions (int tempflag, char *cond_string,
11543 enum exception_event_kind ex_event, int from_tty)
11544 {
11545 char *trigger_func_name;
11546
11547 if (ex_event == EX_EVENT_CATCH)
11548 trigger_func_name = "__cxa_begin_catch";
11549 else
11550 trigger_func_name = "__cxa_throw";
11551
11552 create_breakpoint (get_current_arch (),
11553 trigger_func_name, cond_string, -1, NULL,
11554 0 /* condition and thread are valid. */,
11555 tempflag, bp_breakpoint,
11556 0,
11557 AUTO_BOOLEAN_TRUE /* pending */,
11558 &gnu_v3_exception_catchpoint_ops, from_tty,
11559 1 /* enabled */,
11560 0 /* internal */,
11561 0);
11562
11563 return 1;
11564 }
11565
11566 /* Deal with "catch catch" and "catch throw" commands. */
11567
11568 static void
11569 catch_exception_command_1 (enum exception_event_kind ex_event, char *arg,
11570 int tempflag, int from_tty)
11571 {
11572 char *cond_string = NULL;
11573
11574 if (!arg)
11575 arg = "";
11576 arg = skip_spaces (arg);
11577
11578 cond_string = ep_parse_optional_if_clause (&arg);
11579
11580 if ((*arg != '\0') && !isspace (*arg))
11581 error (_("Junk at end of arguments."));
11582
11583 if (ex_event != EX_EVENT_THROW
11584 && ex_event != EX_EVENT_CATCH)
11585 error (_("Unsupported or unknown exception event; cannot catch it"));
11586
11587 if (handle_gnu_v3_exceptions (tempflag, cond_string, ex_event, from_tty))
11588 return;
11589
11590 warning (_("Unsupported with this platform/compiler combination."));
11591 }
11592
11593 /* Implementation of "catch catch" command. */
11594
11595 static void
11596 catch_catch_command (char *arg, int from_tty, struct cmd_list_element *command)
11597 {
11598 int tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11599
11600 catch_exception_command_1 (EX_EVENT_CATCH, arg, tempflag, from_tty);
11601 }
11602
11603 /* Implementation of "catch throw" command. */
11604
11605 static void
11606 catch_throw_command (char *arg, int from_tty, struct cmd_list_element *command)
11607 {
11608 int tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11609
11610 catch_exception_command_1 (EX_EVENT_THROW, arg, tempflag, from_tty);
11611 }
11612
11613 void
11614 init_ada_exception_breakpoint (struct breakpoint *b,
11615 struct gdbarch *gdbarch,
11616 struct symtab_and_line sal,
11617 char *addr_string,
11618 const struct breakpoint_ops *ops,
11619 int tempflag,
11620 int from_tty)
11621 {
11622 if (from_tty)
11623 {
11624 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
11625 if (!loc_gdbarch)
11626 loc_gdbarch = gdbarch;
11627
11628 describe_other_breakpoints (loc_gdbarch,
11629 sal.pspace, sal.pc, sal.section, -1);
11630 /* FIXME: brobecker/2006-12-28: Actually, re-implement a special
11631 version for exception catchpoints, because two catchpoints
11632 used for different exception names will use the same address.
11633 In this case, a "breakpoint ... also set at..." warning is
11634 unproductive. Besides, the warning phrasing is also a bit
11635 inappropriate, we should use the word catchpoint, and tell
11636 the user what type of catchpoint it is. The above is good
11637 enough for now, though. */
11638 }
11639
11640 init_raw_breakpoint (b, gdbarch, sal, bp_breakpoint, ops);
11641
11642 b->enable_state = bp_enabled;
11643 b->disposition = tempflag ? disp_del : disp_donttouch;
11644 b->addr_string = addr_string;
11645 b->language = language_ada;
11646 }
11647
11648 /* Splits the argument using space as delimiter. Returns an xmalloc'd
11649 filter list, or NULL if no filtering is required. */
11650 static VEC(int) *
11651 catch_syscall_split_args (char *arg)
11652 {
11653 VEC(int) *result = NULL;
11654 struct cleanup *cleanup = make_cleanup (VEC_cleanup (int), &result);
11655
11656 while (*arg != '\0')
11657 {
11658 int i, syscall_number;
11659 char *endptr;
11660 char cur_name[128];
11661 struct syscall s;
11662
11663 /* Skip whitespace. */
11664 while (isspace (*arg))
11665 arg++;
11666
11667 for (i = 0; i < 127 && arg[i] && !isspace (arg[i]); ++i)
11668 cur_name[i] = arg[i];
11669 cur_name[i] = '\0';
11670 arg += i;
11671
11672 /* Check if the user provided a syscall name or a number. */
11673 syscall_number = (int) strtol (cur_name, &endptr, 0);
11674 if (*endptr == '\0')
11675 get_syscall_by_number (syscall_number, &s);
11676 else
11677 {
11678 /* We have a name. Let's check if it's valid and convert it
11679 to a number. */
11680 get_syscall_by_name (cur_name, &s);
11681
11682 if (s.number == UNKNOWN_SYSCALL)
11683 /* Here we have to issue an error instead of a warning,
11684 because GDB cannot do anything useful if there's no
11685 syscall number to be caught. */
11686 error (_("Unknown syscall name '%s'."), cur_name);
11687 }
11688
11689 /* Ok, it's valid. */
11690 VEC_safe_push (int, result, s.number);
11691 }
11692
11693 discard_cleanups (cleanup);
11694 return result;
11695 }
11696
11697 /* Implement the "catch syscall" command. */
11698
11699 static void
11700 catch_syscall_command_1 (char *arg, int from_tty,
11701 struct cmd_list_element *command)
11702 {
11703 int tempflag;
11704 VEC(int) *filter;
11705 struct syscall s;
11706 struct gdbarch *gdbarch = get_current_arch ();
11707
11708 /* Checking if the feature if supported. */
11709 if (gdbarch_get_syscall_number_p (gdbarch) == 0)
11710 error (_("The feature 'catch syscall' is not supported on \
11711 this architecture yet."));
11712
11713 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11714
11715 arg = skip_spaces (arg);
11716
11717 /* We need to do this first "dummy" translation in order
11718 to get the syscall XML file loaded or, most important,
11719 to display a warning to the user if there's no XML file
11720 for his/her architecture. */
11721 get_syscall_by_number (0, &s);
11722
11723 /* The allowed syntax is:
11724 catch syscall
11725 catch syscall <name | number> [<name | number> ... <name | number>]
11726
11727 Let's check if there's a syscall name. */
11728
11729 if (arg != NULL)
11730 filter = catch_syscall_split_args (arg);
11731 else
11732 filter = NULL;
11733
11734 create_syscall_event_catchpoint (tempflag, filter,
11735 &catch_syscall_breakpoint_ops);
11736 }
11737
11738 static void
11739 catch_command (char *arg, int from_tty)
11740 {
11741 error (_("Catch requires an event name."));
11742 }
11743 \f
11744
11745 static void
11746 tcatch_command (char *arg, int from_tty)
11747 {
11748 error (_("Catch requires an event name."));
11749 }
11750
11751 /* A qsort comparison function that sorts breakpoints in order. */
11752
11753 static int
11754 compare_breakpoints (const void *a, const void *b)
11755 {
11756 const breakpoint_p *ba = a;
11757 uintptr_t ua = (uintptr_t) *ba;
11758 const breakpoint_p *bb = b;
11759 uintptr_t ub = (uintptr_t) *bb;
11760
11761 if ((*ba)->number < (*bb)->number)
11762 return -1;
11763 else if ((*ba)->number > (*bb)->number)
11764 return 1;
11765
11766 /* Now sort by address, in case we see, e..g, two breakpoints with
11767 the number 0. */
11768 if (ua < ub)
11769 return -1;
11770 return ub > ub ? 1 : 0;
11771 }
11772
11773 /* Delete breakpoints by address or line. */
11774
11775 static void
11776 clear_command (char *arg, int from_tty)
11777 {
11778 struct breakpoint *b, *prev;
11779 VEC(breakpoint_p) *found = 0;
11780 int ix;
11781 int default_match;
11782 struct symtabs_and_lines sals;
11783 struct symtab_and_line sal;
11784 int i;
11785 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
11786
11787 if (arg)
11788 {
11789 sals = decode_line_with_current_source (arg,
11790 (DECODE_LINE_FUNFIRSTLINE
11791 | DECODE_LINE_LIST_MODE));
11792 default_match = 0;
11793 }
11794 else
11795 {
11796 sals.sals = (struct symtab_and_line *)
11797 xmalloc (sizeof (struct symtab_and_line));
11798 make_cleanup (xfree, sals.sals);
11799 init_sal (&sal); /* Initialize to zeroes. */
11800
11801 /* Set sal's line, symtab, pc, and pspace to the values
11802 corresponding to the last call to print_frame_info. If the
11803 codepoint is not valid, this will set all the fields to 0. */
11804 get_last_displayed_sal (&sal);
11805 if (sal.symtab == 0)
11806 error (_("No source file specified."));
11807
11808 sals.sals[0] = sal;
11809 sals.nelts = 1;
11810
11811 default_match = 1;
11812 }
11813
11814 /* We don't call resolve_sal_pc here. That's not as bad as it
11815 seems, because all existing breakpoints typically have both
11816 file/line and pc set. So, if clear is given file/line, we can
11817 match this to existing breakpoint without obtaining pc at all.
11818
11819 We only support clearing given the address explicitly
11820 present in breakpoint table. Say, we've set breakpoint
11821 at file:line. There were several PC values for that file:line,
11822 due to optimization, all in one block.
11823
11824 We've picked one PC value. If "clear" is issued with another
11825 PC corresponding to the same file:line, the breakpoint won't
11826 be cleared. We probably can still clear the breakpoint, but
11827 since the other PC value is never presented to user, user
11828 can only find it by guessing, and it does not seem important
11829 to support that. */
11830
11831 /* For each line spec given, delete bps which correspond to it. Do
11832 it in two passes, solely to preserve the current behavior that
11833 from_tty is forced true if we delete more than one
11834 breakpoint. */
11835
11836 found = NULL;
11837 make_cleanup (VEC_cleanup (breakpoint_p), &found);
11838 for (i = 0; i < sals.nelts; i++)
11839 {
11840 int is_abs, sal_name_len;
11841
11842 /* If exact pc given, clear bpts at that pc.
11843 If line given (pc == 0), clear all bpts on specified line.
11844 If defaulting, clear all bpts on default line
11845 or at default pc.
11846
11847 defaulting sal.pc != 0 tests to do
11848
11849 0 1 pc
11850 1 1 pc _and_ line
11851 0 0 line
11852 1 0 <can't happen> */
11853
11854 sal = sals.sals[i];
11855 is_abs = sal.symtab == NULL ? 1 : IS_ABSOLUTE_PATH (sal.symtab->filename);
11856 sal_name_len = is_abs ? 0 : strlen (sal.symtab->filename);
11857
11858 /* Find all matching breakpoints and add them to 'found'. */
11859 ALL_BREAKPOINTS (b)
11860 {
11861 int match = 0;
11862 /* Are we going to delete b? */
11863 if (b->type != bp_none && !is_watchpoint (b))
11864 {
11865 struct bp_location *loc = b->loc;
11866 for (; loc; loc = loc->next)
11867 {
11868 /* If the user specified file:line, don't allow a PC
11869 match. This matches historical gdb behavior. */
11870 int pc_match = (!sal.explicit_line
11871 && sal.pc
11872 && (loc->pspace == sal.pspace)
11873 && (loc->address == sal.pc)
11874 && (!section_is_overlay (loc->section)
11875 || loc->section == sal.section));
11876 int line_match = 0;
11877
11878 if ((default_match || sal.explicit_line)
11879 && loc->source_file != NULL
11880 && sal.symtab != NULL
11881 && sal.pspace == loc->pspace
11882 && loc->line_number == sal.line)
11883 {
11884 if (filename_cmp (loc->source_file,
11885 sal.symtab->filename) == 0)
11886 line_match = 1;
11887 else if (!IS_ABSOLUTE_PATH (sal.symtab->filename)
11888 && compare_filenames_for_search (loc->source_file,
11889 sal.symtab->filename,
11890 sal_name_len))
11891 line_match = 1;
11892 }
11893
11894 if (pc_match || line_match)
11895 {
11896 match = 1;
11897 break;
11898 }
11899 }
11900 }
11901
11902 if (match)
11903 VEC_safe_push(breakpoint_p, found, b);
11904 }
11905 }
11906
11907 /* Now go thru the 'found' chain and delete them. */
11908 if (VEC_empty(breakpoint_p, found))
11909 {
11910 if (arg)
11911 error (_("No breakpoint at %s."), arg);
11912 else
11913 error (_("No breakpoint at this line."));
11914 }
11915
11916 /* Remove duplicates from the vec. */
11917 qsort (VEC_address (breakpoint_p, found),
11918 VEC_length (breakpoint_p, found),
11919 sizeof (breakpoint_p),
11920 compare_breakpoints);
11921 prev = VEC_index (breakpoint_p, found, 0);
11922 for (ix = 1; VEC_iterate (breakpoint_p, found, ix, b); ++ix)
11923 {
11924 if (b == prev)
11925 {
11926 VEC_ordered_remove (breakpoint_p, found, ix);
11927 --ix;
11928 }
11929 }
11930
11931 if (VEC_length(breakpoint_p, found) > 1)
11932 from_tty = 1; /* Always report if deleted more than one. */
11933 if (from_tty)
11934 {
11935 if (VEC_length(breakpoint_p, found) == 1)
11936 printf_unfiltered (_("Deleted breakpoint "));
11937 else
11938 printf_unfiltered (_("Deleted breakpoints "));
11939 }
11940 breakpoints_changed ();
11941
11942 for (ix = 0; VEC_iterate(breakpoint_p, found, ix, b); ix++)
11943 {
11944 if (from_tty)
11945 printf_unfiltered ("%d ", b->number);
11946 delete_breakpoint (b);
11947 }
11948 if (from_tty)
11949 putchar_unfiltered ('\n');
11950
11951 do_cleanups (cleanups);
11952 }
11953 \f
11954 /* Delete breakpoint in BS if they are `delete' breakpoints and
11955 all breakpoints that are marked for deletion, whether hit or not.
11956 This is called after any breakpoint is hit, or after errors. */
11957
11958 void
11959 breakpoint_auto_delete (bpstat bs)
11960 {
11961 struct breakpoint *b, *b_tmp;
11962
11963 for (; bs; bs = bs->next)
11964 if (bs->breakpoint_at
11965 && bs->breakpoint_at->disposition == disp_del
11966 && bs->stop)
11967 delete_breakpoint (bs->breakpoint_at);
11968
11969 ALL_BREAKPOINTS_SAFE (b, b_tmp)
11970 {
11971 if (b->disposition == disp_del_at_next_stop)
11972 delete_breakpoint (b);
11973 }
11974 }
11975
11976 /* A comparison function for bp_location AP and BP being interfaced to
11977 qsort. Sort elements primarily by their ADDRESS (no matter what
11978 does breakpoint_address_is_meaningful say for its OWNER),
11979 secondarily by ordering first bp_permanent OWNERed elements and
11980 terciarily just ensuring the array is sorted stable way despite
11981 qsort being an unstable algorithm. */
11982
11983 static int
11984 bp_location_compare (const void *ap, const void *bp)
11985 {
11986 struct bp_location *a = *(void **) ap;
11987 struct bp_location *b = *(void **) bp;
11988 /* A and B come from existing breakpoints having non-NULL OWNER. */
11989 int a_perm = a->owner->enable_state == bp_permanent;
11990 int b_perm = b->owner->enable_state == bp_permanent;
11991
11992 if (a->address != b->address)
11993 return (a->address > b->address) - (a->address < b->address);
11994
11995 /* Sort locations at the same address by their pspace number, keeping
11996 locations of the same inferior (in a multi-inferior environment)
11997 grouped. */
11998
11999 if (a->pspace->num != b->pspace->num)
12000 return ((a->pspace->num > b->pspace->num)
12001 - (a->pspace->num < b->pspace->num));
12002
12003 /* Sort permanent breakpoints first. */
12004 if (a_perm != b_perm)
12005 return (a_perm < b_perm) - (a_perm > b_perm);
12006
12007 /* Make the internal GDB representation stable across GDB runs
12008 where A and B memory inside GDB can differ. Breakpoint locations of
12009 the same type at the same address can be sorted in arbitrary order. */
12010
12011 if (a->owner->number != b->owner->number)
12012 return ((a->owner->number > b->owner->number)
12013 - (a->owner->number < b->owner->number));
12014
12015 return (a > b) - (a < b);
12016 }
12017
12018 /* Set bp_location_placed_address_before_address_max and
12019 bp_location_shadow_len_after_address_max according to the current
12020 content of the bp_location array. */
12021
12022 static void
12023 bp_location_target_extensions_update (void)
12024 {
12025 struct bp_location *bl, **blp_tmp;
12026
12027 bp_location_placed_address_before_address_max = 0;
12028 bp_location_shadow_len_after_address_max = 0;
12029
12030 ALL_BP_LOCATIONS (bl, blp_tmp)
12031 {
12032 CORE_ADDR start, end, addr;
12033
12034 if (!bp_location_has_shadow (bl))
12035 continue;
12036
12037 start = bl->target_info.placed_address;
12038 end = start + bl->target_info.shadow_len;
12039
12040 gdb_assert (bl->address >= start);
12041 addr = bl->address - start;
12042 if (addr > bp_location_placed_address_before_address_max)
12043 bp_location_placed_address_before_address_max = addr;
12044
12045 /* Zero SHADOW_LEN would not pass bp_location_has_shadow. */
12046
12047 gdb_assert (bl->address < end);
12048 addr = end - bl->address;
12049 if (addr > bp_location_shadow_len_after_address_max)
12050 bp_location_shadow_len_after_address_max = addr;
12051 }
12052 }
12053
12054 /* Download tracepoint locations if they haven't been. */
12055
12056 static void
12057 download_tracepoint_locations (void)
12058 {
12059 struct bp_location *bl, **blp_tmp;
12060 struct cleanup *old_chain;
12061
12062 if (!target_can_download_tracepoint ())
12063 return;
12064
12065 old_chain = save_current_space_and_thread ();
12066
12067 ALL_BP_LOCATIONS (bl, blp_tmp)
12068 {
12069 struct tracepoint *t;
12070
12071 if (!is_tracepoint (bl->owner))
12072 continue;
12073
12074 if ((bl->owner->type == bp_fast_tracepoint
12075 ? !may_insert_fast_tracepoints
12076 : !may_insert_tracepoints))
12077 continue;
12078
12079 /* In tracepoint, locations are _never_ duplicated, so
12080 should_be_inserted is equivalent to
12081 unduplicated_should_be_inserted. */
12082 if (!should_be_inserted (bl) || bl->inserted)
12083 continue;
12084
12085 switch_to_program_space_and_thread (bl->pspace);
12086
12087 target_download_tracepoint (bl);
12088
12089 bl->inserted = 1;
12090 t = (struct tracepoint *) bl->owner;
12091 t->number_on_target = bl->owner->number;
12092 }
12093
12094 do_cleanups (old_chain);
12095 }
12096
12097 /* Swap the insertion/duplication state between two locations. */
12098
12099 static void
12100 swap_insertion (struct bp_location *left, struct bp_location *right)
12101 {
12102 const int left_inserted = left->inserted;
12103 const int left_duplicate = left->duplicate;
12104 const int left_needs_update = left->needs_update;
12105 const struct bp_target_info left_target_info = left->target_info;
12106
12107 /* Locations of tracepoints can never be duplicated. */
12108 if (is_tracepoint (left->owner))
12109 gdb_assert (!left->duplicate);
12110 if (is_tracepoint (right->owner))
12111 gdb_assert (!right->duplicate);
12112
12113 left->inserted = right->inserted;
12114 left->duplicate = right->duplicate;
12115 left->needs_update = right->needs_update;
12116 left->target_info = right->target_info;
12117 right->inserted = left_inserted;
12118 right->duplicate = left_duplicate;
12119 right->needs_update = left_needs_update;
12120 right->target_info = left_target_info;
12121 }
12122
12123 /* Force the re-insertion of the locations at ADDRESS. This is called
12124 once a new/deleted/modified duplicate location is found and we are evaluating
12125 conditions on the target's side. Such conditions need to be updated on
12126 the target. */
12127
12128 static void
12129 force_breakpoint_reinsertion (struct bp_location *bl)
12130 {
12131 struct bp_location **locp = NULL, **loc2p;
12132 struct bp_location *loc;
12133 CORE_ADDR address = 0;
12134 int pspace_num;
12135
12136 address = bl->address;
12137 pspace_num = bl->pspace->num;
12138
12139 /* This is only meaningful if the target is
12140 evaluating conditions and if the user has
12141 opted for condition evaluation on the target's
12142 side. */
12143 if (gdb_evaluates_breakpoint_condition_p ()
12144 || !target_supports_evaluation_of_breakpoint_conditions ())
12145 return;
12146
12147 /* Flag all breakpoint locations with this address and
12148 the same program space as the location
12149 as "its condition has changed". We need to
12150 update the conditions on the target's side. */
12151 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, address)
12152 {
12153 loc = *loc2p;
12154
12155 if (!is_breakpoint (loc->owner)
12156 || pspace_num != loc->pspace->num)
12157 continue;
12158
12159 /* Flag the location appropriately. We use a different state to
12160 let everyone know that we already updated the set of locations
12161 with addr bl->address and program space bl->pspace. This is so
12162 we don't have to keep calling these functions just to mark locations
12163 that have already been marked. */
12164 loc->condition_changed = condition_updated;
12165
12166 /* Free the agent expression bytecode as well. We will compute
12167 it later on. */
12168 if (loc->cond_bytecode)
12169 {
12170 free_agent_expr (loc->cond_bytecode);
12171 loc->cond_bytecode = NULL;
12172 }
12173 }
12174 }
12175
12176 /* If SHOULD_INSERT is false, do not insert any breakpoint locations
12177 into the inferior, only remove already-inserted locations that no
12178 longer should be inserted. Functions that delete a breakpoint or
12179 breakpoints should pass false, so that deleting a breakpoint
12180 doesn't have the side effect of inserting the locations of other
12181 breakpoints that are marked not-inserted, but should_be_inserted
12182 returns true on them.
12183
12184 This behaviour is useful is situations close to tear-down -- e.g.,
12185 after an exec, while the target still has execution, but breakpoint
12186 shadows of the previous executable image should *NOT* be restored
12187 to the new image; or before detaching, where the target still has
12188 execution and wants to delete breakpoints from GDB's lists, and all
12189 breakpoints had already been removed from the inferior. */
12190
12191 static void
12192 update_global_location_list (int should_insert)
12193 {
12194 struct breakpoint *b;
12195 struct bp_location **locp, *loc;
12196 struct cleanup *cleanups;
12197 /* Last breakpoint location address that was marked for update. */
12198 CORE_ADDR last_addr = 0;
12199 /* Last breakpoint location program space that was marked for update. */
12200 int last_pspace_num = -1;
12201
12202 /* Used in the duplicates detection below. When iterating over all
12203 bp_locations, points to the first bp_location of a given address.
12204 Breakpoints and watchpoints of different types are never
12205 duplicates of each other. Keep one pointer for each type of
12206 breakpoint/watchpoint, so we only need to loop over all locations
12207 once. */
12208 struct bp_location *bp_loc_first; /* breakpoint */
12209 struct bp_location *wp_loc_first; /* hardware watchpoint */
12210 struct bp_location *awp_loc_first; /* access watchpoint */
12211 struct bp_location *rwp_loc_first; /* read watchpoint */
12212
12213 /* Saved former bp_location array which we compare against the newly
12214 built bp_location from the current state of ALL_BREAKPOINTS. */
12215 struct bp_location **old_location, **old_locp;
12216 unsigned old_location_count;
12217
12218 old_location = bp_location;
12219 old_location_count = bp_location_count;
12220 bp_location = NULL;
12221 bp_location_count = 0;
12222 cleanups = make_cleanup (xfree, old_location);
12223
12224 ALL_BREAKPOINTS (b)
12225 for (loc = b->loc; loc; loc = loc->next)
12226 bp_location_count++;
12227
12228 bp_location = xmalloc (sizeof (*bp_location) * bp_location_count);
12229 locp = bp_location;
12230 ALL_BREAKPOINTS (b)
12231 for (loc = b->loc; loc; loc = loc->next)
12232 *locp++ = loc;
12233 qsort (bp_location, bp_location_count, sizeof (*bp_location),
12234 bp_location_compare);
12235
12236 bp_location_target_extensions_update ();
12237
12238 /* Identify bp_location instances that are no longer present in the
12239 new list, and therefore should be freed. Note that it's not
12240 necessary that those locations should be removed from inferior --
12241 if there's another location at the same address (previously
12242 marked as duplicate), we don't need to remove/insert the
12243 location.
12244
12245 LOCP is kept in sync with OLD_LOCP, each pointing to the current
12246 and former bp_location array state respectively. */
12247
12248 locp = bp_location;
12249 for (old_locp = old_location; old_locp < old_location + old_location_count;
12250 old_locp++)
12251 {
12252 struct bp_location *old_loc = *old_locp;
12253 struct bp_location **loc2p;
12254
12255 /* Tells if 'old_loc' is found among the new locations. If
12256 not, we have to free it. */
12257 int found_object = 0;
12258 /* Tells if the location should remain inserted in the target. */
12259 int keep_in_target = 0;
12260 int removed = 0;
12261
12262 /* Skip LOCP entries which will definitely never be needed.
12263 Stop either at or being the one matching OLD_LOC. */
12264 while (locp < bp_location + bp_location_count
12265 && (*locp)->address < old_loc->address)
12266 locp++;
12267
12268 for (loc2p = locp;
12269 (loc2p < bp_location + bp_location_count
12270 && (*loc2p)->address == old_loc->address);
12271 loc2p++)
12272 {
12273 /* Check if this is a new/duplicated location or a duplicated
12274 location that had its condition modified. If so, we want to send
12275 its condition to the target if evaluation of conditions is taking
12276 place there. */
12277 if ((*loc2p)->condition_changed == condition_modified
12278 && (last_addr != old_loc->address
12279 || last_pspace_num != old_loc->pspace->num))
12280 {
12281 force_breakpoint_reinsertion (*loc2p);
12282 last_pspace_num = old_loc->pspace->num;
12283 }
12284
12285 if (*loc2p == old_loc)
12286 found_object = 1;
12287 }
12288
12289 /* We have already handled this address, update it so that we don't
12290 have to go through updates again. */
12291 last_addr = old_loc->address;
12292
12293 /* Target-side condition evaluation: Handle deleted locations. */
12294 if (!found_object)
12295 force_breakpoint_reinsertion (old_loc);
12296
12297 /* If this location is no longer present, and inserted, look if
12298 there's maybe a new location at the same address. If so,
12299 mark that one inserted, and don't remove this one. This is
12300 needed so that we don't have a time window where a breakpoint
12301 at certain location is not inserted. */
12302
12303 if (old_loc->inserted)
12304 {
12305 /* If the location is inserted now, we might have to remove
12306 it. */
12307
12308 if (found_object && should_be_inserted (old_loc))
12309 {
12310 /* The location is still present in the location list,
12311 and still should be inserted. Don't do anything. */
12312 keep_in_target = 1;
12313 }
12314 else
12315 {
12316 /* This location still exists, but it won't be kept in the
12317 target since it may have been disabled. We proceed to
12318 remove its target-side condition. */
12319
12320 /* The location is either no longer present, or got
12321 disabled. See if there's another location at the
12322 same address, in which case we don't need to remove
12323 this one from the target. */
12324
12325 /* OLD_LOC comes from existing struct breakpoint. */
12326 if (breakpoint_address_is_meaningful (old_loc->owner))
12327 {
12328 for (loc2p = locp;
12329 (loc2p < bp_location + bp_location_count
12330 && (*loc2p)->address == old_loc->address);
12331 loc2p++)
12332 {
12333 struct bp_location *loc2 = *loc2p;
12334
12335 if (breakpoint_locations_match (loc2, old_loc))
12336 {
12337 /* Read watchpoint locations are switched to
12338 access watchpoints, if the former are not
12339 supported, but the latter are. */
12340 if (is_hardware_watchpoint (old_loc->owner))
12341 {
12342 gdb_assert (is_hardware_watchpoint (loc2->owner));
12343 loc2->watchpoint_type = old_loc->watchpoint_type;
12344 }
12345
12346 /* loc2 is a duplicated location. We need to check
12347 if it should be inserted in case it will be
12348 unduplicated. */
12349 if (loc2 != old_loc
12350 && unduplicated_should_be_inserted (loc2))
12351 {
12352 swap_insertion (old_loc, loc2);
12353 keep_in_target = 1;
12354 break;
12355 }
12356 }
12357 }
12358 }
12359 }
12360
12361 if (!keep_in_target)
12362 {
12363 if (remove_breakpoint (old_loc, mark_uninserted))
12364 {
12365 /* This is just about all we can do. We could keep
12366 this location on the global list, and try to
12367 remove it next time, but there's no particular
12368 reason why we will succeed next time.
12369
12370 Note that at this point, old_loc->owner is still
12371 valid, as delete_breakpoint frees the breakpoint
12372 only after calling us. */
12373 printf_filtered (_("warning: Error removing "
12374 "breakpoint %d\n"),
12375 old_loc->owner->number);
12376 }
12377 removed = 1;
12378 }
12379 }
12380
12381 if (!found_object)
12382 {
12383 if (removed && non_stop
12384 && breakpoint_address_is_meaningful (old_loc->owner)
12385 && !is_hardware_watchpoint (old_loc->owner))
12386 {
12387 /* This location was removed from the target. In
12388 non-stop mode, a race condition is possible where
12389 we've removed a breakpoint, but stop events for that
12390 breakpoint are already queued and will arrive later.
12391 We apply an heuristic to be able to distinguish such
12392 SIGTRAPs from other random SIGTRAPs: we keep this
12393 breakpoint location for a bit, and will retire it
12394 after we see some number of events. The theory here
12395 is that reporting of events should, "on the average",
12396 be fair, so after a while we'll see events from all
12397 threads that have anything of interest, and no longer
12398 need to keep this breakpoint location around. We
12399 don't hold locations forever so to reduce chances of
12400 mistaking a non-breakpoint SIGTRAP for a breakpoint
12401 SIGTRAP.
12402
12403 The heuristic failing can be disastrous on
12404 decr_pc_after_break targets.
12405
12406 On decr_pc_after_break targets, like e.g., x86-linux,
12407 if we fail to recognize a late breakpoint SIGTRAP,
12408 because events_till_retirement has reached 0 too
12409 soon, we'll fail to do the PC adjustment, and report
12410 a random SIGTRAP to the user. When the user resumes
12411 the inferior, it will most likely immediately crash
12412 with SIGILL/SIGBUS/SIGSEGV, or worse, get silently
12413 corrupted, because of being resumed e.g., in the
12414 middle of a multi-byte instruction, or skipped a
12415 one-byte instruction. This was actually seen happen
12416 on native x86-linux, and should be less rare on
12417 targets that do not support new thread events, like
12418 remote, due to the heuristic depending on
12419 thread_count.
12420
12421 Mistaking a random SIGTRAP for a breakpoint trap
12422 causes similar symptoms (PC adjustment applied when
12423 it shouldn't), but then again, playing with SIGTRAPs
12424 behind the debugger's back is asking for trouble.
12425
12426 Since hardware watchpoint traps are always
12427 distinguishable from other traps, so we don't need to
12428 apply keep hardware watchpoint moribund locations
12429 around. We simply always ignore hardware watchpoint
12430 traps we can no longer explain. */
12431
12432 old_loc->events_till_retirement = 3 * (thread_count () + 1);
12433 old_loc->owner = NULL;
12434
12435 VEC_safe_push (bp_location_p, moribund_locations, old_loc);
12436 }
12437 else
12438 {
12439 old_loc->owner = NULL;
12440 decref_bp_location (&old_loc);
12441 }
12442 }
12443 }
12444
12445 /* Rescan breakpoints at the same address and section, marking the
12446 first one as "first" and any others as "duplicates". This is so
12447 that the bpt instruction is only inserted once. If we have a
12448 permanent breakpoint at the same place as BPT, make that one the
12449 official one, and the rest as duplicates. Permanent breakpoints
12450 are sorted first for the same address.
12451
12452 Do the same for hardware watchpoints, but also considering the
12453 watchpoint's type (regular/access/read) and length. */
12454
12455 bp_loc_first = NULL;
12456 wp_loc_first = NULL;
12457 awp_loc_first = NULL;
12458 rwp_loc_first = NULL;
12459 ALL_BP_LOCATIONS (loc, locp)
12460 {
12461 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always
12462 non-NULL. */
12463 struct bp_location **loc_first_p;
12464 b = loc->owner;
12465
12466 if (!should_be_inserted (loc)
12467 || !breakpoint_address_is_meaningful (b)
12468 /* Don't detect duplicate for tracepoint locations because they are
12469 never duplicated. See the comments in field `duplicate' of
12470 `struct bp_location'. */
12471 || is_tracepoint (b))
12472 {
12473 /* Clear the condition modification flag. */
12474 loc->condition_changed = condition_unchanged;
12475 continue;
12476 }
12477
12478 /* Permanent breakpoint should always be inserted. */
12479 if (b->enable_state == bp_permanent && ! loc->inserted)
12480 internal_error (__FILE__, __LINE__,
12481 _("allegedly permanent breakpoint is not "
12482 "actually inserted"));
12483
12484 if (b->type == bp_hardware_watchpoint)
12485 loc_first_p = &wp_loc_first;
12486 else if (b->type == bp_read_watchpoint)
12487 loc_first_p = &rwp_loc_first;
12488 else if (b->type == bp_access_watchpoint)
12489 loc_first_p = &awp_loc_first;
12490 else
12491 loc_first_p = &bp_loc_first;
12492
12493 if (*loc_first_p == NULL
12494 || (overlay_debugging && loc->section != (*loc_first_p)->section)
12495 || !breakpoint_locations_match (loc, *loc_first_p))
12496 {
12497 *loc_first_p = loc;
12498 loc->duplicate = 0;
12499
12500 if (is_breakpoint (loc->owner) && loc->condition_changed)
12501 {
12502 loc->needs_update = 1;
12503 /* Clear the condition modification flag. */
12504 loc->condition_changed = condition_unchanged;
12505 }
12506 continue;
12507 }
12508
12509
12510 /* This and the above ensure the invariant that the first location
12511 is not duplicated, and is the inserted one.
12512 All following are marked as duplicated, and are not inserted. */
12513 if (loc->inserted)
12514 swap_insertion (loc, *loc_first_p);
12515 loc->duplicate = 1;
12516
12517 /* Clear the condition modification flag. */
12518 loc->condition_changed = condition_unchanged;
12519
12520 if ((*loc_first_p)->owner->enable_state == bp_permanent && loc->inserted
12521 && b->enable_state != bp_permanent)
12522 internal_error (__FILE__, __LINE__,
12523 _("another breakpoint was inserted on top of "
12524 "a permanent breakpoint"));
12525 }
12526
12527 if (breakpoints_always_inserted_mode ()
12528 && (have_live_inferiors ()
12529 || (gdbarch_has_global_breakpoints (target_gdbarch))))
12530 {
12531 if (should_insert)
12532 insert_breakpoint_locations ();
12533 else
12534 {
12535 /* Though should_insert is false, we may need to update conditions
12536 on the target's side if it is evaluating such conditions. We
12537 only update conditions for locations that are marked
12538 "needs_update". */
12539 update_inserted_breakpoint_locations ();
12540 }
12541 }
12542
12543 if (should_insert)
12544 download_tracepoint_locations ();
12545
12546 do_cleanups (cleanups);
12547 }
12548
12549 void
12550 breakpoint_retire_moribund (void)
12551 {
12552 struct bp_location *loc;
12553 int ix;
12554
12555 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
12556 if (--(loc->events_till_retirement) == 0)
12557 {
12558 decref_bp_location (&loc);
12559 VEC_unordered_remove (bp_location_p, moribund_locations, ix);
12560 --ix;
12561 }
12562 }
12563
12564 static void
12565 update_global_location_list_nothrow (int inserting)
12566 {
12567 volatile struct gdb_exception e;
12568
12569 TRY_CATCH (e, RETURN_MASK_ERROR)
12570 update_global_location_list (inserting);
12571 }
12572
12573 /* Clear BKP from a BPS. */
12574
12575 static void
12576 bpstat_remove_bp_location (bpstat bps, struct breakpoint *bpt)
12577 {
12578 bpstat bs;
12579
12580 for (bs = bps; bs; bs = bs->next)
12581 if (bs->breakpoint_at == bpt)
12582 {
12583 bs->breakpoint_at = NULL;
12584 bs->old_val = NULL;
12585 /* bs->commands will be freed later. */
12586 }
12587 }
12588
12589 /* Callback for iterate_over_threads. */
12590 static int
12591 bpstat_remove_breakpoint_callback (struct thread_info *th, void *data)
12592 {
12593 struct breakpoint *bpt = data;
12594
12595 bpstat_remove_bp_location (th->control.stop_bpstat, bpt);
12596 return 0;
12597 }
12598
12599 /* Helper for breakpoint and tracepoint breakpoint_ops->mention
12600 callbacks. */
12601
12602 static void
12603 say_where (struct breakpoint *b)
12604 {
12605 struct ui_out *uiout = current_uiout;
12606 struct value_print_options opts;
12607
12608 get_user_print_options (&opts);
12609
12610 /* i18n: cagney/2005-02-11: Below needs to be merged into a
12611 single string. */
12612 if (b->loc == NULL)
12613 {
12614 printf_filtered (_(" (%s) pending."), b->addr_string);
12615 }
12616 else
12617 {
12618 if (opts.addressprint || b->loc->source_file == NULL)
12619 {
12620 printf_filtered (" at ");
12621 fputs_filtered (paddress (b->loc->gdbarch, b->loc->address),
12622 gdb_stdout);
12623 }
12624 if (b->loc->source_file)
12625 {
12626 /* If there is a single location, we can print the location
12627 more nicely. */
12628 if (b->loc->next == NULL)
12629 printf_filtered (": file %s, line %d.",
12630 b->loc->source_file, b->loc->line_number);
12631 else
12632 /* This is not ideal, but each location may have a
12633 different file name, and this at least reflects the
12634 real situation somewhat. */
12635 printf_filtered (": %s.", b->addr_string);
12636 }
12637
12638 if (b->loc->next)
12639 {
12640 struct bp_location *loc = b->loc;
12641 int n = 0;
12642 for (; loc; loc = loc->next)
12643 ++n;
12644 printf_filtered (" (%d locations)", n);
12645 }
12646 }
12647 }
12648
12649 /* Default bp_location_ops methods. */
12650
12651 static void
12652 bp_location_dtor (struct bp_location *self)
12653 {
12654 xfree (self->cond);
12655 if (self->cond_bytecode)
12656 free_agent_expr (self->cond_bytecode);
12657 xfree (self->function_name);
12658 xfree (self->source_file);
12659 }
12660
12661 static const struct bp_location_ops bp_location_ops =
12662 {
12663 bp_location_dtor
12664 };
12665
12666 /* Default breakpoint_ops methods all breakpoint_ops ultimately
12667 inherit from. */
12668
12669 static void
12670 base_breakpoint_dtor (struct breakpoint *self)
12671 {
12672 decref_counted_command_line (&self->commands);
12673 xfree (self->cond_string);
12674 xfree (self->addr_string);
12675 xfree (self->filter);
12676 xfree (self->addr_string_range_end);
12677 }
12678
12679 static struct bp_location *
12680 base_breakpoint_allocate_location (struct breakpoint *self)
12681 {
12682 struct bp_location *loc;
12683
12684 loc = XNEW (struct bp_location);
12685 init_bp_location (loc, &bp_location_ops, self);
12686 return loc;
12687 }
12688
12689 static void
12690 base_breakpoint_re_set (struct breakpoint *b)
12691 {
12692 /* Nothing to re-set. */
12693 }
12694
12695 #define internal_error_pure_virtual_called() \
12696 gdb_assert_not_reached ("pure virtual function called")
12697
12698 static int
12699 base_breakpoint_insert_location (struct bp_location *bl)
12700 {
12701 internal_error_pure_virtual_called ();
12702 }
12703
12704 static int
12705 base_breakpoint_remove_location (struct bp_location *bl)
12706 {
12707 internal_error_pure_virtual_called ();
12708 }
12709
12710 static int
12711 base_breakpoint_breakpoint_hit (const struct bp_location *bl,
12712 struct address_space *aspace,
12713 CORE_ADDR bp_addr,
12714 const struct target_waitstatus *ws)
12715 {
12716 internal_error_pure_virtual_called ();
12717 }
12718
12719 static void
12720 base_breakpoint_check_status (bpstat bs)
12721 {
12722 /* Always stop. */
12723 }
12724
12725 /* A "works_in_software_mode" breakpoint_ops method that just internal
12726 errors. */
12727
12728 static int
12729 base_breakpoint_works_in_software_mode (const struct breakpoint *b)
12730 {
12731 internal_error_pure_virtual_called ();
12732 }
12733
12734 /* A "resources_needed" breakpoint_ops method that just internal
12735 errors. */
12736
12737 static int
12738 base_breakpoint_resources_needed (const struct bp_location *bl)
12739 {
12740 internal_error_pure_virtual_called ();
12741 }
12742
12743 static enum print_stop_action
12744 base_breakpoint_print_it (bpstat bs)
12745 {
12746 internal_error_pure_virtual_called ();
12747 }
12748
12749 static void
12750 base_breakpoint_print_one_detail (const struct breakpoint *self,
12751 struct ui_out *uiout)
12752 {
12753 /* nothing */
12754 }
12755
12756 static void
12757 base_breakpoint_print_mention (struct breakpoint *b)
12758 {
12759 internal_error_pure_virtual_called ();
12760 }
12761
12762 static void
12763 base_breakpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
12764 {
12765 internal_error_pure_virtual_called ();
12766 }
12767
12768 static void
12769 base_breakpoint_create_sals_from_address (char **arg,
12770 struct linespec_result *canonical,
12771 enum bptype type_wanted,
12772 char *addr_start,
12773 char **copy_arg)
12774 {
12775 internal_error_pure_virtual_called ();
12776 }
12777
12778 static void
12779 base_breakpoint_create_breakpoints_sal (struct gdbarch *gdbarch,
12780 struct linespec_result *c,
12781 struct linespec_sals *lsal,
12782 char *cond_string,
12783 char *extra_string,
12784 enum bptype type_wanted,
12785 enum bpdisp disposition,
12786 int thread,
12787 int task, int ignore_count,
12788 const struct breakpoint_ops *o,
12789 int from_tty, int enabled,
12790 int internal, unsigned flags)
12791 {
12792 internal_error_pure_virtual_called ();
12793 }
12794
12795 static void
12796 base_breakpoint_decode_linespec (struct breakpoint *b, char **s,
12797 struct symtabs_and_lines *sals)
12798 {
12799 internal_error_pure_virtual_called ();
12800 }
12801
12802 static struct breakpoint_ops base_breakpoint_ops =
12803 {
12804 base_breakpoint_dtor,
12805 base_breakpoint_allocate_location,
12806 base_breakpoint_re_set,
12807 base_breakpoint_insert_location,
12808 base_breakpoint_remove_location,
12809 base_breakpoint_breakpoint_hit,
12810 base_breakpoint_check_status,
12811 base_breakpoint_resources_needed,
12812 base_breakpoint_works_in_software_mode,
12813 base_breakpoint_print_it,
12814 NULL,
12815 base_breakpoint_print_one_detail,
12816 base_breakpoint_print_mention,
12817 base_breakpoint_print_recreate,
12818 base_breakpoint_create_sals_from_address,
12819 base_breakpoint_create_breakpoints_sal,
12820 base_breakpoint_decode_linespec,
12821 };
12822
12823 /* Default breakpoint_ops methods. */
12824
12825 static void
12826 bkpt_re_set (struct breakpoint *b)
12827 {
12828 /* FIXME: is this still reachable? */
12829 if (b->addr_string == NULL)
12830 {
12831 /* Anything without a string can't be re-set. */
12832 delete_breakpoint (b);
12833 return;
12834 }
12835
12836 breakpoint_re_set_default (b);
12837 }
12838
12839 static int
12840 bkpt_insert_location (struct bp_location *bl)
12841 {
12842 if (bl->loc_type == bp_loc_hardware_breakpoint)
12843 return target_insert_hw_breakpoint (bl->gdbarch,
12844 &bl->target_info);
12845 else
12846 return target_insert_breakpoint (bl->gdbarch,
12847 &bl->target_info);
12848 }
12849
12850 static int
12851 bkpt_remove_location (struct bp_location *bl)
12852 {
12853 if (bl->loc_type == bp_loc_hardware_breakpoint)
12854 return target_remove_hw_breakpoint (bl->gdbarch, &bl->target_info);
12855 else
12856 return target_remove_breakpoint (bl->gdbarch, &bl->target_info);
12857 }
12858
12859 static int
12860 bkpt_breakpoint_hit (const struct bp_location *bl,
12861 struct address_space *aspace, CORE_ADDR bp_addr,
12862 const struct target_waitstatus *ws)
12863 {
12864 struct breakpoint *b = bl->owner;
12865
12866 if (ws->kind != TARGET_WAITKIND_STOPPED
12867 || ws->value.sig != GDB_SIGNAL_TRAP)
12868 return 0;
12869
12870 if (!breakpoint_address_match (bl->pspace->aspace, bl->address,
12871 aspace, bp_addr))
12872 return 0;
12873
12874 if (overlay_debugging /* unmapped overlay section */
12875 && section_is_overlay (bl->section)
12876 && !section_is_mapped (bl->section))
12877 return 0;
12878
12879 return 1;
12880 }
12881
12882 static int
12883 bkpt_resources_needed (const struct bp_location *bl)
12884 {
12885 gdb_assert (bl->owner->type == bp_hardware_breakpoint);
12886
12887 return 1;
12888 }
12889
12890 static enum print_stop_action
12891 bkpt_print_it (bpstat bs)
12892 {
12893 struct breakpoint *b;
12894 const struct bp_location *bl;
12895 int bp_temp;
12896 struct ui_out *uiout = current_uiout;
12897
12898 gdb_assert (bs->bp_location_at != NULL);
12899
12900 bl = bs->bp_location_at;
12901 b = bs->breakpoint_at;
12902
12903 bp_temp = b->disposition == disp_del;
12904 if (bl->address != bl->requested_address)
12905 breakpoint_adjustment_warning (bl->requested_address,
12906 bl->address,
12907 b->number, 1);
12908 annotate_breakpoint (b->number);
12909 if (bp_temp)
12910 ui_out_text (uiout, "\nTemporary breakpoint ");
12911 else
12912 ui_out_text (uiout, "\nBreakpoint ");
12913 if (ui_out_is_mi_like_p (uiout))
12914 {
12915 ui_out_field_string (uiout, "reason",
12916 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12917 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
12918 }
12919 ui_out_field_int (uiout, "bkptno", b->number);
12920 ui_out_text (uiout, ", ");
12921
12922 return PRINT_SRC_AND_LOC;
12923 }
12924
12925 static void
12926 bkpt_print_mention (struct breakpoint *b)
12927 {
12928 if (ui_out_is_mi_like_p (current_uiout))
12929 return;
12930
12931 switch (b->type)
12932 {
12933 case bp_breakpoint:
12934 case bp_gnu_ifunc_resolver:
12935 if (b->disposition == disp_del)
12936 printf_filtered (_("Temporary breakpoint"));
12937 else
12938 printf_filtered (_("Breakpoint"));
12939 printf_filtered (_(" %d"), b->number);
12940 if (b->type == bp_gnu_ifunc_resolver)
12941 printf_filtered (_(" at gnu-indirect-function resolver"));
12942 break;
12943 case bp_hardware_breakpoint:
12944 printf_filtered (_("Hardware assisted breakpoint %d"), b->number);
12945 break;
12946 case bp_dprintf:
12947 printf_filtered (_("Dprintf %d"), b->number);
12948 break;
12949 }
12950
12951 say_where (b);
12952 }
12953
12954 static void
12955 bkpt_print_recreate (struct breakpoint *tp, struct ui_file *fp)
12956 {
12957 if (tp->type == bp_breakpoint && tp->disposition == disp_del)
12958 fprintf_unfiltered (fp, "tbreak");
12959 else if (tp->type == bp_breakpoint)
12960 fprintf_unfiltered (fp, "break");
12961 else if (tp->type == bp_hardware_breakpoint
12962 && tp->disposition == disp_del)
12963 fprintf_unfiltered (fp, "thbreak");
12964 else if (tp->type == bp_hardware_breakpoint)
12965 fprintf_unfiltered (fp, "hbreak");
12966 else
12967 internal_error (__FILE__, __LINE__,
12968 _("unhandled breakpoint type %d"), (int) tp->type);
12969
12970 fprintf_unfiltered (fp, " %s", tp->addr_string);
12971 print_recreate_thread (tp, fp);
12972 }
12973
12974 static void
12975 bkpt_create_sals_from_address (char **arg,
12976 struct linespec_result *canonical,
12977 enum bptype type_wanted,
12978 char *addr_start, char **copy_arg)
12979 {
12980 create_sals_from_address_default (arg, canonical, type_wanted,
12981 addr_start, copy_arg);
12982 }
12983
12984 static void
12985 bkpt_create_breakpoints_sal (struct gdbarch *gdbarch,
12986 struct linespec_result *canonical,
12987 struct linespec_sals *lsal,
12988 char *cond_string,
12989 char *extra_string,
12990 enum bptype type_wanted,
12991 enum bpdisp disposition,
12992 int thread,
12993 int task, int ignore_count,
12994 const struct breakpoint_ops *ops,
12995 int from_tty, int enabled,
12996 int internal, unsigned flags)
12997 {
12998 create_breakpoints_sal_default (gdbarch, canonical, lsal,
12999 cond_string, extra_string,
13000 type_wanted,
13001 disposition, thread, task,
13002 ignore_count, ops, from_tty,
13003 enabled, internal, flags);
13004 }
13005
13006 static void
13007 bkpt_decode_linespec (struct breakpoint *b, char **s,
13008 struct symtabs_and_lines *sals)
13009 {
13010 decode_linespec_default (b, s, sals);
13011 }
13012
13013 /* Virtual table for internal breakpoints. */
13014
13015 static void
13016 internal_bkpt_re_set (struct breakpoint *b)
13017 {
13018 switch (b->type)
13019 {
13020 /* Delete overlay event and longjmp master breakpoints; they
13021 will be reset later by breakpoint_re_set. */
13022 case bp_overlay_event:
13023 case bp_longjmp_master:
13024 case bp_std_terminate_master:
13025 case bp_exception_master:
13026 delete_breakpoint (b);
13027 break;
13028
13029 /* This breakpoint is special, it's set up when the inferior
13030 starts and we really don't want to touch it. */
13031 case bp_shlib_event:
13032
13033 /* Like bp_shlib_event, this breakpoint type is special. Once
13034 it is set up, we do not want to touch it. */
13035 case bp_thread_event:
13036 break;
13037 }
13038 }
13039
13040 static void
13041 internal_bkpt_check_status (bpstat bs)
13042 {
13043 if (bs->breakpoint_at->type == bp_shlib_event)
13044 {
13045 /* If requested, stop when the dynamic linker notifies GDB of
13046 events. This allows the user to get control and place
13047 breakpoints in initializer routines for dynamically loaded
13048 objects (among other things). */
13049 bs->stop = stop_on_solib_events;
13050 bs->print = stop_on_solib_events;
13051 }
13052 else
13053 bs->stop = 0;
13054 }
13055
13056 static enum print_stop_action
13057 internal_bkpt_print_it (bpstat bs)
13058 {
13059 struct ui_out *uiout = current_uiout;
13060 struct breakpoint *b;
13061
13062 b = bs->breakpoint_at;
13063
13064 switch (b->type)
13065 {
13066 case bp_shlib_event:
13067 /* Did we stop because the user set the stop_on_solib_events
13068 variable? (If so, we report this as a generic, "Stopped due
13069 to shlib event" message.) */
13070 print_solib_event (0);
13071 break;
13072
13073 case bp_thread_event:
13074 /* Not sure how we will get here.
13075 GDB should not stop for these breakpoints. */
13076 printf_filtered (_("Thread Event Breakpoint: gdb should not stop!\n"));
13077 break;
13078
13079 case bp_overlay_event:
13080 /* By analogy with the thread event, GDB should not stop for these. */
13081 printf_filtered (_("Overlay Event Breakpoint: gdb should not stop!\n"));
13082 break;
13083
13084 case bp_longjmp_master:
13085 /* These should never be enabled. */
13086 printf_filtered (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
13087 break;
13088
13089 case bp_std_terminate_master:
13090 /* These should never be enabled. */
13091 printf_filtered (_("std::terminate Master Breakpoint: "
13092 "gdb should not stop!\n"));
13093 break;
13094
13095 case bp_exception_master:
13096 /* These should never be enabled. */
13097 printf_filtered (_("Exception Master Breakpoint: "
13098 "gdb should not stop!\n"));
13099 break;
13100 }
13101
13102 return PRINT_NOTHING;
13103 }
13104
13105 static void
13106 internal_bkpt_print_mention (struct breakpoint *b)
13107 {
13108 /* Nothing to mention. These breakpoints are internal. */
13109 }
13110
13111 /* Virtual table for momentary breakpoints */
13112
13113 static void
13114 momentary_bkpt_re_set (struct breakpoint *b)
13115 {
13116 /* Keep temporary breakpoints, which can be encountered when we step
13117 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
13118 Otherwise these should have been blown away via the cleanup chain
13119 or by breakpoint_init_inferior when we rerun the executable. */
13120 }
13121
13122 static void
13123 momentary_bkpt_check_status (bpstat bs)
13124 {
13125 /* Nothing. The point of these breakpoints is causing a stop. */
13126 }
13127
13128 static enum print_stop_action
13129 momentary_bkpt_print_it (bpstat bs)
13130 {
13131 struct ui_out *uiout = current_uiout;
13132
13133 if (ui_out_is_mi_like_p (uiout))
13134 {
13135 struct breakpoint *b = bs->breakpoint_at;
13136
13137 switch (b->type)
13138 {
13139 case bp_finish:
13140 ui_out_field_string
13141 (uiout, "reason",
13142 async_reason_lookup (EXEC_ASYNC_FUNCTION_FINISHED));
13143 break;
13144
13145 case bp_until:
13146 ui_out_field_string
13147 (uiout, "reason",
13148 async_reason_lookup (EXEC_ASYNC_LOCATION_REACHED));
13149 break;
13150 }
13151 }
13152
13153 return PRINT_UNKNOWN;
13154 }
13155
13156 static void
13157 momentary_bkpt_print_mention (struct breakpoint *b)
13158 {
13159 /* Nothing to mention. These breakpoints are internal. */
13160 }
13161
13162 /* Ensure INITIATING_FRAME is cleared when no such breakpoint exists.
13163
13164 It gets cleared already on the removal of the first one of such placed
13165 breakpoints. This is OK as they get all removed altogether. */
13166
13167 static void
13168 longjmp_bkpt_dtor (struct breakpoint *self)
13169 {
13170 struct thread_info *tp = find_thread_id (self->thread);
13171
13172 if (tp)
13173 tp->initiating_frame = null_frame_id;
13174
13175 momentary_breakpoint_ops.dtor (self);
13176 }
13177
13178 /* Specific methods for probe breakpoints. */
13179
13180 static int
13181 bkpt_probe_insert_location (struct bp_location *bl)
13182 {
13183 int v = bkpt_insert_location (bl);
13184
13185 if (v == 0)
13186 {
13187 /* The insertion was successful, now let's set the probe's semaphore
13188 if needed. */
13189 bl->probe->pops->set_semaphore (bl->probe, bl->gdbarch);
13190 }
13191
13192 return v;
13193 }
13194
13195 static int
13196 bkpt_probe_remove_location (struct bp_location *bl)
13197 {
13198 /* Let's clear the semaphore before removing the location. */
13199 bl->probe->pops->clear_semaphore (bl->probe, bl->gdbarch);
13200
13201 return bkpt_remove_location (bl);
13202 }
13203
13204 static void
13205 bkpt_probe_create_sals_from_address (char **arg,
13206 struct linespec_result *canonical,
13207 enum bptype type_wanted,
13208 char *addr_start, char **copy_arg)
13209 {
13210 struct linespec_sals lsal;
13211
13212 lsal.sals = parse_probes (arg, canonical);
13213
13214 *copy_arg = xstrdup (canonical->addr_string);
13215 lsal.canonical = xstrdup (*copy_arg);
13216
13217 VEC_safe_push (linespec_sals, canonical->sals, &lsal);
13218 }
13219
13220 static void
13221 bkpt_probe_decode_linespec (struct breakpoint *b, char **s,
13222 struct symtabs_and_lines *sals)
13223 {
13224 *sals = parse_probes (s, NULL);
13225 if (!sals->sals)
13226 error (_("probe not found"));
13227 }
13228
13229 /* The breakpoint_ops structure to be used in tracepoints. */
13230
13231 static void
13232 tracepoint_re_set (struct breakpoint *b)
13233 {
13234 breakpoint_re_set_default (b);
13235 }
13236
13237 static int
13238 tracepoint_breakpoint_hit (const struct bp_location *bl,
13239 struct address_space *aspace, CORE_ADDR bp_addr,
13240 const struct target_waitstatus *ws)
13241 {
13242 /* By definition, the inferior does not report stops at
13243 tracepoints. */
13244 return 0;
13245 }
13246
13247 static void
13248 tracepoint_print_one_detail (const struct breakpoint *self,
13249 struct ui_out *uiout)
13250 {
13251 struct tracepoint *tp = (struct tracepoint *) self;
13252 if (tp->static_trace_marker_id)
13253 {
13254 gdb_assert (self->type == bp_static_tracepoint);
13255
13256 ui_out_text (uiout, "\tmarker id is ");
13257 ui_out_field_string (uiout, "static-tracepoint-marker-string-id",
13258 tp->static_trace_marker_id);
13259 ui_out_text (uiout, "\n");
13260 }
13261 }
13262
13263 static void
13264 tracepoint_print_mention (struct breakpoint *b)
13265 {
13266 if (ui_out_is_mi_like_p (current_uiout))
13267 return;
13268
13269 switch (b->type)
13270 {
13271 case bp_tracepoint:
13272 printf_filtered (_("Tracepoint"));
13273 printf_filtered (_(" %d"), b->number);
13274 break;
13275 case bp_fast_tracepoint:
13276 printf_filtered (_("Fast tracepoint"));
13277 printf_filtered (_(" %d"), b->number);
13278 break;
13279 case bp_static_tracepoint:
13280 printf_filtered (_("Static tracepoint"));
13281 printf_filtered (_(" %d"), b->number);
13282 break;
13283 default:
13284 internal_error (__FILE__, __LINE__,
13285 _("unhandled tracepoint type %d"), (int) b->type);
13286 }
13287
13288 say_where (b);
13289 }
13290
13291 static void
13292 tracepoint_print_recreate (struct breakpoint *self, struct ui_file *fp)
13293 {
13294 struct tracepoint *tp = (struct tracepoint *) self;
13295
13296 if (self->type == bp_fast_tracepoint)
13297 fprintf_unfiltered (fp, "ftrace");
13298 if (self->type == bp_static_tracepoint)
13299 fprintf_unfiltered (fp, "strace");
13300 else if (self->type == bp_tracepoint)
13301 fprintf_unfiltered (fp, "trace");
13302 else
13303 internal_error (__FILE__, __LINE__,
13304 _("unhandled tracepoint type %d"), (int) self->type);
13305
13306 fprintf_unfiltered (fp, " %s", self->addr_string);
13307 print_recreate_thread (self, fp);
13308
13309 if (tp->pass_count)
13310 fprintf_unfiltered (fp, " passcount %d\n", tp->pass_count);
13311 }
13312
13313 static void
13314 tracepoint_create_sals_from_address (char **arg,
13315 struct linespec_result *canonical,
13316 enum bptype type_wanted,
13317 char *addr_start, char **copy_arg)
13318 {
13319 create_sals_from_address_default (arg, canonical, type_wanted,
13320 addr_start, copy_arg);
13321 }
13322
13323 static void
13324 tracepoint_create_breakpoints_sal (struct gdbarch *gdbarch,
13325 struct linespec_result *canonical,
13326 struct linespec_sals *lsal,
13327 char *cond_string,
13328 char *extra_string,
13329 enum bptype type_wanted,
13330 enum bpdisp disposition,
13331 int thread,
13332 int task, int ignore_count,
13333 const struct breakpoint_ops *ops,
13334 int from_tty, int enabled,
13335 int internal, unsigned flags)
13336 {
13337 create_breakpoints_sal_default (gdbarch, canonical, lsal,
13338 cond_string, extra_string,
13339 type_wanted,
13340 disposition, thread, task,
13341 ignore_count, ops, from_tty,
13342 enabled, internal, flags);
13343 }
13344
13345 static void
13346 tracepoint_decode_linespec (struct breakpoint *b, char **s,
13347 struct symtabs_and_lines *sals)
13348 {
13349 decode_linespec_default (b, s, sals);
13350 }
13351
13352 struct breakpoint_ops tracepoint_breakpoint_ops;
13353
13354 /* The breakpoint_ops structure to be use on tracepoints placed in a
13355 static probe. */
13356
13357 static void
13358 tracepoint_probe_create_sals_from_address (char **arg,
13359 struct linespec_result *canonical,
13360 enum bptype type_wanted,
13361 char *addr_start, char **copy_arg)
13362 {
13363 /* We use the same method for breakpoint on probes. */
13364 bkpt_probe_create_sals_from_address (arg, canonical, type_wanted,
13365 addr_start, copy_arg);
13366 }
13367
13368 static void
13369 tracepoint_probe_decode_linespec (struct breakpoint *b, char **s,
13370 struct symtabs_and_lines *sals)
13371 {
13372 /* We use the same method for breakpoint on probes. */
13373 bkpt_probe_decode_linespec (b, s, sals);
13374 }
13375
13376 static struct breakpoint_ops tracepoint_probe_breakpoint_ops;
13377
13378 /* The breakpoint_ops structure to be used on static tracepoints with
13379 markers (`-m'). */
13380
13381 static void
13382 strace_marker_create_sals_from_address (char **arg,
13383 struct linespec_result *canonical,
13384 enum bptype type_wanted,
13385 char *addr_start, char **copy_arg)
13386 {
13387 struct linespec_sals lsal;
13388
13389 lsal.sals = decode_static_tracepoint_spec (arg);
13390
13391 *copy_arg = savestring (addr_start, *arg - addr_start);
13392
13393 canonical->addr_string = xstrdup (*copy_arg);
13394 lsal.canonical = xstrdup (*copy_arg);
13395 VEC_safe_push (linespec_sals, canonical->sals, &lsal);
13396 }
13397
13398 static void
13399 strace_marker_create_breakpoints_sal (struct gdbarch *gdbarch,
13400 struct linespec_result *canonical,
13401 struct linespec_sals *lsal,
13402 char *cond_string,
13403 char *extra_string,
13404 enum bptype type_wanted,
13405 enum bpdisp disposition,
13406 int thread,
13407 int task, int ignore_count,
13408 const struct breakpoint_ops *ops,
13409 int from_tty, int enabled,
13410 int internal, unsigned flags)
13411 {
13412 int i;
13413
13414 /* If the user is creating a static tracepoint by marker id
13415 (strace -m MARKER_ID), then store the sals index, so that
13416 breakpoint_re_set can try to match up which of the newly
13417 found markers corresponds to this one, and, don't try to
13418 expand multiple locations for each sal, given than SALS
13419 already should contain all sals for MARKER_ID. */
13420
13421 for (i = 0; i < lsal->sals.nelts; ++i)
13422 {
13423 struct symtabs_and_lines expanded;
13424 struct tracepoint *tp;
13425 struct cleanup *old_chain;
13426 char *addr_string;
13427
13428 expanded.nelts = 1;
13429 expanded.sals = &lsal->sals.sals[i];
13430
13431 addr_string = xstrdup (canonical->addr_string);
13432 old_chain = make_cleanup (xfree, addr_string);
13433
13434 tp = XCNEW (struct tracepoint);
13435 init_breakpoint_sal (&tp->base, gdbarch, expanded,
13436 addr_string, NULL,
13437 cond_string, extra_string,
13438 type_wanted, disposition,
13439 thread, task, ignore_count, ops,
13440 from_tty, enabled, internal, flags,
13441 canonical->special_display);
13442 /* Given that its possible to have multiple markers with
13443 the same string id, if the user is creating a static
13444 tracepoint by marker id ("strace -m MARKER_ID"), then
13445 store the sals index, so that breakpoint_re_set can
13446 try to match up which of the newly found markers
13447 corresponds to this one */
13448 tp->static_trace_marker_id_idx = i;
13449
13450 install_breakpoint (internal, &tp->base, 0);
13451
13452 discard_cleanups (old_chain);
13453 }
13454 }
13455
13456 static void
13457 strace_marker_decode_linespec (struct breakpoint *b, char **s,
13458 struct symtabs_and_lines *sals)
13459 {
13460 struct tracepoint *tp = (struct tracepoint *) b;
13461
13462 *sals = decode_static_tracepoint_spec (s);
13463 if (sals->nelts > tp->static_trace_marker_id_idx)
13464 {
13465 sals->sals[0] = sals->sals[tp->static_trace_marker_id_idx];
13466 sals->nelts = 1;
13467 }
13468 else
13469 error (_("marker %s not found"), tp->static_trace_marker_id);
13470 }
13471
13472 static struct breakpoint_ops strace_marker_breakpoint_ops;
13473
13474 static int
13475 strace_marker_p (struct breakpoint *b)
13476 {
13477 return b->ops == &strace_marker_breakpoint_ops;
13478 }
13479
13480 /* Delete a breakpoint and clean up all traces of it in the data
13481 structures. */
13482
13483 void
13484 delete_breakpoint (struct breakpoint *bpt)
13485 {
13486 struct breakpoint *b;
13487
13488 gdb_assert (bpt != NULL);
13489
13490 /* Has this bp already been deleted? This can happen because
13491 multiple lists can hold pointers to bp's. bpstat lists are
13492 especial culprits.
13493
13494 One example of this happening is a watchpoint's scope bp. When
13495 the scope bp triggers, we notice that the watchpoint is out of
13496 scope, and delete it. We also delete its scope bp. But the
13497 scope bp is marked "auto-deleting", and is already on a bpstat.
13498 That bpstat is then checked for auto-deleting bp's, which are
13499 deleted.
13500
13501 A real solution to this problem might involve reference counts in
13502 bp's, and/or giving them pointers back to their referencing
13503 bpstat's, and teaching delete_breakpoint to only free a bp's
13504 storage when no more references were extent. A cheaper bandaid
13505 was chosen. */
13506 if (bpt->type == bp_none)
13507 return;
13508
13509 /* At least avoid this stale reference until the reference counting
13510 of breakpoints gets resolved. */
13511 if (bpt->related_breakpoint != bpt)
13512 {
13513 struct breakpoint *related;
13514 struct watchpoint *w;
13515
13516 if (bpt->type == bp_watchpoint_scope)
13517 w = (struct watchpoint *) bpt->related_breakpoint;
13518 else if (bpt->related_breakpoint->type == bp_watchpoint_scope)
13519 w = (struct watchpoint *) bpt;
13520 else
13521 w = NULL;
13522 if (w != NULL)
13523 watchpoint_del_at_next_stop (w);
13524
13525 /* Unlink bpt from the bpt->related_breakpoint ring. */
13526 for (related = bpt; related->related_breakpoint != bpt;
13527 related = related->related_breakpoint);
13528 related->related_breakpoint = bpt->related_breakpoint;
13529 bpt->related_breakpoint = bpt;
13530 }
13531
13532 /* watch_command_1 creates a watchpoint but only sets its number if
13533 update_watchpoint succeeds in creating its bp_locations. If there's
13534 a problem in that process, we'll be asked to delete the half-created
13535 watchpoint. In that case, don't announce the deletion. */
13536 if (bpt->number)
13537 observer_notify_breakpoint_deleted (bpt);
13538
13539 if (breakpoint_chain == bpt)
13540 breakpoint_chain = bpt->next;
13541
13542 ALL_BREAKPOINTS (b)
13543 if (b->next == bpt)
13544 {
13545 b->next = bpt->next;
13546 break;
13547 }
13548
13549 /* Be sure no bpstat's are pointing at the breakpoint after it's
13550 been freed. */
13551 /* FIXME, how can we find all bpstat's? We just check stop_bpstat
13552 in all threads for now. Note that we cannot just remove bpstats
13553 pointing at bpt from the stop_bpstat list entirely, as breakpoint
13554 commands are associated with the bpstat; if we remove it here,
13555 then the later call to bpstat_do_actions (&stop_bpstat); in
13556 event-top.c won't do anything, and temporary breakpoints with
13557 commands won't work. */
13558
13559 iterate_over_threads (bpstat_remove_breakpoint_callback, bpt);
13560
13561 /* Now that breakpoint is removed from breakpoint list, update the
13562 global location list. This will remove locations that used to
13563 belong to this breakpoint. Do this before freeing the breakpoint
13564 itself, since remove_breakpoint looks at location's owner. It
13565 might be better design to have location completely
13566 self-contained, but it's not the case now. */
13567 update_global_location_list (0);
13568
13569 bpt->ops->dtor (bpt);
13570 /* On the chance that someone will soon try again to delete this
13571 same bp, we mark it as deleted before freeing its storage. */
13572 bpt->type = bp_none;
13573 xfree (bpt);
13574 }
13575
13576 static void
13577 do_delete_breakpoint_cleanup (void *b)
13578 {
13579 delete_breakpoint (b);
13580 }
13581
13582 struct cleanup *
13583 make_cleanup_delete_breakpoint (struct breakpoint *b)
13584 {
13585 return make_cleanup (do_delete_breakpoint_cleanup, b);
13586 }
13587
13588 /* Iterator function to call a user-provided callback function once
13589 for each of B and its related breakpoints. */
13590
13591 static void
13592 iterate_over_related_breakpoints (struct breakpoint *b,
13593 void (*function) (struct breakpoint *,
13594 void *),
13595 void *data)
13596 {
13597 struct breakpoint *related;
13598
13599 related = b;
13600 do
13601 {
13602 struct breakpoint *next;
13603
13604 /* FUNCTION may delete RELATED. */
13605 next = related->related_breakpoint;
13606
13607 if (next == related)
13608 {
13609 /* RELATED is the last ring entry. */
13610 function (related, data);
13611
13612 /* FUNCTION may have deleted it, so we'd never reach back to
13613 B. There's nothing left to do anyway, so just break
13614 out. */
13615 break;
13616 }
13617 else
13618 function (related, data);
13619
13620 related = next;
13621 }
13622 while (related != b);
13623 }
13624
13625 static void
13626 do_delete_breakpoint (struct breakpoint *b, void *ignore)
13627 {
13628 delete_breakpoint (b);
13629 }
13630
13631 /* A callback for map_breakpoint_numbers that calls
13632 delete_breakpoint. */
13633
13634 static void
13635 do_map_delete_breakpoint (struct breakpoint *b, void *ignore)
13636 {
13637 iterate_over_related_breakpoints (b, do_delete_breakpoint, NULL);
13638 }
13639
13640 void
13641 delete_command (char *arg, int from_tty)
13642 {
13643 struct breakpoint *b, *b_tmp;
13644
13645 dont_repeat ();
13646
13647 if (arg == 0)
13648 {
13649 int breaks_to_delete = 0;
13650
13651 /* Delete all breakpoints if no argument. Do not delete
13652 internal breakpoints, these have to be deleted with an
13653 explicit breakpoint number argument. */
13654 ALL_BREAKPOINTS (b)
13655 if (user_breakpoint_p (b))
13656 {
13657 breaks_to_delete = 1;
13658 break;
13659 }
13660
13661 /* Ask user only if there are some breakpoints to delete. */
13662 if (!from_tty
13663 || (breaks_to_delete && query (_("Delete all breakpoints? "))))
13664 {
13665 ALL_BREAKPOINTS_SAFE (b, b_tmp)
13666 if (user_breakpoint_p (b))
13667 delete_breakpoint (b);
13668 }
13669 }
13670 else
13671 map_breakpoint_numbers (arg, do_map_delete_breakpoint, NULL);
13672 }
13673
13674 static int
13675 all_locations_are_pending (struct bp_location *loc)
13676 {
13677 for (; loc; loc = loc->next)
13678 if (!loc->shlib_disabled
13679 && !loc->pspace->executing_startup)
13680 return 0;
13681 return 1;
13682 }
13683
13684 /* Subroutine of update_breakpoint_locations to simplify it.
13685 Return non-zero if multiple fns in list LOC have the same name.
13686 Null names are ignored. */
13687
13688 static int
13689 ambiguous_names_p (struct bp_location *loc)
13690 {
13691 struct bp_location *l;
13692 htab_t htab = htab_create_alloc (13, htab_hash_string,
13693 (int (*) (const void *,
13694 const void *)) streq,
13695 NULL, xcalloc, xfree);
13696
13697 for (l = loc; l != NULL; l = l->next)
13698 {
13699 const char **slot;
13700 const char *name = l->function_name;
13701
13702 /* Allow for some names to be NULL, ignore them. */
13703 if (name == NULL)
13704 continue;
13705
13706 slot = (const char **) htab_find_slot (htab, (const void *) name,
13707 INSERT);
13708 /* NOTE: We can assume slot != NULL here because xcalloc never
13709 returns NULL. */
13710 if (*slot != NULL)
13711 {
13712 htab_delete (htab);
13713 return 1;
13714 }
13715 *slot = name;
13716 }
13717
13718 htab_delete (htab);
13719 return 0;
13720 }
13721
13722 /* When symbols change, it probably means the sources changed as well,
13723 and it might mean the static tracepoint markers are no longer at
13724 the same address or line numbers they used to be at last we
13725 checked. Losing your static tracepoints whenever you rebuild is
13726 undesirable. This function tries to resync/rematch gdb static
13727 tracepoints with the markers on the target, for static tracepoints
13728 that have not been set by marker id. Static tracepoint that have
13729 been set by marker id are reset by marker id in breakpoint_re_set.
13730 The heuristic is:
13731
13732 1) For a tracepoint set at a specific address, look for a marker at
13733 the old PC. If one is found there, assume to be the same marker.
13734 If the name / string id of the marker found is different from the
13735 previous known name, assume that means the user renamed the marker
13736 in the sources, and output a warning.
13737
13738 2) For a tracepoint set at a given line number, look for a marker
13739 at the new address of the old line number. If one is found there,
13740 assume to be the same marker. If the name / string id of the
13741 marker found is different from the previous known name, assume that
13742 means the user renamed the marker in the sources, and output a
13743 warning.
13744
13745 3) If a marker is no longer found at the same address or line, it
13746 may mean the marker no longer exists. But it may also just mean
13747 the code changed a bit. Maybe the user added a few lines of code
13748 that made the marker move up or down (in line number terms). Ask
13749 the target for info about the marker with the string id as we knew
13750 it. If found, update line number and address in the matching
13751 static tracepoint. This will get confused if there's more than one
13752 marker with the same ID (possible in UST, although unadvised
13753 precisely because it confuses tools). */
13754
13755 static struct symtab_and_line
13756 update_static_tracepoint (struct breakpoint *b, struct symtab_and_line sal)
13757 {
13758 struct tracepoint *tp = (struct tracepoint *) b;
13759 struct static_tracepoint_marker marker;
13760 CORE_ADDR pc;
13761
13762 pc = sal.pc;
13763 if (sal.line)
13764 find_line_pc (sal.symtab, sal.line, &pc);
13765
13766 if (target_static_tracepoint_marker_at (pc, &marker))
13767 {
13768 if (strcmp (tp->static_trace_marker_id, marker.str_id) != 0)
13769 warning (_("static tracepoint %d changed probed marker from %s to %s"),
13770 b->number,
13771 tp->static_trace_marker_id, marker.str_id);
13772
13773 xfree (tp->static_trace_marker_id);
13774 tp->static_trace_marker_id = xstrdup (marker.str_id);
13775 release_static_tracepoint_marker (&marker);
13776
13777 return sal;
13778 }
13779
13780 /* Old marker wasn't found on target at lineno. Try looking it up
13781 by string ID. */
13782 if (!sal.explicit_pc
13783 && sal.line != 0
13784 && sal.symtab != NULL
13785 && tp->static_trace_marker_id != NULL)
13786 {
13787 VEC(static_tracepoint_marker_p) *markers;
13788
13789 markers
13790 = target_static_tracepoint_markers_by_strid (tp->static_trace_marker_id);
13791
13792 if (!VEC_empty(static_tracepoint_marker_p, markers))
13793 {
13794 struct symtab_and_line sal2;
13795 struct symbol *sym;
13796 struct static_tracepoint_marker *tpmarker;
13797 struct ui_out *uiout = current_uiout;
13798
13799 tpmarker = VEC_index (static_tracepoint_marker_p, markers, 0);
13800
13801 xfree (tp->static_trace_marker_id);
13802 tp->static_trace_marker_id = xstrdup (tpmarker->str_id);
13803
13804 warning (_("marker for static tracepoint %d (%s) not "
13805 "found at previous line number"),
13806 b->number, tp->static_trace_marker_id);
13807
13808 init_sal (&sal2);
13809
13810 sal2.pc = tpmarker->address;
13811
13812 sal2 = find_pc_line (tpmarker->address, 0);
13813 sym = find_pc_sect_function (tpmarker->address, NULL);
13814 ui_out_text (uiout, "Now in ");
13815 if (sym)
13816 {
13817 ui_out_field_string (uiout, "func",
13818 SYMBOL_PRINT_NAME (sym));
13819 ui_out_text (uiout, " at ");
13820 }
13821 ui_out_field_string (uiout, "file", sal2.symtab->filename);
13822 ui_out_text (uiout, ":");
13823
13824 if (ui_out_is_mi_like_p (uiout))
13825 {
13826 char *fullname = symtab_to_fullname (sal2.symtab);
13827
13828 if (fullname)
13829 ui_out_field_string (uiout, "fullname", fullname);
13830 }
13831
13832 ui_out_field_int (uiout, "line", sal2.line);
13833 ui_out_text (uiout, "\n");
13834
13835 b->loc->line_number = sal2.line;
13836
13837 xfree (b->loc->source_file);
13838 if (sym)
13839 b->loc->source_file = xstrdup (sal2.symtab->filename);
13840 else
13841 b->loc->source_file = NULL;
13842
13843 xfree (b->addr_string);
13844 b->addr_string = xstrprintf ("%s:%d",
13845 sal2.symtab->filename,
13846 b->loc->line_number);
13847
13848 /* Might be nice to check if function changed, and warn if
13849 so. */
13850
13851 release_static_tracepoint_marker (tpmarker);
13852 }
13853 }
13854 return sal;
13855 }
13856
13857 /* Returns 1 iff locations A and B are sufficiently same that
13858 we don't need to report breakpoint as changed. */
13859
13860 static int
13861 locations_are_equal (struct bp_location *a, struct bp_location *b)
13862 {
13863 while (a && b)
13864 {
13865 if (a->address != b->address)
13866 return 0;
13867
13868 if (a->shlib_disabled != b->shlib_disabled)
13869 return 0;
13870
13871 if (a->enabled != b->enabled)
13872 return 0;
13873
13874 a = a->next;
13875 b = b->next;
13876 }
13877
13878 if ((a == NULL) != (b == NULL))
13879 return 0;
13880
13881 return 1;
13882 }
13883
13884 /* Create new breakpoint locations for B (a hardware or software breakpoint)
13885 based on SALS and SALS_END. If SALS_END.NELTS is not zero, then B is
13886 a ranged breakpoint. */
13887
13888 void
13889 update_breakpoint_locations (struct breakpoint *b,
13890 struct symtabs_and_lines sals,
13891 struct symtabs_and_lines sals_end)
13892 {
13893 int i;
13894 struct bp_location *existing_locations = b->loc;
13895
13896 if (sals_end.nelts != 0 && (sals.nelts != 1 || sals_end.nelts != 1))
13897 {
13898 /* Ranged breakpoints have only one start location and one end
13899 location. */
13900 b->enable_state = bp_disabled;
13901 update_global_location_list (1);
13902 printf_unfiltered (_("Could not reset ranged breakpoint %d: "
13903 "multiple locations found\n"),
13904 b->number);
13905 return;
13906 }
13907
13908 /* If there's no new locations, and all existing locations are
13909 pending, don't do anything. This optimizes the common case where
13910 all locations are in the same shared library, that was unloaded.
13911 We'd like to retain the location, so that when the library is
13912 loaded again, we don't loose the enabled/disabled status of the
13913 individual locations. */
13914 if (all_locations_are_pending (existing_locations) && sals.nelts == 0)
13915 return;
13916
13917 b->loc = NULL;
13918
13919 for (i = 0; i < sals.nelts; ++i)
13920 {
13921 struct bp_location *new_loc;
13922
13923 switch_to_program_space_and_thread (sals.sals[i].pspace);
13924
13925 new_loc = add_location_to_breakpoint (b, &(sals.sals[i]));
13926
13927 /* Reparse conditions, they might contain references to the
13928 old symtab. */
13929 if (b->cond_string != NULL)
13930 {
13931 char *s;
13932 volatile struct gdb_exception e;
13933
13934 s = b->cond_string;
13935 TRY_CATCH (e, RETURN_MASK_ERROR)
13936 {
13937 new_loc->cond = parse_exp_1 (&s, sals.sals[i].pc,
13938 block_for_pc (sals.sals[i].pc),
13939 0);
13940 }
13941 if (e.reason < 0)
13942 {
13943 warning (_("failed to reevaluate condition "
13944 "for breakpoint %d: %s"),
13945 b->number, e.message);
13946 new_loc->enabled = 0;
13947 }
13948 }
13949
13950 if (sals_end.nelts)
13951 {
13952 CORE_ADDR end = find_breakpoint_range_end (sals_end.sals[0]);
13953
13954 new_loc->length = end - sals.sals[0].pc + 1;
13955 }
13956 }
13957
13958 /* Update locations of permanent breakpoints. */
13959 if (b->enable_state == bp_permanent)
13960 make_breakpoint_permanent (b);
13961
13962 /* If possible, carry over 'disable' status from existing
13963 breakpoints. */
13964 {
13965 struct bp_location *e = existing_locations;
13966 /* If there are multiple breakpoints with the same function name,
13967 e.g. for inline functions, comparing function names won't work.
13968 Instead compare pc addresses; this is just a heuristic as things
13969 may have moved, but in practice it gives the correct answer
13970 often enough until a better solution is found. */
13971 int have_ambiguous_names = ambiguous_names_p (b->loc);
13972
13973 for (; e; e = e->next)
13974 {
13975 if (!e->enabled && e->function_name)
13976 {
13977 struct bp_location *l = b->loc;
13978 if (have_ambiguous_names)
13979 {
13980 for (; l; l = l->next)
13981 if (breakpoint_locations_match (e, l))
13982 {
13983 l->enabled = 0;
13984 break;
13985 }
13986 }
13987 else
13988 {
13989 for (; l; l = l->next)
13990 if (l->function_name
13991 && strcmp (e->function_name, l->function_name) == 0)
13992 {
13993 l->enabled = 0;
13994 break;
13995 }
13996 }
13997 }
13998 }
13999 }
14000
14001 if (!locations_are_equal (existing_locations, b->loc))
14002 observer_notify_breakpoint_modified (b);
14003
14004 update_global_location_list (1);
14005 }
14006
14007 /* Find the SaL locations corresponding to the given ADDR_STRING.
14008 On return, FOUND will be 1 if any SaL was found, zero otherwise. */
14009
14010 static struct symtabs_and_lines
14011 addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found)
14012 {
14013 char *s;
14014 struct symtabs_and_lines sals = {0};
14015 volatile struct gdb_exception e;
14016
14017 gdb_assert (b->ops != NULL);
14018 s = addr_string;
14019
14020 TRY_CATCH (e, RETURN_MASK_ERROR)
14021 {
14022 b->ops->decode_linespec (b, &s, &sals);
14023 }
14024 if (e.reason < 0)
14025 {
14026 int not_found_and_ok = 0;
14027 /* For pending breakpoints, it's expected that parsing will
14028 fail until the right shared library is loaded. User has
14029 already told to create pending breakpoints and don't need
14030 extra messages. If breakpoint is in bp_shlib_disabled
14031 state, then user already saw the message about that
14032 breakpoint being disabled, and don't want to see more
14033 errors. */
14034 if (e.error == NOT_FOUND_ERROR
14035 && (b->condition_not_parsed
14036 || (b->loc && b->loc->shlib_disabled)
14037 || (b->loc && b->loc->pspace->executing_startup)
14038 || b->enable_state == bp_disabled))
14039 not_found_and_ok = 1;
14040
14041 if (!not_found_and_ok)
14042 {
14043 /* We surely don't want to warn about the same breakpoint
14044 10 times. One solution, implemented here, is disable
14045 the breakpoint on error. Another solution would be to
14046 have separate 'warning emitted' flag. Since this
14047 happens only when a binary has changed, I don't know
14048 which approach is better. */
14049 b->enable_state = bp_disabled;
14050 throw_exception (e);
14051 }
14052 }
14053
14054 if (e.reason == 0 || e.error != NOT_FOUND_ERROR)
14055 {
14056 int i;
14057
14058 for (i = 0; i < sals.nelts; ++i)
14059 resolve_sal_pc (&sals.sals[i]);
14060 if (b->condition_not_parsed && s && s[0])
14061 {
14062 char *cond_string, *extra_string;
14063 int thread, task;
14064
14065 find_condition_and_thread (s, sals.sals[0].pc,
14066 &cond_string, &thread, &task,
14067 &extra_string);
14068 if (cond_string)
14069 b->cond_string = cond_string;
14070 b->thread = thread;
14071 b->task = task;
14072 if (extra_string)
14073 b->extra_string = extra_string;
14074 b->condition_not_parsed = 0;
14075 }
14076
14077 if (b->type == bp_static_tracepoint && !strace_marker_p (b))
14078 sals.sals[0] = update_static_tracepoint (b, sals.sals[0]);
14079
14080 *found = 1;
14081 }
14082 else
14083 *found = 0;
14084
14085 return sals;
14086 }
14087
14088 /* The default re_set method, for typical hardware or software
14089 breakpoints. Reevaluate the breakpoint and recreate its
14090 locations. */
14091
14092 static void
14093 breakpoint_re_set_default (struct breakpoint *b)
14094 {
14095 int found;
14096 struct symtabs_and_lines sals, sals_end;
14097 struct symtabs_and_lines expanded = {0};
14098 struct symtabs_and_lines expanded_end = {0};
14099
14100 sals = addr_string_to_sals (b, b->addr_string, &found);
14101 if (found)
14102 {
14103 make_cleanup (xfree, sals.sals);
14104 expanded = sals;
14105 }
14106
14107 if (b->addr_string_range_end)
14108 {
14109 sals_end = addr_string_to_sals (b, b->addr_string_range_end, &found);
14110 if (found)
14111 {
14112 make_cleanup (xfree, sals_end.sals);
14113 expanded_end = sals_end;
14114 }
14115 }
14116
14117 update_breakpoint_locations (b, expanded, expanded_end);
14118 }
14119
14120 /* Default method for creating SALs from an address string. It basically
14121 calls parse_breakpoint_sals. Return 1 for success, zero for failure. */
14122
14123 static void
14124 create_sals_from_address_default (char **arg,
14125 struct linespec_result *canonical,
14126 enum bptype type_wanted,
14127 char *addr_start, char **copy_arg)
14128 {
14129 parse_breakpoint_sals (arg, canonical);
14130 }
14131
14132 /* Call create_breakpoints_sal for the given arguments. This is the default
14133 function for the `create_breakpoints_sal' method of
14134 breakpoint_ops. */
14135
14136 static void
14137 create_breakpoints_sal_default (struct gdbarch *gdbarch,
14138 struct linespec_result *canonical,
14139 struct linespec_sals *lsal,
14140 char *cond_string,
14141 char *extra_string,
14142 enum bptype type_wanted,
14143 enum bpdisp disposition,
14144 int thread,
14145 int task, int ignore_count,
14146 const struct breakpoint_ops *ops,
14147 int from_tty, int enabled,
14148 int internal, unsigned flags)
14149 {
14150 create_breakpoints_sal (gdbarch, canonical, cond_string,
14151 extra_string,
14152 type_wanted, disposition,
14153 thread, task, ignore_count, ops, from_tty,
14154 enabled, internal, flags);
14155 }
14156
14157 /* Decode the line represented by S by calling decode_line_full. This is the
14158 default function for the `decode_linespec' method of breakpoint_ops. */
14159
14160 static void
14161 decode_linespec_default (struct breakpoint *b, char **s,
14162 struct symtabs_and_lines *sals)
14163 {
14164 struct linespec_result canonical;
14165
14166 init_linespec_result (&canonical);
14167 decode_line_full (s, DECODE_LINE_FUNFIRSTLINE,
14168 (struct symtab *) NULL, 0,
14169 &canonical, multiple_symbols_all,
14170 b->filter);
14171
14172 /* We should get 0 or 1 resulting SALs. */
14173 gdb_assert (VEC_length (linespec_sals, canonical.sals) < 2);
14174
14175 if (VEC_length (linespec_sals, canonical.sals) > 0)
14176 {
14177 struct linespec_sals *lsal;
14178
14179 lsal = VEC_index (linespec_sals, canonical.sals, 0);
14180 *sals = lsal->sals;
14181 /* Arrange it so the destructor does not free the
14182 contents. */
14183 lsal->sals.sals = NULL;
14184 }
14185
14186 destroy_linespec_result (&canonical);
14187 }
14188
14189 /* Prepare the global context for a re-set of breakpoint B. */
14190
14191 static struct cleanup *
14192 prepare_re_set_context (struct breakpoint *b)
14193 {
14194 struct cleanup *cleanups;
14195
14196 input_radix = b->input_radix;
14197 cleanups = save_current_space_and_thread ();
14198 if (b->pspace != NULL)
14199 switch_to_program_space_and_thread (b->pspace);
14200 set_language (b->language);
14201
14202 return cleanups;
14203 }
14204
14205 /* Reset a breakpoint given it's struct breakpoint * BINT.
14206 The value we return ends up being the return value from catch_errors.
14207 Unused in this case. */
14208
14209 static int
14210 breakpoint_re_set_one (void *bint)
14211 {
14212 /* Get past catch_errs. */
14213 struct breakpoint *b = (struct breakpoint *) bint;
14214 struct cleanup *cleanups;
14215
14216 cleanups = prepare_re_set_context (b);
14217 b->ops->re_set (b);
14218 do_cleanups (cleanups);
14219 return 0;
14220 }
14221
14222 /* Re-set all breakpoints after symbols have been re-loaded. */
14223 void
14224 breakpoint_re_set (void)
14225 {
14226 struct breakpoint *b, *b_tmp;
14227 enum language save_language;
14228 int save_input_radix;
14229 struct cleanup *old_chain;
14230
14231 save_language = current_language->la_language;
14232 save_input_radix = input_radix;
14233 old_chain = save_current_program_space ();
14234
14235 ALL_BREAKPOINTS_SAFE (b, b_tmp)
14236 {
14237 /* Format possible error msg. */
14238 char *message = xstrprintf ("Error in re-setting breakpoint %d: ",
14239 b->number);
14240 struct cleanup *cleanups = make_cleanup (xfree, message);
14241 catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
14242 do_cleanups (cleanups);
14243 }
14244 set_language (save_language);
14245 input_radix = save_input_radix;
14246
14247 jit_breakpoint_re_set ();
14248
14249 do_cleanups (old_chain);
14250
14251 create_overlay_event_breakpoint ();
14252 create_longjmp_master_breakpoint ();
14253 create_std_terminate_master_breakpoint ();
14254 create_exception_master_breakpoint ();
14255
14256 /* While we're at it, reset the skip list too. */
14257 skip_re_set ();
14258 }
14259 \f
14260 /* Reset the thread number of this breakpoint:
14261
14262 - If the breakpoint is for all threads, leave it as-is.
14263 - Else, reset it to the current thread for inferior_ptid. */
14264 void
14265 breakpoint_re_set_thread (struct breakpoint *b)
14266 {
14267 if (b->thread != -1)
14268 {
14269 if (in_thread_list (inferior_ptid))
14270 b->thread = pid_to_thread_id (inferior_ptid);
14271
14272 /* We're being called after following a fork. The new fork is
14273 selected as current, and unless this was a vfork will have a
14274 different program space from the original thread. Reset that
14275 as well. */
14276 b->loc->pspace = current_program_space;
14277 }
14278 }
14279
14280 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
14281 If from_tty is nonzero, it prints a message to that effect,
14282 which ends with a period (no newline). */
14283
14284 void
14285 set_ignore_count (int bptnum, int count, int from_tty)
14286 {
14287 struct breakpoint *b;
14288
14289 if (count < 0)
14290 count = 0;
14291
14292 ALL_BREAKPOINTS (b)
14293 if (b->number == bptnum)
14294 {
14295 if (is_tracepoint (b))
14296 {
14297 if (from_tty && count != 0)
14298 printf_filtered (_("Ignore count ignored for tracepoint %d."),
14299 bptnum);
14300 return;
14301 }
14302
14303 b->ignore_count = count;
14304 if (from_tty)
14305 {
14306 if (count == 0)
14307 printf_filtered (_("Will stop next time "
14308 "breakpoint %d is reached."),
14309 bptnum);
14310 else if (count == 1)
14311 printf_filtered (_("Will ignore next crossing of breakpoint %d."),
14312 bptnum);
14313 else
14314 printf_filtered (_("Will ignore next %d "
14315 "crossings of breakpoint %d."),
14316 count, bptnum);
14317 }
14318 breakpoints_changed ();
14319 observer_notify_breakpoint_modified (b);
14320 return;
14321 }
14322
14323 error (_("No breakpoint number %d."), bptnum);
14324 }
14325
14326 /* Command to set ignore-count of breakpoint N to COUNT. */
14327
14328 static void
14329 ignore_command (char *args, int from_tty)
14330 {
14331 char *p = args;
14332 int num;
14333
14334 if (p == 0)
14335 error_no_arg (_("a breakpoint number"));
14336
14337 num = get_number (&p);
14338 if (num == 0)
14339 error (_("bad breakpoint number: '%s'"), args);
14340 if (*p == 0)
14341 error (_("Second argument (specified ignore-count) is missing."));
14342
14343 set_ignore_count (num,
14344 longest_to_int (value_as_long (parse_and_eval (p))),
14345 from_tty);
14346 if (from_tty)
14347 printf_filtered ("\n");
14348 }
14349 \f
14350 /* Call FUNCTION on each of the breakpoints
14351 whose numbers are given in ARGS. */
14352
14353 static void
14354 map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *,
14355 void *),
14356 void *data)
14357 {
14358 int num;
14359 struct breakpoint *b, *tmp;
14360 int match;
14361 struct get_number_or_range_state state;
14362
14363 if (args == 0)
14364 error_no_arg (_("one or more breakpoint numbers"));
14365
14366 init_number_or_range (&state, args);
14367
14368 while (!state.finished)
14369 {
14370 char *p = state.string;
14371
14372 match = 0;
14373
14374 num = get_number_or_range (&state);
14375 if (num == 0)
14376 {
14377 warning (_("bad breakpoint number at or near '%s'"), p);
14378 }
14379 else
14380 {
14381 ALL_BREAKPOINTS_SAFE (b, tmp)
14382 if (b->number == num)
14383 {
14384 match = 1;
14385 function (b, data);
14386 break;
14387 }
14388 if (match == 0)
14389 printf_unfiltered (_("No breakpoint number %d.\n"), num);
14390 }
14391 }
14392 }
14393
14394 static struct bp_location *
14395 find_location_by_number (char *number)
14396 {
14397 char *dot = strchr (number, '.');
14398 char *p1;
14399 int bp_num;
14400 int loc_num;
14401 struct breakpoint *b;
14402 struct bp_location *loc;
14403
14404 *dot = '\0';
14405
14406 p1 = number;
14407 bp_num = get_number (&p1);
14408 if (bp_num == 0)
14409 error (_("Bad breakpoint number '%s'"), number);
14410
14411 ALL_BREAKPOINTS (b)
14412 if (b->number == bp_num)
14413 {
14414 break;
14415 }
14416
14417 if (!b || b->number != bp_num)
14418 error (_("Bad breakpoint number '%s'"), number);
14419
14420 p1 = dot+1;
14421 loc_num = get_number (&p1);
14422 if (loc_num == 0)
14423 error (_("Bad breakpoint location number '%s'"), number);
14424
14425 --loc_num;
14426 loc = b->loc;
14427 for (;loc_num && loc; --loc_num, loc = loc->next)
14428 ;
14429 if (!loc)
14430 error (_("Bad breakpoint location number '%s'"), dot+1);
14431
14432 return loc;
14433 }
14434
14435
14436 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
14437 If from_tty is nonzero, it prints a message to that effect,
14438 which ends with a period (no newline). */
14439
14440 void
14441 disable_breakpoint (struct breakpoint *bpt)
14442 {
14443 /* Never disable a watchpoint scope breakpoint; we want to
14444 hit them when we leave scope so we can delete both the
14445 watchpoint and its scope breakpoint at that time. */
14446 if (bpt->type == bp_watchpoint_scope)
14447 return;
14448
14449 /* You can't disable permanent breakpoints. */
14450 if (bpt->enable_state == bp_permanent)
14451 return;
14452
14453 bpt->enable_state = bp_disabled;
14454
14455 /* Mark breakpoint locations modified. */
14456 mark_breakpoint_modified (bpt);
14457
14458 if (target_supports_enable_disable_tracepoint ()
14459 && current_trace_status ()->running && is_tracepoint (bpt))
14460 {
14461 struct bp_location *location;
14462
14463 for (location = bpt->loc; location; location = location->next)
14464 target_disable_tracepoint (location);
14465 }
14466
14467 update_global_location_list (0);
14468
14469 observer_notify_breakpoint_modified (bpt);
14470 }
14471
14472 /* A callback for iterate_over_related_breakpoints. */
14473
14474 static void
14475 do_disable_breakpoint (struct breakpoint *b, void *ignore)
14476 {
14477 disable_breakpoint (b);
14478 }
14479
14480 /* A callback for map_breakpoint_numbers that calls
14481 disable_breakpoint. */
14482
14483 static void
14484 do_map_disable_breakpoint (struct breakpoint *b, void *ignore)
14485 {
14486 iterate_over_related_breakpoints (b, do_disable_breakpoint, NULL);
14487 }
14488
14489 static void
14490 disable_command (char *args, int from_tty)
14491 {
14492 if (args == 0)
14493 {
14494 struct breakpoint *bpt;
14495
14496 ALL_BREAKPOINTS (bpt)
14497 if (user_breakpoint_p (bpt))
14498 disable_breakpoint (bpt);
14499 }
14500 else if (strchr (args, '.'))
14501 {
14502 struct bp_location *loc = find_location_by_number (args);
14503 if (loc)
14504 {
14505 if (loc->enabled)
14506 {
14507 loc->enabled = 0;
14508 mark_breakpoint_location_modified (loc);
14509 }
14510 if (target_supports_enable_disable_tracepoint ()
14511 && current_trace_status ()->running && loc->owner
14512 && is_tracepoint (loc->owner))
14513 target_disable_tracepoint (loc);
14514 }
14515 update_global_location_list (0);
14516 }
14517 else
14518 map_breakpoint_numbers (args, do_map_disable_breakpoint, NULL);
14519 }
14520
14521 static void
14522 enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition,
14523 int count)
14524 {
14525 int target_resources_ok;
14526
14527 if (bpt->type == bp_hardware_breakpoint)
14528 {
14529 int i;
14530 i = hw_breakpoint_used_count ();
14531 target_resources_ok =
14532 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
14533 i + 1, 0);
14534 if (target_resources_ok == 0)
14535 error (_("No hardware breakpoint support in the target."));
14536 else if (target_resources_ok < 0)
14537 error (_("Hardware breakpoints used exceeds limit."));
14538 }
14539
14540 if (is_watchpoint (bpt))
14541 {
14542 /* Initialize it just to avoid a GCC false warning. */
14543 enum enable_state orig_enable_state = 0;
14544 volatile struct gdb_exception e;
14545
14546 TRY_CATCH (e, RETURN_MASK_ALL)
14547 {
14548 struct watchpoint *w = (struct watchpoint *) bpt;
14549
14550 orig_enable_state = bpt->enable_state;
14551 bpt->enable_state = bp_enabled;
14552 update_watchpoint (w, 1 /* reparse */);
14553 }
14554 if (e.reason < 0)
14555 {
14556 bpt->enable_state = orig_enable_state;
14557 exception_fprintf (gdb_stderr, e, _("Cannot enable watchpoint %d: "),
14558 bpt->number);
14559 return;
14560 }
14561 }
14562
14563 if (bpt->enable_state != bp_permanent)
14564 bpt->enable_state = bp_enabled;
14565
14566 bpt->enable_state = bp_enabled;
14567
14568 /* Mark breakpoint locations modified. */
14569 mark_breakpoint_modified (bpt);
14570
14571 if (target_supports_enable_disable_tracepoint ()
14572 && current_trace_status ()->running && is_tracepoint (bpt))
14573 {
14574 struct bp_location *location;
14575
14576 for (location = bpt->loc; location; location = location->next)
14577 target_enable_tracepoint (location);
14578 }
14579
14580 bpt->disposition = disposition;
14581 bpt->enable_count = count;
14582 update_global_location_list (1);
14583 breakpoints_changed ();
14584
14585 observer_notify_breakpoint_modified (bpt);
14586 }
14587
14588
14589 void
14590 enable_breakpoint (struct breakpoint *bpt)
14591 {
14592 enable_breakpoint_disp (bpt, bpt->disposition, 0);
14593 }
14594
14595 static void
14596 do_enable_breakpoint (struct breakpoint *bpt, void *arg)
14597 {
14598 enable_breakpoint (bpt);
14599 }
14600
14601 /* A callback for map_breakpoint_numbers that calls
14602 enable_breakpoint. */
14603
14604 static void
14605 do_map_enable_breakpoint (struct breakpoint *b, void *ignore)
14606 {
14607 iterate_over_related_breakpoints (b, do_enable_breakpoint, NULL);
14608 }
14609
14610 /* The enable command enables the specified breakpoints (or all defined
14611 breakpoints) so they once again become (or continue to be) effective
14612 in stopping the inferior. */
14613
14614 static void
14615 enable_command (char *args, int from_tty)
14616 {
14617 if (args == 0)
14618 {
14619 struct breakpoint *bpt;
14620
14621 ALL_BREAKPOINTS (bpt)
14622 if (user_breakpoint_p (bpt))
14623 enable_breakpoint (bpt);
14624 }
14625 else if (strchr (args, '.'))
14626 {
14627 struct bp_location *loc = find_location_by_number (args);
14628 if (loc)
14629 {
14630 if (!loc->enabled)
14631 {
14632 loc->enabled = 1;
14633 mark_breakpoint_location_modified (loc);
14634 }
14635 if (target_supports_enable_disable_tracepoint ()
14636 && current_trace_status ()->running && loc->owner
14637 && is_tracepoint (loc->owner))
14638 target_enable_tracepoint (loc);
14639 }
14640 update_global_location_list (1);
14641 }
14642 else
14643 map_breakpoint_numbers (args, do_map_enable_breakpoint, NULL);
14644 }
14645
14646 /* This struct packages up disposition data for application to multiple
14647 breakpoints. */
14648
14649 struct disp_data
14650 {
14651 enum bpdisp disp;
14652 int count;
14653 };
14654
14655 static void
14656 do_enable_breakpoint_disp (struct breakpoint *bpt, void *arg)
14657 {
14658 struct disp_data disp_data = *(struct disp_data *) arg;
14659
14660 enable_breakpoint_disp (bpt, disp_data.disp, disp_data.count);
14661 }
14662
14663 static void
14664 do_map_enable_once_breakpoint (struct breakpoint *bpt, void *ignore)
14665 {
14666 struct disp_data disp = { disp_disable, 1 };
14667
14668 iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
14669 }
14670
14671 static void
14672 enable_once_command (char *args, int from_tty)
14673 {
14674 map_breakpoint_numbers (args, do_map_enable_once_breakpoint, NULL);
14675 }
14676
14677 static void
14678 do_map_enable_count_breakpoint (struct breakpoint *bpt, void *countptr)
14679 {
14680 struct disp_data disp = { disp_disable, *(int *) countptr };
14681
14682 iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
14683 }
14684
14685 static void
14686 enable_count_command (char *args, int from_tty)
14687 {
14688 int count = get_number (&args);
14689
14690 map_breakpoint_numbers (args, do_map_enable_count_breakpoint, &count);
14691 }
14692
14693 static void
14694 do_map_enable_delete_breakpoint (struct breakpoint *bpt, void *ignore)
14695 {
14696 struct disp_data disp = { disp_del, 1 };
14697
14698 iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
14699 }
14700
14701 static void
14702 enable_delete_command (char *args, int from_tty)
14703 {
14704 map_breakpoint_numbers (args, do_map_enable_delete_breakpoint, NULL);
14705 }
14706 \f
14707 static void
14708 set_breakpoint_cmd (char *args, int from_tty)
14709 {
14710 }
14711
14712 static void
14713 show_breakpoint_cmd (char *args, int from_tty)
14714 {
14715 }
14716
14717 /* Invalidate last known value of any hardware watchpoint if
14718 the memory which that value represents has been written to by
14719 GDB itself. */
14720
14721 static void
14722 invalidate_bp_value_on_memory_change (CORE_ADDR addr, int len,
14723 const bfd_byte *data)
14724 {
14725 struct breakpoint *bp;
14726
14727 ALL_BREAKPOINTS (bp)
14728 if (bp->enable_state == bp_enabled
14729 && bp->type == bp_hardware_watchpoint)
14730 {
14731 struct watchpoint *wp = (struct watchpoint *) bp;
14732
14733 if (wp->val_valid && wp->val)
14734 {
14735 struct bp_location *loc;
14736
14737 for (loc = bp->loc; loc != NULL; loc = loc->next)
14738 if (loc->loc_type == bp_loc_hardware_watchpoint
14739 && loc->address + loc->length > addr
14740 && addr + len > loc->address)
14741 {
14742 value_free (wp->val);
14743 wp->val = NULL;
14744 wp->val_valid = 0;
14745 }
14746 }
14747 }
14748 }
14749
14750 /* Create and insert a raw software breakpoint at PC. Return an
14751 identifier, which should be used to remove the breakpoint later.
14752 In general, places which call this should be using something on the
14753 breakpoint chain instead; this function should be eliminated
14754 someday. */
14755
14756 void *
14757 deprecated_insert_raw_breakpoint (struct gdbarch *gdbarch,
14758 struct address_space *aspace, CORE_ADDR pc)
14759 {
14760 struct bp_target_info *bp_tgt;
14761
14762 bp_tgt = XZALLOC (struct bp_target_info);
14763
14764 bp_tgt->placed_address_space = aspace;
14765 bp_tgt->placed_address = pc;
14766
14767 if (target_insert_breakpoint (gdbarch, bp_tgt) != 0)
14768 {
14769 /* Could not insert the breakpoint. */
14770 xfree (bp_tgt);
14771 return NULL;
14772 }
14773
14774 return bp_tgt;
14775 }
14776
14777 /* Remove a breakpoint BP inserted by
14778 deprecated_insert_raw_breakpoint. */
14779
14780 int
14781 deprecated_remove_raw_breakpoint (struct gdbarch *gdbarch, void *bp)
14782 {
14783 struct bp_target_info *bp_tgt = bp;
14784 int ret;
14785
14786 ret = target_remove_breakpoint (gdbarch, bp_tgt);
14787 xfree (bp_tgt);
14788
14789 return ret;
14790 }
14791
14792 /* One (or perhaps two) breakpoints used for software single
14793 stepping. */
14794
14795 static void *single_step_breakpoints[2];
14796 static struct gdbarch *single_step_gdbarch[2];
14797
14798 /* Create and insert a breakpoint for software single step. */
14799
14800 void
14801 insert_single_step_breakpoint (struct gdbarch *gdbarch,
14802 struct address_space *aspace,
14803 CORE_ADDR next_pc)
14804 {
14805 void **bpt_p;
14806
14807 if (single_step_breakpoints[0] == NULL)
14808 {
14809 bpt_p = &single_step_breakpoints[0];
14810 single_step_gdbarch[0] = gdbarch;
14811 }
14812 else
14813 {
14814 gdb_assert (single_step_breakpoints[1] == NULL);
14815 bpt_p = &single_step_breakpoints[1];
14816 single_step_gdbarch[1] = gdbarch;
14817 }
14818
14819 /* NOTE drow/2006-04-11: A future improvement to this function would
14820 be to only create the breakpoints once, and actually put them on
14821 the breakpoint chain. That would let us use set_raw_breakpoint.
14822 We could adjust the addresses each time they were needed. Doing
14823 this requires corresponding changes elsewhere where single step
14824 breakpoints are handled, however. So, for now, we use this. */
14825
14826 *bpt_p = deprecated_insert_raw_breakpoint (gdbarch, aspace, next_pc);
14827 if (*bpt_p == NULL)
14828 error (_("Could not insert single-step breakpoint at %s"),
14829 paddress (gdbarch, next_pc));
14830 }
14831
14832 /* Check if the breakpoints used for software single stepping
14833 were inserted or not. */
14834
14835 int
14836 single_step_breakpoints_inserted (void)
14837 {
14838 return (single_step_breakpoints[0] != NULL
14839 || single_step_breakpoints[1] != NULL);
14840 }
14841
14842 /* Remove and delete any breakpoints used for software single step. */
14843
14844 void
14845 remove_single_step_breakpoints (void)
14846 {
14847 gdb_assert (single_step_breakpoints[0] != NULL);
14848
14849 /* See insert_single_step_breakpoint for more about this deprecated
14850 call. */
14851 deprecated_remove_raw_breakpoint (single_step_gdbarch[0],
14852 single_step_breakpoints[0]);
14853 single_step_gdbarch[0] = NULL;
14854 single_step_breakpoints[0] = NULL;
14855
14856 if (single_step_breakpoints[1] != NULL)
14857 {
14858 deprecated_remove_raw_breakpoint (single_step_gdbarch[1],
14859 single_step_breakpoints[1]);
14860 single_step_gdbarch[1] = NULL;
14861 single_step_breakpoints[1] = NULL;
14862 }
14863 }
14864
14865 /* Delete software single step breakpoints without removing them from
14866 the inferior. This is intended to be used if the inferior's address
14867 space where they were inserted is already gone, e.g. after exit or
14868 exec. */
14869
14870 void
14871 cancel_single_step_breakpoints (void)
14872 {
14873 int i;
14874
14875 for (i = 0; i < 2; i++)
14876 if (single_step_breakpoints[i])
14877 {
14878 xfree (single_step_breakpoints[i]);
14879 single_step_breakpoints[i] = NULL;
14880 single_step_gdbarch[i] = NULL;
14881 }
14882 }
14883
14884 /* Detach software single-step breakpoints from INFERIOR_PTID without
14885 removing them. */
14886
14887 static void
14888 detach_single_step_breakpoints (void)
14889 {
14890 int i;
14891
14892 for (i = 0; i < 2; i++)
14893 if (single_step_breakpoints[i])
14894 target_remove_breakpoint (single_step_gdbarch[i],
14895 single_step_breakpoints[i]);
14896 }
14897
14898 /* Check whether a software single-step breakpoint is inserted at
14899 PC. */
14900
14901 static int
14902 single_step_breakpoint_inserted_here_p (struct address_space *aspace,
14903 CORE_ADDR pc)
14904 {
14905 int i;
14906
14907 for (i = 0; i < 2; i++)
14908 {
14909 struct bp_target_info *bp_tgt = single_step_breakpoints[i];
14910 if (bp_tgt
14911 && breakpoint_address_match (bp_tgt->placed_address_space,
14912 bp_tgt->placed_address,
14913 aspace, pc))
14914 return 1;
14915 }
14916
14917 return 0;
14918 }
14919
14920 /* Returns 0 if 'bp' is NOT a syscall catchpoint,
14921 non-zero otherwise. */
14922 static int
14923 is_syscall_catchpoint_enabled (struct breakpoint *bp)
14924 {
14925 if (syscall_catchpoint_p (bp)
14926 && bp->enable_state != bp_disabled
14927 && bp->enable_state != bp_call_disabled)
14928 return 1;
14929 else
14930 return 0;
14931 }
14932
14933 int
14934 catch_syscall_enabled (void)
14935 {
14936 struct catch_syscall_inferior_data *inf_data
14937 = get_catch_syscall_inferior_data (current_inferior ());
14938
14939 return inf_data->total_syscalls_count != 0;
14940 }
14941
14942 int
14943 catching_syscall_number (int syscall_number)
14944 {
14945 struct breakpoint *bp;
14946
14947 ALL_BREAKPOINTS (bp)
14948 if (is_syscall_catchpoint_enabled (bp))
14949 {
14950 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bp;
14951
14952 if (c->syscalls_to_be_caught)
14953 {
14954 int i, iter;
14955 for (i = 0;
14956 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
14957 i++)
14958 if (syscall_number == iter)
14959 return 1;
14960 }
14961 else
14962 return 1;
14963 }
14964
14965 return 0;
14966 }
14967
14968 /* Complete syscall names. Used by "catch syscall". */
14969 static VEC (char_ptr) *
14970 catch_syscall_completer (struct cmd_list_element *cmd,
14971 char *text, char *word)
14972 {
14973 const char **list = get_syscall_names ();
14974 VEC (char_ptr) *retlist
14975 = (list == NULL) ? NULL : complete_on_enum (list, text, word);
14976
14977 xfree (list);
14978 return retlist;
14979 }
14980
14981 /* Tracepoint-specific operations. */
14982
14983 /* Set tracepoint count to NUM. */
14984 static void
14985 set_tracepoint_count (int num)
14986 {
14987 tracepoint_count = num;
14988 set_internalvar_integer (lookup_internalvar ("tpnum"), num);
14989 }
14990
14991 static void
14992 trace_command (char *arg, int from_tty)
14993 {
14994 struct breakpoint_ops *ops;
14995 const char *arg_cp = arg;
14996
14997 if (arg && probe_linespec_to_ops (&arg_cp))
14998 ops = &tracepoint_probe_breakpoint_ops;
14999 else
15000 ops = &tracepoint_breakpoint_ops;
15001
15002 if (create_breakpoint (get_current_arch (),
15003 arg,
15004 NULL, 0, NULL, 1 /* parse arg */,
15005 0 /* tempflag */,
15006 bp_tracepoint /* type_wanted */,
15007 0 /* Ignore count */,
15008 pending_break_support,
15009 ops,
15010 from_tty,
15011 1 /* enabled */,
15012 0 /* internal */, 0))
15013 set_tracepoint_count (breakpoint_count);
15014 }
15015
15016 static void
15017 ftrace_command (char *arg, int from_tty)
15018 {
15019 if (create_breakpoint (get_current_arch (),
15020 arg,
15021 NULL, 0, NULL, 1 /* parse arg */,
15022 0 /* tempflag */,
15023 bp_fast_tracepoint /* type_wanted */,
15024 0 /* Ignore count */,
15025 pending_break_support,
15026 &tracepoint_breakpoint_ops,
15027 from_tty,
15028 1 /* enabled */,
15029 0 /* internal */, 0))
15030 set_tracepoint_count (breakpoint_count);
15031 }
15032
15033 /* strace command implementation. Creates a static tracepoint. */
15034
15035 static void
15036 strace_command (char *arg, int from_tty)
15037 {
15038 struct breakpoint_ops *ops;
15039
15040 /* Decide if we are dealing with a static tracepoint marker (`-m'),
15041 or with a normal static tracepoint. */
15042 if (arg && strncmp (arg, "-m", 2) == 0 && isspace (arg[2]))
15043 ops = &strace_marker_breakpoint_ops;
15044 else
15045 ops = &tracepoint_breakpoint_ops;
15046
15047 if (create_breakpoint (get_current_arch (),
15048 arg,
15049 NULL, 0, NULL, 1 /* parse arg */,
15050 0 /* tempflag */,
15051 bp_static_tracepoint /* type_wanted */,
15052 0 /* Ignore count */,
15053 pending_break_support,
15054 ops,
15055 from_tty,
15056 1 /* enabled */,
15057 0 /* internal */, 0))
15058 set_tracepoint_count (breakpoint_count);
15059 }
15060
15061 /* Set up a fake reader function that gets command lines from a linked
15062 list that was acquired during tracepoint uploading. */
15063
15064 static struct uploaded_tp *this_utp;
15065 static int next_cmd;
15066
15067 static char *
15068 read_uploaded_action (void)
15069 {
15070 char *rslt;
15071
15072 VEC_iterate (char_ptr, this_utp->cmd_strings, next_cmd, rslt);
15073
15074 next_cmd++;
15075
15076 return rslt;
15077 }
15078
15079 /* Given information about a tracepoint as recorded on a target (which
15080 can be either a live system or a trace file), attempt to create an
15081 equivalent GDB tracepoint. This is not a reliable process, since
15082 the target does not necessarily have all the information used when
15083 the tracepoint was originally defined. */
15084
15085 struct tracepoint *
15086 create_tracepoint_from_upload (struct uploaded_tp *utp)
15087 {
15088 char *addr_str, small_buf[100];
15089 struct tracepoint *tp;
15090
15091 if (utp->at_string)
15092 addr_str = utp->at_string;
15093 else
15094 {
15095 /* In the absence of a source location, fall back to raw
15096 address. Since there is no way to confirm that the address
15097 means the same thing as when the trace was started, warn the
15098 user. */
15099 warning (_("Uploaded tracepoint %d has no "
15100 "source location, using raw address"),
15101 utp->number);
15102 sprintf (small_buf, "*%s", hex_string (utp->addr));
15103 addr_str = small_buf;
15104 }
15105
15106 /* There's not much we can do with a sequence of bytecodes. */
15107 if (utp->cond && !utp->cond_string)
15108 warning (_("Uploaded tracepoint %d condition "
15109 "has no source form, ignoring it"),
15110 utp->number);
15111
15112 if (!create_breakpoint (get_current_arch (),
15113 addr_str,
15114 utp->cond_string, -1, NULL,
15115 0 /* parse cond/thread */,
15116 0 /* tempflag */,
15117 utp->type /* type_wanted */,
15118 0 /* Ignore count */,
15119 pending_break_support,
15120 &tracepoint_breakpoint_ops,
15121 0 /* from_tty */,
15122 utp->enabled /* enabled */,
15123 0 /* internal */,
15124 CREATE_BREAKPOINT_FLAGS_INSERTED))
15125 return NULL;
15126
15127 set_tracepoint_count (breakpoint_count);
15128
15129 /* Get the tracepoint we just created. */
15130 tp = get_tracepoint (tracepoint_count);
15131 gdb_assert (tp != NULL);
15132
15133 if (utp->pass > 0)
15134 {
15135 sprintf (small_buf, "%d %d", utp->pass, tp->base.number);
15136
15137 trace_pass_command (small_buf, 0);
15138 }
15139
15140 /* If we have uploaded versions of the original commands, set up a
15141 special-purpose "reader" function and call the usual command line
15142 reader, then pass the result to the breakpoint command-setting
15143 function. */
15144 if (!VEC_empty (char_ptr, utp->cmd_strings))
15145 {
15146 struct command_line *cmd_list;
15147
15148 this_utp = utp;
15149 next_cmd = 0;
15150
15151 cmd_list = read_command_lines_1 (read_uploaded_action, 1, NULL, NULL);
15152
15153 breakpoint_set_commands (&tp->base, cmd_list);
15154 }
15155 else if (!VEC_empty (char_ptr, utp->actions)
15156 || !VEC_empty (char_ptr, utp->step_actions))
15157 warning (_("Uploaded tracepoint %d actions "
15158 "have no source form, ignoring them"),
15159 utp->number);
15160
15161 /* Copy any status information that might be available. */
15162 tp->base.hit_count = utp->hit_count;
15163 tp->traceframe_usage = utp->traceframe_usage;
15164
15165 return tp;
15166 }
15167
15168 /* Print information on tracepoint number TPNUM_EXP, or all if
15169 omitted. */
15170
15171 static void
15172 tracepoints_info (char *args, int from_tty)
15173 {
15174 struct ui_out *uiout = current_uiout;
15175 int num_printed;
15176
15177 num_printed = breakpoint_1 (args, 0, is_tracepoint);
15178
15179 if (num_printed == 0)
15180 {
15181 if (args == NULL || *args == '\0')
15182 ui_out_message (uiout, 0, "No tracepoints.\n");
15183 else
15184 ui_out_message (uiout, 0, "No tracepoint matching '%s'.\n", args);
15185 }
15186
15187 default_collect_info ();
15188 }
15189
15190 /* The 'enable trace' command enables tracepoints.
15191 Not supported by all targets. */
15192 static void
15193 enable_trace_command (char *args, int from_tty)
15194 {
15195 enable_command (args, from_tty);
15196 }
15197
15198 /* The 'disable trace' command disables tracepoints.
15199 Not supported by all targets. */
15200 static void
15201 disable_trace_command (char *args, int from_tty)
15202 {
15203 disable_command (args, from_tty);
15204 }
15205
15206 /* Remove a tracepoint (or all if no argument). */
15207 static void
15208 delete_trace_command (char *arg, int from_tty)
15209 {
15210 struct breakpoint *b, *b_tmp;
15211
15212 dont_repeat ();
15213
15214 if (arg == 0)
15215 {
15216 int breaks_to_delete = 0;
15217
15218 /* Delete all breakpoints if no argument.
15219 Do not delete internal or call-dummy breakpoints, these
15220 have to be deleted with an explicit breakpoint number
15221 argument. */
15222 ALL_TRACEPOINTS (b)
15223 if (is_tracepoint (b) && user_breakpoint_p (b))
15224 {
15225 breaks_to_delete = 1;
15226 break;
15227 }
15228
15229 /* Ask user only if there are some breakpoints to delete. */
15230 if (!from_tty
15231 || (breaks_to_delete && query (_("Delete all tracepoints? "))))
15232 {
15233 ALL_BREAKPOINTS_SAFE (b, b_tmp)
15234 if (is_tracepoint (b) && user_breakpoint_p (b))
15235 delete_breakpoint (b);
15236 }
15237 }
15238 else
15239 map_breakpoint_numbers (arg, do_map_delete_breakpoint, NULL);
15240 }
15241
15242 /* Helper function for trace_pass_command. */
15243
15244 static void
15245 trace_pass_set_count (struct tracepoint *tp, int count, int from_tty)
15246 {
15247 tp->pass_count = count;
15248 observer_notify_tracepoint_modified (tp->base.number);
15249 if (from_tty)
15250 printf_filtered (_("Setting tracepoint %d's passcount to %d\n"),
15251 tp->base.number, count);
15252 }
15253
15254 /* Set passcount for tracepoint.
15255
15256 First command argument is passcount, second is tracepoint number.
15257 If tracepoint number omitted, apply to most recently defined.
15258 Also accepts special argument "all". */
15259
15260 static void
15261 trace_pass_command (char *args, int from_tty)
15262 {
15263 struct tracepoint *t1;
15264 unsigned int count;
15265
15266 if (args == 0 || *args == 0)
15267 error (_("passcount command requires an "
15268 "argument (count + optional TP num)"));
15269
15270 count = strtoul (args, &args, 10); /* Count comes first, then TP num. */
15271
15272 while (*args && isspace ((int) *args))
15273 args++;
15274
15275 if (*args && strncasecmp (args, "all", 3) == 0)
15276 {
15277 struct breakpoint *b;
15278
15279 args += 3; /* Skip special argument "all". */
15280 if (*args)
15281 error (_("Junk at end of arguments."));
15282
15283 ALL_TRACEPOINTS (b)
15284 {
15285 t1 = (struct tracepoint *) b;
15286 trace_pass_set_count (t1, count, from_tty);
15287 }
15288 }
15289 else if (*args == '\0')
15290 {
15291 t1 = get_tracepoint_by_number (&args, NULL, 1);
15292 if (t1)
15293 trace_pass_set_count (t1, count, from_tty);
15294 }
15295 else
15296 {
15297 struct get_number_or_range_state state;
15298
15299 init_number_or_range (&state, args);
15300 while (!state.finished)
15301 {
15302 t1 = get_tracepoint_by_number (&args, &state, 1);
15303 if (t1)
15304 trace_pass_set_count (t1, count, from_tty);
15305 }
15306 }
15307 }
15308
15309 struct tracepoint *
15310 get_tracepoint (int num)
15311 {
15312 struct breakpoint *t;
15313
15314 ALL_TRACEPOINTS (t)
15315 if (t->number == num)
15316 return (struct tracepoint *) t;
15317
15318 return NULL;
15319 }
15320
15321 /* Find the tracepoint with the given target-side number (which may be
15322 different from the tracepoint number after disconnecting and
15323 reconnecting). */
15324
15325 struct tracepoint *
15326 get_tracepoint_by_number_on_target (int num)
15327 {
15328 struct breakpoint *b;
15329
15330 ALL_TRACEPOINTS (b)
15331 {
15332 struct tracepoint *t = (struct tracepoint *) b;
15333
15334 if (t->number_on_target == num)
15335 return t;
15336 }
15337
15338 return NULL;
15339 }
15340
15341 /* Utility: parse a tracepoint number and look it up in the list.
15342 If STATE is not NULL, use, get_number_or_range_state and ignore ARG.
15343 If OPTIONAL_P is true, then if the argument is missing, the most
15344 recent tracepoint (tracepoint_count) is returned. */
15345 struct tracepoint *
15346 get_tracepoint_by_number (char **arg,
15347 struct get_number_or_range_state *state,
15348 int optional_p)
15349 {
15350 extern int tracepoint_count;
15351 struct breakpoint *t;
15352 int tpnum;
15353 char *instring = arg == NULL ? NULL : *arg;
15354
15355 if (state)
15356 {
15357 gdb_assert (!state->finished);
15358 tpnum = get_number_or_range (state);
15359 }
15360 else if (arg == NULL || *arg == NULL || ! **arg)
15361 {
15362 if (optional_p)
15363 tpnum = tracepoint_count;
15364 else
15365 error_no_arg (_("tracepoint number"));
15366 }
15367 else
15368 tpnum = get_number (arg);
15369
15370 if (tpnum <= 0)
15371 {
15372 if (instring && *instring)
15373 printf_filtered (_("bad tracepoint number at or near '%s'\n"),
15374 instring);
15375 else
15376 printf_filtered (_("Tracepoint argument missing "
15377 "and no previous tracepoint\n"));
15378 return NULL;
15379 }
15380
15381 ALL_TRACEPOINTS (t)
15382 if (t->number == tpnum)
15383 {
15384 return (struct tracepoint *) t;
15385 }
15386
15387 printf_unfiltered ("No tracepoint number %d.\n", tpnum);
15388 return NULL;
15389 }
15390
15391 void
15392 print_recreate_thread (struct breakpoint *b, struct ui_file *fp)
15393 {
15394 if (b->thread != -1)
15395 fprintf_unfiltered (fp, " thread %d", b->thread);
15396
15397 if (b->task != 0)
15398 fprintf_unfiltered (fp, " task %d", b->task);
15399
15400 fprintf_unfiltered (fp, "\n");
15401 }
15402
15403 /* Save information on user settable breakpoints (watchpoints, etc) to
15404 a new script file named FILENAME. If FILTER is non-NULL, call it
15405 on each breakpoint and only include the ones for which it returns
15406 non-zero. */
15407
15408 static void
15409 save_breakpoints (char *filename, int from_tty,
15410 int (*filter) (const struct breakpoint *))
15411 {
15412 struct breakpoint *tp;
15413 int any = 0;
15414 char *pathname;
15415 struct cleanup *cleanup;
15416 struct ui_file *fp;
15417 int extra_trace_bits = 0;
15418
15419 if (filename == 0 || *filename == 0)
15420 error (_("Argument required (file name in which to save)"));
15421
15422 /* See if we have anything to save. */
15423 ALL_BREAKPOINTS (tp)
15424 {
15425 /* Skip internal and momentary breakpoints. */
15426 if (!user_breakpoint_p (tp))
15427 continue;
15428
15429 /* If we have a filter, only save the breakpoints it accepts. */
15430 if (filter && !filter (tp))
15431 continue;
15432
15433 any = 1;
15434
15435 if (is_tracepoint (tp))
15436 {
15437 extra_trace_bits = 1;
15438
15439 /* We can stop searching. */
15440 break;
15441 }
15442 }
15443
15444 if (!any)
15445 {
15446 warning (_("Nothing to save."));
15447 return;
15448 }
15449
15450 pathname = tilde_expand (filename);
15451 cleanup = make_cleanup (xfree, pathname);
15452 fp = gdb_fopen (pathname, "w");
15453 if (!fp)
15454 error (_("Unable to open file '%s' for saving (%s)"),
15455 filename, safe_strerror (errno));
15456 make_cleanup_ui_file_delete (fp);
15457
15458 if (extra_trace_bits)
15459 save_trace_state_variables (fp);
15460
15461 ALL_BREAKPOINTS (tp)
15462 {
15463 /* Skip internal and momentary breakpoints. */
15464 if (!user_breakpoint_p (tp))
15465 continue;
15466
15467 /* If we have a filter, only save the breakpoints it accepts. */
15468 if (filter && !filter (tp))
15469 continue;
15470
15471 tp->ops->print_recreate (tp, fp);
15472
15473 /* Note, we can't rely on tp->number for anything, as we can't
15474 assume the recreated breakpoint numbers will match. Use $bpnum
15475 instead. */
15476
15477 if (tp->cond_string)
15478 fprintf_unfiltered (fp, " condition $bpnum %s\n", tp->cond_string);
15479
15480 if (tp->ignore_count)
15481 fprintf_unfiltered (fp, " ignore $bpnum %d\n", tp->ignore_count);
15482
15483 if (tp->commands)
15484 {
15485 volatile struct gdb_exception ex;
15486
15487 fprintf_unfiltered (fp, " commands\n");
15488
15489 ui_out_redirect (current_uiout, fp);
15490 TRY_CATCH (ex, RETURN_MASK_ALL)
15491 {
15492 print_command_lines (current_uiout, tp->commands->commands, 2);
15493 }
15494 ui_out_redirect (current_uiout, NULL);
15495
15496 if (ex.reason < 0)
15497 throw_exception (ex);
15498
15499 fprintf_unfiltered (fp, " end\n");
15500 }
15501
15502 if (tp->enable_state == bp_disabled)
15503 fprintf_unfiltered (fp, "disable\n");
15504
15505 /* If this is a multi-location breakpoint, check if the locations
15506 should be individually disabled. Watchpoint locations are
15507 special, and not user visible. */
15508 if (!is_watchpoint (tp) && tp->loc && tp->loc->next)
15509 {
15510 struct bp_location *loc;
15511 int n = 1;
15512
15513 for (loc = tp->loc; loc != NULL; loc = loc->next, n++)
15514 if (!loc->enabled)
15515 fprintf_unfiltered (fp, "disable $bpnum.%d\n", n);
15516 }
15517 }
15518
15519 if (extra_trace_bits && *default_collect)
15520 fprintf_unfiltered (fp, "set default-collect %s\n", default_collect);
15521
15522 do_cleanups (cleanup);
15523 if (from_tty)
15524 printf_filtered (_("Saved to file '%s'.\n"), filename);
15525 }
15526
15527 /* The `save breakpoints' command. */
15528
15529 static void
15530 save_breakpoints_command (char *args, int from_tty)
15531 {
15532 save_breakpoints (args, from_tty, NULL);
15533 }
15534
15535 /* The `save tracepoints' command. */
15536
15537 static void
15538 save_tracepoints_command (char *args, int from_tty)
15539 {
15540 save_breakpoints (args, from_tty, is_tracepoint);
15541 }
15542
15543 /* Create a vector of all tracepoints. */
15544
15545 VEC(breakpoint_p) *
15546 all_tracepoints (void)
15547 {
15548 VEC(breakpoint_p) *tp_vec = 0;
15549 struct breakpoint *tp;
15550
15551 ALL_TRACEPOINTS (tp)
15552 {
15553 VEC_safe_push (breakpoint_p, tp_vec, tp);
15554 }
15555
15556 return tp_vec;
15557 }
15558
15559 \f
15560 /* This help string is used for the break, hbreak, tbreak and thbreak
15561 commands. It is defined as a macro to prevent duplication.
15562 COMMAND should be a string constant containing the name of the
15563 command. */
15564 #define BREAK_ARGS_HELP(command) \
15565 command" [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] [if CONDITION]\n\
15566 PROBE_MODIFIER shall be present if the command is to be placed in a\n\
15567 probe point. Accepted values are `-probe' (for a generic, automatically\n\
15568 guessed probe type) or `-probe-stap' (for a SystemTap probe).\n\
15569 LOCATION may be a line number, function name, or \"*\" and an address.\n\
15570 If a line number is specified, break at start of code for that line.\n\
15571 If a function is specified, break at start of code for that function.\n\
15572 If an address is specified, break at that exact address.\n\
15573 With no LOCATION, uses current execution address of the selected\n\
15574 stack frame. This is useful for breaking on return to a stack frame.\n\
15575 \n\
15576 THREADNUM is the number from \"info threads\".\n\
15577 CONDITION is a boolean expression.\n\
15578 \n\
15579 Multiple breakpoints at one place are permitted, and useful if their\n\
15580 conditions are different.\n\
15581 \n\
15582 Do \"help breakpoints\" for info on other commands dealing with breakpoints."
15583
15584 /* List of subcommands for "catch". */
15585 static struct cmd_list_element *catch_cmdlist;
15586
15587 /* List of subcommands for "tcatch". */
15588 static struct cmd_list_element *tcatch_cmdlist;
15589
15590 void
15591 add_catch_command (char *name, char *docstring,
15592 void (*sfunc) (char *args, int from_tty,
15593 struct cmd_list_element *command),
15594 completer_ftype *completer,
15595 void *user_data_catch,
15596 void *user_data_tcatch)
15597 {
15598 struct cmd_list_element *command;
15599
15600 command = add_cmd (name, class_breakpoint, NULL, docstring,
15601 &catch_cmdlist);
15602 set_cmd_sfunc (command, sfunc);
15603 set_cmd_context (command, user_data_catch);
15604 set_cmd_completer (command, completer);
15605
15606 command = add_cmd (name, class_breakpoint, NULL, docstring,
15607 &tcatch_cmdlist);
15608 set_cmd_sfunc (command, sfunc);
15609 set_cmd_context (command, user_data_tcatch);
15610 set_cmd_completer (command, completer);
15611 }
15612
15613 static void
15614 clear_syscall_counts (struct inferior *inf)
15615 {
15616 struct catch_syscall_inferior_data *inf_data
15617 = get_catch_syscall_inferior_data (inf);
15618
15619 inf_data->total_syscalls_count = 0;
15620 inf_data->any_syscall_count = 0;
15621 VEC_free (int, inf_data->syscalls_counts);
15622 }
15623
15624 static void
15625 save_command (char *arg, int from_tty)
15626 {
15627 printf_unfiltered (_("\"save\" must be followed by "
15628 "the name of a save subcommand.\n"));
15629 help_list (save_cmdlist, "save ", -1, gdb_stdout);
15630 }
15631
15632 struct breakpoint *
15633 iterate_over_breakpoints (int (*callback) (struct breakpoint *, void *),
15634 void *data)
15635 {
15636 struct breakpoint *b, *b_tmp;
15637
15638 ALL_BREAKPOINTS_SAFE (b, b_tmp)
15639 {
15640 if ((*callback) (b, data))
15641 return b;
15642 }
15643
15644 return NULL;
15645 }
15646
15647 /* Zero if any of the breakpoint's locations could be a location where
15648 functions have been inlined, nonzero otherwise. */
15649
15650 static int
15651 is_non_inline_function (struct breakpoint *b)
15652 {
15653 /* The shared library event breakpoint is set on the address of a
15654 non-inline function. */
15655 if (b->type == bp_shlib_event)
15656 return 1;
15657
15658 return 0;
15659 }
15660
15661 /* Nonzero if the specified PC cannot be a location where functions
15662 have been inlined. */
15663
15664 int
15665 pc_at_non_inline_function (struct address_space *aspace, CORE_ADDR pc,
15666 const struct target_waitstatus *ws)
15667 {
15668 struct breakpoint *b;
15669 struct bp_location *bl;
15670
15671 ALL_BREAKPOINTS (b)
15672 {
15673 if (!is_non_inline_function (b))
15674 continue;
15675
15676 for (bl = b->loc; bl != NULL; bl = bl->next)
15677 {
15678 if (!bl->shlib_disabled
15679 && bpstat_check_location (bl, aspace, pc, ws))
15680 return 1;
15681 }
15682 }
15683
15684 return 0;
15685 }
15686
15687 void
15688 initialize_breakpoint_ops (void)
15689 {
15690 static int initialized = 0;
15691
15692 struct breakpoint_ops *ops;
15693
15694 if (initialized)
15695 return;
15696 initialized = 1;
15697
15698 /* The breakpoint_ops structure to be inherit by all kinds of
15699 breakpoints (real breakpoints, i.e., user "break" breakpoints,
15700 internal and momentary breakpoints, etc.). */
15701 ops = &bkpt_base_breakpoint_ops;
15702 *ops = base_breakpoint_ops;
15703 ops->re_set = bkpt_re_set;
15704 ops->insert_location = bkpt_insert_location;
15705 ops->remove_location = bkpt_remove_location;
15706 ops->breakpoint_hit = bkpt_breakpoint_hit;
15707 ops->create_sals_from_address = bkpt_create_sals_from_address;
15708 ops->create_breakpoints_sal = bkpt_create_breakpoints_sal;
15709 ops->decode_linespec = bkpt_decode_linespec;
15710
15711 /* The breakpoint_ops structure to be used in regular breakpoints. */
15712 ops = &bkpt_breakpoint_ops;
15713 *ops = bkpt_base_breakpoint_ops;
15714 ops->re_set = bkpt_re_set;
15715 ops->resources_needed = bkpt_resources_needed;
15716 ops->print_it = bkpt_print_it;
15717 ops->print_mention = bkpt_print_mention;
15718 ops->print_recreate = bkpt_print_recreate;
15719
15720 /* Ranged breakpoints. */
15721 ops = &ranged_breakpoint_ops;
15722 *ops = bkpt_breakpoint_ops;
15723 ops->breakpoint_hit = breakpoint_hit_ranged_breakpoint;
15724 ops->resources_needed = resources_needed_ranged_breakpoint;
15725 ops->print_it = print_it_ranged_breakpoint;
15726 ops->print_one = print_one_ranged_breakpoint;
15727 ops->print_one_detail = print_one_detail_ranged_breakpoint;
15728 ops->print_mention = print_mention_ranged_breakpoint;
15729 ops->print_recreate = print_recreate_ranged_breakpoint;
15730
15731 /* Internal breakpoints. */
15732 ops = &internal_breakpoint_ops;
15733 *ops = bkpt_base_breakpoint_ops;
15734 ops->re_set = internal_bkpt_re_set;
15735 ops->check_status = internal_bkpt_check_status;
15736 ops->print_it = internal_bkpt_print_it;
15737 ops->print_mention = internal_bkpt_print_mention;
15738
15739 /* Momentary breakpoints. */
15740 ops = &momentary_breakpoint_ops;
15741 *ops = bkpt_base_breakpoint_ops;
15742 ops->re_set = momentary_bkpt_re_set;
15743 ops->check_status = momentary_bkpt_check_status;
15744 ops->print_it = momentary_bkpt_print_it;
15745 ops->print_mention = momentary_bkpt_print_mention;
15746
15747 /* Momentary breakpoints for bp_longjmp and bp_exception. */
15748 ops = &longjmp_breakpoint_ops;
15749 *ops = momentary_breakpoint_ops;
15750 ops->dtor = longjmp_bkpt_dtor;
15751
15752 /* Probe breakpoints. */
15753 ops = &bkpt_probe_breakpoint_ops;
15754 *ops = bkpt_breakpoint_ops;
15755 ops->insert_location = bkpt_probe_insert_location;
15756 ops->remove_location = bkpt_probe_remove_location;
15757 ops->create_sals_from_address = bkpt_probe_create_sals_from_address;
15758 ops->decode_linespec = bkpt_probe_decode_linespec;
15759
15760 /* GNU v3 exception catchpoints. */
15761 ops = &gnu_v3_exception_catchpoint_ops;
15762 *ops = bkpt_breakpoint_ops;
15763 ops->print_it = print_it_exception_catchpoint;
15764 ops->print_one = print_one_exception_catchpoint;
15765 ops->print_mention = print_mention_exception_catchpoint;
15766 ops->print_recreate = print_recreate_exception_catchpoint;
15767
15768 /* Watchpoints. */
15769 ops = &watchpoint_breakpoint_ops;
15770 *ops = base_breakpoint_ops;
15771 ops->dtor = dtor_watchpoint;
15772 ops->re_set = re_set_watchpoint;
15773 ops->insert_location = insert_watchpoint;
15774 ops->remove_location = remove_watchpoint;
15775 ops->breakpoint_hit = breakpoint_hit_watchpoint;
15776 ops->check_status = check_status_watchpoint;
15777 ops->resources_needed = resources_needed_watchpoint;
15778 ops->works_in_software_mode = works_in_software_mode_watchpoint;
15779 ops->print_it = print_it_watchpoint;
15780 ops->print_mention = print_mention_watchpoint;
15781 ops->print_recreate = print_recreate_watchpoint;
15782
15783 /* Masked watchpoints. */
15784 ops = &masked_watchpoint_breakpoint_ops;
15785 *ops = watchpoint_breakpoint_ops;
15786 ops->insert_location = insert_masked_watchpoint;
15787 ops->remove_location = remove_masked_watchpoint;
15788 ops->resources_needed = resources_needed_masked_watchpoint;
15789 ops->works_in_software_mode = works_in_software_mode_masked_watchpoint;
15790 ops->print_it = print_it_masked_watchpoint;
15791 ops->print_one_detail = print_one_detail_masked_watchpoint;
15792 ops->print_mention = print_mention_masked_watchpoint;
15793 ops->print_recreate = print_recreate_masked_watchpoint;
15794
15795 /* Tracepoints. */
15796 ops = &tracepoint_breakpoint_ops;
15797 *ops = base_breakpoint_ops;
15798 ops->re_set = tracepoint_re_set;
15799 ops->breakpoint_hit = tracepoint_breakpoint_hit;
15800 ops->print_one_detail = tracepoint_print_one_detail;
15801 ops->print_mention = tracepoint_print_mention;
15802 ops->print_recreate = tracepoint_print_recreate;
15803 ops->create_sals_from_address = tracepoint_create_sals_from_address;
15804 ops->create_breakpoints_sal = tracepoint_create_breakpoints_sal;
15805 ops->decode_linespec = tracepoint_decode_linespec;
15806
15807 /* Probe tracepoints. */
15808 ops = &tracepoint_probe_breakpoint_ops;
15809 *ops = tracepoint_breakpoint_ops;
15810 ops->create_sals_from_address = tracepoint_probe_create_sals_from_address;
15811 ops->decode_linespec = tracepoint_probe_decode_linespec;
15812
15813 /* Static tracepoints with marker (`-m'). */
15814 ops = &strace_marker_breakpoint_ops;
15815 *ops = tracepoint_breakpoint_ops;
15816 ops->create_sals_from_address = strace_marker_create_sals_from_address;
15817 ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
15818 ops->decode_linespec = strace_marker_decode_linespec;
15819
15820 /* Fork catchpoints. */
15821 ops = &catch_fork_breakpoint_ops;
15822 *ops = base_breakpoint_ops;
15823 ops->insert_location = insert_catch_fork;
15824 ops->remove_location = remove_catch_fork;
15825 ops->breakpoint_hit = breakpoint_hit_catch_fork;
15826 ops->print_it = print_it_catch_fork;
15827 ops->print_one = print_one_catch_fork;
15828 ops->print_mention = print_mention_catch_fork;
15829 ops->print_recreate = print_recreate_catch_fork;
15830
15831 /* Vfork catchpoints. */
15832 ops = &catch_vfork_breakpoint_ops;
15833 *ops = base_breakpoint_ops;
15834 ops->insert_location = insert_catch_vfork;
15835 ops->remove_location = remove_catch_vfork;
15836 ops->breakpoint_hit = breakpoint_hit_catch_vfork;
15837 ops->print_it = print_it_catch_vfork;
15838 ops->print_one = print_one_catch_vfork;
15839 ops->print_mention = print_mention_catch_vfork;
15840 ops->print_recreate = print_recreate_catch_vfork;
15841
15842 /* Exec catchpoints. */
15843 ops = &catch_exec_breakpoint_ops;
15844 *ops = base_breakpoint_ops;
15845 ops->dtor = dtor_catch_exec;
15846 ops->insert_location = insert_catch_exec;
15847 ops->remove_location = remove_catch_exec;
15848 ops->breakpoint_hit = breakpoint_hit_catch_exec;
15849 ops->print_it = print_it_catch_exec;
15850 ops->print_one = print_one_catch_exec;
15851 ops->print_mention = print_mention_catch_exec;
15852 ops->print_recreate = print_recreate_catch_exec;
15853
15854 /* Syscall catchpoints. */
15855 ops = &catch_syscall_breakpoint_ops;
15856 *ops = base_breakpoint_ops;
15857 ops->dtor = dtor_catch_syscall;
15858 ops->insert_location = insert_catch_syscall;
15859 ops->remove_location = remove_catch_syscall;
15860 ops->breakpoint_hit = breakpoint_hit_catch_syscall;
15861 ops->print_it = print_it_catch_syscall;
15862 ops->print_one = print_one_catch_syscall;
15863 ops->print_mention = print_mention_catch_syscall;
15864 ops->print_recreate = print_recreate_catch_syscall;
15865
15866 /* Solib-related catchpoints. */
15867 ops = &catch_solib_breakpoint_ops;
15868 *ops = base_breakpoint_ops;
15869 ops->dtor = dtor_catch_solib;
15870 ops->insert_location = insert_catch_solib;
15871 ops->remove_location = remove_catch_solib;
15872 ops->breakpoint_hit = breakpoint_hit_catch_solib;
15873 ops->check_status = check_status_catch_solib;
15874 ops->print_it = print_it_catch_solib;
15875 ops->print_one = print_one_catch_solib;
15876 ops->print_mention = print_mention_catch_solib;
15877 ops->print_recreate = print_recreate_catch_solib;
15878
15879 ops = &dprintf_breakpoint_ops;
15880 *ops = bkpt_base_breakpoint_ops;
15881 ops->re_set = bkpt_re_set;
15882 ops->resources_needed = bkpt_resources_needed;
15883 ops->print_it = bkpt_print_it;
15884 ops->print_mention = bkpt_print_mention;
15885 ops->print_recreate = bkpt_print_recreate;
15886 }
15887
15888 /* Chain containing all defined "enable breakpoint" subcommands. */
15889
15890 static struct cmd_list_element *enablebreaklist = NULL;
15891
15892 void
15893 _initialize_breakpoint (void)
15894 {
15895 struct cmd_list_element *c;
15896
15897 initialize_breakpoint_ops ();
15898
15899 observer_attach_solib_unloaded (disable_breakpoints_in_unloaded_shlib);
15900 observer_attach_inferior_exit (clear_syscall_counts);
15901 observer_attach_memory_changed (invalidate_bp_value_on_memory_change);
15902
15903 breakpoint_objfile_key
15904 = register_objfile_data_with_cleanup (NULL, free_breakpoint_probes);
15905
15906 catch_syscall_inferior_data
15907 = register_inferior_data_with_cleanup (NULL,
15908 catch_syscall_inferior_data_cleanup);
15909
15910 breakpoint_chain = 0;
15911 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
15912 before a breakpoint is set. */
15913 breakpoint_count = 0;
15914
15915 tracepoint_count = 0;
15916
15917 add_com ("ignore", class_breakpoint, ignore_command, _("\
15918 Set ignore-count of breakpoint number N to COUNT.\n\
15919 Usage is `ignore N COUNT'."));
15920 if (xdb_commands)
15921 add_com_alias ("bc", "ignore", class_breakpoint, 1);
15922
15923 add_com ("commands", class_breakpoint, commands_command, _("\
15924 Set commands to be executed when a breakpoint is hit.\n\
15925 Give breakpoint number as argument after \"commands\".\n\
15926 With no argument, the targeted breakpoint is the last one set.\n\
15927 The commands themselves follow starting on the next line.\n\
15928 Type a line containing \"end\" to indicate the end of them.\n\
15929 Give \"silent\" as the first line to make the breakpoint silent;\n\
15930 then no output is printed when it is hit, except what the commands print."));
15931
15932 c = add_com ("condition", class_breakpoint, condition_command, _("\
15933 Specify breakpoint number N to break only if COND is true.\n\
15934 Usage is `condition N COND', where N is an integer and COND is an\n\
15935 expression to be evaluated whenever breakpoint N is reached."));
15936 set_cmd_completer (c, condition_completer);
15937
15938 c = add_com ("tbreak", class_breakpoint, tbreak_command, _("\
15939 Set a temporary breakpoint.\n\
15940 Like \"break\" except the breakpoint is only temporary,\n\
15941 so it will be deleted when hit. Equivalent to \"break\" followed\n\
15942 by using \"enable delete\" on the breakpoint number.\n\
15943 \n"
15944 BREAK_ARGS_HELP ("tbreak")));
15945 set_cmd_completer (c, location_completer);
15946
15947 c = add_com ("hbreak", class_breakpoint, hbreak_command, _("\
15948 Set a hardware assisted breakpoint.\n\
15949 Like \"break\" except the breakpoint requires hardware support,\n\
15950 some target hardware may not have this support.\n\
15951 \n"
15952 BREAK_ARGS_HELP ("hbreak")));
15953 set_cmd_completer (c, location_completer);
15954
15955 c = add_com ("thbreak", class_breakpoint, thbreak_command, _("\
15956 Set a temporary hardware assisted breakpoint.\n\
15957 Like \"hbreak\" except the breakpoint is only temporary,\n\
15958 so it will be deleted when hit.\n\
15959 \n"
15960 BREAK_ARGS_HELP ("thbreak")));
15961 set_cmd_completer (c, location_completer);
15962
15963 add_prefix_cmd ("enable", class_breakpoint, enable_command, _("\
15964 Enable some breakpoints.\n\
15965 Give breakpoint numbers (separated by spaces) as arguments.\n\
15966 With no subcommand, breakpoints are enabled until you command otherwise.\n\
15967 This is used to cancel the effect of the \"disable\" command.\n\
15968 With a subcommand you can enable temporarily."),
15969 &enablelist, "enable ", 1, &cmdlist);
15970 if (xdb_commands)
15971 add_com ("ab", class_breakpoint, enable_command, _("\
15972 Enable some breakpoints.\n\
15973 Give breakpoint numbers (separated by spaces) as arguments.\n\
15974 With no subcommand, breakpoints are enabled until you command otherwise.\n\
15975 This is used to cancel the effect of the \"disable\" command.\n\
15976 With a subcommand you can enable temporarily."));
15977
15978 add_com_alias ("en", "enable", class_breakpoint, 1);
15979
15980 add_prefix_cmd ("breakpoints", class_breakpoint, enable_command, _("\
15981 Enable some breakpoints.\n\
15982 Give breakpoint numbers (separated by spaces) as arguments.\n\
15983 This is used to cancel the effect of the \"disable\" command.\n\
15984 May be abbreviated to simply \"enable\".\n"),
15985 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
15986
15987 add_cmd ("once", no_class, enable_once_command, _("\
15988 Enable breakpoints for one hit. Give breakpoint numbers.\n\
15989 If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
15990 &enablebreaklist);
15991
15992 add_cmd ("delete", no_class, enable_delete_command, _("\
15993 Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
15994 If a breakpoint is hit while enabled in this fashion, it is deleted."),
15995 &enablebreaklist);
15996
15997 add_cmd ("count", no_class, enable_count_command, _("\
15998 Enable breakpoints for COUNT hits. Give count and then breakpoint numbers.\n\
15999 If a breakpoint is hit while enabled in this fashion,\n\
16000 the count is decremented; when it reaches zero, the breakpoint is disabled."),
16001 &enablebreaklist);
16002
16003 add_cmd ("delete", no_class, enable_delete_command, _("\
16004 Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
16005 If a breakpoint is hit while enabled in this fashion, it is deleted."),
16006 &enablelist);
16007
16008 add_cmd ("once", no_class, enable_once_command, _("\
16009 Enable breakpoints for one hit. Give breakpoint numbers.\n\
16010 If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
16011 &enablelist);
16012
16013 add_cmd ("count", no_class, enable_count_command, _("\
16014 Enable breakpoints for COUNT hits. Give count and then breakpoint numbers.\n\
16015 If a breakpoint is hit while enabled in this fashion,\n\
16016 the count is decremented; when it reaches zero, the breakpoint is disabled."),
16017 &enablelist);
16018
16019 add_prefix_cmd ("disable", class_breakpoint, disable_command, _("\
16020 Disable some breakpoints.\n\
16021 Arguments are breakpoint numbers with spaces in between.\n\
16022 To disable all breakpoints, give no argument.\n\
16023 A disabled breakpoint is not forgotten, but has no effect until re-enabled."),
16024 &disablelist, "disable ", 1, &cmdlist);
16025 add_com_alias ("dis", "disable", class_breakpoint, 1);
16026 add_com_alias ("disa", "disable", class_breakpoint, 1);
16027 if (xdb_commands)
16028 add_com ("sb", class_breakpoint, disable_command, _("\
16029 Disable some breakpoints.\n\
16030 Arguments are breakpoint numbers with spaces in between.\n\
16031 To disable all breakpoints, give no argument.\n\
16032 A disabled breakpoint is not forgotten, but has no effect until re-enabled."));
16033
16034 add_cmd ("breakpoints", class_alias, disable_command, _("\
16035 Disable some breakpoints.\n\
16036 Arguments are breakpoint numbers with spaces in between.\n\
16037 To disable all breakpoints, give no argument.\n\
16038 A disabled breakpoint is not forgotten, but has no effect until re-enabled.\n\
16039 This command may be abbreviated \"disable\"."),
16040 &disablelist);
16041
16042 add_prefix_cmd ("delete", class_breakpoint, delete_command, _("\
16043 Delete some breakpoints or auto-display expressions.\n\
16044 Arguments are breakpoint numbers with spaces in between.\n\
16045 To delete all breakpoints, give no argument.\n\
16046 \n\
16047 Also a prefix command for deletion of other GDB objects.\n\
16048 The \"unset\" command is also an alias for \"delete\"."),
16049 &deletelist, "delete ", 1, &cmdlist);
16050 add_com_alias ("d", "delete", class_breakpoint, 1);
16051 add_com_alias ("del", "delete", class_breakpoint, 1);
16052 if (xdb_commands)
16053 add_com ("db", class_breakpoint, delete_command, _("\
16054 Delete some breakpoints.\n\
16055 Arguments are breakpoint numbers with spaces in between.\n\
16056 To delete all breakpoints, give no argument.\n"));
16057
16058 add_cmd ("breakpoints", class_alias, delete_command, _("\
16059 Delete some breakpoints or auto-display expressions.\n\
16060 Arguments are breakpoint numbers with spaces in between.\n\
16061 To delete all breakpoints, give no argument.\n\
16062 This command may be abbreviated \"delete\"."),
16063 &deletelist);
16064
16065 add_com ("clear", class_breakpoint, clear_command, _("\
16066 Clear breakpoint at specified line or function.\n\
16067 Argument may be line number, function name, or \"*\" and an address.\n\
16068 If line number is specified, all breakpoints in that line are cleared.\n\
16069 If function is specified, breakpoints at beginning of function are cleared.\n\
16070 If an address is specified, breakpoints at that address are cleared.\n\
16071 \n\
16072 With no argument, clears all breakpoints in the line that the selected frame\n\
16073 is executing in.\n\
16074 \n\
16075 See also the \"delete\" command which clears breakpoints by number."));
16076 add_com_alias ("cl", "clear", class_breakpoint, 1);
16077
16078 c = add_com ("break", class_breakpoint, break_command, _("\
16079 Set breakpoint at specified line or function.\n"
16080 BREAK_ARGS_HELP ("break")));
16081 set_cmd_completer (c, location_completer);
16082
16083 add_com_alias ("b", "break", class_run, 1);
16084 add_com_alias ("br", "break", class_run, 1);
16085 add_com_alias ("bre", "break", class_run, 1);
16086 add_com_alias ("brea", "break", class_run, 1);
16087
16088 if (xdb_commands)
16089 add_com_alias ("ba", "break", class_breakpoint, 1);
16090
16091 if (dbx_commands)
16092 {
16093 add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command, _("\
16094 Break in function/address or break at a line in the current file."),
16095 &stoplist, "stop ", 1, &cmdlist);
16096 add_cmd ("in", class_breakpoint, stopin_command,
16097 _("Break in function or address."), &stoplist);
16098 add_cmd ("at", class_breakpoint, stopat_command,
16099 _("Break at a line in the current file."), &stoplist);
16100 add_com ("status", class_info, breakpoints_info, _("\
16101 Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
16102 The \"Type\" column indicates one of:\n\
16103 \tbreakpoint - normal breakpoint\n\
16104 \twatchpoint - watchpoint\n\
16105 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
16106 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
16107 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
16108 address and file/line number respectively.\n\
16109 \n\
16110 Convenience variable \"$_\" and default examine address for \"x\"\n\
16111 are set to the address of the last breakpoint listed unless the command\n\
16112 is prefixed with \"server \".\n\n\
16113 Convenience variable \"$bpnum\" contains the number of the last\n\
16114 breakpoint set."));
16115 }
16116
16117 add_info ("breakpoints", breakpoints_info, _("\
16118 Status of specified breakpoints (all user-settable breakpoints if no argument).\n\
16119 The \"Type\" column indicates one of:\n\
16120 \tbreakpoint - normal breakpoint\n\
16121 \twatchpoint - watchpoint\n\
16122 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
16123 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
16124 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
16125 address and file/line number respectively.\n\
16126 \n\
16127 Convenience variable \"$_\" and default examine address for \"x\"\n\
16128 are set to the address of the last breakpoint listed unless the command\n\
16129 is prefixed with \"server \".\n\n\
16130 Convenience variable \"$bpnum\" contains the number of the last\n\
16131 breakpoint set."));
16132
16133 add_info_alias ("b", "breakpoints", 1);
16134
16135 if (xdb_commands)
16136 add_com ("lb", class_breakpoint, breakpoints_info, _("\
16137 Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
16138 The \"Type\" column indicates one of:\n\
16139 \tbreakpoint - normal breakpoint\n\
16140 \twatchpoint - watchpoint\n\
16141 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
16142 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
16143 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
16144 address and file/line number respectively.\n\
16145 \n\
16146 Convenience variable \"$_\" and default examine address for \"x\"\n\
16147 are set to the address of the last breakpoint listed unless the command\n\
16148 is prefixed with \"server \".\n\n\
16149 Convenience variable \"$bpnum\" contains the number of the last\n\
16150 breakpoint set."));
16151
16152 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints, _("\
16153 Status of all breakpoints, or breakpoint number NUMBER.\n\
16154 The \"Type\" column indicates one of:\n\
16155 \tbreakpoint - normal breakpoint\n\
16156 \twatchpoint - watchpoint\n\
16157 \tlongjmp - internal breakpoint used to step through longjmp()\n\
16158 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
16159 \tuntil - internal breakpoint used by the \"until\" command\n\
16160 \tfinish - internal breakpoint used by the \"finish\" command\n\
16161 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
16162 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
16163 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
16164 address and file/line number respectively.\n\
16165 \n\
16166 Convenience variable \"$_\" and default examine address for \"x\"\n\
16167 are set to the address of the last breakpoint listed unless the command\n\
16168 is prefixed with \"server \".\n\n\
16169 Convenience variable \"$bpnum\" contains the number of the last\n\
16170 breakpoint set."),
16171 &maintenanceinfolist);
16172
16173 add_prefix_cmd ("catch", class_breakpoint, catch_command, _("\
16174 Set catchpoints to catch events."),
16175 &catch_cmdlist, "catch ",
16176 0/*allow-unknown*/, &cmdlist);
16177
16178 add_prefix_cmd ("tcatch", class_breakpoint, tcatch_command, _("\
16179 Set temporary catchpoints to catch events."),
16180 &tcatch_cmdlist, "tcatch ",
16181 0/*allow-unknown*/, &cmdlist);
16182
16183 /* Add catch and tcatch sub-commands. */
16184 add_catch_command ("catch", _("\
16185 Catch an exception, when caught."),
16186 catch_catch_command,
16187 NULL,
16188 CATCH_PERMANENT,
16189 CATCH_TEMPORARY);
16190 add_catch_command ("throw", _("\
16191 Catch an exception, when thrown."),
16192 catch_throw_command,
16193 NULL,
16194 CATCH_PERMANENT,
16195 CATCH_TEMPORARY);
16196 add_catch_command ("fork", _("Catch calls to fork."),
16197 catch_fork_command_1,
16198 NULL,
16199 (void *) (uintptr_t) catch_fork_permanent,
16200 (void *) (uintptr_t) catch_fork_temporary);
16201 add_catch_command ("vfork", _("Catch calls to vfork."),
16202 catch_fork_command_1,
16203 NULL,
16204 (void *) (uintptr_t) catch_vfork_permanent,
16205 (void *) (uintptr_t) catch_vfork_temporary);
16206 add_catch_command ("exec", _("Catch calls to exec."),
16207 catch_exec_command_1,
16208 NULL,
16209 CATCH_PERMANENT,
16210 CATCH_TEMPORARY);
16211 add_catch_command ("load", _("Catch loads of shared libraries.\n\
16212 Usage: catch load [REGEX]\n\
16213 If REGEX is given, only stop for libraries matching the regular expression."),
16214 catch_load_command_1,
16215 NULL,
16216 CATCH_PERMANENT,
16217 CATCH_TEMPORARY);
16218 add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
16219 Usage: catch unload [REGEX]\n\
16220 If REGEX is given, only stop for libraries matching the regular expression."),
16221 catch_unload_command_1,
16222 NULL,
16223 CATCH_PERMANENT,
16224 CATCH_TEMPORARY);
16225 add_catch_command ("syscall", _("\
16226 Catch system calls by their names and/or numbers.\n\
16227 Arguments say which system calls to catch. If no arguments\n\
16228 are given, every system call will be caught.\n\
16229 Arguments, if given, should be one or more system call names\n\
16230 (if your system supports that), or system call numbers."),
16231 catch_syscall_command_1,
16232 catch_syscall_completer,
16233 CATCH_PERMANENT,
16234 CATCH_TEMPORARY);
16235
16236 c = add_com ("watch", class_breakpoint, watch_command, _("\
16237 Set a watchpoint for an expression.\n\
16238 Usage: watch [-l|-location] EXPRESSION\n\
16239 A watchpoint stops execution of your program whenever the value of\n\
16240 an expression changes.\n\
16241 If -l or -location is given, this evaluates EXPRESSION and watches\n\
16242 the memory to which it refers."));
16243 set_cmd_completer (c, expression_completer);
16244
16245 c = add_com ("rwatch", class_breakpoint, rwatch_command, _("\
16246 Set a read watchpoint for an expression.\n\
16247 Usage: rwatch [-l|-location] EXPRESSION\n\
16248 A watchpoint stops execution of your program whenever the value of\n\
16249 an expression is read.\n\
16250 If -l or -location is given, this evaluates EXPRESSION and watches\n\
16251 the memory to which it refers."));
16252 set_cmd_completer (c, expression_completer);
16253
16254 c = add_com ("awatch", class_breakpoint, awatch_command, _("\
16255 Set a watchpoint for an expression.\n\
16256 Usage: awatch [-l|-location] EXPRESSION\n\
16257 A watchpoint stops execution of your program whenever the value of\n\
16258 an expression is either read or written.\n\
16259 If -l or -location is given, this evaluates EXPRESSION and watches\n\
16260 the memory to which it refers."));
16261 set_cmd_completer (c, expression_completer);
16262
16263 add_info ("watchpoints", watchpoints_info, _("\
16264 Status of specified watchpoints (all watchpoints if no argument)."));
16265
16266 /* XXX: cagney/2005-02-23: This should be a boolean, and should
16267 respond to changes - contrary to the description. */
16268 add_setshow_zinteger_cmd ("can-use-hw-watchpoints", class_support,
16269 &can_use_hw_watchpoints, _("\
16270 Set debugger's willingness to use watchpoint hardware."), _("\
16271 Show debugger's willingness to use watchpoint hardware."), _("\
16272 If zero, gdb will not use hardware for new watchpoints, even if\n\
16273 such is available. (However, any hardware watchpoints that were\n\
16274 created before setting this to nonzero, will continue to use watchpoint\n\
16275 hardware.)"),
16276 NULL,
16277 show_can_use_hw_watchpoints,
16278 &setlist, &showlist);
16279
16280 can_use_hw_watchpoints = 1;
16281
16282 /* Tracepoint manipulation commands. */
16283
16284 c = add_com ("trace", class_breakpoint, trace_command, _("\
16285 Set a tracepoint at specified line or function.\n\
16286 \n"
16287 BREAK_ARGS_HELP ("trace") "\n\
16288 Do \"help tracepoints\" for info on other tracepoint commands."));
16289 set_cmd_completer (c, location_completer);
16290
16291 add_com_alias ("tp", "trace", class_alias, 0);
16292 add_com_alias ("tr", "trace", class_alias, 1);
16293 add_com_alias ("tra", "trace", class_alias, 1);
16294 add_com_alias ("trac", "trace", class_alias, 1);
16295
16296 c = add_com ("ftrace", class_breakpoint, ftrace_command, _("\
16297 Set a fast tracepoint at specified line or function.\n\
16298 \n"
16299 BREAK_ARGS_HELP ("ftrace") "\n\
16300 Do \"help tracepoints\" for info on other tracepoint commands."));
16301 set_cmd_completer (c, location_completer);
16302
16303 c = add_com ("strace", class_breakpoint, strace_command, _("\
16304 Set a static tracepoint at specified line, function or marker.\n\
16305 \n\
16306 strace [LOCATION] [if CONDITION]\n\
16307 LOCATION may be a line number, function name, \"*\" and an address,\n\
16308 or -m MARKER_ID.\n\
16309 If a line number is specified, probe the marker at start of code\n\
16310 for that line. If a function is specified, probe the marker at start\n\
16311 of code for that function. If an address is specified, probe the marker\n\
16312 at that exact address. If a marker id is specified, probe the marker\n\
16313 with that name. With no LOCATION, uses current execution address of\n\
16314 the selected stack frame.\n\
16315 Static tracepoints accept an extra collect action -- ``collect $_sdata''.\n\
16316 This collects arbitrary user data passed in the probe point call to the\n\
16317 tracing library. You can inspect it when analyzing the trace buffer,\n\
16318 by printing the $_sdata variable like any other convenience variable.\n\
16319 \n\
16320 CONDITION is a boolean expression.\n\
16321 \n\
16322 Multiple tracepoints at one place are permitted, and useful if their\n\
16323 conditions are different.\n\
16324 \n\
16325 Do \"help breakpoints\" for info on other commands dealing with breakpoints.\n\
16326 Do \"help tracepoints\" for info on other tracepoint commands."));
16327 set_cmd_completer (c, location_completer);
16328
16329 add_info ("tracepoints", tracepoints_info, _("\
16330 Status of specified tracepoints (all tracepoints if no argument).\n\
16331 Convenience variable \"$tpnum\" contains the number of the\n\
16332 last tracepoint set."));
16333
16334 add_info_alias ("tp", "tracepoints", 1);
16335
16336 add_cmd ("tracepoints", class_trace, delete_trace_command, _("\
16337 Delete specified tracepoints.\n\
16338 Arguments are tracepoint numbers, separated by spaces.\n\
16339 No argument means delete all tracepoints."),
16340 &deletelist);
16341
16342 c = add_cmd ("tracepoints", class_trace, disable_trace_command, _("\
16343 Disable specified tracepoints.\n\
16344 Arguments are tracepoint numbers, separated by spaces.\n\
16345 No argument means disable all tracepoints."),
16346 &disablelist);
16347 deprecate_cmd (c, "disable");
16348
16349 c = add_cmd ("tracepoints", class_trace, enable_trace_command, _("\
16350 Enable specified tracepoints.\n\
16351 Arguments are tracepoint numbers, separated by spaces.\n\
16352 No argument means enable all tracepoints."),
16353 &enablelist);
16354 deprecate_cmd (c, "enable");
16355
16356 add_com ("passcount", class_trace, trace_pass_command, _("\
16357 Set the passcount for a tracepoint.\n\
16358 The trace will end when the tracepoint has been passed 'count' times.\n\
16359 Usage: passcount COUNT TPNUM, where TPNUM may also be \"all\";\n\
16360 if TPNUM is omitted, passcount refers to the last tracepoint defined."));
16361
16362 add_prefix_cmd ("save", class_breakpoint, save_command,
16363 _("Save breakpoint definitions as a script."),
16364 &save_cmdlist, "save ",
16365 0/*allow-unknown*/, &cmdlist);
16366
16367 c = add_cmd ("breakpoints", class_breakpoint, save_breakpoints_command, _("\
16368 Save current breakpoint definitions as a script.\n\
16369 This includes all types of breakpoints (breakpoints, watchpoints,\n\
16370 catchpoints, tracepoints). Use the 'source' command in another debug\n\
16371 session to restore them."),
16372 &save_cmdlist);
16373 set_cmd_completer (c, filename_completer);
16374
16375 c = add_cmd ("tracepoints", class_trace, save_tracepoints_command, _("\
16376 Save current tracepoint definitions as a script.\n\
16377 Use the 'source' command in another debug session to restore them."),
16378 &save_cmdlist);
16379 set_cmd_completer (c, filename_completer);
16380
16381 c = add_com_alias ("save-tracepoints", "save tracepoints", class_trace, 0);
16382 deprecate_cmd (c, "save tracepoints");
16383
16384 add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, _("\
16385 Breakpoint specific settings\n\
16386 Configure various breakpoint-specific variables such as\n\
16387 pending breakpoint behavior"),
16388 &breakpoint_set_cmdlist, "set breakpoint ",
16389 0/*allow-unknown*/, &setlist);
16390 add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, _("\
16391 Breakpoint specific settings\n\
16392 Configure various breakpoint-specific variables such as\n\
16393 pending breakpoint behavior"),
16394 &breakpoint_show_cmdlist, "show breakpoint ",
16395 0/*allow-unknown*/, &showlist);
16396
16397 add_setshow_auto_boolean_cmd ("pending", no_class,
16398 &pending_break_support, _("\
16399 Set debugger's behavior regarding pending breakpoints."), _("\
16400 Show debugger's behavior regarding pending breakpoints."), _("\
16401 If on, an unrecognized breakpoint location will cause gdb to create a\n\
16402 pending breakpoint. If off, an unrecognized breakpoint location results in\n\
16403 an error. If auto, an unrecognized breakpoint location results in a\n\
16404 user-query to see if a pending breakpoint should be created."),
16405 NULL,
16406 show_pending_break_support,
16407 &breakpoint_set_cmdlist,
16408 &breakpoint_show_cmdlist);
16409
16410 pending_break_support = AUTO_BOOLEAN_AUTO;
16411
16412 add_setshow_boolean_cmd ("auto-hw", no_class,
16413 &automatic_hardware_breakpoints, _("\
16414 Set automatic usage of hardware breakpoints."), _("\
16415 Show automatic usage of hardware breakpoints."), _("\
16416 If set, the debugger will automatically use hardware breakpoints for\n\
16417 breakpoints set with \"break\" but falling in read-only memory. If not set,\n\
16418 a warning will be emitted for such breakpoints."),
16419 NULL,
16420 show_automatic_hardware_breakpoints,
16421 &breakpoint_set_cmdlist,
16422 &breakpoint_show_cmdlist);
16423
16424 add_setshow_auto_boolean_cmd ("always-inserted", class_support,
16425 &always_inserted_mode, _("\
16426 Set mode for inserting breakpoints."), _("\
16427 Show mode for inserting breakpoints."), _("\
16428 When this mode is off, breakpoints are inserted in inferior when it is\n\
16429 resumed, and removed when execution stops. When this mode is on,\n\
16430 breakpoints are inserted immediately and removed only when the user\n\
16431 deletes the breakpoint. When this mode is auto (which is the default),\n\
16432 the behaviour depends on the non-stop setting (see help set non-stop).\n\
16433 In this case, if gdb is controlling the inferior in non-stop mode, gdb\n\
16434 behaves as if always-inserted mode is on; if gdb is controlling the\n\
16435 inferior in all-stop mode, gdb behaves as if always-inserted mode is off."),
16436 NULL,
16437 &show_always_inserted_mode,
16438 &breakpoint_set_cmdlist,
16439 &breakpoint_show_cmdlist);
16440
16441 add_setshow_enum_cmd ("condition-evaluation", class_breakpoint,
16442 condition_evaluation_enums,
16443 &condition_evaluation_mode_1, _("\
16444 Set mode of breakpoint condition evaluation."), _("\
16445 Show mode of breakpoint condition evaluation."), _("\
16446 When this is set to \"host\", breakpoint conditions will be\n\
16447 evaluated on the host's side by GDB. When it is set to \"target\",\n\
16448 breakpoint conditions will be downloaded to the target (if the target\n\
16449 supports such feature) and conditions will be evaluated on the target's side.\n\
16450 If this is set to \"auto\" (default), this will be automatically set to\n\
16451 \"target\" if it supports condition evaluation, otherwise it will\n\
16452 be set to \"gdb\""),
16453 &set_condition_evaluation_mode,
16454 &show_condition_evaluation_mode,
16455 &breakpoint_set_cmdlist,
16456 &breakpoint_show_cmdlist);
16457
16458 add_com ("break-range", class_breakpoint, break_range_command, _("\
16459 Set a breakpoint for an address range.\n\
16460 break-range START-LOCATION, END-LOCATION\n\
16461 where START-LOCATION and END-LOCATION can be one of the following:\n\
16462 LINENUM, for that line in the current file,\n\
16463 FILE:LINENUM, for that line in that file,\n\
16464 +OFFSET, for that number of lines after the current line\n\
16465 or the start of the range\n\
16466 FUNCTION, for the first line in that function,\n\
16467 FILE:FUNCTION, to distinguish among like-named static functions.\n\
16468 *ADDRESS, for the instruction at that address.\n\
16469 \n\
16470 The breakpoint will stop execution of the inferior whenever it executes\n\
16471 an instruction at any address within the [START-LOCATION, END-LOCATION]\n\
16472 range (including START-LOCATION and END-LOCATION)."));
16473
16474 c = add_com ("dprintf", class_breakpoint, dprintf_command, _("\
16475 Set a dynamic printf at specified line or function.\n\
16476 dprintf location,format string,arg1,arg2,...\n\
16477 location may be a line number, function name, or \"*\" and an address.\n\
16478 If a line number is specified, break at start of code for that line.\n\
16479 If a function is specified, break at start of code for that function.\n\
16480 "));
16481 set_cmd_completer (c, location_completer);
16482
16483 add_setshow_enum_cmd ("dprintf-style", class_support,
16484 dprintf_style_enums, &dprintf_style, _("\
16485 Set the style of usage for dynamic printf."), _("\
16486 Show the style of usage for dynamic printf."), _("\
16487 This setting chooses how GDB will do a dynamic printf.\n\
16488 If the value is \"gdb\", then the printing is done by GDB to its own\n\
16489 console, as with the \"printf\" command.\n\
16490 If the value is \"call\", the print is done by calling a function in your\n\
16491 program; by default printf(), but you can choose a different function or\n\
16492 output stream by setting dprintf-function and dprintf-channel."),
16493 update_dprintf_commands, NULL,
16494 &setlist, &showlist);
16495
16496 dprintf_function = xstrdup ("printf");
16497 add_setshow_string_cmd ("dprintf-function", class_support,
16498 &dprintf_function, _("\
16499 Set the function to use for dynamic printf"), _("\
16500 Show the function to use for dynamic printf"), NULL,
16501 update_dprintf_commands, NULL,
16502 &setlist, &showlist);
16503
16504 dprintf_channel = xstrdup ("");
16505 add_setshow_string_cmd ("dprintf-channel", class_support,
16506 &dprintf_channel, _("\
16507 Set the channel to use for dynamic printf"), _("\
16508 Show the channel to use for dynamic printf"), NULL,
16509 update_dprintf_commands, NULL,
16510 &setlist, &showlist);
16511
16512 add_setshow_boolean_cmd ("disconnected-dprintf", no_class,
16513 &disconnected_dprintf, _("\
16514 Set whether dprintf continues after GDB disconnects."), _("\
16515 Show whether dprintf continues after GDB disconnects."), _("\
16516 Use this to let dprintf commands continue to hit and produce output\n\
16517 even if GDB disconnects or detaches from the target."),
16518 NULL,
16519 NULL,
16520 &setlist, &showlist);
16521
16522 add_com ("agent-printf", class_vars, agent_printf_command, _("\
16523 agent-printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
16524 (target agent only) This is useful for formatted output in user-defined commands."));
16525
16526 automatic_hardware_breakpoints = 1;
16527
16528 observer_attach_about_to_proceed (breakpoint_about_to_proceed);
16529 }
This page took 0.375193 seconds and 4 git commands to generate.