* solib-svr4.c (enable_break): Don't attempt to place breakpoints,
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2
3 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
5 2008, 2009, 2010 Free Software Foundation, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include <ctype.h>
25 #include "hashtab.h"
26 #include "symtab.h"
27 #include "frame.h"
28 #include "breakpoint.h"
29 #include "tracepoint.h"
30 #include "gdbtypes.h"
31 #include "expression.h"
32 #include "gdbcore.h"
33 #include "gdbcmd.h"
34 #include "value.h"
35 #include "command.h"
36 #include "inferior.h"
37 #include "gdbthread.h"
38 #include "target.h"
39 #include "language.h"
40 #include "gdb_string.h"
41 #include "demangle.h"
42 #include "annotate.h"
43 #include "symfile.h"
44 #include "objfiles.h"
45 #include "source.h"
46 #include "linespec.h"
47 #include "completer.h"
48 #include "gdb.h"
49 #include "ui-out.h"
50 #include "cli/cli-script.h"
51 #include "gdb_assert.h"
52 #include "block.h"
53 #include "solib.h"
54 #include "solist.h"
55 #include "observer.h"
56 #include "exceptions.h"
57 #include "memattr.h"
58 #include "ada-lang.h"
59 #include "top.h"
60 #include "wrapper.h"
61 #include "valprint.h"
62 #include "jit.h"
63 #include "xml-syscall.h"
64 #include "parser-defs.h"
65
66 /* readline include files */
67 #include "readline/readline.h"
68 #include "readline/history.h"
69
70 /* readline defines this. */
71 #undef savestring
72
73 #include "mi/mi-common.h"
74
75 /* Arguments to pass as context to some catch command handlers. */
76 #define CATCH_PERMANENT ((void *) (uintptr_t) 0)
77 #define CATCH_TEMPORARY ((void *) (uintptr_t) 1)
78
79 /* Prototypes for local functions. */
80
81 static void enable_delete_command (char *, int);
82
83 static void enable_once_command (char *, int);
84
85 static void disable_command (char *, int);
86
87 static void enable_command (char *, int);
88
89 static void map_breakpoint_numbers (char *, void (*) (struct breakpoint *,
90 void *),
91 void *);
92
93 static void ignore_command (char *, int);
94
95 static int breakpoint_re_set_one (void *);
96
97 static void clear_command (char *, int);
98
99 static void catch_command (char *, int);
100
101 static int can_use_hardware_watchpoint (struct value *);
102
103 static void break_command_1 (char *, int, int);
104
105 static void mention (struct breakpoint *);
106
107 /* This function is used in gdbtk sources and thus can not be made static. */
108 struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch,
109 struct symtab_and_line,
110 enum bptype);
111
112 static void breakpoint_adjustment_warning (CORE_ADDR, CORE_ADDR, int, int);
113
114 static CORE_ADDR adjust_breakpoint_address (struct gdbarch *gdbarch,
115 CORE_ADDR bpaddr,
116 enum bptype bptype);
117
118 static void describe_other_breakpoints (struct gdbarch *,
119 struct program_space *, CORE_ADDR,
120 struct obj_section *, int);
121
122 static int breakpoint_address_match (struct address_space *aspace1,
123 CORE_ADDR addr1,
124 struct address_space *aspace2,
125 CORE_ADDR addr2);
126
127 static int watchpoint_locations_match (struct bp_location *loc1,
128 struct bp_location *loc2);
129
130 static void breakpoints_info (char *, int);
131
132 static void watchpoints_info (char *, int);
133
134 static int breakpoint_1 (int, int, int (*) (const struct breakpoint *));
135
136 static int breakpoint_cond_eval (void *);
137
138 static void cleanup_executing_breakpoints (void *);
139
140 static void commands_command (char *, int);
141
142 static void condition_command (char *, int);
143
144 static int get_number_trailer (char **, int);
145
146 typedef enum
147 {
148 mark_inserted,
149 mark_uninserted
150 }
151 insertion_state_t;
152
153 static int remove_breakpoint (struct bp_location *, insertion_state_t);
154 static int remove_breakpoint_1 (struct bp_location *, insertion_state_t);
155
156 static enum print_stop_action print_it_typical (bpstat);
157
158 static enum print_stop_action print_bp_stop_message (bpstat bs);
159
160 static int watchpoint_check (void *);
161
162 static void maintenance_info_breakpoints (char *, int);
163
164 static int hw_breakpoint_used_count (void);
165
166 static int hw_watchpoint_used_count (enum bptype, int *);
167
168 static void hbreak_command (char *, int);
169
170 static void thbreak_command (char *, int);
171
172 static void do_enable_breakpoint (struct breakpoint *, enum bpdisp);
173
174 static void stop_command (char *arg, int from_tty);
175
176 static void stopin_command (char *arg, int from_tty);
177
178 static void stopat_command (char *arg, int from_tty);
179
180 static char *ep_parse_optional_if_clause (char **arg);
181
182 static void catch_exception_command_1 (enum exception_event_kind ex_event,
183 char *arg, int tempflag, int from_tty);
184
185 static void tcatch_command (char *arg, int from_tty);
186
187 static void ep_skip_leading_whitespace (char **s);
188
189 static void detach_single_step_breakpoints (void);
190
191 static int single_step_breakpoint_inserted_here_p (struct address_space *,
192 CORE_ADDR pc);
193
194 static void free_bp_location (struct bp_location *loc);
195 static void incref_bp_location (struct bp_location *loc);
196 static void decref_bp_location (struct bp_location **loc);
197
198 static struct bp_location *allocate_bp_location (struct breakpoint *bpt);
199
200 static void update_global_location_list (int);
201
202 static void update_global_location_list_nothrow (int);
203
204 static int is_hardware_watchpoint (const struct breakpoint *bpt);
205
206 static int is_watchpoint (const struct breakpoint *bpt);
207
208 static void insert_breakpoint_locations (void);
209
210 static int syscall_catchpoint_p (struct breakpoint *b);
211
212 static void tracepoints_info (char *, int);
213
214 static void delete_trace_command (char *, int);
215
216 static void enable_trace_command (char *, int);
217
218 static void disable_trace_command (char *, int);
219
220 static void trace_pass_command (char *, int);
221
222 /* Assuming we're creating a static tracepoint, does S look like a
223 static tracepoint marker spec ("-m MARKER_ID")? */
224 #define is_marker_spec(s) \
225 (s != NULL && strncmp (s, "-m", 2) == 0 && ((s)[2] == ' ' || (s)[2] == '\t'))
226
227 /* A reference-counted struct command_line. This lets multiple
228 breakpoints share a single command list. */
229 struct counted_command_line
230 {
231 /* The reference count. */
232 int refc;
233
234 /* The command list. */
235 struct command_line *commands;
236 };
237
238 struct command_line *
239 breakpoint_commands (struct breakpoint *b)
240 {
241 return b->commands ? b->commands->commands : NULL;
242 }
243
244 /* Flag indicating that a command has proceeded the inferior past the
245 current breakpoint. */
246
247 static int breakpoint_proceeded;
248
249 static const char *
250 bpdisp_text (enum bpdisp disp)
251 {
252 /* NOTE: the following values are a part of MI protocol and represent
253 values of 'disp' field returned when inferior stops at a breakpoint. */
254 static const char * const bpdisps[] = {"del", "dstp", "dis", "keep"};
255
256 return bpdisps[(int) disp];
257 }
258
259 /* Prototypes for exported functions. */
260 /* If FALSE, gdb will not use hardware support for watchpoints, even
261 if such is available. */
262 static int can_use_hw_watchpoints;
263
264 static void
265 show_can_use_hw_watchpoints (struct ui_file *file, int from_tty,
266 struct cmd_list_element *c,
267 const char *value)
268 {
269 fprintf_filtered (file, _("\
270 Debugger's willingness to use watchpoint hardware is %s.\n"),
271 value);
272 }
273
274 /* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
275 If AUTO_BOOLEAN_TRUE, gdb will automatically create pending breakpoints
276 for unrecognized breakpoint locations.
277 If AUTO_BOOLEAN_AUTO, gdb will query when breakpoints are unrecognized. */
278 static enum auto_boolean pending_break_support;
279 static void
280 show_pending_break_support (struct ui_file *file, int from_tty,
281 struct cmd_list_element *c,
282 const char *value)
283 {
284 fprintf_filtered (file, _("\
285 Debugger's behavior regarding pending breakpoints is %s.\n"),
286 value);
287 }
288
289 /* If 1, gdb will automatically use hardware breakpoints for breakpoints
290 set with "break" but falling in read-only memory.
291 If 0, gdb will warn about such breakpoints, but won't automatically
292 use hardware breakpoints. */
293 static int automatic_hardware_breakpoints;
294 static void
295 show_automatic_hardware_breakpoints (struct ui_file *file, int from_tty,
296 struct cmd_list_element *c,
297 const char *value)
298 {
299 fprintf_filtered (file, _("\
300 Automatic usage of hardware breakpoints is %s.\n"),
301 value);
302 }
303
304 /* If on, gdb will keep breakpoints inserted even as inferior is
305 stopped, and immediately insert any new breakpoints. If off, gdb
306 will insert breakpoints into inferior only when resuming it, and
307 will remove breakpoints upon stop. If auto, GDB will behave as ON
308 if in non-stop mode, and as OFF if all-stop mode.*/
309
310 static const char always_inserted_auto[] = "auto";
311 static const char always_inserted_on[] = "on";
312 static const char always_inserted_off[] = "off";
313 static const char *always_inserted_enums[] = {
314 always_inserted_auto,
315 always_inserted_off,
316 always_inserted_on,
317 NULL
318 };
319 static const char *always_inserted_mode = always_inserted_auto;
320 static void
321 show_always_inserted_mode (struct ui_file *file, int from_tty,
322 struct cmd_list_element *c, const char *value)
323 {
324 if (always_inserted_mode == always_inserted_auto)
325 fprintf_filtered (file, _("\
326 Always inserted breakpoint mode is %s (currently %s).\n"),
327 value,
328 breakpoints_always_inserted_mode () ? "on" : "off");
329 else
330 fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"), value);
331 }
332
333 int
334 breakpoints_always_inserted_mode (void)
335 {
336 return (always_inserted_mode == always_inserted_on
337 || (always_inserted_mode == always_inserted_auto && non_stop));
338 }
339
340 void _initialize_breakpoint (void);
341
342 /* Are we executing breakpoint commands? */
343 static int executing_breakpoint_commands;
344
345 /* Are overlay event breakpoints enabled? */
346 static int overlay_events_enabled;
347
348 /* Walk the following statement or block through all breakpoints.
349 ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
350 breakpoint. */
351
352 #define ALL_BREAKPOINTS(B) for (B = breakpoint_chain; B; B = B->next)
353
354 #define ALL_BREAKPOINTS_SAFE(B,TMP) \
355 for (B = breakpoint_chain; \
356 B ? (TMP=B->next, 1): 0; \
357 B = TMP)
358
359 /* Similar iterator for the low-level breakpoints. SAFE variant is not
360 provided so update_global_location_list must not be called while executing
361 the block of ALL_BP_LOCATIONS. */
362
363 #define ALL_BP_LOCATIONS(B,BP_TMP) \
364 for (BP_TMP = bp_location; \
365 BP_TMP < bp_location + bp_location_count && (B = *BP_TMP); \
366 BP_TMP++)
367
368 /* Iterator for tracepoints only. */
369
370 #define ALL_TRACEPOINTS(B) \
371 for (B = breakpoint_chain; B; B = B->next) \
372 if (is_tracepoint (B))
373
374 /* Chains of all breakpoints defined. */
375
376 struct breakpoint *breakpoint_chain;
377
378 /* Array is sorted by bp_location_compare - primarily by the ADDRESS. */
379
380 static struct bp_location **bp_location;
381
382 /* Number of elements of BP_LOCATION. */
383
384 static unsigned bp_location_count;
385
386 /* Maximum alignment offset between bp_target_info.PLACED_ADDRESS and ADDRESS
387 for the current elements of BP_LOCATION which get a valid result from
388 bp_location_has_shadow. You can use it for roughly limiting the subrange of
389 BP_LOCATION to scan for shadow bytes for an address you need to read. */
390
391 static CORE_ADDR bp_location_placed_address_before_address_max;
392
393 /* Maximum offset plus alignment between
394 bp_target_info.PLACED_ADDRESS + bp_target_info.SHADOW_LEN and ADDRESS for
395 the current elements of BP_LOCATION which get a valid result from
396 bp_location_has_shadow. You can use it for roughly limiting the subrange of
397 BP_LOCATION to scan for shadow bytes for an address you need to read. */
398
399 static CORE_ADDR bp_location_shadow_len_after_address_max;
400
401 /* The locations that no longer correspond to any breakpoint,
402 unlinked from bp_location array, but for which a hit
403 may still be reported by a target. */
404 VEC(bp_location_p) *moribund_locations = NULL;
405
406 /* Number of last breakpoint made. */
407
408 static int breakpoint_count;
409
410 /* The value of `breakpoint_count' before the last command that
411 created breakpoints. If the last (break-like) command created more
412 than one breakpoint, then the difference between BREAKPOINT_COUNT
413 and PREV_BREAKPOINT_COUNT is more than one. */
414 static int prev_breakpoint_count;
415
416 /* Number of last tracepoint made. */
417
418 static int tracepoint_count;
419
420 static struct cmd_list_element *breakpoint_set_cmdlist;
421 static struct cmd_list_element *breakpoint_show_cmdlist;
422 struct cmd_list_element *save_cmdlist;
423
424 /* Return whether a breakpoint is an active enabled breakpoint. */
425 static int
426 breakpoint_enabled (struct breakpoint *b)
427 {
428 return (b->enable_state == bp_enabled);
429 }
430
431 /* Set breakpoint count to NUM. */
432
433 static void
434 set_breakpoint_count (int num)
435 {
436 prev_breakpoint_count = breakpoint_count;
437 breakpoint_count = num;
438 set_internalvar_integer (lookup_internalvar ("bpnum"), num);
439 }
440
441 /* Used by `start_rbreak_breakpoints' below, to record the current
442 breakpoint count before "rbreak" creates any breakpoint. */
443 static int rbreak_start_breakpoint_count;
444
445 /* Called at the start an "rbreak" command to record the first
446 breakpoint made. */
447
448 void
449 start_rbreak_breakpoints (void)
450 {
451 rbreak_start_breakpoint_count = breakpoint_count;
452 }
453
454 /* Called at the end of an "rbreak" command to record the last
455 breakpoint made. */
456
457 void
458 end_rbreak_breakpoints (void)
459 {
460 prev_breakpoint_count = rbreak_start_breakpoint_count;
461 }
462
463 /* Used in run_command to zero the hit count when a new run starts. */
464
465 void
466 clear_breakpoint_hit_counts (void)
467 {
468 struct breakpoint *b;
469
470 ALL_BREAKPOINTS (b)
471 b->hit_count = 0;
472 }
473
474 /* Allocate a new counted_command_line with reference count of 1.
475 The new structure owns COMMANDS. */
476
477 static struct counted_command_line *
478 alloc_counted_command_line (struct command_line *commands)
479 {
480 struct counted_command_line *result
481 = xmalloc (sizeof (struct counted_command_line));
482
483 result->refc = 1;
484 result->commands = commands;
485 return result;
486 }
487
488 /* Increment reference count. This does nothing if CMD is NULL. */
489
490 static void
491 incref_counted_command_line (struct counted_command_line *cmd)
492 {
493 if (cmd)
494 ++cmd->refc;
495 }
496
497 /* Decrement reference count. If the reference count reaches 0,
498 destroy the counted_command_line. Sets *CMDP to NULL. This does
499 nothing if *CMDP is NULL. */
500
501 static void
502 decref_counted_command_line (struct counted_command_line **cmdp)
503 {
504 if (*cmdp)
505 {
506 if (--(*cmdp)->refc == 0)
507 {
508 free_command_lines (&(*cmdp)->commands);
509 xfree (*cmdp);
510 }
511 *cmdp = NULL;
512 }
513 }
514
515 /* A cleanup function that calls decref_counted_command_line. */
516
517 static void
518 do_cleanup_counted_command_line (void *arg)
519 {
520 decref_counted_command_line (arg);
521 }
522
523 /* Create a cleanup that calls decref_counted_command_line on the
524 argument. */
525
526 static struct cleanup *
527 make_cleanup_decref_counted_command_line (struct counted_command_line **cmdp)
528 {
529 return make_cleanup (do_cleanup_counted_command_line, cmdp);
530 }
531
532 /* Default address, symtab and line to put a breakpoint at
533 for "break" command with no arg.
534 if default_breakpoint_valid is zero, the other three are
535 not valid, and "break" with no arg is an error.
536
537 This set by print_stack_frame, which calls set_default_breakpoint. */
538
539 int default_breakpoint_valid;
540 CORE_ADDR default_breakpoint_address;
541 struct symtab *default_breakpoint_symtab;
542 int default_breakpoint_line;
543 struct program_space *default_breakpoint_pspace;
544
545 \f
546 /* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
547 Advance *PP after the string and any trailing whitespace.
548
549 Currently the string can either be a number or "$" followed by the name
550 of a convenience variable. Making it an expression wouldn't work well
551 for map_breakpoint_numbers (e.g. "4 + 5 + 6").
552
553 If the string is a NULL pointer, that denotes the last breakpoint.
554
555 TRAILER is a character which can be found after the number; most
556 commonly this is `-'. If you don't want a trailer, use \0. */
557 static int
558 get_number_trailer (char **pp, int trailer)
559 {
560 int retval = 0; /* default */
561 char *p = *pp;
562
563 if (p == NULL)
564 /* Empty line means refer to the last breakpoint. */
565 return breakpoint_count;
566 else if (*p == '$')
567 {
568 /* Make a copy of the name, so we can null-terminate it
569 to pass to lookup_internalvar(). */
570 char *varname;
571 char *start = ++p;
572 LONGEST val;
573
574 while (isalnum (*p) || *p == '_')
575 p++;
576 varname = (char *) alloca (p - start + 1);
577 strncpy (varname, start, p - start);
578 varname[p - start] = '\0';
579 if (get_internalvar_integer (lookup_internalvar (varname), &val))
580 retval = (int) val;
581 else
582 {
583 printf_filtered (_("Convenience variable must have integer value.\n"));
584 retval = 0;
585 }
586 }
587 else
588 {
589 if (*p == '-')
590 ++p;
591 while (*p >= '0' && *p <= '9')
592 ++p;
593 if (p == *pp)
594 /* There is no number here. (e.g. "cond a == b"). */
595 {
596 /* Skip non-numeric token */
597 while (*p && !isspace((int) *p))
598 ++p;
599 /* Return zero, which caller must interpret as error. */
600 retval = 0;
601 }
602 else
603 retval = atoi (*pp);
604 }
605 if (!(isspace (*p) || *p == '\0' || *p == trailer))
606 {
607 /* Trailing junk: return 0 and let caller print error msg. */
608 while (!(isspace (*p) || *p == '\0' || *p == trailer))
609 ++p;
610 retval = 0;
611 }
612 while (isspace (*p))
613 p++;
614 *pp = p;
615 return retval;
616 }
617
618
619 /* Like get_number_trailer, but don't allow a trailer. */
620 int
621 get_number (char **pp)
622 {
623 return get_number_trailer (pp, '\0');
624 }
625
626 /* Parse a number or a range.
627 * A number will be of the form handled by get_number.
628 * A range will be of the form <number1> - <number2>, and
629 * will represent all the integers between number1 and number2,
630 * inclusive.
631 *
632 * While processing a range, this fuction is called iteratively;
633 * At each call it will return the next value in the range.
634 *
635 * At the beginning of parsing a range, the char pointer PP will
636 * be advanced past <number1> and left pointing at the '-' token.
637 * Subsequent calls will not advance the pointer until the range
638 * is completed. The call that completes the range will advance
639 * pointer PP past <number2>.
640 */
641
642 int
643 get_number_or_range (char **pp)
644 {
645 static int last_retval, end_value;
646 static char *end_ptr;
647 static int in_range = 0;
648
649 if (**pp != '-')
650 {
651 /* Default case: pp is pointing either to a solo number,
652 or to the first number of a range. */
653 last_retval = get_number_trailer (pp, '-');
654 if (**pp == '-')
655 {
656 char **temp;
657
658 /* This is the start of a range (<number1> - <number2>).
659 Skip the '-', parse and remember the second number,
660 and also remember the end of the final token. */
661
662 temp = &end_ptr;
663 end_ptr = *pp + 1;
664 while (isspace ((int) *end_ptr))
665 end_ptr++; /* skip white space */
666 end_value = get_number (temp);
667 if (end_value < last_retval)
668 {
669 error (_("inverted range"));
670 }
671 else if (end_value == last_retval)
672 {
673 /* degenerate range (number1 == number2). Advance the
674 token pointer so that the range will be treated as a
675 single number. */
676 *pp = end_ptr;
677 }
678 else
679 in_range = 1;
680 }
681 }
682 else if (! in_range)
683 error (_("negative value"));
684 else
685 {
686 /* pp points to the '-' that betokens a range. All
687 number-parsing has already been done. Return the next
688 integer value (one greater than the saved previous value).
689 Do not advance the token pointer 'pp' until the end of range
690 is reached. */
691
692 if (++last_retval == end_value)
693 {
694 /* End of range reached; advance token pointer. */
695 *pp = end_ptr;
696 in_range = 0;
697 }
698 }
699 return last_retval;
700 }
701
702 /* Return the breakpoint with the specified number, or NULL
703 if the number does not refer to an existing breakpoint. */
704
705 struct breakpoint *
706 get_breakpoint (int num)
707 {
708 struct breakpoint *b;
709
710 ALL_BREAKPOINTS (b)
711 if (b->number == num)
712 return b;
713
714 return NULL;
715 }
716
717 \f
718
719 void
720 set_breakpoint_condition (struct breakpoint *b, char *exp,
721 int from_tty)
722 {
723 struct bp_location *loc = b->loc;
724
725 for (; loc; loc = loc->next)
726 {
727 xfree (loc->cond);
728 loc->cond = NULL;
729 }
730 xfree (b->cond_string);
731 b->cond_string = NULL;
732 xfree (b->cond_exp);
733 b->cond_exp = NULL;
734
735 if (*exp == 0)
736 {
737 if (from_tty)
738 printf_filtered (_("Breakpoint %d now unconditional.\n"), b->number);
739 }
740 else
741 {
742 char *arg = exp;
743
744 /* I don't know if it matters whether this is the string the user
745 typed in or the decompiled expression. */
746 b->cond_string = xstrdup (arg);
747 b->condition_not_parsed = 0;
748
749 if (is_watchpoint (b))
750 {
751 innermost_block = NULL;
752 arg = exp;
753 b->cond_exp = parse_exp_1 (&arg, 0, 0);
754 if (*arg)
755 error (_("Junk at end of expression"));
756 b->cond_exp_valid_block = innermost_block;
757 }
758 else
759 {
760 for (loc = b->loc; loc; loc = loc->next)
761 {
762 arg = exp;
763 loc->cond =
764 parse_exp_1 (&arg, block_for_pc (loc->address), 0);
765 if (*arg)
766 error (_("Junk at end of expression"));
767 }
768 }
769 }
770 breakpoints_changed ();
771 observer_notify_breakpoint_modified (b->number);
772 }
773
774 /* condition N EXP -- set break condition of breakpoint N to EXP. */
775
776 static void
777 condition_command (char *arg, int from_tty)
778 {
779 struct breakpoint *b;
780 char *p;
781 int bnum;
782
783 if (arg == 0)
784 error_no_arg (_("breakpoint number"));
785
786 p = arg;
787 bnum = get_number (&p);
788 if (bnum == 0)
789 error (_("Bad breakpoint argument: '%s'"), arg);
790
791 ALL_BREAKPOINTS (b)
792 if (b->number == bnum)
793 {
794 set_breakpoint_condition (b, p, from_tty);
795 return;
796 }
797
798 error (_("No breakpoint number %d."), bnum);
799 }
800
801 /* Check that COMMAND do not contain commands that are suitable
802 only for tracepoints and not suitable for ordinary breakpoints.
803 Throw if any such commands is found.
804 */
805 static void
806 check_no_tracepoint_commands (struct command_line *commands)
807 {
808 struct command_line *c;
809
810 for (c = commands; c; c = c->next)
811 {
812 int i;
813
814 if (c->control_type == while_stepping_control)
815 error (_("The 'while-stepping' command can only be used for tracepoints"));
816
817 for (i = 0; i < c->body_count; ++i)
818 check_no_tracepoint_commands ((c->body_list)[i]);
819
820 /* Not that command parsing removes leading whitespace and comment
821 lines and also empty lines. So, we only need to check for
822 command directly. */
823 if (strstr (c->line, "collect ") == c->line)
824 error (_("The 'collect' command can only be used for tracepoints"));
825
826 if (strstr (c->line, "teval ") == c->line)
827 error (_("The 'teval' command can only be used for tracepoints"));
828 }
829 }
830
831 /* Encapsulate tests for different types of tracepoints. */
832
833 int
834 is_tracepoint (const struct breakpoint *b)
835 {
836 return (b->type == bp_tracepoint
837 || b->type == bp_fast_tracepoint
838 || b->type == bp_static_tracepoint);
839 }
840
841 /* A helper function that validsates that COMMANDS are valid for a
842 breakpoint. This function will throw an exception if a problem is
843 found. */
844
845 static void
846 validate_commands_for_breakpoint (struct breakpoint *b,
847 struct command_line *commands)
848 {
849 if (is_tracepoint (b))
850 {
851 /* We need to verify that each top-level element of commands
852 is valid for tracepoints, that there's at most one while-stepping
853 element, and that while-stepping's body has valid tracing commands
854 excluding nested while-stepping. */
855 struct command_line *c;
856 struct command_line *while_stepping = 0;
857 for (c = commands; c; c = c->next)
858 {
859 if (c->control_type == while_stepping_control)
860 {
861 if (b->type == bp_fast_tracepoint)
862 error (_("\
863 The 'while-stepping' command cannot be used for fast tracepoint"));
864 else if (b->type == bp_static_tracepoint)
865 error (_("\
866 The 'while-stepping' command cannot be used for static tracepoint"));
867
868 if (while_stepping)
869 error (_("The 'while-stepping' command can be used only once"));
870 else
871 while_stepping = c;
872 }
873 }
874 if (while_stepping)
875 {
876 struct command_line *c2;
877
878 gdb_assert (while_stepping->body_count == 1);
879 c2 = while_stepping->body_list[0];
880 for (; c2; c2 = c2->next)
881 {
882 if (c2->control_type == while_stepping_control)
883 error (_("The 'while-stepping' command cannot be nested"));
884 }
885 }
886 }
887 else
888 {
889 check_no_tracepoint_commands (commands);
890 }
891 }
892
893 /* Return a vector of all the static tracepoints set at ADDR. The
894 caller is responsible for releasing the vector. */
895
896 VEC(breakpoint_p) *
897 static_tracepoints_here (CORE_ADDR addr)
898 {
899 struct breakpoint *b;
900 VEC(breakpoint_p) *found = 0;
901 struct bp_location *loc;
902
903 ALL_BREAKPOINTS (b)
904 if (b->type == bp_static_tracepoint)
905 {
906 for (loc = b->loc; loc; loc = loc->next)
907 if (loc->address == addr)
908 VEC_safe_push(breakpoint_p, found, b);
909 }
910
911 return found;
912 }
913
914 /* Set the command list of B to COMMANDS. If breakpoint is tracepoint,
915 validate that only allowed commands are included.
916 */
917
918 void
919 breakpoint_set_commands (struct breakpoint *b, struct command_line *commands)
920 {
921 validate_commands_for_breakpoint (b, commands);
922
923 decref_counted_command_line (&b->commands);
924 b->commands = alloc_counted_command_line (commands);
925 breakpoints_changed ();
926 observer_notify_breakpoint_modified (b->number);
927 }
928
929 void
930 check_tracepoint_command (char *line, void *closure)
931 {
932 struct breakpoint *b = closure;
933
934 validate_actionline (&line, b);
935 }
936
937 /* A structure used to pass information through
938 map_breakpoint_numbers. */
939
940 struct commands_info
941 {
942 /* True if the command was typed at a tty. */
943 int from_tty;
944
945 /* The breakpoint range spec. */
946 char *arg;
947
948 /* Non-NULL if the body of the commands are being read from this
949 already-parsed command. */
950 struct command_line *control;
951
952 /* The command lines read from the user, or NULL if they have not
953 yet been read. */
954 struct counted_command_line *cmd;
955 };
956
957 /* A callback for map_breakpoint_numbers that sets the commands for
958 commands_command. */
959
960 static void
961 do_map_commands_command (struct breakpoint *b, void *data)
962 {
963 struct commands_info *info = data;
964
965 if (info->cmd == NULL)
966 {
967 struct command_line *l;
968
969 if (info->control != NULL)
970 l = copy_command_lines (info->control->body_list[0]);
971 else
972 {
973 struct cleanup *old_chain;
974 char *str;
975
976 str = xstrprintf (_("Type commands for breakpoint(s) %s, one per line."),
977 info->arg);
978
979 old_chain = make_cleanup (xfree, str);
980
981 l = read_command_lines (str,
982 info->from_tty, 1,
983 (is_tracepoint (b)
984 ? check_tracepoint_command : 0),
985 b);
986
987 do_cleanups (old_chain);
988 }
989
990 info->cmd = alloc_counted_command_line (l);
991 }
992
993 /* If a breakpoint was on the list more than once, we don't need to
994 do anything. */
995 if (b->commands != info->cmd)
996 {
997 validate_commands_for_breakpoint (b, info->cmd->commands);
998 incref_counted_command_line (info->cmd);
999 decref_counted_command_line (&b->commands);
1000 b->commands = info->cmd;
1001 breakpoints_changed ();
1002 observer_notify_breakpoint_modified (b->number);
1003 }
1004 }
1005
1006 static void
1007 commands_command_1 (char *arg, int from_tty, struct command_line *control)
1008 {
1009 struct cleanup *cleanups;
1010 struct commands_info info;
1011
1012 info.from_tty = from_tty;
1013 info.control = control;
1014 info.cmd = NULL;
1015 /* If we read command lines from the user, then `info' will hold an
1016 extra reference to the commands that we must clean up. */
1017 cleanups = make_cleanup_decref_counted_command_line (&info.cmd);
1018
1019 if (arg == NULL || !*arg)
1020 {
1021 if (breakpoint_count - prev_breakpoint_count > 1)
1022 arg = xstrprintf ("%d-%d", prev_breakpoint_count + 1, breakpoint_count);
1023 else if (breakpoint_count > 0)
1024 arg = xstrprintf ("%d", breakpoint_count);
1025 else
1026 {
1027 /* So that we don't try to free the incoming non-NULL
1028 argument in the cleanup below. Mapping breakpoint
1029 numbers will fail in this case. */
1030 arg = NULL;
1031 }
1032 }
1033 else
1034 /* The command loop has some static state, so we need to preserve
1035 our argument. */
1036 arg = xstrdup (arg);
1037
1038 if (arg != NULL)
1039 make_cleanup (xfree, arg);
1040
1041 info.arg = arg;
1042
1043 map_breakpoint_numbers (arg, do_map_commands_command, &info);
1044
1045 if (info.cmd == NULL)
1046 error (_("No breakpoints specified."));
1047
1048 do_cleanups (cleanups);
1049 }
1050
1051 static void
1052 commands_command (char *arg, int from_tty)
1053 {
1054 commands_command_1 (arg, from_tty, NULL);
1055 }
1056
1057 /* Like commands_command, but instead of reading the commands from
1058 input stream, takes them from an already parsed command structure.
1059
1060 This is used by cli-script.c to DTRT with breakpoint commands
1061 that are part of if and while bodies. */
1062 enum command_control_type
1063 commands_from_control_command (char *arg, struct command_line *cmd)
1064 {
1065 commands_command_1 (arg, 0, cmd);
1066 return simple_control;
1067 }
1068
1069 /* Return non-zero if BL->TARGET_INFO contains valid information. */
1070
1071 static int
1072 bp_location_has_shadow (struct bp_location *bl)
1073 {
1074 if (bl->loc_type != bp_loc_software_breakpoint)
1075 return 0;
1076 if (!bl->inserted)
1077 return 0;
1078 if (bl->target_info.shadow_len == 0)
1079 /* bp isn't valid, or doesn't shadow memory. */
1080 return 0;
1081 return 1;
1082 }
1083
1084 /* Update BUF, which is LEN bytes read from the target address MEMADDR,
1085 by replacing any memory breakpoints with their shadowed contents.
1086
1087 The range of shadowed area by each bp_location is:
1088 b->address - bp_location_placed_address_before_address_max
1089 up to b->address + bp_location_shadow_len_after_address_max
1090 The range we were requested to resolve shadows for is:
1091 memaddr ... memaddr + len
1092 Thus the safe cutoff boundaries for performance optimization are
1093 memaddr + len <= b->address - bp_location_placed_address_before_address_max
1094 and:
1095 b->address + bp_location_shadow_len_after_address_max <= memaddr */
1096
1097 void
1098 breakpoint_restore_shadows (gdb_byte *buf, ULONGEST memaddr, LONGEST len)
1099 {
1100 /* Left boundary, right boundary and median element of our binary search. */
1101 unsigned bc_l, bc_r, bc;
1102
1103 /* Find BC_L which is a leftmost element which may affect BUF content. It is
1104 safe to report lower value but a failure to report higher one. */
1105
1106 bc_l = 0;
1107 bc_r = bp_location_count;
1108 while (bc_l + 1 < bc_r)
1109 {
1110 struct bp_location *b;
1111
1112 bc = (bc_l + bc_r) / 2;
1113 b = bp_location[bc];
1114
1115 /* Check first B->ADDRESS will not overflow due to the added constant.
1116 Then advance the left boundary only if we are sure the BC element can
1117 in no way affect the BUF content (MEMADDR to MEMADDR + LEN range).
1118
1119 Use the BP_LOCATION_SHADOW_LEN_AFTER_ADDRESS_MAX safety offset so that
1120 we cannot miss a breakpoint with its shadow range tail still reaching
1121 MEMADDR. */
1122
1123 if (b->address + bp_location_shadow_len_after_address_max >= b->address
1124 && b->address + bp_location_shadow_len_after_address_max <= memaddr)
1125 bc_l = bc;
1126 else
1127 bc_r = bc;
1128 }
1129
1130 /* Now do full processing of the found relevant range of elements. */
1131
1132 for (bc = bc_l; bc < bp_location_count; bc++)
1133 {
1134 struct bp_location *b = bp_location[bc];
1135 CORE_ADDR bp_addr = 0;
1136 int bp_size = 0;
1137 int bptoffset = 0;
1138
1139 /* bp_location array has B->OWNER always non-NULL. */
1140 if (b->owner->type == bp_none)
1141 warning (_("reading through apparently deleted breakpoint #%d?"),
1142 b->owner->number);
1143
1144 /* Performance optimization: any futher element can no longer affect BUF
1145 content. */
1146
1147 if (b->address >= bp_location_placed_address_before_address_max
1148 && memaddr + len <= b->address
1149 - bp_location_placed_address_before_address_max)
1150 break;
1151
1152 if (!bp_location_has_shadow (b))
1153 continue;
1154 if (!breakpoint_address_match (b->target_info.placed_address_space, 0,
1155 current_program_space->aspace, 0))
1156 continue;
1157
1158 /* Addresses and length of the part of the breakpoint that
1159 we need to copy. */
1160 bp_addr = b->target_info.placed_address;
1161 bp_size = b->target_info.shadow_len;
1162
1163 if (bp_addr + bp_size <= memaddr)
1164 /* The breakpoint is entirely before the chunk of memory we
1165 are reading. */
1166 continue;
1167
1168 if (bp_addr >= memaddr + len)
1169 /* The breakpoint is entirely after the chunk of memory we are
1170 reading. */
1171 continue;
1172
1173 /* Offset within shadow_contents. */
1174 if (bp_addr < memaddr)
1175 {
1176 /* Only copy the second part of the breakpoint. */
1177 bp_size -= memaddr - bp_addr;
1178 bptoffset = memaddr - bp_addr;
1179 bp_addr = memaddr;
1180 }
1181
1182 if (bp_addr + bp_size > memaddr + len)
1183 {
1184 /* Only copy the first part of the breakpoint. */
1185 bp_size -= (bp_addr + bp_size) - (memaddr + len);
1186 }
1187
1188 memcpy (buf + bp_addr - memaddr,
1189 b->target_info.shadow_contents + bptoffset, bp_size);
1190 }
1191 }
1192 \f
1193
1194 /* A wrapper function for inserting catchpoints. */
1195 static void
1196 insert_catchpoint (struct ui_out *uo, void *args)
1197 {
1198 struct breakpoint *b = (struct breakpoint *) args;
1199
1200 gdb_assert (b->type == bp_catchpoint);
1201 gdb_assert (b->ops != NULL && b->ops->insert != NULL);
1202
1203 b->ops->insert (b);
1204 }
1205
1206 /* Return true if BPT is of any hardware watchpoint kind. */
1207
1208 static int
1209 is_hardware_watchpoint (const struct breakpoint *bpt)
1210 {
1211 return (bpt->type == bp_hardware_watchpoint
1212 || bpt->type == bp_read_watchpoint
1213 || bpt->type == bp_access_watchpoint);
1214 }
1215
1216 /* Return true if BPT is of any watchpoint kind, hardware or
1217 software. */
1218
1219 static int
1220 is_watchpoint (const struct breakpoint *bpt)
1221 {
1222 return (is_hardware_watchpoint (bpt)
1223 || bpt->type == bp_watchpoint);
1224 }
1225
1226 /* Assuming that B is a watchpoint: returns true if the current thread
1227 and its running state are safe to evaluate or update watchpoint B.
1228 Watchpoints on local expressions need to be evaluated in the
1229 context of the thread that was current when the watchpoint was
1230 created, and, that thread needs to be stopped to be able to select
1231 the correct frame context. Watchpoints on global expressions can
1232 be evaluated on any thread, and in any state. It is presently left
1233 to the target allowing memory accesses when threads are
1234 running. */
1235
1236 static int
1237 watchpoint_in_thread_scope (struct breakpoint *b)
1238 {
1239 return (ptid_equal (b->watchpoint_thread, null_ptid)
1240 || (ptid_equal (inferior_ptid, b->watchpoint_thread)
1241 && !is_executing (inferior_ptid)));
1242 }
1243
1244 /* Assuming that B is a watchpoint:
1245 - Reparse watchpoint expression, if REPARSE is non-zero
1246 - Evaluate expression and store the result in B->val
1247 - Evaluate the condition if there is one, and store the result
1248 in b->loc->cond.
1249 - Update the list of values that must be watched in B->loc.
1250
1251 If the watchpoint disposition is disp_del_at_next_stop, then do nothing.
1252 If this is local watchpoint that is out of scope, delete it.
1253
1254 Even with `set breakpoint always-inserted on' the watchpoints are removed
1255 + inserted on each stop here. Normal breakpoints must never be removed
1256 because they might be missed by a running thread when debugging in non-stop
1257 mode. On the other hand, hardware watchpoints (is_hardware_watchpoint;
1258 processed here) are specific to each LWP since they are stored in each LWP's
1259 hardware debug registers. Therefore, such LWP must be stopped first in
1260 order to be able to modify its hardware watchpoints.
1261
1262 Hardware watchpoints must be reset exactly once after being presented to the
1263 user. It cannot be done sooner, because it would reset the data used to
1264 present the watchpoint hit to the user. And it must not be done later
1265 because it could display the same single watchpoint hit during multiple GDB
1266 stops. Note that the latter is relevant only to the hardware watchpoint
1267 types bp_read_watchpoint and bp_access_watchpoint. False hit by
1268 bp_hardware_watchpoint is not user-visible - its hit is suppressed if the
1269 memory content has not changed.
1270
1271 The following constraints influence the location where we can reset hardware
1272 watchpoints:
1273
1274 * target_stopped_by_watchpoint and target_stopped_data_address are called
1275 several times when GDB stops.
1276
1277 [linux]
1278 * Multiple hardware watchpoints can be hit at the same time, causing GDB to
1279 stop. GDB only presents one hardware watchpoint hit at a time as the
1280 reason for stopping, and all the other hits are presented later, one after
1281 the other, each time the user requests the execution to be resumed.
1282 Execution is not resumed for the threads still having pending hit event
1283 stored in LWP_INFO->STATUS. While the watchpoint is already removed from
1284 the inferior on the first stop the thread hit event is kept being reported
1285 from its cached value by linux_nat_stopped_data_address until the real
1286 thread resume happens after the watchpoint gets presented and thus its
1287 LWP_INFO->STATUS gets reset.
1288
1289 Therefore the hardware watchpoint hit can get safely reset on the watchpoint
1290 removal from inferior. */
1291
1292 static void
1293 update_watchpoint (struct breakpoint *b, int reparse)
1294 {
1295 int within_current_scope;
1296 struct frame_id saved_frame_id;
1297 int frame_saved;
1298
1299 /* If this is a local watchpoint, we only want to check if the
1300 watchpoint frame is in scope if the current thread is the thread
1301 that was used to create the watchpoint. */
1302 if (!watchpoint_in_thread_scope (b))
1303 return;
1304
1305 /* We don't free locations. They are stored in bp_location array and
1306 update_global_locations will eventually delete them and remove
1307 breakpoints if needed. */
1308 b->loc = NULL;
1309
1310 if (b->disposition == disp_del_at_next_stop)
1311 return;
1312
1313 frame_saved = 0;
1314
1315 /* Determine if the watchpoint is within scope. */
1316 if (b->exp_valid_block == NULL)
1317 within_current_scope = 1;
1318 else
1319 {
1320 struct frame_info *fi;
1321
1322 /* Save the current frame's ID so we can restore it after
1323 evaluating the watchpoint expression on its own frame. */
1324 /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
1325 took a frame parameter, so that we didn't have to change the
1326 selected frame. */
1327 frame_saved = 1;
1328 saved_frame_id = get_frame_id (get_selected_frame (NULL));
1329
1330 fi = frame_find_by_id (b->watchpoint_frame);
1331 within_current_scope = (fi != NULL);
1332 if (within_current_scope)
1333 select_frame (fi);
1334 }
1335
1336 if (within_current_scope && reparse)
1337 {
1338 char *s;
1339
1340 if (b->exp)
1341 {
1342 xfree (b->exp);
1343 b->exp = NULL;
1344 }
1345 s = b->exp_string_reparse ? b->exp_string_reparse : b->exp_string;
1346 b->exp = parse_exp_1 (&s, b->exp_valid_block, 0);
1347 /* If the meaning of expression itself changed, the old value is
1348 no longer relevant. We don't want to report a watchpoint hit
1349 to the user when the old value and the new value may actually
1350 be completely different objects. */
1351 value_free (b->val);
1352 b->val = NULL;
1353 b->val_valid = 0;
1354
1355 /* Note that unlike with breakpoints, the watchpoint's condition
1356 expression is stored in the breakpoint object, not in the
1357 locations (re)created below. */
1358 if (b->cond_string != NULL)
1359 {
1360 if (b->cond_exp != NULL)
1361 {
1362 xfree (b->cond_exp);
1363 b->cond_exp = NULL;
1364 }
1365
1366 s = b->cond_string;
1367 b->cond_exp = parse_exp_1 (&s, b->cond_exp_valid_block, 0);
1368 }
1369 }
1370
1371 /* If we failed to parse the expression, for example because
1372 it refers to a global variable in a not-yet-loaded shared library,
1373 don't try to insert watchpoint. We don't automatically delete
1374 such watchpoint, though, since failure to parse expression
1375 is different from out-of-scope watchpoint. */
1376 if ( !target_has_execution)
1377 {
1378 /* Without execution, memory can't change. No use to try and
1379 set watchpoint locations. The watchpoint will be reset when
1380 the target gains execution, through breakpoint_re_set. */
1381 }
1382 else if (within_current_scope && b->exp)
1383 {
1384 int pc = 0;
1385 struct value *val_chain, *v, *result, *next;
1386 struct program_space *frame_pspace;
1387
1388 fetch_subexp_value (b->exp, &pc, &v, &result, &val_chain);
1389
1390 /* Avoid setting b->val if it's already set. The meaning of
1391 b->val is 'the last value' user saw, and we should update
1392 it only if we reported that last value to user. As it
1393 happens, the code that reports it updates b->val directly. */
1394 if (!b->val_valid)
1395 {
1396 b->val = v;
1397 b->val_valid = 1;
1398 }
1399
1400 /* Change the type of breakpoint between hardware assisted or an
1401 ordinary watchpoint depending on the hardware support and free
1402 hardware slots. REPARSE is set when the inferior is started. */
1403 if ((b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
1404 && reparse)
1405 {
1406 int i, mem_cnt, other_type_used;
1407
1408 /* We need to determine how many resources are already used
1409 for all other hardware watchpoints to see if we still have
1410 enough resources to also fit this watchpoint in as well.
1411 To avoid the hw_watchpoint_used_count call below from counting
1412 this watchpoint, make sure that it is marked as a software
1413 watchpoint. */
1414 b->type = bp_watchpoint;
1415 i = hw_watchpoint_used_count (bp_hardware_watchpoint,
1416 &other_type_used);
1417 mem_cnt = can_use_hardware_watchpoint (val_chain);
1418
1419 if (!mem_cnt)
1420 b->type = bp_watchpoint;
1421 else
1422 {
1423 int target_resources_ok = target_can_use_hardware_watchpoint
1424 (bp_hardware_watchpoint, i + mem_cnt, other_type_used);
1425 if (target_resources_ok <= 0)
1426 b->type = bp_watchpoint;
1427 else
1428 b->type = bp_hardware_watchpoint;
1429 }
1430 }
1431
1432 frame_pspace = get_frame_program_space (get_selected_frame (NULL));
1433
1434 /* Look at each value on the value chain. */
1435 for (v = val_chain; v; v = next)
1436 {
1437 /* If it's a memory location, and GDB actually needed
1438 its contents to evaluate the expression, then we
1439 must watch it. If the first value returned is
1440 still lazy, that means an error occurred reading it;
1441 watch it anyway in case it becomes readable. */
1442 if (VALUE_LVAL (v) == lval_memory
1443 && (v == val_chain || ! value_lazy (v)))
1444 {
1445 struct type *vtype = check_typedef (value_type (v));
1446
1447 /* We only watch structs and arrays if user asked
1448 for it explicitly, never if they just happen to
1449 appear in the middle of some value chain. */
1450 if (v == result
1451 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
1452 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
1453 {
1454 CORE_ADDR addr;
1455 int len, type;
1456 struct bp_location *loc, **tmp;
1457
1458 addr = value_address (v);
1459 len = TYPE_LENGTH (value_type (v));
1460 type = hw_write;
1461 if (b->type == bp_read_watchpoint)
1462 type = hw_read;
1463 else if (b->type == bp_access_watchpoint)
1464 type = hw_access;
1465
1466 loc = allocate_bp_location (b);
1467 for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
1468 ;
1469 *tmp = loc;
1470 loc->gdbarch = get_type_arch (value_type (v));
1471
1472 loc->pspace = frame_pspace;
1473 loc->address = addr;
1474 loc->length = len;
1475 loc->watchpoint_type = type;
1476 }
1477 }
1478
1479 next = value_next (v);
1480 if (v != b->val)
1481 value_free (v);
1482 }
1483
1484 /* If a software watchpoint is not watching any memory, then the
1485 above left it without any location set up. But,
1486 bpstat_stop_status requires a location to be able to report
1487 stops, so make sure there's at least a dummy one. */
1488 if (b->type == bp_watchpoint && b->loc == NULL)
1489 {
1490 b->loc = allocate_bp_location (b);
1491 b->loc->pspace = frame_pspace;
1492 b->loc->address = -1;
1493 b->loc->length = -1;
1494 b->loc->watchpoint_type = -1;
1495 }
1496 }
1497 else if (!within_current_scope)
1498 {
1499 printf_filtered (_("\
1500 Watchpoint %d deleted because the program has left the block\n\
1501 in which its expression is valid.\n"),
1502 b->number);
1503 if (b->related_breakpoint)
1504 {
1505 b->related_breakpoint->disposition = disp_del_at_next_stop;
1506 b->related_breakpoint->related_breakpoint = NULL;
1507 b->related_breakpoint= NULL;
1508 }
1509 b->disposition = disp_del_at_next_stop;
1510 }
1511
1512 /* Restore the selected frame. */
1513 if (frame_saved)
1514 select_frame (frame_find_by_id (saved_frame_id));
1515 }
1516
1517
1518 /* Returns 1 iff breakpoint location should be
1519 inserted in the inferior. */
1520 static int
1521 should_be_inserted (struct bp_location *bpt)
1522 {
1523 if (bpt->owner == NULL || !breakpoint_enabled (bpt->owner))
1524 return 0;
1525
1526 if (bpt->owner->disposition == disp_del_at_next_stop)
1527 return 0;
1528
1529 if (!bpt->enabled || bpt->shlib_disabled || bpt->duplicate)
1530 return 0;
1531
1532 /* This is set for example, when we're attached to the parent of a
1533 vfork, and have detached from the child. The child is running
1534 free, and we expect it to do an exec or exit, at which point the
1535 OS makes the parent schedulable again (and the target reports
1536 that the vfork is done). Until the child is done with the shared
1537 memory region, do not insert breakpoints in the parent, otherwise
1538 the child could still trip on the parent's breakpoints. Since
1539 the parent is blocked anyway, it won't miss any breakpoint. */
1540 if (bpt->pspace->breakpoints_not_allowed)
1541 return 0;
1542
1543 /* Tracepoints are inserted by the target at a time of its choosing,
1544 not by us. */
1545 if (is_tracepoint (bpt->owner))
1546 return 0;
1547
1548 return 1;
1549 }
1550
1551 /* Insert a low-level "breakpoint" of some type. BPT is the breakpoint.
1552 Any error messages are printed to TMP_ERROR_STREAM; and DISABLED_BREAKS,
1553 and HW_BREAKPOINT_ERROR are used to report problems.
1554
1555 NOTE drow/2003-09-09: This routine could be broken down to an object-style
1556 method for each breakpoint or catchpoint type. */
1557 static int
1558 insert_bp_location (struct bp_location *bpt,
1559 struct ui_file *tmp_error_stream,
1560 int *disabled_breaks,
1561 int *hw_breakpoint_error)
1562 {
1563 int val = 0;
1564
1565 if (!should_be_inserted (bpt) || bpt->inserted)
1566 return 0;
1567
1568 /* Initialize the target-specific information. */
1569 memset (&bpt->target_info, 0, sizeof (bpt->target_info));
1570 bpt->target_info.placed_address = bpt->address;
1571 bpt->target_info.placed_address_space = bpt->pspace->aspace;
1572
1573 if (bpt->loc_type == bp_loc_software_breakpoint
1574 || bpt->loc_type == bp_loc_hardware_breakpoint)
1575 {
1576 if (bpt->owner->type != bp_hardware_breakpoint)
1577 {
1578 /* If the explicitly specified breakpoint type
1579 is not hardware breakpoint, check the memory map to see
1580 if the breakpoint address is in read only memory or not.
1581 Two important cases are:
1582 - location type is not hardware breakpoint, memory
1583 is readonly. We change the type of the location to
1584 hardware breakpoint.
1585 - location type is hardware breakpoint, memory is read-write.
1586 This means we've previously made the location hardware one, but
1587 then the memory map changed, so we undo.
1588
1589 When breakpoints are removed, remove_breakpoints will
1590 use location types we've just set here, the only possible
1591 problem is that memory map has changed during running program,
1592 but it's not going to work anyway with current gdb. */
1593 struct mem_region *mr
1594 = lookup_mem_region (bpt->target_info.placed_address);
1595
1596 if (mr)
1597 {
1598 if (automatic_hardware_breakpoints)
1599 {
1600 enum bp_loc_type new_type;
1601
1602 if (mr->attrib.mode != MEM_RW)
1603 new_type = bp_loc_hardware_breakpoint;
1604 else
1605 new_type = bp_loc_software_breakpoint;
1606
1607 if (new_type != bpt->loc_type)
1608 {
1609 static int said = 0;
1610
1611 bpt->loc_type = new_type;
1612 if (!said)
1613 {
1614 fprintf_filtered (gdb_stdout, _("\
1615 Note: automatically using hardware breakpoints for read-only addresses.\n"));
1616 said = 1;
1617 }
1618 }
1619 }
1620 else if (bpt->loc_type == bp_loc_software_breakpoint
1621 && mr->attrib.mode != MEM_RW)
1622 warning (_("cannot set software breakpoint at readonly address %s"),
1623 paddress (bpt->gdbarch, bpt->address));
1624 }
1625 }
1626
1627 /* First check to see if we have to handle an overlay. */
1628 if (overlay_debugging == ovly_off
1629 || bpt->section == NULL
1630 || !(section_is_overlay (bpt->section)))
1631 {
1632 /* No overlay handling: just set the breakpoint. */
1633
1634 if (bpt->loc_type == bp_loc_hardware_breakpoint)
1635 val = target_insert_hw_breakpoint (bpt->gdbarch,
1636 &bpt->target_info);
1637 else
1638 val = target_insert_breakpoint (bpt->gdbarch,
1639 &bpt->target_info);
1640 }
1641 else
1642 {
1643 /* This breakpoint is in an overlay section.
1644 Shall we set a breakpoint at the LMA? */
1645 if (!overlay_events_enabled)
1646 {
1647 /* Yes -- overlay event support is not active,
1648 so we must try to set a breakpoint at the LMA.
1649 This will not work for a hardware breakpoint. */
1650 if (bpt->loc_type == bp_loc_hardware_breakpoint)
1651 warning (_("hardware breakpoint %d not supported in overlay!"),
1652 bpt->owner->number);
1653 else
1654 {
1655 CORE_ADDR addr = overlay_unmapped_address (bpt->address,
1656 bpt->section);
1657 /* Set a software (trap) breakpoint at the LMA. */
1658 bpt->overlay_target_info = bpt->target_info;
1659 bpt->overlay_target_info.placed_address = addr;
1660 val = target_insert_breakpoint (bpt->gdbarch,
1661 &bpt->overlay_target_info);
1662 if (val != 0)
1663 fprintf_unfiltered (tmp_error_stream,
1664 "Overlay breakpoint %d failed: in ROM?\n",
1665 bpt->owner->number);
1666 }
1667 }
1668 /* Shall we set a breakpoint at the VMA? */
1669 if (section_is_mapped (bpt->section))
1670 {
1671 /* Yes. This overlay section is mapped into memory. */
1672 if (bpt->loc_type == bp_loc_hardware_breakpoint)
1673 val = target_insert_hw_breakpoint (bpt->gdbarch,
1674 &bpt->target_info);
1675 else
1676 val = target_insert_breakpoint (bpt->gdbarch,
1677 &bpt->target_info);
1678 }
1679 else
1680 {
1681 /* No. This breakpoint will not be inserted.
1682 No error, but do not mark the bp as 'inserted'. */
1683 return 0;
1684 }
1685 }
1686
1687 if (val)
1688 {
1689 /* Can't set the breakpoint. */
1690 if (solib_name_from_address (bpt->pspace, bpt->address))
1691 {
1692 /* See also: disable_breakpoints_in_shlibs. */
1693 val = 0;
1694 bpt->shlib_disabled = 1;
1695 if (!*disabled_breaks)
1696 {
1697 fprintf_unfiltered (tmp_error_stream,
1698 "Cannot insert breakpoint %d.\n",
1699 bpt->owner->number);
1700 fprintf_unfiltered (tmp_error_stream,
1701 "Temporarily disabling shared library breakpoints:\n");
1702 }
1703 *disabled_breaks = 1;
1704 fprintf_unfiltered (tmp_error_stream,
1705 "breakpoint #%d\n", bpt->owner->number);
1706 }
1707 else
1708 {
1709 if (bpt->loc_type == bp_loc_hardware_breakpoint)
1710 {
1711 *hw_breakpoint_error = 1;
1712 fprintf_unfiltered (tmp_error_stream,
1713 "Cannot insert hardware breakpoint %d.\n",
1714 bpt->owner->number);
1715 }
1716 else
1717 {
1718 fprintf_unfiltered (tmp_error_stream,
1719 "Cannot insert breakpoint %d.\n",
1720 bpt->owner->number);
1721 fprintf_filtered (tmp_error_stream,
1722 "Error accessing memory address ");
1723 fputs_filtered (paddress (bpt->gdbarch, bpt->address),
1724 tmp_error_stream);
1725 fprintf_filtered (tmp_error_stream, ": %s.\n",
1726 safe_strerror (val));
1727 }
1728
1729 }
1730 }
1731 else
1732 bpt->inserted = 1;
1733
1734 return val;
1735 }
1736
1737 else if (bpt->loc_type == bp_loc_hardware_watchpoint
1738 /* NOTE drow/2003-09-08: This state only exists for removing
1739 watchpoints. It's not clear that it's necessary... */
1740 && bpt->owner->disposition != disp_del_at_next_stop)
1741 {
1742 val = target_insert_watchpoint (bpt->address,
1743 bpt->length,
1744 bpt->watchpoint_type,
1745 bpt->owner->cond_exp);
1746
1747 /* If trying to set a read-watchpoint, and it turns out it's not
1748 supported, try emulating one with an access watchpoint. */
1749 if (val == 1 && bpt->watchpoint_type == hw_read)
1750 {
1751 struct bp_location *loc, **loc_temp;
1752
1753 /* But don't try to insert it, if there's already another
1754 hw_access location that would be considered a duplicate
1755 of this one. */
1756 ALL_BP_LOCATIONS (loc, loc_temp)
1757 if (loc != bpt
1758 && loc->watchpoint_type == hw_access
1759 && watchpoint_locations_match (bpt, loc))
1760 {
1761 bpt->duplicate = 1;
1762 bpt->inserted = 1;
1763 bpt->target_info = loc->target_info;
1764 bpt->watchpoint_type = hw_access;
1765 val = 0;
1766 break;
1767 }
1768
1769 if (val == 1)
1770 {
1771 val = target_insert_watchpoint (bpt->address,
1772 bpt->length,
1773 hw_access,
1774 bpt->owner->cond_exp);
1775 if (val == 0)
1776 bpt->watchpoint_type = hw_access;
1777 }
1778 }
1779
1780 bpt->inserted = (val == 0);
1781 }
1782
1783 else if (bpt->owner->type == bp_catchpoint)
1784 {
1785 struct gdb_exception e = catch_exception (uiout, insert_catchpoint,
1786 bpt->owner, RETURN_MASK_ERROR);
1787 exception_fprintf (gdb_stderr, e, "warning: inserting catchpoint %d: ",
1788 bpt->owner->number);
1789 if (e.reason < 0)
1790 bpt->owner->enable_state = bp_disabled;
1791 else
1792 bpt->inserted = 1;
1793
1794 /* We've already printed an error message if there was a problem
1795 inserting this catchpoint, and we've disabled the catchpoint,
1796 so just return success. */
1797 return 0;
1798 }
1799
1800 return 0;
1801 }
1802
1803 /* This function is called when program space PSPACE is about to be
1804 deleted. It takes care of updating breakpoints to not reference
1805 PSPACE anymore. */
1806
1807 void
1808 breakpoint_program_space_exit (struct program_space *pspace)
1809 {
1810 struct breakpoint *b, *b_temp;
1811 struct bp_location *loc, **loc_temp;
1812
1813 /* Remove any breakpoint that was set through this program space. */
1814 ALL_BREAKPOINTS_SAFE (b, b_temp)
1815 {
1816 if (b->pspace == pspace)
1817 delete_breakpoint (b);
1818 }
1819
1820 /* Breakpoints set through other program spaces could have locations
1821 bound to PSPACE as well. Remove those. */
1822 ALL_BP_LOCATIONS (loc, loc_temp)
1823 {
1824 struct bp_location *tmp;
1825
1826 if (loc->pspace == pspace)
1827 {
1828 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
1829 if (loc->owner->loc == loc)
1830 loc->owner->loc = loc->next;
1831 else
1832 for (tmp = loc->owner->loc; tmp->next != NULL; tmp = tmp->next)
1833 if (tmp->next == loc)
1834 {
1835 tmp->next = loc->next;
1836 break;
1837 }
1838 }
1839 }
1840
1841 /* Now update the global location list to permanently delete the
1842 removed locations above. */
1843 update_global_location_list (0);
1844 }
1845
1846 /* Make sure all breakpoints are inserted in inferior.
1847 Throws exception on any error.
1848 A breakpoint that is already inserted won't be inserted
1849 again, so calling this function twice is safe. */
1850 void
1851 insert_breakpoints (void)
1852 {
1853 struct breakpoint *bpt;
1854
1855 ALL_BREAKPOINTS (bpt)
1856 if (is_hardware_watchpoint (bpt))
1857 update_watchpoint (bpt, 0 /* don't reparse. */);
1858
1859 update_global_location_list (1);
1860
1861 /* update_global_location_list does not insert breakpoints when
1862 always_inserted_mode is not enabled. Explicitly insert them
1863 now. */
1864 if (!breakpoints_always_inserted_mode ())
1865 insert_breakpoint_locations ();
1866 }
1867
1868 /* insert_breakpoints is used when starting or continuing the program.
1869 remove_breakpoints is used when the program stops.
1870 Both return zero if successful,
1871 or an `errno' value if could not write the inferior. */
1872
1873 static void
1874 insert_breakpoint_locations (void)
1875 {
1876 struct breakpoint *bpt;
1877 struct bp_location *b, **bp_tmp;
1878 int error = 0;
1879 int val = 0;
1880 int disabled_breaks = 0;
1881 int hw_breakpoint_error = 0;
1882
1883 struct ui_file *tmp_error_stream = mem_fileopen ();
1884 struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_error_stream);
1885
1886 /* Explicitly mark the warning -- this will only be printed if
1887 there was an error. */
1888 fprintf_unfiltered (tmp_error_stream, "Warning:\n");
1889
1890 save_current_space_and_thread ();
1891
1892 ALL_BP_LOCATIONS (b, bp_tmp)
1893 {
1894 if (!should_be_inserted (b) || b->inserted)
1895 continue;
1896
1897 /* There is no point inserting thread-specific breakpoints if the
1898 thread no longer exists. ALL_BP_LOCATIONS bp_location has B->OWNER
1899 always non-NULL. */
1900 if (b->owner->thread != -1
1901 && !valid_thread_id (b->owner->thread))
1902 continue;
1903
1904 switch_to_program_space_and_thread (b->pspace);
1905
1906 /* For targets that support global breakpoints, there's no need
1907 to select an inferior to insert breakpoint to. In fact, even
1908 if we aren't attached to any process yet, we should still
1909 insert breakpoints. */
1910 if (!gdbarch_has_global_breakpoints (target_gdbarch)
1911 && ptid_equal (inferior_ptid, null_ptid))
1912 continue;
1913
1914 val = insert_bp_location (b, tmp_error_stream,
1915 &disabled_breaks,
1916 &hw_breakpoint_error);
1917 if (val)
1918 error = val;
1919 }
1920
1921 /* If we failed to insert all locations of a watchpoint,
1922 remove them, as half-inserted watchpoint is of limited use. */
1923 ALL_BREAKPOINTS (bpt)
1924 {
1925 int some_failed = 0;
1926 struct bp_location *loc;
1927
1928 if (!is_hardware_watchpoint (bpt))
1929 continue;
1930
1931 if (!breakpoint_enabled (bpt))
1932 continue;
1933
1934 if (bpt->disposition == disp_del_at_next_stop)
1935 continue;
1936
1937 for (loc = bpt->loc; loc; loc = loc->next)
1938 if (!loc->inserted && should_be_inserted (loc))
1939 {
1940 some_failed = 1;
1941 break;
1942 }
1943 if (some_failed)
1944 {
1945 for (loc = bpt->loc; loc; loc = loc->next)
1946 if (loc->inserted)
1947 remove_breakpoint (loc, mark_uninserted);
1948
1949 hw_breakpoint_error = 1;
1950 fprintf_unfiltered (tmp_error_stream,
1951 "Could not insert hardware watchpoint %d.\n",
1952 bpt->number);
1953 error = -1;
1954 }
1955 }
1956
1957 if (error)
1958 {
1959 /* If a hardware breakpoint or watchpoint was inserted, add a
1960 message about possibly exhausted resources. */
1961 if (hw_breakpoint_error)
1962 {
1963 fprintf_unfiltered (tmp_error_stream,
1964 "Could not insert hardware breakpoints:\n\
1965 You may have requested too many hardware breakpoints/watchpoints.\n");
1966 }
1967 target_terminal_ours_for_output ();
1968 error_stream (tmp_error_stream);
1969 }
1970
1971 do_cleanups (cleanups);
1972 }
1973
1974 int
1975 remove_breakpoints (void)
1976 {
1977 struct bp_location *b, **bp_tmp;
1978 int val = 0;
1979
1980 ALL_BP_LOCATIONS (b, bp_tmp)
1981 {
1982 if (b->inserted)
1983 val |= remove_breakpoint (b, mark_uninserted);
1984 }
1985 return val;
1986 }
1987
1988 /* Remove breakpoints of process PID. */
1989
1990 int
1991 remove_breakpoints_pid (int pid)
1992 {
1993 struct bp_location *b, **b_tmp;
1994 int val;
1995 struct inferior *inf = find_inferior_pid (pid);
1996
1997 ALL_BP_LOCATIONS (b, b_tmp)
1998 {
1999 if (b->pspace != inf->pspace)
2000 continue;
2001
2002 if (b->inserted)
2003 {
2004 val = remove_breakpoint (b, mark_uninserted);
2005 if (val != 0)
2006 return val;
2007 }
2008 }
2009 return 0;
2010 }
2011
2012 int
2013 remove_hw_watchpoints (void)
2014 {
2015 struct bp_location *b, **bp_tmp;
2016 int val = 0;
2017
2018 ALL_BP_LOCATIONS (b, bp_tmp)
2019 {
2020 if (b->inserted && b->loc_type == bp_loc_hardware_watchpoint)
2021 val |= remove_breakpoint (b, mark_uninserted);
2022 }
2023 return val;
2024 }
2025
2026 int
2027 reattach_breakpoints (int pid)
2028 {
2029 struct cleanup *old_chain;
2030 struct bp_location *b, **bp_tmp;
2031 int val;
2032 struct ui_file *tmp_error_stream = mem_fileopen ();
2033 int dummy1 = 0, dummy2 = 0;
2034 struct inferior *inf;
2035 struct thread_info *tp;
2036
2037 tp = any_live_thread_of_process (pid);
2038 if (tp == NULL)
2039 return 1;
2040
2041 inf = find_inferior_pid (pid);
2042 old_chain = save_inferior_ptid ();
2043
2044 inferior_ptid = tp->ptid;
2045
2046 make_cleanup_ui_file_delete (tmp_error_stream);
2047
2048 ALL_BP_LOCATIONS (b, bp_tmp)
2049 {
2050 if (b->pspace != inf->pspace)
2051 continue;
2052
2053 if (b->inserted)
2054 {
2055 b->inserted = 0;
2056 val = insert_bp_location (b, tmp_error_stream,
2057 &dummy1, &dummy2);
2058 if (val != 0)
2059 {
2060 do_cleanups (old_chain);
2061 return val;
2062 }
2063 }
2064 }
2065 do_cleanups (old_chain);
2066 return 0;
2067 }
2068
2069 static int internal_breakpoint_number = -1;
2070
2071 /* Set the breakpoint number of B, depending on the value of INTERNAL.
2072 If INTERNAL is non-zero, the breakpoint number will be populated
2073 from internal_breakpoint_number and that variable decremented.
2074 Otherwis the breakpoint number will be populated from
2075 breakpoint_count and that value incremented. Internal breakpoints
2076 do not set the internal var bpnum. */
2077 static void
2078 set_breakpoint_number (int internal, struct breakpoint *b)
2079 {
2080 if (internal)
2081 b->number = internal_breakpoint_number--;
2082 else
2083 {
2084 set_breakpoint_count (breakpoint_count + 1);
2085 b->number = breakpoint_count;
2086 }
2087 }
2088
2089 static struct breakpoint *
2090 create_internal_breakpoint (struct gdbarch *gdbarch,
2091 CORE_ADDR address, enum bptype type)
2092 {
2093 struct symtab_and_line sal;
2094 struct breakpoint *b;
2095
2096 init_sal (&sal); /* initialize to zeroes */
2097
2098 sal.pc = address;
2099 sal.section = find_pc_overlay (sal.pc);
2100 sal.pspace = current_program_space;
2101
2102 b = set_raw_breakpoint (gdbarch, sal, type);
2103 b->number = internal_breakpoint_number--;
2104 b->disposition = disp_donttouch;
2105
2106 return b;
2107 }
2108
2109 static void
2110 create_overlay_event_breakpoint (char *func_name)
2111 {
2112 struct objfile *objfile;
2113
2114 ALL_OBJFILES (objfile)
2115 {
2116 struct breakpoint *b;
2117 struct minimal_symbol *m;
2118
2119 m = lookup_minimal_symbol_text (func_name, objfile);
2120 if (m == NULL)
2121 continue;
2122
2123 b = create_internal_breakpoint (get_objfile_arch (objfile),
2124 SYMBOL_VALUE_ADDRESS (m),
2125 bp_overlay_event);
2126 b->addr_string = xstrdup (func_name);
2127
2128 if (overlay_debugging == ovly_auto)
2129 {
2130 b->enable_state = bp_enabled;
2131 overlay_events_enabled = 1;
2132 }
2133 else
2134 {
2135 b->enable_state = bp_disabled;
2136 overlay_events_enabled = 0;
2137 }
2138 }
2139 update_global_location_list (1);
2140 }
2141
2142 static void
2143 create_longjmp_master_breakpoint (char *func_name)
2144 {
2145 struct program_space *pspace;
2146 struct objfile *objfile;
2147 struct cleanup *old_chain;
2148
2149 old_chain = save_current_program_space ();
2150
2151 ALL_PSPACES (pspace)
2152 ALL_OBJFILES (objfile)
2153 {
2154 struct breakpoint *b;
2155 struct minimal_symbol *m;
2156
2157 if (!gdbarch_get_longjmp_target_p (get_objfile_arch (objfile)))
2158 continue;
2159
2160 set_current_program_space (pspace);
2161
2162 m = lookup_minimal_symbol_text (func_name, objfile);
2163 if (m == NULL)
2164 continue;
2165
2166 b = create_internal_breakpoint (get_objfile_arch (objfile),
2167 SYMBOL_VALUE_ADDRESS (m),
2168 bp_longjmp_master);
2169 b->addr_string = xstrdup (func_name);
2170 b->enable_state = bp_disabled;
2171 }
2172 update_global_location_list (1);
2173
2174 do_cleanups (old_chain);
2175 }
2176
2177 /* Create a master std::terminate breakpoint. The actual function
2178 looked for is named FUNC_NAME. */
2179 static void
2180 create_std_terminate_master_breakpoint (const char *func_name)
2181 {
2182 struct program_space *pspace;
2183 struct objfile *objfile;
2184 struct cleanup *old_chain;
2185
2186 old_chain = save_current_program_space ();
2187
2188 ALL_PSPACES (pspace)
2189 ALL_OBJFILES (objfile)
2190 {
2191 struct breakpoint *b;
2192 struct minimal_symbol *m;
2193
2194 set_current_program_space (pspace);
2195
2196 m = lookup_minimal_symbol (func_name, NULL, objfile);
2197 if (m == NULL || (MSYMBOL_TYPE (m) != mst_text
2198 && MSYMBOL_TYPE (m) != mst_file_text))
2199 continue;
2200
2201 b = create_internal_breakpoint (get_objfile_arch (objfile),
2202 SYMBOL_VALUE_ADDRESS (m),
2203 bp_std_terminate_master);
2204 b->addr_string = xstrdup (func_name);
2205 b->enable_state = bp_disabled;
2206 }
2207 update_global_location_list (1);
2208
2209 do_cleanups (old_chain);
2210 }
2211
2212 /* Install a master breakpoint on the unwinder's debug hook. */
2213
2214 void
2215 create_exception_master_breakpoint (void)
2216 {
2217 struct objfile *objfile;
2218
2219 ALL_OBJFILES (objfile)
2220 {
2221 struct minimal_symbol *debug_hook;
2222
2223 debug_hook = lookup_minimal_symbol ("_Unwind_DebugHook", NULL, objfile);
2224 if (debug_hook != NULL)
2225 {
2226 struct breakpoint *b;
2227 CORE_ADDR addr = SYMBOL_VALUE_ADDRESS (debug_hook);
2228 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2229
2230 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
2231 &current_target);
2232 b = create_internal_breakpoint (gdbarch, addr, bp_exception_master);
2233 b->addr_string = xstrdup ("_Unwind_DebugHook");
2234 b->enable_state = bp_disabled;
2235 }
2236 }
2237
2238 update_global_location_list (1);
2239 }
2240
2241 void
2242 update_breakpoints_after_exec (void)
2243 {
2244 struct breakpoint *b;
2245 struct breakpoint *temp;
2246 struct bp_location *bploc, **bplocp_tmp;
2247
2248 /* We're about to delete breakpoints from GDB's lists. If the
2249 INSERTED flag is true, GDB will try to lift the breakpoints by
2250 writing the breakpoints' "shadow contents" back into memory. The
2251 "shadow contents" are NOT valid after an exec, so GDB should not
2252 do that. Instead, the target is responsible from marking
2253 breakpoints out as soon as it detects an exec. We don't do that
2254 here instead, because there may be other attempts to delete
2255 breakpoints after detecting an exec and before reaching here. */
2256 ALL_BP_LOCATIONS (bploc, bplocp_tmp)
2257 if (bploc->pspace == current_program_space)
2258 gdb_assert (!bploc->inserted);
2259
2260 ALL_BREAKPOINTS_SAFE (b, temp)
2261 {
2262 if (b->pspace != current_program_space)
2263 continue;
2264
2265 /* Solib breakpoints must be explicitly reset after an exec(). */
2266 if (b->type == bp_shlib_event)
2267 {
2268 delete_breakpoint (b);
2269 continue;
2270 }
2271
2272 /* JIT breakpoints must be explicitly reset after an exec(). */
2273 if (b->type == bp_jit_event)
2274 {
2275 delete_breakpoint (b);
2276 continue;
2277 }
2278
2279 /* Thread event breakpoints must be set anew after an exec(),
2280 as must overlay event and longjmp master breakpoints. */
2281 if (b->type == bp_thread_event || b->type == bp_overlay_event
2282 || b->type == bp_longjmp_master || b->type == bp_std_terminate_master
2283 || b->type == bp_exception_master)
2284 {
2285 delete_breakpoint (b);
2286 continue;
2287 }
2288
2289 /* Step-resume breakpoints are meaningless after an exec(). */
2290 if (b->type == bp_step_resume)
2291 {
2292 delete_breakpoint (b);
2293 continue;
2294 }
2295
2296 /* Longjmp and longjmp-resume breakpoints are also meaningless
2297 after an exec. */
2298 if (b->type == bp_longjmp || b->type == bp_longjmp_resume
2299 || b->type == bp_exception || b->type == bp_exception_resume)
2300 {
2301 delete_breakpoint (b);
2302 continue;
2303 }
2304
2305 if (b->type == bp_catchpoint)
2306 {
2307 /* For now, none of the bp_catchpoint breakpoints need to
2308 do anything at this point. In the future, if some of
2309 the catchpoints need to something, we will need to add
2310 a new method, and call this method from here. */
2311 continue;
2312 }
2313
2314 /* bp_finish is a special case. The only way we ought to be able
2315 to see one of these when an exec() has happened, is if the user
2316 caught a vfork, and then said "finish". Ordinarily a finish just
2317 carries them to the call-site of the current callee, by setting
2318 a temporary bp there and resuming. But in this case, the finish
2319 will carry them entirely through the vfork & exec.
2320
2321 We don't want to allow a bp_finish to remain inserted now. But
2322 we can't safely delete it, 'cause finish_command has a handle to
2323 the bp on a bpstat, and will later want to delete it. There's a
2324 chance (and I've seen it happen) that if we delete the bp_finish
2325 here, that its storage will get reused by the time finish_command
2326 gets 'round to deleting the "use to be a bp_finish" breakpoint.
2327 We really must allow finish_command to delete a bp_finish.
2328
2329 In the absense of a general solution for the "how do we know
2330 it's safe to delete something others may have handles to?"
2331 problem, what we'll do here is just uninsert the bp_finish, and
2332 let finish_command delete it.
2333
2334 (We know the bp_finish is "doomed" in the sense that it's
2335 momentary, and will be deleted as soon as finish_command sees
2336 the inferior stopped. So it doesn't matter that the bp's
2337 address is probably bogus in the new a.out, unlike e.g., the
2338 solib breakpoints.) */
2339
2340 if (b->type == bp_finish)
2341 {
2342 continue;
2343 }
2344
2345 /* Without a symbolic address, we have little hope of the
2346 pre-exec() address meaning the same thing in the post-exec()
2347 a.out. */
2348 if (b->addr_string == NULL)
2349 {
2350 delete_breakpoint (b);
2351 continue;
2352 }
2353 }
2354 /* FIXME what about longjmp breakpoints? Re-create them here? */
2355 create_overlay_event_breakpoint ("_ovly_debug_event");
2356 create_longjmp_master_breakpoint ("longjmp");
2357 create_longjmp_master_breakpoint ("_longjmp");
2358 create_longjmp_master_breakpoint ("siglongjmp");
2359 create_longjmp_master_breakpoint ("_siglongjmp");
2360 create_std_terminate_master_breakpoint ("std::terminate()");
2361 create_exception_master_breakpoint ();
2362 }
2363
2364 int
2365 detach_breakpoints (int pid)
2366 {
2367 struct bp_location *b, **bp_tmp;
2368 int val = 0;
2369 struct cleanup *old_chain = save_inferior_ptid ();
2370 struct inferior *inf = current_inferior ();
2371
2372 if (pid == PIDGET (inferior_ptid))
2373 error (_("Cannot detach breakpoints of inferior_ptid"));
2374
2375 /* Set inferior_ptid; remove_breakpoint_1 uses this global. */
2376 inferior_ptid = pid_to_ptid (pid);
2377 ALL_BP_LOCATIONS (b, bp_tmp)
2378 {
2379 if (b->pspace != inf->pspace)
2380 continue;
2381
2382 if (b->inserted)
2383 val |= remove_breakpoint_1 (b, mark_inserted);
2384 }
2385
2386 /* Detach single-step breakpoints as well. */
2387 detach_single_step_breakpoints ();
2388
2389 do_cleanups (old_chain);
2390 return val;
2391 }
2392
2393 /* Remove the breakpoint location B from the current address space.
2394 Note that this is used to detach breakpoints from a child fork.
2395 When we get here, the child isn't in the inferior list, and neither
2396 do we have objects to represent its address space --- we should
2397 *not* look at b->pspace->aspace here. */
2398
2399 static int
2400 remove_breakpoint_1 (struct bp_location *b, insertion_state_t is)
2401 {
2402 int val;
2403
2404 /* B is never in moribund_locations by our callers. */
2405 gdb_assert (b->owner != NULL);
2406
2407 if (b->owner->enable_state == bp_permanent)
2408 /* Permanent breakpoints cannot be inserted or removed. */
2409 return 0;
2410
2411 /* The type of none suggests that owner is actually deleted.
2412 This should not ever happen. */
2413 gdb_assert (b->owner->type != bp_none);
2414
2415 if (b->loc_type == bp_loc_software_breakpoint
2416 || b->loc_type == bp_loc_hardware_breakpoint)
2417 {
2418 /* "Normal" instruction breakpoint: either the standard
2419 trap-instruction bp (bp_breakpoint), or a
2420 bp_hardware_breakpoint. */
2421
2422 /* First check to see if we have to handle an overlay. */
2423 if (overlay_debugging == ovly_off
2424 || b->section == NULL
2425 || !(section_is_overlay (b->section)))
2426 {
2427 /* No overlay handling: just remove the breakpoint. */
2428
2429 if (b->loc_type == bp_loc_hardware_breakpoint)
2430 val = target_remove_hw_breakpoint (b->gdbarch, &b->target_info);
2431 else
2432 val = target_remove_breakpoint (b->gdbarch, &b->target_info);
2433 }
2434 else
2435 {
2436 /* This breakpoint is in an overlay section.
2437 Did we set a breakpoint at the LMA? */
2438 if (!overlay_events_enabled)
2439 {
2440 /* Yes -- overlay event support is not active, so we
2441 should have set a breakpoint at the LMA. Remove it.
2442 */
2443 /* Ignore any failures: if the LMA is in ROM, we will
2444 have already warned when we failed to insert it. */
2445 if (b->loc_type == bp_loc_hardware_breakpoint)
2446 target_remove_hw_breakpoint (b->gdbarch,
2447 &b->overlay_target_info);
2448 else
2449 target_remove_breakpoint (b->gdbarch,
2450 &b->overlay_target_info);
2451 }
2452 /* Did we set a breakpoint at the VMA?
2453 If so, we will have marked the breakpoint 'inserted'. */
2454 if (b->inserted)
2455 {
2456 /* Yes -- remove it. Previously we did not bother to
2457 remove the breakpoint if the section had been
2458 unmapped, but let's not rely on that being safe. We
2459 don't know what the overlay manager might do. */
2460 if (b->loc_type == bp_loc_hardware_breakpoint)
2461 val = target_remove_hw_breakpoint (b->gdbarch,
2462 &b->target_info);
2463
2464 /* However, we should remove *software* breakpoints only
2465 if the section is still mapped, or else we overwrite
2466 wrong code with the saved shadow contents. */
2467 else if (section_is_mapped (b->section))
2468 val = target_remove_breakpoint (b->gdbarch,
2469 &b->target_info);
2470 else
2471 val = 0;
2472 }
2473 else
2474 {
2475 /* No -- not inserted, so no need to remove. No error. */
2476 val = 0;
2477 }
2478 }
2479
2480 /* In some cases, we might not be able to remove a breakpoint
2481 in a shared library that has already been removed, but we
2482 have not yet processed the shlib unload event. */
2483 if (val && solib_name_from_address (b->pspace, b->address))
2484 val = 0;
2485
2486 if (val)
2487 return val;
2488 b->inserted = (is == mark_inserted);
2489 }
2490 else if (b->loc_type == bp_loc_hardware_watchpoint)
2491 {
2492 b->inserted = (is == mark_inserted);
2493 val = target_remove_watchpoint (b->address, b->length,
2494 b->watchpoint_type, b->owner->cond_exp);
2495
2496 /* Failure to remove any of the hardware watchpoints comes here. */
2497 if ((is == mark_uninserted) && (b->inserted))
2498 warning (_("Could not remove hardware watchpoint %d."),
2499 b->owner->number);
2500 }
2501 else if (b->owner->type == bp_catchpoint
2502 && breakpoint_enabled (b->owner)
2503 && !b->duplicate)
2504 {
2505 gdb_assert (b->owner->ops != NULL && b->owner->ops->remove != NULL);
2506
2507 val = b->owner->ops->remove (b->owner);
2508 if (val)
2509 return val;
2510 b->inserted = (is == mark_inserted);
2511 }
2512
2513 return 0;
2514 }
2515
2516 static int
2517 remove_breakpoint (struct bp_location *b, insertion_state_t is)
2518 {
2519 int ret;
2520 struct cleanup *old_chain;
2521
2522 /* B is never in moribund_locations by our callers. */
2523 gdb_assert (b->owner != NULL);
2524
2525 if (b->owner->enable_state == bp_permanent)
2526 /* Permanent breakpoints cannot be inserted or removed. */
2527 return 0;
2528
2529 /* The type of none suggests that owner is actually deleted.
2530 This should not ever happen. */
2531 gdb_assert (b->owner->type != bp_none);
2532
2533 old_chain = save_current_space_and_thread ();
2534
2535 switch_to_program_space_and_thread (b->pspace);
2536
2537 ret = remove_breakpoint_1 (b, is);
2538
2539 do_cleanups (old_chain);
2540 return ret;
2541 }
2542
2543 /* Clear the "inserted" flag in all breakpoints. */
2544
2545 void
2546 mark_breakpoints_out (void)
2547 {
2548 struct bp_location *bpt, **bptp_tmp;
2549
2550 ALL_BP_LOCATIONS (bpt, bptp_tmp)
2551 if (bpt->pspace == current_program_space)
2552 bpt->inserted = 0;
2553 }
2554
2555 /* Clear the "inserted" flag in all breakpoints and delete any
2556 breakpoints which should go away between runs of the program.
2557
2558 Plus other such housekeeping that has to be done for breakpoints
2559 between runs.
2560
2561 Note: this function gets called at the end of a run (by
2562 generic_mourn_inferior) and when a run begins (by
2563 init_wait_for_inferior). */
2564
2565
2566
2567 void
2568 breakpoint_init_inferior (enum inf_context context)
2569 {
2570 struct breakpoint *b, *temp;
2571 struct bp_location *bpt, **bptp_tmp;
2572 int ix;
2573 struct program_space *pspace = current_program_space;
2574
2575 /* If breakpoint locations are shared across processes, then there's
2576 nothing to do. */
2577 if (gdbarch_has_global_breakpoints (target_gdbarch))
2578 return;
2579
2580 ALL_BP_LOCATIONS (bpt, bptp_tmp)
2581 {
2582 /* ALL_BP_LOCATIONS bp_location has BPT->OWNER always non-NULL. */
2583 if (bpt->pspace == pspace
2584 && bpt->owner->enable_state != bp_permanent)
2585 bpt->inserted = 0;
2586 }
2587
2588 ALL_BREAKPOINTS_SAFE (b, temp)
2589 {
2590 if (b->loc && b->loc->pspace != pspace)
2591 continue;
2592
2593 switch (b->type)
2594 {
2595 case bp_call_dummy:
2596
2597 /* If the call dummy breakpoint is at the entry point it will
2598 cause problems when the inferior is rerun, so we better get
2599 rid of it. */
2600
2601 case bp_watchpoint_scope:
2602
2603 /* Also get rid of scope breakpoints. */
2604
2605 case bp_shlib_event:
2606
2607 /* Also remove solib event breakpoints. Their addresses may
2608 have changed since the last time we ran the program.
2609 Actually we may now be debugging against different target;
2610 and so the solib backend that installed this breakpoint may
2611 not be used in by the target. E.g.,
2612
2613 (gdb) file prog-linux
2614 (gdb) run # native linux target
2615 ...
2616 (gdb) kill
2617 (gdb) file prog-win.exe
2618 (gdb) tar rem :9999 # remote Windows gdbserver.
2619 */
2620
2621 delete_breakpoint (b);
2622 break;
2623
2624 case bp_watchpoint:
2625 case bp_hardware_watchpoint:
2626 case bp_read_watchpoint:
2627 case bp_access_watchpoint:
2628
2629 /* Likewise for watchpoints on local expressions. */
2630 if (b->exp_valid_block != NULL)
2631 delete_breakpoint (b);
2632 else if (context == inf_starting)
2633 {
2634 /* Reset val field to force reread of starting value
2635 in insert_breakpoints. */
2636 if (b->val)
2637 value_free (b->val);
2638 b->val = NULL;
2639 b->val_valid = 0;
2640 }
2641 break;
2642 default:
2643 break;
2644 }
2645 }
2646
2647 /* Get rid of the moribund locations. */
2648 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, bpt); ++ix)
2649 decref_bp_location (&bpt);
2650 VEC_free (bp_location_p, moribund_locations);
2651 }
2652
2653 /* These functions concern about actual breakpoints inserted in the
2654 target --- to e.g. check if we need to do decr_pc adjustment or if
2655 we need to hop over the bkpt --- so we check for address space
2656 match, not program space. */
2657
2658 /* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint
2659 exists at PC. It returns ordinary_breakpoint_here if it's an
2660 ordinary breakpoint, or permanent_breakpoint_here if it's a
2661 permanent breakpoint.
2662 - When continuing from a location with an ordinary breakpoint, we
2663 actually single step once before calling insert_breakpoints.
2664 - When continuing from a localion with a permanent breakpoint, we
2665 need to use the `SKIP_PERMANENT_BREAKPOINT' macro, provided by
2666 the target, to advance the PC past the breakpoint. */
2667
2668 enum breakpoint_here
2669 breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
2670 {
2671 struct bp_location *bpt, **bptp_tmp;
2672 int any_breakpoint_here = 0;
2673
2674 ALL_BP_LOCATIONS (bpt, bptp_tmp)
2675 {
2676 if (bpt->loc_type != bp_loc_software_breakpoint
2677 && bpt->loc_type != bp_loc_hardware_breakpoint)
2678 continue;
2679
2680 /* ALL_BP_LOCATIONS bp_location has BPT->OWNER always non-NULL. */
2681 if ((breakpoint_enabled (bpt->owner)
2682 || bpt->owner->enable_state == bp_permanent)
2683 && breakpoint_address_match (bpt->pspace->aspace, bpt->address,
2684 aspace, pc))
2685 {
2686 if (overlay_debugging
2687 && section_is_overlay (bpt->section)
2688 && !section_is_mapped (bpt->section))
2689 continue; /* unmapped overlay -- can't be a match */
2690 else if (bpt->owner->enable_state == bp_permanent)
2691 return permanent_breakpoint_here;
2692 else
2693 any_breakpoint_here = 1;
2694 }
2695 }
2696
2697 return any_breakpoint_here ? ordinary_breakpoint_here : 0;
2698 }
2699
2700 /* Return true if there's a moribund breakpoint at PC. */
2701
2702 int
2703 moribund_breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
2704 {
2705 struct bp_location *loc;
2706 int ix;
2707
2708 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
2709 if (breakpoint_address_match (loc->pspace->aspace, loc->address,
2710 aspace, pc))
2711 return 1;
2712
2713 return 0;
2714 }
2715
2716 /* Returns non-zero if there's a breakpoint inserted at PC, which is
2717 inserted using regular breakpoint_chain / bp_location array mechanism.
2718 This does not check for single-step breakpoints, which are
2719 inserted and removed using direct target manipulation. */
2720
2721 int
2722 regular_breakpoint_inserted_here_p (struct address_space *aspace, CORE_ADDR pc)
2723 {
2724 struct bp_location *bpt, **bptp_tmp;
2725
2726 ALL_BP_LOCATIONS (bpt, bptp_tmp)
2727 {
2728 if (bpt->loc_type != bp_loc_software_breakpoint
2729 && bpt->loc_type != bp_loc_hardware_breakpoint)
2730 continue;
2731
2732 if (bpt->inserted
2733 && breakpoint_address_match (bpt->pspace->aspace, bpt->address,
2734 aspace, pc))
2735 {
2736 if (overlay_debugging
2737 && section_is_overlay (bpt->section)
2738 && !section_is_mapped (bpt->section))
2739 continue; /* unmapped overlay -- can't be a match */
2740 else
2741 return 1;
2742 }
2743 }
2744 return 0;
2745 }
2746
2747 /* Returns non-zero iff there's either regular breakpoint
2748 or a single step breakpoint inserted at PC. */
2749
2750 int
2751 breakpoint_inserted_here_p (struct address_space *aspace, CORE_ADDR pc)
2752 {
2753 if (regular_breakpoint_inserted_here_p (aspace, pc))
2754 return 1;
2755
2756 if (single_step_breakpoint_inserted_here_p (aspace, pc))
2757 return 1;
2758
2759 return 0;
2760 }
2761
2762 /* This function returns non-zero iff there is a software breakpoint
2763 inserted at PC. */
2764
2765 int
2766 software_breakpoint_inserted_here_p (struct address_space *aspace, CORE_ADDR pc)
2767 {
2768 struct bp_location *bpt, **bptp_tmp;
2769
2770 ALL_BP_LOCATIONS (bpt, bptp_tmp)
2771 {
2772 if (bpt->loc_type != bp_loc_software_breakpoint)
2773 continue;
2774
2775 if (bpt->inserted
2776 && breakpoint_address_match (bpt->pspace->aspace, bpt->address,
2777 aspace, pc))
2778 {
2779 if (overlay_debugging
2780 && section_is_overlay (bpt->section)
2781 && !section_is_mapped (bpt->section))
2782 continue; /* unmapped overlay -- can't be a match */
2783 else
2784 return 1;
2785 }
2786 }
2787
2788 /* Also check for software single-step breakpoints. */
2789 if (single_step_breakpoint_inserted_here_p (aspace, pc))
2790 return 1;
2791
2792 return 0;
2793 }
2794
2795 int
2796 hardware_watchpoint_inserted_in_range (struct address_space *aspace,
2797 CORE_ADDR addr, ULONGEST len)
2798 {
2799 struct breakpoint *bpt;
2800
2801 ALL_BREAKPOINTS (bpt)
2802 {
2803 struct bp_location *loc;
2804
2805 if (bpt->type != bp_hardware_watchpoint
2806 && bpt->type != bp_access_watchpoint)
2807 continue;
2808
2809 if (!breakpoint_enabled (bpt))
2810 continue;
2811
2812 for (loc = bpt->loc; loc; loc = loc->next)
2813 if (loc->pspace->aspace == aspace && loc->inserted)
2814 {
2815 CORE_ADDR l, h;
2816
2817 /* Check for intersection. */
2818 l = max (loc->address, addr);
2819 h = min (loc->address + loc->length, addr + len);
2820 if (l < h)
2821 return 1;
2822 }
2823 }
2824 return 0;
2825 }
2826
2827 /* breakpoint_thread_match (PC, PTID) returns true if the breakpoint at
2828 PC is valid for process/thread PTID. */
2829
2830 int
2831 breakpoint_thread_match (struct address_space *aspace, CORE_ADDR pc,
2832 ptid_t ptid)
2833 {
2834 struct bp_location *bpt, **bptp_tmp;
2835 /* The thread and task IDs associated to PTID, computed lazily. */
2836 int thread = -1;
2837 int task = 0;
2838
2839 ALL_BP_LOCATIONS (bpt, bptp_tmp)
2840 {
2841 if (bpt->loc_type != bp_loc_software_breakpoint
2842 && bpt->loc_type != bp_loc_hardware_breakpoint)
2843 continue;
2844
2845 /* ALL_BP_LOCATIONS bp_location has BPT->OWNER always non-NULL. */
2846 if (!breakpoint_enabled (bpt->owner)
2847 && bpt->owner->enable_state != bp_permanent)
2848 continue;
2849
2850 if (!breakpoint_address_match (bpt->pspace->aspace, bpt->address,
2851 aspace, pc))
2852 continue;
2853
2854 if (bpt->owner->thread != -1)
2855 {
2856 /* This is a thread-specific breakpoint. Check that ptid
2857 matches that thread. If thread hasn't been computed yet,
2858 it is now time to do so. */
2859 if (thread == -1)
2860 thread = pid_to_thread_id (ptid);
2861 if (bpt->owner->thread != thread)
2862 continue;
2863 }
2864
2865 if (bpt->owner->task != 0)
2866 {
2867 /* This is a task-specific breakpoint. Check that ptid
2868 matches that task. If task hasn't been computed yet,
2869 it is now time to do so. */
2870 if (task == 0)
2871 task = ada_get_task_number (ptid);
2872 if (bpt->owner->task != task)
2873 continue;
2874 }
2875
2876 if (overlay_debugging
2877 && section_is_overlay (bpt->section)
2878 && !section_is_mapped (bpt->section))
2879 continue; /* unmapped overlay -- can't be a match */
2880
2881 return 1;
2882 }
2883
2884 return 0;
2885 }
2886 \f
2887
2888 /* bpstat stuff. External routines' interfaces are documented
2889 in breakpoint.h. */
2890
2891 int
2892 ep_is_catchpoint (struct breakpoint *ep)
2893 {
2894 return (ep->type == bp_catchpoint);
2895 }
2896
2897 /* Frees any storage that is part of a bpstat. Does not walk the
2898 'next' chain. */
2899
2900 static void
2901 bpstat_free (bpstat bs)
2902 {
2903 if (bs->old_val != NULL)
2904 value_free (bs->old_val);
2905 decref_counted_command_line (&bs->commands);
2906 decref_bp_location (&bs->bp_location_at);
2907 xfree (bs);
2908 }
2909
2910 /* Clear a bpstat so that it says we are not at any breakpoint.
2911 Also free any storage that is part of a bpstat. */
2912
2913 void
2914 bpstat_clear (bpstat *bsp)
2915 {
2916 bpstat p;
2917 bpstat q;
2918
2919 if (bsp == 0)
2920 return;
2921 p = *bsp;
2922 while (p != NULL)
2923 {
2924 q = p->next;
2925 bpstat_free (p);
2926 p = q;
2927 }
2928 *bsp = NULL;
2929 }
2930
2931 /* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
2932 is part of the bpstat is copied as well. */
2933
2934 bpstat
2935 bpstat_copy (bpstat bs)
2936 {
2937 bpstat p = NULL;
2938 bpstat tmp;
2939 bpstat retval = NULL;
2940
2941 if (bs == NULL)
2942 return bs;
2943
2944 for (; bs != NULL; bs = bs->next)
2945 {
2946 tmp = (bpstat) xmalloc (sizeof (*tmp));
2947 memcpy (tmp, bs, sizeof (*tmp));
2948 incref_counted_command_line (tmp->commands);
2949 incref_bp_location (tmp->bp_location_at);
2950 if (bs->old_val != NULL)
2951 {
2952 tmp->old_val = value_copy (bs->old_val);
2953 release_value (tmp->old_val);
2954 }
2955
2956 if (p == NULL)
2957 /* This is the first thing in the chain. */
2958 retval = tmp;
2959 else
2960 p->next = tmp;
2961 p = tmp;
2962 }
2963 p->next = NULL;
2964 return retval;
2965 }
2966
2967 /* Find the bpstat associated with this breakpoint */
2968
2969 bpstat
2970 bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
2971 {
2972 if (bsp == NULL)
2973 return NULL;
2974
2975 for (; bsp != NULL; bsp = bsp->next)
2976 {
2977 if (bsp->breakpoint_at == breakpoint)
2978 return bsp;
2979 }
2980 return NULL;
2981 }
2982
2983 /* Put in *NUM the breakpoint number of the first breakpoint we are stopped
2984 at. *BSP upon return is a bpstat which points to the remaining
2985 breakpoints stopped at (but which is not guaranteed to be good for
2986 anything but further calls to bpstat_num).
2987 Return 0 if passed a bpstat which does not indicate any breakpoints.
2988 Return -1 if stopped at a breakpoint that has been deleted since
2989 we set it.
2990 Return 1 otherwise. */
2991
2992 int
2993 bpstat_num (bpstat *bsp, int *num)
2994 {
2995 struct breakpoint *b;
2996
2997 if ((*bsp) == NULL)
2998 return 0; /* No more breakpoint values */
2999
3000 /* We assume we'll never have several bpstats that
3001 correspond to a single breakpoint -- otherwise,
3002 this function might return the same number more
3003 than once and this will look ugly. */
3004 b = (*bsp)->breakpoint_at;
3005 *bsp = (*bsp)->next;
3006 if (b == NULL)
3007 return -1; /* breakpoint that's been deleted since */
3008
3009 *num = b->number; /* We have its number */
3010 return 1;
3011 }
3012
3013 /* Modify BS so that the actions will not be performed. */
3014
3015 void
3016 bpstat_clear_actions (bpstat bs)
3017 {
3018 for (; bs != NULL; bs = bs->next)
3019 {
3020 decref_counted_command_line (&bs->commands);
3021 bs->commands_left = NULL;
3022 if (bs->old_val != NULL)
3023 {
3024 value_free (bs->old_val);
3025 bs->old_val = NULL;
3026 }
3027 }
3028 }
3029
3030 /* Called when a command is about to proceed the inferior. */
3031
3032 static void
3033 breakpoint_about_to_proceed (void)
3034 {
3035 if (!ptid_equal (inferior_ptid, null_ptid))
3036 {
3037 struct thread_info *tp = inferior_thread ();
3038
3039 /* Allow inferior function calls in breakpoint commands to not
3040 interrupt the command list. When the call finishes
3041 successfully, the inferior will be standing at the same
3042 breakpoint as if nothing happened. */
3043 if (tp->control.in_infcall)
3044 return;
3045 }
3046
3047 breakpoint_proceeded = 1;
3048 }
3049
3050 /* Stub for cleaning up our state if we error-out of a breakpoint command */
3051 static void
3052 cleanup_executing_breakpoints (void *ignore)
3053 {
3054 executing_breakpoint_commands = 0;
3055 }
3056
3057 /* Execute all the commands associated with all the breakpoints at this
3058 location. Any of these commands could cause the process to proceed
3059 beyond this point, etc. We look out for such changes by checking
3060 the global "breakpoint_proceeded" after each command.
3061
3062 Returns true if a breakpoint command resumed the inferior. In that
3063 case, it is the caller's responsibility to recall it again with the
3064 bpstat of the current thread. */
3065
3066 static int
3067 bpstat_do_actions_1 (bpstat *bsp)
3068 {
3069 bpstat bs;
3070 struct cleanup *old_chain;
3071 int again = 0;
3072
3073 /* Avoid endless recursion if a `source' command is contained
3074 in bs->commands. */
3075 if (executing_breakpoint_commands)
3076 return 0;
3077
3078 executing_breakpoint_commands = 1;
3079 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
3080
3081 /* This pointer will iterate over the list of bpstat's. */
3082 bs = *bsp;
3083
3084 breakpoint_proceeded = 0;
3085 for (; bs != NULL; bs = bs->next)
3086 {
3087 struct counted_command_line *ccmd;
3088 struct command_line *cmd;
3089 struct cleanup *this_cmd_tree_chain;
3090
3091 /* Take ownership of the BSP's command tree, if it has one.
3092
3093 The command tree could legitimately contain commands like
3094 'step' and 'next', which call clear_proceed_status, which
3095 frees stop_bpstat's command tree. To make sure this doesn't
3096 free the tree we're executing out from under us, we need to
3097 take ownership of the tree ourselves. Since a given bpstat's
3098 commands are only executed once, we don't need to copy it; we
3099 can clear the pointer in the bpstat, and make sure we free
3100 the tree when we're done. */
3101 ccmd = bs->commands;
3102 bs->commands = NULL;
3103 this_cmd_tree_chain
3104 = make_cleanup_decref_counted_command_line (&ccmd);
3105 cmd = bs->commands_left;
3106 bs->commands_left = NULL;
3107
3108 while (cmd != NULL)
3109 {
3110 execute_control_command (cmd);
3111
3112 if (breakpoint_proceeded)
3113 break;
3114 else
3115 cmd = cmd->next;
3116 }
3117
3118 /* We can free this command tree now. */
3119 do_cleanups (this_cmd_tree_chain);
3120
3121 if (breakpoint_proceeded)
3122 {
3123 if (target_can_async_p ())
3124 /* If we are in async mode, then the target might be still
3125 running, not stopped at any breakpoint, so nothing for
3126 us to do here -- just return to the event loop. */
3127 ;
3128 else
3129 /* In sync mode, when execute_control_command returns
3130 we're already standing on the next breakpoint.
3131 Breakpoint commands for that stop were not run, since
3132 execute_command does not run breakpoint commands --
3133 only command_line_handler does, but that one is not
3134 involved in execution of breakpoint commands. So, we
3135 can now execute breakpoint commands. It should be
3136 noted that making execute_command do bpstat actions is
3137 not an option -- in this case we'll have recursive
3138 invocation of bpstat for each breakpoint with a
3139 command, and can easily blow up GDB stack. Instead, we
3140 return true, which will trigger the caller to recall us
3141 with the new stop_bpstat. */
3142 again = 1;
3143 break;
3144 }
3145 }
3146 do_cleanups (old_chain);
3147 return again;
3148 }
3149
3150 void
3151 bpstat_do_actions (void)
3152 {
3153 /* Do any commands attached to breakpoint we are stopped at. */
3154 while (!ptid_equal (inferior_ptid, null_ptid)
3155 && target_has_execution
3156 && !is_exited (inferior_ptid)
3157 && !is_executing (inferior_ptid))
3158 /* Since in sync mode, bpstat_do_actions may resume the inferior,
3159 and only return when it is stopped at the next breakpoint, we
3160 keep doing breakpoint actions until it returns false to
3161 indicate the inferior was not resumed. */
3162 if (!bpstat_do_actions_1 (&inferior_thread ()->control.stop_bpstat))
3163 break;
3164 }
3165
3166 /* Print out the (old or new) value associated with a watchpoint. */
3167
3168 static void
3169 watchpoint_value_print (struct value *val, struct ui_file *stream)
3170 {
3171 if (val == NULL)
3172 fprintf_unfiltered (stream, _("<unreadable>"));
3173 else
3174 {
3175 struct value_print_options opts;
3176 get_user_print_options (&opts);
3177 value_print (val, stream, &opts);
3178 }
3179 }
3180
3181 /* This is the normal print function for a bpstat. In the future,
3182 much of this logic could (should?) be moved to bpstat_stop_status,
3183 by having it set different print_it values.
3184
3185 Current scheme: When we stop, bpstat_print() is called. It loops
3186 through the bpstat list of things causing this stop, calling the
3187 print_bp_stop_message function on each one. The behavior of the
3188 print_bp_stop_message function depends on the print_it field of
3189 bpstat. If such field so indicates, call this function here.
3190
3191 Return values from this routine (ultimately used by bpstat_print()
3192 and normal_stop() to decide what to do):
3193 PRINT_NOTHING: Means we already printed all we needed to print,
3194 don't print anything else.
3195 PRINT_SRC_ONLY: Means we printed something, and we do *not* desire
3196 that something to be followed by a location.
3197 PRINT_SCR_AND_LOC: Means we printed something, and we *do* desire
3198 that something to be followed by a location.
3199 PRINT_UNKNOWN: Means we printed nothing or we need to do some more
3200 analysis. */
3201
3202 static enum print_stop_action
3203 print_it_typical (bpstat bs)
3204 {
3205 struct cleanup *old_chain;
3206 struct breakpoint *b;
3207 const struct bp_location *bl;
3208 struct ui_stream *stb;
3209 int bp_temp = 0;
3210 enum print_stop_action result;
3211
3212 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
3213 which has since been deleted. */
3214 if (bs->breakpoint_at == NULL)
3215 return PRINT_UNKNOWN;
3216
3217 gdb_assert (bs->bp_location_at != NULL);
3218
3219 bl = bs->bp_location_at;
3220 b = bs->breakpoint_at;
3221
3222 stb = ui_out_stream_new (uiout);
3223 old_chain = make_cleanup_ui_out_stream_delete (stb);
3224
3225 switch (b->type)
3226 {
3227 case bp_breakpoint:
3228 case bp_hardware_breakpoint:
3229 bp_temp = b->disposition == disp_del;
3230 if (bl->address != bl->requested_address)
3231 breakpoint_adjustment_warning (bl->requested_address,
3232 bl->address,
3233 b->number, 1);
3234 annotate_breakpoint (b->number);
3235 if (bp_temp)
3236 ui_out_text (uiout, "\nTemporary breakpoint ");
3237 else
3238 ui_out_text (uiout, "\nBreakpoint ");
3239 if (ui_out_is_mi_like_p (uiout))
3240 {
3241 ui_out_field_string (uiout, "reason",
3242 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
3243 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
3244 }
3245 ui_out_field_int (uiout, "bkptno", b->number);
3246 ui_out_text (uiout, ", ");
3247 result = PRINT_SRC_AND_LOC;
3248 break;
3249
3250 case bp_shlib_event:
3251 /* Did we stop because the user set the stop_on_solib_events
3252 variable? (If so, we report this as a generic, "Stopped due
3253 to shlib event" message.) */
3254 printf_filtered (_("Stopped due to shared library event\n"));
3255 result = PRINT_NOTHING;
3256 break;
3257
3258 case bp_thread_event:
3259 /* Not sure how we will get here.
3260 GDB should not stop for these breakpoints. */
3261 printf_filtered (_("Thread Event Breakpoint: gdb should not stop!\n"));
3262 result = PRINT_NOTHING;
3263 break;
3264
3265 case bp_overlay_event:
3266 /* By analogy with the thread event, GDB should not stop for these. */
3267 printf_filtered (_("Overlay Event Breakpoint: gdb should not stop!\n"));
3268 result = PRINT_NOTHING;
3269 break;
3270
3271 case bp_longjmp_master:
3272 /* These should never be enabled. */
3273 printf_filtered (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
3274 result = PRINT_NOTHING;
3275 break;
3276
3277 case bp_std_terminate_master:
3278 /* These should never be enabled. */
3279 printf_filtered (_("std::terminate Master Breakpoint: gdb should not stop!\n"));
3280 result = PRINT_NOTHING;
3281 break;
3282
3283 case bp_exception_master:
3284 /* These should never be enabled. */
3285 printf_filtered (_("Exception Master Breakpoint: gdb should not stop!\n"));
3286 result = PRINT_NOTHING;
3287 break;
3288
3289 case bp_watchpoint:
3290 case bp_hardware_watchpoint:
3291 annotate_watchpoint (b->number);
3292 if (ui_out_is_mi_like_p (uiout))
3293 ui_out_field_string
3294 (uiout, "reason",
3295 async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
3296 mention (b);
3297 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
3298 ui_out_text (uiout, "\nOld value = ");
3299 watchpoint_value_print (bs->old_val, stb->stream);
3300 ui_out_field_stream (uiout, "old", stb);
3301 ui_out_text (uiout, "\nNew value = ");
3302 watchpoint_value_print (b->val, stb->stream);
3303 ui_out_field_stream (uiout, "new", stb);
3304 ui_out_text (uiout, "\n");
3305 /* More than one watchpoint may have been triggered. */
3306 result = PRINT_UNKNOWN;
3307 break;
3308
3309 case bp_read_watchpoint:
3310 if (ui_out_is_mi_like_p (uiout))
3311 ui_out_field_string
3312 (uiout, "reason",
3313 async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
3314 mention (b);
3315 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
3316 ui_out_text (uiout, "\nValue = ");
3317 watchpoint_value_print (b->val, stb->stream);
3318 ui_out_field_stream (uiout, "value", stb);
3319 ui_out_text (uiout, "\n");
3320 result = PRINT_UNKNOWN;
3321 break;
3322
3323 case bp_access_watchpoint:
3324 if (bs->old_val != NULL)
3325 {
3326 annotate_watchpoint (b->number);
3327 if (ui_out_is_mi_like_p (uiout))
3328 ui_out_field_string
3329 (uiout, "reason",
3330 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
3331 mention (b);
3332 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
3333 ui_out_text (uiout, "\nOld value = ");
3334 watchpoint_value_print (bs->old_val, stb->stream);
3335 ui_out_field_stream (uiout, "old", stb);
3336 ui_out_text (uiout, "\nNew value = ");
3337 }
3338 else
3339 {
3340 mention (b);
3341 if (ui_out_is_mi_like_p (uiout))
3342 ui_out_field_string
3343 (uiout, "reason",
3344 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
3345 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
3346 ui_out_text (uiout, "\nValue = ");
3347 }
3348 watchpoint_value_print (b->val, stb->stream);
3349 ui_out_field_stream (uiout, "new", stb);
3350 ui_out_text (uiout, "\n");
3351 result = PRINT_UNKNOWN;
3352 break;
3353
3354 /* Fall through, we don't deal with these types of breakpoints
3355 here. */
3356
3357 case bp_finish:
3358 if (ui_out_is_mi_like_p (uiout))
3359 ui_out_field_string
3360 (uiout, "reason",
3361 async_reason_lookup (EXEC_ASYNC_FUNCTION_FINISHED));
3362 result = PRINT_UNKNOWN;
3363 break;
3364
3365 case bp_until:
3366 if (ui_out_is_mi_like_p (uiout))
3367 ui_out_field_string
3368 (uiout, "reason",
3369 async_reason_lookup (EXEC_ASYNC_LOCATION_REACHED));
3370 result = PRINT_UNKNOWN;
3371 break;
3372
3373 case bp_none:
3374 case bp_longjmp:
3375 case bp_longjmp_resume:
3376 case bp_exception:
3377 case bp_exception_resume:
3378 case bp_step_resume:
3379 case bp_watchpoint_scope:
3380 case bp_call_dummy:
3381 case bp_std_terminate:
3382 case bp_tracepoint:
3383 case bp_fast_tracepoint:
3384 case bp_jit_event:
3385 default:
3386 result = PRINT_UNKNOWN;
3387 break;
3388 }
3389
3390 do_cleanups (old_chain);
3391 return result;
3392 }
3393
3394 /* Generic routine for printing messages indicating why we
3395 stopped. The behavior of this function depends on the value
3396 'print_it' in the bpstat structure. Under some circumstances we
3397 may decide not to print anything here and delegate the task to
3398 normal_stop(). */
3399
3400 static enum print_stop_action
3401 print_bp_stop_message (bpstat bs)
3402 {
3403 switch (bs->print_it)
3404 {
3405 case print_it_noop:
3406 /* Nothing should be printed for this bpstat entry. */
3407 return PRINT_UNKNOWN;
3408 break;
3409
3410 case print_it_done:
3411 /* We still want to print the frame, but we already printed the
3412 relevant messages. */
3413 return PRINT_SRC_AND_LOC;
3414 break;
3415
3416 case print_it_normal:
3417 {
3418 struct breakpoint *b = bs->breakpoint_at;
3419
3420 /* Normal case. Call the breakpoint's print_it method, or
3421 print_it_typical. */
3422 /* FIXME: how breakpoint can ever be NULL here? */
3423 if (b != NULL && b->ops != NULL && b->ops->print_it != NULL)
3424 return b->ops->print_it (b);
3425 else
3426 return print_it_typical (bs);
3427 }
3428 break;
3429
3430 default:
3431 internal_error (__FILE__, __LINE__,
3432 _("print_bp_stop_message: unrecognized enum value"));
3433 break;
3434 }
3435 }
3436
3437 /* Print a message indicating what happened. This is called from
3438 normal_stop(). The input to this routine is the head of the bpstat
3439 list - a list of the eventpoints that caused this stop. This
3440 routine calls the generic print routine for printing a message
3441 about reasons for stopping. This will print (for example) the
3442 "Breakpoint n," part of the output. The return value of this
3443 routine is one of:
3444
3445 PRINT_UNKNOWN: Means we printed nothing
3446 PRINT_SRC_AND_LOC: Means we printed something, and expect subsequent
3447 code to print the location. An example is
3448 "Breakpoint 1, " which should be followed by
3449 the location.
3450 PRINT_SRC_ONLY: Means we printed something, but there is no need
3451 to also print the location part of the message.
3452 An example is the catch/throw messages, which
3453 don't require a location appended to the end.
3454 PRINT_NOTHING: We have done some printing and we don't need any
3455 further info to be printed.*/
3456
3457 enum print_stop_action
3458 bpstat_print (bpstat bs)
3459 {
3460 int val;
3461
3462 /* Maybe another breakpoint in the chain caused us to stop.
3463 (Currently all watchpoints go on the bpstat whether hit or not.
3464 That probably could (should) be changed, provided care is taken
3465 with respect to bpstat_explains_signal). */
3466 for (; bs; bs = bs->next)
3467 {
3468 val = print_bp_stop_message (bs);
3469 if (val == PRINT_SRC_ONLY
3470 || val == PRINT_SRC_AND_LOC
3471 || val == PRINT_NOTHING)
3472 return val;
3473 }
3474
3475 /* We reached the end of the chain, or we got a null BS to start
3476 with and nothing was printed. */
3477 return PRINT_UNKNOWN;
3478 }
3479
3480 /* Evaluate the expression EXP and return 1 if value is zero.
3481 This is used inside a catch_errors to evaluate the breakpoint condition.
3482 The argument is a "struct expression *" that has been cast to char * to
3483 make it pass through catch_errors. */
3484
3485 static int
3486 breakpoint_cond_eval (void *exp)
3487 {
3488 struct value *mark = value_mark ();
3489 int i = !value_true (evaluate_expression ((struct expression *) exp));
3490
3491 value_free_to_mark (mark);
3492 return i;
3493 }
3494
3495 /* Allocate a new bpstat. Link it to the FIFO list by BS_LINK_POINTER. */
3496
3497 static bpstat
3498 bpstat_alloc (struct bp_location *bl, bpstat **bs_link_pointer)
3499 {
3500 bpstat bs;
3501
3502 bs = (bpstat) xmalloc (sizeof (*bs));
3503 bs->next = NULL;
3504 **bs_link_pointer = bs;
3505 *bs_link_pointer = &bs->next;
3506 bs->breakpoint_at = bl->owner;
3507 bs->bp_location_at = bl;
3508 incref_bp_location (bl);
3509 /* If the condition is false, etc., don't do the commands. */
3510 bs->commands = NULL;
3511 bs->commands_left = NULL;
3512 bs->old_val = NULL;
3513 bs->print_it = print_it_normal;
3514 return bs;
3515 }
3516 \f
3517 /* The target has stopped with waitstatus WS. Check if any hardware
3518 watchpoints have triggered, according to the target. */
3519
3520 int
3521 watchpoints_triggered (struct target_waitstatus *ws)
3522 {
3523 int stopped_by_watchpoint = target_stopped_by_watchpoint ();
3524 CORE_ADDR addr;
3525 struct breakpoint *b;
3526
3527 if (!stopped_by_watchpoint)
3528 {
3529 /* We were not stopped by a watchpoint. Mark all watchpoints
3530 as not triggered. */
3531 ALL_BREAKPOINTS (b)
3532 if (is_hardware_watchpoint (b))
3533 b->watchpoint_triggered = watch_triggered_no;
3534
3535 return 0;
3536 }
3537
3538 if (!target_stopped_data_address (&current_target, &addr))
3539 {
3540 /* We were stopped by a watchpoint, but we don't know where.
3541 Mark all watchpoints as unknown. */
3542 ALL_BREAKPOINTS (b)
3543 if (is_hardware_watchpoint (b))
3544 b->watchpoint_triggered = watch_triggered_unknown;
3545
3546 return stopped_by_watchpoint;
3547 }
3548
3549 /* The target could report the data address. Mark watchpoints
3550 affected by this data address as triggered, and all others as not
3551 triggered. */
3552
3553 ALL_BREAKPOINTS (b)
3554 if (is_hardware_watchpoint (b))
3555 {
3556 struct bp_location *loc;
3557
3558 b->watchpoint_triggered = watch_triggered_no;
3559 for (loc = b->loc; loc; loc = loc->next)
3560 /* Exact match not required. Within range is
3561 sufficient. */
3562 if (target_watchpoint_addr_within_range (&current_target,
3563 addr, loc->address,
3564 loc->length))
3565 {
3566 b->watchpoint_triggered = watch_triggered_yes;
3567 break;
3568 }
3569 }
3570
3571 return 1;
3572 }
3573
3574 /* Possible return values for watchpoint_check (this can't be an enum
3575 because of check_errors). */
3576 /* The watchpoint has been deleted. */
3577 #define WP_DELETED 1
3578 /* The value has changed. */
3579 #define WP_VALUE_CHANGED 2
3580 /* The value has not changed. */
3581 #define WP_VALUE_NOT_CHANGED 3
3582 /* Ignore this watchpoint, no matter if the value changed or not. */
3583 #define WP_IGNORE 4
3584
3585 #define BP_TEMPFLAG 1
3586 #define BP_HARDWAREFLAG 2
3587
3588 /* Evaluate watchpoint condition expression and check if its value changed.
3589
3590 P should be a pointer to struct bpstat, but is defined as a void *
3591 in order for this function to be usable with catch_errors. */
3592
3593 static int
3594 watchpoint_check (void *p)
3595 {
3596 bpstat bs = (bpstat) p;
3597 struct breakpoint *b;
3598 struct frame_info *fr;
3599 int within_current_scope;
3600
3601 /* BS is built from an existing struct breakpoint. */
3602 gdb_assert (bs->breakpoint_at != NULL);
3603 b = bs->breakpoint_at;
3604
3605 /* If this is a local watchpoint, we only want to check if the
3606 watchpoint frame is in scope if the current thread is the thread
3607 that was used to create the watchpoint. */
3608 if (!watchpoint_in_thread_scope (b))
3609 return WP_IGNORE;
3610
3611 if (b->exp_valid_block == NULL)
3612 within_current_scope = 1;
3613 else
3614 {
3615 struct frame_info *frame = get_current_frame ();
3616 struct gdbarch *frame_arch = get_frame_arch (frame);
3617 CORE_ADDR frame_pc = get_frame_pc (frame);
3618
3619 /* in_function_epilogue_p() returns a non-zero value if we're still
3620 in the function but the stack frame has already been invalidated.
3621 Since we can't rely on the values of local variables after the
3622 stack has been destroyed, we are treating the watchpoint in that
3623 state as `not changed' without further checking. Don't mark
3624 watchpoints as changed if the current frame is in an epilogue -
3625 even if they are in some other frame, our view of the stack
3626 is likely to be wrong and frame_find_by_id could error out. */
3627 if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc))
3628 return WP_IGNORE;
3629
3630 fr = frame_find_by_id (b->watchpoint_frame);
3631 within_current_scope = (fr != NULL);
3632
3633 /* If we've gotten confused in the unwinder, we might have
3634 returned a frame that can't describe this variable. */
3635 if (within_current_scope)
3636 {
3637 struct symbol *function;
3638
3639 function = get_frame_function (fr);
3640 if (function == NULL
3641 || !contained_in (b->exp_valid_block,
3642 SYMBOL_BLOCK_VALUE (function)))
3643 within_current_scope = 0;
3644 }
3645
3646 if (within_current_scope)
3647 /* If we end up stopping, the current frame will get selected
3648 in normal_stop. So this call to select_frame won't affect
3649 the user. */
3650 select_frame (fr);
3651 }
3652
3653 if (within_current_scope)
3654 {
3655 /* We use value_{,free_to_}mark because it could be a
3656 *long* time before we return to the command level and
3657 call free_all_values. We can't call free_all_values because
3658 we might be in the middle of evaluating a function call. */
3659
3660 int pc = 0;
3661 struct value *mark = value_mark ();
3662 struct value *new_val;
3663
3664 fetch_subexp_value (b->exp, &pc, &new_val, NULL, NULL);
3665
3666 /* We use value_equal_contents instead of value_equal because the latter
3667 coerces an array to a pointer, thus comparing just the address of the
3668 array instead of its contents. This is not what we want. */
3669 if ((b->val != NULL) != (new_val != NULL)
3670 || (b->val != NULL && !value_equal_contents (b->val, new_val)))
3671 {
3672 if (new_val != NULL)
3673 {
3674 release_value (new_val);
3675 value_free_to_mark (mark);
3676 }
3677 bs->old_val = b->val;
3678 b->val = new_val;
3679 b->val_valid = 1;
3680 return WP_VALUE_CHANGED;
3681 }
3682 else
3683 {
3684 /* Nothing changed. */
3685 value_free_to_mark (mark);
3686 return WP_VALUE_NOT_CHANGED;
3687 }
3688 }
3689 else
3690 {
3691 /* This seems like the only logical thing to do because
3692 if we temporarily ignored the watchpoint, then when
3693 we reenter the block in which it is valid it contains
3694 garbage (in the case of a function, it may have two
3695 garbage values, one before and one after the prologue).
3696 So we can't even detect the first assignment to it and
3697 watch after that (since the garbage may or may not equal
3698 the first value assigned). */
3699 /* We print all the stop information in print_it_typical(), but
3700 in this case, by the time we call print_it_typical() this bp
3701 will be deleted already. So we have no choice but print the
3702 information here. */
3703 if (ui_out_is_mi_like_p (uiout))
3704 ui_out_field_string
3705 (uiout, "reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_SCOPE));
3706 ui_out_text (uiout, "\nWatchpoint ");
3707 ui_out_field_int (uiout, "wpnum", b->number);
3708 ui_out_text (uiout, " deleted because the program has left the block in\n\
3709 which its expression is valid.\n");
3710
3711 if (b->related_breakpoint)
3712 {
3713 b->related_breakpoint->disposition = disp_del_at_next_stop;
3714 b->related_breakpoint->related_breakpoint = NULL;
3715 b->related_breakpoint = NULL;
3716 }
3717 b->disposition = disp_del_at_next_stop;
3718
3719 return WP_DELETED;
3720 }
3721 }
3722
3723 /* Return true if it looks like target has stopped due to hitting
3724 breakpoint location BL. This function does not check if we
3725 should stop, only if BL explains the stop. */
3726 static int
3727 bpstat_check_location (const struct bp_location *bl,
3728 struct address_space *aspace, CORE_ADDR bp_addr)
3729 {
3730 struct breakpoint *b = bl->owner;
3731
3732 /* BL is from existing struct breakpoint. */
3733 gdb_assert (b != NULL);
3734
3735 /* By definition, the inferior does not report stops at
3736 tracepoints. */
3737 if (is_tracepoint (b))
3738 return 0;
3739
3740 if (!is_watchpoint (b)
3741 && b->type != bp_hardware_breakpoint
3742 && b->type != bp_catchpoint) /* a non-watchpoint bp */
3743 {
3744 if (!breakpoint_address_match (bl->pspace->aspace, bl->address,
3745 aspace, bp_addr))
3746 return 0;
3747 if (overlay_debugging /* unmapped overlay section */
3748 && section_is_overlay (bl->section)
3749 && !section_is_mapped (bl->section))
3750 return 0;
3751 }
3752
3753 /* Continuable hardware watchpoints are treated as non-existent if the
3754 reason we stopped wasn't a hardware watchpoint (we didn't stop on
3755 some data address). Otherwise gdb won't stop on a break instruction
3756 in the code (not from a breakpoint) when a hardware watchpoint has
3757 been defined. Also skip watchpoints which we know did not trigger
3758 (did not match the data address). */
3759
3760 if (is_hardware_watchpoint (b)
3761 && b->watchpoint_triggered == watch_triggered_no)
3762 return 0;
3763
3764 if (b->type == bp_hardware_breakpoint)
3765 {
3766 if (bl->address != bp_addr)
3767 return 0;
3768 if (overlay_debugging /* unmapped overlay section */
3769 && section_is_overlay (bl->section)
3770 && !section_is_mapped (bl->section))
3771 return 0;
3772 }
3773
3774 if (b->type == bp_catchpoint)
3775 {
3776 gdb_assert (b->ops != NULL && b->ops->breakpoint_hit != NULL);
3777 if (!b->ops->breakpoint_hit (b))
3778 return 0;
3779 }
3780
3781 return 1;
3782 }
3783
3784 /* If BS refers to a watchpoint, determine if the watched values
3785 has actually changed, and we should stop. If not, set BS->stop
3786 to 0. */
3787 static void
3788 bpstat_check_watchpoint (bpstat bs)
3789 {
3790 const struct bp_location *bl;
3791 struct breakpoint *b;
3792
3793 /* BS is built for existing struct breakpoint. */
3794 bl = bs->bp_location_at;
3795 gdb_assert (bl != NULL);
3796 b = bs->breakpoint_at;
3797 gdb_assert (b != NULL);
3798
3799 if (is_watchpoint (b))
3800 {
3801 int must_check_value = 0;
3802
3803 if (b->type == bp_watchpoint)
3804 /* For a software watchpoint, we must always check the
3805 watched value. */
3806 must_check_value = 1;
3807 else if (b->watchpoint_triggered == watch_triggered_yes)
3808 /* We have a hardware watchpoint (read, write, or access)
3809 and the target earlier reported an address watched by
3810 this watchpoint. */
3811 must_check_value = 1;
3812 else if (b->watchpoint_triggered == watch_triggered_unknown
3813 && b->type == bp_hardware_watchpoint)
3814 /* We were stopped by a hardware watchpoint, but the target could
3815 not report the data address. We must check the watchpoint's
3816 value. Access and read watchpoints are out of luck; without
3817 a data address, we can't figure it out. */
3818 must_check_value = 1;
3819
3820 if (must_check_value)
3821 {
3822 char *message = xstrprintf ("Error evaluating expression for watchpoint %d\n",
3823 b->number);
3824 struct cleanup *cleanups = make_cleanup (xfree, message);
3825 int e = catch_errors (watchpoint_check, bs, message,
3826 RETURN_MASK_ALL);
3827 do_cleanups (cleanups);
3828 switch (e)
3829 {
3830 case WP_DELETED:
3831 /* We've already printed what needs to be printed. */
3832 bs->print_it = print_it_done;
3833 /* Stop. */
3834 break;
3835 case WP_IGNORE:
3836 bs->print_it = print_it_noop;
3837 bs->stop = 0;
3838 break;
3839 case WP_VALUE_CHANGED:
3840 if (b->type == bp_read_watchpoint)
3841 {
3842 /* There are two cases to consider here:
3843
3844 1. we're watching the triggered memory for reads.
3845 In that case, trust the target, and always report
3846 the watchpoint hit to the user. Even though
3847 reads don't cause value changes, the value may
3848 have changed since the last time it was read, and
3849 since we're not trapping writes, we will not see
3850 those, and as such we should ignore our notion of
3851 old value.
3852
3853 2. we're watching the triggered memory for both
3854 reads and writes. There are two ways this may
3855 happen:
3856
3857 2.1. this is a target that can't break on data
3858 reads only, but can break on accesses (reads or
3859 writes), such as e.g., x86. We detect this case
3860 at the time we try to insert read watchpoints.
3861
3862 2.2. otherwise, the target supports read
3863 watchpoints, but, the user set an access or write
3864 watchpoint watching the same memory as this read
3865 watchpoint.
3866
3867 If we're watching memory writes as well as reads,
3868 ignore watchpoint hits when we find that the
3869 value hasn't changed, as reads don't cause
3870 changes. This still gives false positives when
3871 the program writes the same value to memory as
3872 what there was already in memory (we will confuse
3873 it for a read), but it's much better than
3874 nothing. */
3875
3876 int other_write_watchpoint = 0;
3877
3878 if (bl->watchpoint_type == hw_read)
3879 {
3880 struct breakpoint *other_b;
3881
3882 ALL_BREAKPOINTS (other_b)
3883 if ((other_b->type == bp_hardware_watchpoint
3884 || other_b->type == bp_access_watchpoint)
3885 && (other_b->watchpoint_triggered
3886 == watch_triggered_yes))
3887 {
3888 other_write_watchpoint = 1;
3889 break;
3890 }
3891 }
3892
3893 if (other_write_watchpoint
3894 || bl->watchpoint_type == hw_access)
3895 {
3896 /* We're watching the same memory for writes,
3897 and the value changed since the last time we
3898 updated it, so this trap must be for a write.
3899 Ignore it. */
3900 bs->print_it = print_it_noop;
3901 bs->stop = 0;
3902 }
3903 }
3904 break;
3905 case WP_VALUE_NOT_CHANGED:
3906 if (b->type == bp_hardware_watchpoint
3907 || b->type == bp_watchpoint)
3908 {
3909 /* Don't stop: write watchpoints shouldn't fire if
3910 the value hasn't changed. */
3911 bs->print_it = print_it_noop;
3912 bs->stop = 0;
3913 }
3914 /* Stop. */
3915 break;
3916 default:
3917 /* Can't happen. */
3918 case 0:
3919 /* Error from catch_errors. */
3920 printf_filtered (_("Watchpoint %d deleted.\n"), b->number);
3921 if (b->related_breakpoint)
3922 b->related_breakpoint->disposition = disp_del_at_next_stop;
3923 b->disposition = disp_del_at_next_stop;
3924 /* We've already printed what needs to be printed. */
3925 bs->print_it = print_it_done;
3926 break;
3927 }
3928 }
3929 else /* must_check_value == 0 */
3930 {
3931 /* This is a case where some watchpoint(s) triggered, but
3932 not at the address of this watchpoint, or else no
3933 watchpoint triggered after all. So don't print
3934 anything for this watchpoint. */
3935 bs->print_it = print_it_noop;
3936 bs->stop = 0;
3937 }
3938 }
3939 }
3940
3941
3942 /* Check conditions (condition proper, frame, thread and ignore count)
3943 of breakpoint referred to by BS. If we should not stop for this
3944 breakpoint, set BS->stop to 0. */
3945
3946 static void
3947 bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
3948 {
3949 int thread_id = pid_to_thread_id (ptid);
3950 const struct bp_location *bl;
3951 struct breakpoint *b;
3952
3953 /* BS is built for existing struct breakpoint. */
3954 bl = bs->bp_location_at;
3955 gdb_assert (bl != NULL);
3956 b = bs->breakpoint_at;
3957 gdb_assert (b != NULL);
3958
3959 if (frame_id_p (b->frame_id)
3960 && !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ())))
3961 bs->stop = 0;
3962 else if (bs->stop)
3963 {
3964 int value_is_zero = 0;
3965 struct expression *cond;
3966
3967 if (is_watchpoint (b))
3968 cond = b->cond_exp;
3969 else
3970 cond = bl->cond;
3971
3972 if (cond && b->disposition != disp_del_at_next_stop)
3973 {
3974 int within_current_scope = 1;
3975
3976 /* We use value_mark and value_free_to_mark because it could
3977 be a long time before we return to the command level and
3978 call free_all_values. We can't call free_all_values
3979 because we might be in the middle of evaluating a
3980 function call. */
3981 struct value *mark = value_mark ();
3982
3983 /* Need to select the frame, with all that implies so that
3984 the conditions will have the right context. Because we
3985 use the frame, we will not see an inlined function's
3986 variables when we arrive at a breakpoint at the start
3987 of the inlined function; the current frame will be the
3988 call site. */
3989 if (!is_watchpoint (b) || b->cond_exp_valid_block == NULL)
3990 select_frame (get_current_frame ());
3991 else
3992 {
3993 struct frame_info *frame;
3994
3995 /* For local watchpoint expressions, which particular
3996 instance of a local is being watched matters, so we
3997 keep track of the frame to evaluate the expression
3998 in. To evaluate the condition however, it doesn't
3999 really matter which instantiation of the function
4000 where the condition makes sense triggers the
4001 watchpoint. This allows an expression like "watch
4002 global if q > 10" set in `func', catch writes to
4003 global on all threads that call `func', or catch
4004 writes on all recursive calls of `func' by a single
4005 thread. We simply always evaluate the condition in
4006 the innermost frame that's executing where it makes
4007 sense to evaluate the condition. It seems
4008 intuitive. */
4009 frame = block_innermost_frame (b->cond_exp_valid_block);
4010 if (frame != NULL)
4011 select_frame (frame);
4012 else
4013 within_current_scope = 0;
4014 }
4015 if (within_current_scope)
4016 value_is_zero
4017 = catch_errors (breakpoint_cond_eval, cond,
4018 "Error in testing breakpoint condition:\n",
4019 RETURN_MASK_ALL);
4020 else
4021 {
4022 warning (_("Watchpoint condition cannot be tested "
4023 "in the current scope"));
4024 /* If we failed to set the right context for this
4025 watchpoint, unconditionally report it. */
4026 value_is_zero = 0;
4027 }
4028 /* FIXME-someday, should give breakpoint # */
4029 value_free_to_mark (mark);
4030 }
4031
4032 if (cond && value_is_zero)
4033 {
4034 bs->stop = 0;
4035 }
4036 else if (b->thread != -1 && b->thread != thread_id)
4037 {
4038 bs->stop = 0;
4039 }
4040 else if (b->ignore_count > 0)
4041 {
4042 b->ignore_count--;
4043 annotate_ignore_count_change ();
4044 bs->stop = 0;
4045 /* Increase the hit count even though we don't
4046 stop. */
4047 ++(b->hit_count);
4048 }
4049 }
4050 }
4051
4052
4053 /* Get a bpstat associated with having just stopped at address
4054 BP_ADDR in thread PTID.
4055
4056 Determine whether we stopped at a breakpoint, etc, or whether we
4057 don't understand this stop. Result is a chain of bpstat's such that:
4058
4059 if we don't understand the stop, the result is a null pointer.
4060
4061 if we understand why we stopped, the result is not null.
4062
4063 Each element of the chain refers to a particular breakpoint or
4064 watchpoint at which we have stopped. (We may have stopped for
4065 several reasons concurrently.)
4066
4067 Each element of the chain has valid next, breakpoint_at,
4068 commands, FIXME??? fields. */
4069
4070 bpstat
4071 bpstat_stop_status (struct address_space *aspace,
4072 CORE_ADDR bp_addr, ptid_t ptid)
4073 {
4074 struct breakpoint *b = NULL;
4075 struct bp_location *bl;
4076 struct bp_location *loc;
4077 /* First item of allocated bpstat's. */
4078 bpstat bs_head = NULL, *bs_link = &bs_head;
4079 /* Pointer to the last thing in the chain currently. */
4080 bpstat bs;
4081 int ix;
4082 int need_remove_insert;
4083 int removed_any;
4084
4085 /* First, build the bpstat chain with locations that explain a
4086 target stop, while being careful to not set the target running,
4087 as that may invalidate locations (in particular watchpoint
4088 locations are recreated). Resuming will happen here with
4089 breakpoint conditions or watchpoint expressions that include
4090 inferior function calls. */
4091
4092 ALL_BREAKPOINTS (b)
4093 {
4094 if (!breakpoint_enabled (b) && b->enable_state != bp_permanent)
4095 continue;
4096
4097 for (bl = b->loc; bl != NULL; bl = bl->next)
4098 {
4099 /* For hardware watchpoints, we look only at the first location.
4100 The watchpoint_check function will work on the entire expression,
4101 not the individual locations. For read watchpoints, the
4102 watchpoints_triggered function has checked all locations
4103 already. */
4104 if (b->type == bp_hardware_watchpoint && bl != b->loc)
4105 break;
4106
4107 if (bl->shlib_disabled)
4108 continue;
4109
4110 if (!bpstat_check_location (bl, aspace, bp_addr))
4111 continue;
4112
4113 /* Come here if it's a watchpoint, or if the break address matches */
4114
4115 bs = bpstat_alloc (bl, &bs_link); /* Alloc a bpstat to explain stop */
4116
4117 /* Assume we stop. Should we find a watchpoint that is not
4118 actually triggered, or if the condition of the breakpoint
4119 evaluates as false, we'll reset 'stop' to 0. */
4120 bs->stop = 1;
4121 bs->print = 1;
4122
4123 /* If this is a scope breakpoint, mark the associated
4124 watchpoint as triggered so that we will handle the
4125 out-of-scope event. We'll get to the watchpoint next
4126 iteration. */
4127 if (b->type == bp_watchpoint_scope)
4128 b->related_breakpoint->watchpoint_triggered = watch_triggered_yes;
4129 }
4130 }
4131
4132 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
4133 {
4134 if (breakpoint_address_match (loc->pspace->aspace, loc->address,
4135 aspace, bp_addr))
4136 {
4137 bs = bpstat_alloc (loc, &bs_link);
4138 /* For hits of moribund locations, we should just proceed. */
4139 bs->stop = 0;
4140 bs->print = 0;
4141 bs->print_it = print_it_noop;
4142 }
4143 }
4144
4145 /* Now go through the locations that caused the target to stop, and
4146 check whether we're interested in reporting this stop to higher
4147 layers, or whether we should resume the target transparently. */
4148
4149 removed_any = 0;
4150
4151 for (bs = bs_head; bs != NULL; bs = bs->next)
4152 {
4153 if (!bs->stop)
4154 continue;
4155
4156 bpstat_check_watchpoint (bs);
4157 if (!bs->stop)
4158 continue;
4159
4160 b = bs->breakpoint_at;
4161
4162 if (b->type == bp_thread_event || b->type == bp_overlay_event
4163 || b->type == bp_longjmp_master
4164 || b->type == bp_std_terminate_master
4165 || b->type == bp_exception_master)
4166 /* We do not stop for these. */
4167 bs->stop = 0;
4168 else
4169 bpstat_check_breakpoint_conditions (bs, ptid);
4170
4171 if (bs->stop)
4172 {
4173 ++(b->hit_count);
4174
4175 /* We will stop here */
4176 if (b->disposition == disp_disable)
4177 {
4178 if (b->enable_state != bp_permanent)
4179 b->enable_state = bp_disabled;
4180 removed_any = 1;
4181 }
4182 if (b->silent)
4183 bs->print = 0;
4184 bs->commands = b->commands;
4185 incref_counted_command_line (bs->commands);
4186 bs->commands_left = bs->commands ? bs->commands->commands : NULL;
4187 if (bs->commands_left
4188 && (strcmp ("silent", bs->commands_left->line) == 0
4189 || (xdb_commands
4190 && strcmp ("Q",
4191 bs->commands_left->line) == 0)))
4192 {
4193 bs->commands_left = bs->commands_left->next;
4194 bs->print = 0;
4195 }
4196 }
4197
4198 /* Print nothing for this entry if we dont stop or dont print. */
4199 if (bs->stop == 0 || bs->print == 0)
4200 bs->print_it = print_it_noop;
4201 }
4202
4203 /* If we aren't stopping, the value of some hardware watchpoint may
4204 not have changed, but the intermediate memory locations we are
4205 watching may have. Don't bother if we're stopping; this will get
4206 done later. */
4207 need_remove_insert = 0;
4208 if (! bpstat_causes_stop (bs_head))
4209 for (bs = bs_head; bs != NULL; bs = bs->next)
4210 if (!bs->stop
4211 && bs->breakpoint_at
4212 && is_hardware_watchpoint (bs->breakpoint_at))
4213 {
4214 update_watchpoint (bs->breakpoint_at, 0 /* don't reparse. */);
4215 need_remove_insert = 1;
4216 }
4217
4218 if (need_remove_insert)
4219 update_global_location_list (1);
4220 else if (removed_any)
4221 update_global_location_list (0);
4222
4223 return bs_head;
4224 }
4225
4226 static void
4227 handle_jit_event (void)
4228 {
4229 struct frame_info *frame;
4230 struct gdbarch *gdbarch;
4231
4232 /* Switch terminal for any messages produced by
4233 breakpoint_re_set. */
4234 target_terminal_ours_for_output ();
4235
4236 frame = get_current_frame ();
4237 gdbarch = get_frame_arch (frame);
4238
4239 jit_event_handler (gdbarch);
4240
4241 target_terminal_inferior ();
4242 }
4243
4244 /* Prepare WHAT final decision for infrun. */
4245
4246 /* Decide what infrun needs to do with this bpstat. */
4247
4248 struct bpstat_what
4249 bpstat_what (bpstat bs)
4250 {
4251 struct bpstat_what retval;
4252 /* We need to defer calling `solib_add', as adding new symbols
4253 resets breakpoints, which in turn deletes breakpoint locations,
4254 and hence may clear unprocessed entries in the BS chain. */
4255 int shlib_event = 0;
4256 int jit_event = 0;
4257
4258 retval.main_action = BPSTAT_WHAT_KEEP_CHECKING;
4259 retval.call_dummy = STOP_NONE;
4260 retval.is_longjmp = 0;
4261
4262 for (; bs != NULL; bs = bs->next)
4263 {
4264 /* Extract this BS's action. After processing each BS, we check
4265 if its action overrides all we've seem so far. */
4266 enum bpstat_what_main_action this_action = BPSTAT_WHAT_KEEP_CHECKING;
4267 enum bptype bptype;
4268
4269 if (bs->breakpoint_at == NULL)
4270 {
4271 /* I suspect this can happen if it was a momentary
4272 breakpoint which has since been deleted. */
4273 bptype = bp_none;
4274 }
4275 else if (bs->breakpoint_at == NULL)
4276 bptype = bp_none;
4277 else
4278 bptype = bs->breakpoint_at->type;
4279
4280 switch (bptype)
4281 {
4282 case bp_none:
4283 break;
4284 case bp_breakpoint:
4285 case bp_hardware_breakpoint:
4286 case bp_until:
4287 case bp_finish:
4288 if (bs->stop)
4289 {
4290 if (bs->print)
4291 this_action = BPSTAT_WHAT_STOP_NOISY;
4292 else
4293 this_action = BPSTAT_WHAT_STOP_SILENT;
4294 }
4295 else
4296 this_action = BPSTAT_WHAT_SINGLE;
4297 break;
4298 case bp_watchpoint:
4299 case bp_hardware_watchpoint:
4300 case bp_read_watchpoint:
4301 case bp_access_watchpoint:
4302 if (bs->stop)
4303 {
4304 if (bs->print)
4305 this_action = BPSTAT_WHAT_STOP_NOISY;
4306 else
4307 this_action = BPSTAT_WHAT_STOP_SILENT;
4308 }
4309 else
4310 {
4311 /* There was a watchpoint, but we're not stopping.
4312 This requires no further action. */
4313 }
4314 break;
4315 case bp_longjmp:
4316 case bp_exception:
4317 this_action = BPSTAT_WHAT_SET_LONGJMP_RESUME;
4318 retval.is_longjmp = bptype == bp_longjmp;
4319 break;
4320 case bp_longjmp_resume:
4321 case bp_exception_resume:
4322 this_action = BPSTAT_WHAT_CLEAR_LONGJMP_RESUME;
4323 retval.is_longjmp = bptype == bp_longjmp_resume;
4324 break;
4325 case bp_step_resume:
4326 if (bs->stop)
4327 this_action = BPSTAT_WHAT_STEP_RESUME;
4328 else
4329 {
4330 /* It is for the wrong frame. */
4331 this_action = BPSTAT_WHAT_SINGLE;
4332 }
4333 break;
4334 case bp_watchpoint_scope:
4335 case bp_thread_event:
4336 case bp_overlay_event:
4337 case bp_longjmp_master:
4338 case bp_std_terminate_master:
4339 case bp_exception_master:
4340 this_action = BPSTAT_WHAT_SINGLE;
4341 break;
4342 case bp_catchpoint:
4343 if (bs->stop)
4344 {
4345 if (bs->print)
4346 this_action = BPSTAT_WHAT_STOP_NOISY;
4347 else
4348 this_action = BPSTAT_WHAT_STOP_SILENT;
4349 }
4350 else
4351 {
4352 /* There was a catchpoint, but we're not stopping.
4353 This requires no further action. */
4354 }
4355 break;
4356 case bp_shlib_event:
4357 shlib_event = 1;
4358
4359 /* If requested, stop when the dynamic linker notifies GDB
4360 of events. This allows the user to get control and place
4361 breakpoints in initializer routines for dynamically
4362 loaded objects (among other things). */
4363 if (stop_on_solib_events)
4364 this_action = BPSTAT_WHAT_STOP_NOISY;
4365 else
4366 this_action = BPSTAT_WHAT_SINGLE;
4367 break;
4368 case bp_jit_event:
4369 jit_event = 1;
4370 this_action = BPSTAT_WHAT_SINGLE;
4371 break;
4372 case bp_call_dummy:
4373 /* Make sure the action is stop (silent or noisy),
4374 so infrun.c pops the dummy frame. */
4375 retval.call_dummy = STOP_STACK_DUMMY;
4376 this_action = BPSTAT_WHAT_STOP_SILENT;
4377 break;
4378 case bp_std_terminate:
4379 /* Make sure the action is stop (silent or noisy),
4380 so infrun.c pops the dummy frame. */
4381 retval.call_dummy = STOP_STD_TERMINATE;
4382 this_action = BPSTAT_WHAT_STOP_SILENT;
4383 break;
4384 case bp_tracepoint:
4385 case bp_fast_tracepoint:
4386 case bp_static_tracepoint:
4387 /* Tracepoint hits should not be reported back to GDB, and
4388 if one got through somehow, it should have been filtered
4389 out already. */
4390 internal_error (__FILE__, __LINE__,
4391 _("bpstat_what: tracepoint encountered"));
4392 default:
4393 internal_error (__FILE__, __LINE__,
4394 _("bpstat_what: unhandled bptype %d"), (int) bptype);
4395 }
4396
4397 retval.main_action = max (retval.main_action, this_action);
4398 }
4399
4400 if (shlib_event)
4401 {
4402 if (debug_infrun)
4403 fprintf_unfiltered (gdb_stdlog, "bpstat_what: bp_shlib_event\n");
4404
4405 /* Check for any newly added shared libraries if we're supposed
4406 to be adding them automatically. */
4407
4408 /* Switch terminal for any messages produced by
4409 breakpoint_re_set. */
4410 target_terminal_ours_for_output ();
4411
4412 #ifdef SOLIB_ADD
4413 SOLIB_ADD (NULL, 0, &current_target, auto_solib_add);
4414 #else
4415 solib_add (NULL, 0, &current_target, auto_solib_add);
4416 #endif
4417
4418 target_terminal_inferior ();
4419 }
4420
4421 if (jit_event)
4422 {
4423 if (debug_infrun)
4424 fprintf_unfiltered (gdb_stdlog, "bpstat_what: bp_jit_event\n");
4425
4426 handle_jit_event ();
4427 }
4428
4429 return retval;
4430 }
4431
4432 /* Nonzero if we should step constantly (e.g. watchpoints on machines
4433 without hardware support). This isn't related to a specific bpstat,
4434 just to things like whether watchpoints are set. */
4435
4436 int
4437 bpstat_should_step (void)
4438 {
4439 struct breakpoint *b;
4440
4441 ALL_BREAKPOINTS (b)
4442 if (breakpoint_enabled (b) && b->type == bp_watchpoint && b->loc != NULL)
4443 return 1;
4444 return 0;
4445 }
4446
4447 int
4448 bpstat_causes_stop (bpstat bs)
4449 {
4450 for (; bs != NULL; bs = bs->next)
4451 if (bs->stop)
4452 return 1;
4453
4454 return 0;
4455 }
4456
4457 \f
4458
4459 /* Print the LOC location out of the list of B->LOC locations. */
4460
4461 static void print_breakpoint_location (struct breakpoint *b,
4462 struct bp_location *loc,
4463 char *wrap_indent,
4464 struct ui_stream *stb)
4465 {
4466 struct cleanup *old_chain = save_current_program_space ();
4467
4468 if (loc != NULL && loc->shlib_disabled)
4469 loc = NULL;
4470
4471 if (loc != NULL)
4472 set_current_program_space (loc->pspace);
4473
4474 if (b->source_file && loc)
4475 {
4476 struct symbol *sym
4477 = find_pc_sect_function (loc->address, loc->section);
4478 if (sym)
4479 {
4480 ui_out_text (uiout, "in ");
4481 ui_out_field_string (uiout, "func",
4482 SYMBOL_PRINT_NAME (sym));
4483 ui_out_wrap_hint (uiout, wrap_indent);
4484 ui_out_text (uiout, " at ");
4485 }
4486 ui_out_field_string (uiout, "file", b->source_file);
4487 ui_out_text (uiout, ":");
4488
4489 if (ui_out_is_mi_like_p (uiout))
4490 {
4491 struct symtab_and_line sal = find_pc_line (loc->address, 0);
4492 char *fullname = symtab_to_fullname (sal.symtab);
4493
4494 if (fullname)
4495 ui_out_field_string (uiout, "fullname", fullname);
4496 }
4497
4498 ui_out_field_int (uiout, "line", b->line_number);
4499 }
4500 else if (loc)
4501 {
4502 print_address_symbolic (loc->gdbarch, loc->address, stb->stream,
4503 demangle, "");
4504 ui_out_field_stream (uiout, "at", stb);
4505 }
4506 else
4507 ui_out_field_string (uiout, "pending", b->addr_string);
4508
4509 do_cleanups (old_chain);
4510 }
4511
4512 static const char *
4513 bptype_string (enum bptype type)
4514 {
4515 struct ep_type_description
4516 {
4517 enum bptype type;
4518 char *description;
4519 };
4520 static struct ep_type_description bptypes[] =
4521 {
4522 {bp_none, "?deleted?"},
4523 {bp_breakpoint, "breakpoint"},
4524 {bp_hardware_breakpoint, "hw breakpoint"},
4525 {bp_until, "until"},
4526 {bp_finish, "finish"},
4527 {bp_watchpoint, "watchpoint"},
4528 {bp_hardware_watchpoint, "hw watchpoint"},
4529 {bp_read_watchpoint, "read watchpoint"},
4530 {bp_access_watchpoint, "acc watchpoint"},
4531 {bp_longjmp, "longjmp"},
4532 {bp_longjmp_resume, "longjmp resume"},
4533 {bp_exception, "exception"},
4534 {bp_exception_resume, "exception resume"},
4535 {bp_step_resume, "step resume"},
4536 {bp_watchpoint_scope, "watchpoint scope"},
4537 {bp_call_dummy, "call dummy"},
4538 {bp_std_terminate, "std::terminate"},
4539 {bp_shlib_event, "shlib events"},
4540 {bp_thread_event, "thread events"},
4541 {bp_overlay_event, "overlay events"},
4542 {bp_longjmp_master, "longjmp master"},
4543 {bp_std_terminate_master, "std::terminate master"},
4544 {bp_exception_master, "exception master"},
4545 {bp_catchpoint, "catchpoint"},
4546 {bp_tracepoint, "tracepoint"},
4547 {bp_fast_tracepoint, "fast tracepoint"},
4548 {bp_static_tracepoint, "static tracepoint"},
4549 {bp_jit_event, "jit events"},
4550 };
4551
4552 if (((int) type >= (sizeof (bptypes) / sizeof (bptypes[0])))
4553 || ((int) type != bptypes[(int) type].type))
4554 internal_error (__FILE__, __LINE__,
4555 _("bptypes table does not describe type #%d."),
4556 (int) type);
4557
4558 return bptypes[(int) type].description;
4559 }
4560
4561 /* Print B to gdb_stdout. */
4562
4563 static void
4564 print_one_breakpoint_location (struct breakpoint *b,
4565 struct bp_location *loc,
4566 int loc_number,
4567 struct bp_location **last_loc,
4568 int print_address_bits,
4569 int allflag)
4570 {
4571 struct command_line *l;
4572 static char bpenables[] = "nynny";
4573 char wrap_indent[80];
4574 struct ui_stream *stb = ui_out_stream_new (uiout);
4575 struct cleanup *old_chain = make_cleanup_ui_out_stream_delete (stb);
4576 struct cleanup *bkpt_chain;
4577
4578 int header_of_multiple = 0;
4579 int part_of_multiple = (loc != NULL);
4580 struct value_print_options opts;
4581
4582 get_user_print_options (&opts);
4583
4584 gdb_assert (!loc || loc_number != 0);
4585 /* See comment in print_one_breakpoint concerning
4586 treatment of breakpoints with single disabled
4587 location. */
4588 if (loc == NULL
4589 && (b->loc != NULL
4590 && (b->loc->next != NULL || !b->loc->enabled)))
4591 header_of_multiple = 1;
4592 if (loc == NULL)
4593 loc = b->loc;
4594
4595 annotate_record ();
4596 bkpt_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "bkpt");
4597
4598 /* 1 */
4599 annotate_field (0);
4600 if (part_of_multiple)
4601 {
4602 char *formatted;
4603 formatted = xstrprintf ("%d.%d", b->number, loc_number);
4604 ui_out_field_string (uiout, "number", formatted);
4605 xfree (formatted);
4606 }
4607 else
4608 {
4609 ui_out_field_int (uiout, "number", b->number);
4610 }
4611
4612 /* 2 */
4613 annotate_field (1);
4614 if (part_of_multiple)
4615 ui_out_field_skip (uiout, "type");
4616 else
4617 ui_out_field_string (uiout, "type", bptype_string (b->type));
4618
4619 /* 3 */
4620 annotate_field (2);
4621 if (part_of_multiple)
4622 ui_out_field_skip (uiout, "disp");
4623 else
4624 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
4625
4626
4627 /* 4 */
4628 annotate_field (3);
4629 if (part_of_multiple)
4630 ui_out_field_string (uiout, "enabled", loc->enabled ? "y" : "n");
4631 else
4632 ui_out_field_fmt (uiout, "enabled", "%c",
4633 bpenables[(int) b->enable_state]);
4634 ui_out_spaces (uiout, 2);
4635
4636
4637 /* 5 and 6 */
4638 strcpy (wrap_indent, " ");
4639 if (opts.addressprint)
4640 {
4641 if (print_address_bits <= 32)
4642 strcat (wrap_indent, " ");
4643 else
4644 strcat (wrap_indent, " ");
4645 }
4646
4647 if (b->ops != NULL && b->ops->print_one != NULL)
4648 {
4649 /* Although the print_one can possibly print
4650 all locations, calling it here is not likely
4651 to get any nice result. So, make sure there's
4652 just one location. */
4653 gdb_assert (b->loc == NULL || b->loc->next == NULL);
4654 b->ops->print_one (b, last_loc);
4655 }
4656 else
4657 switch (b->type)
4658 {
4659 case bp_none:
4660 internal_error (__FILE__, __LINE__,
4661 _("print_one_breakpoint: bp_none encountered\n"));
4662 break;
4663
4664 case bp_watchpoint:
4665 case bp_hardware_watchpoint:
4666 case bp_read_watchpoint:
4667 case bp_access_watchpoint:
4668 /* Field 4, the address, is omitted (which makes the columns
4669 not line up too nicely with the headers, but the effect
4670 is relatively readable). */
4671 if (opts.addressprint)
4672 ui_out_field_skip (uiout, "addr");
4673 annotate_field (5);
4674 ui_out_field_string (uiout, "what", b->exp_string);
4675 break;
4676
4677 case bp_breakpoint:
4678 case bp_hardware_breakpoint:
4679 case bp_until:
4680 case bp_finish:
4681 case bp_longjmp:
4682 case bp_longjmp_resume:
4683 case bp_exception:
4684 case bp_exception_resume:
4685 case bp_step_resume:
4686 case bp_watchpoint_scope:
4687 case bp_call_dummy:
4688 case bp_std_terminate:
4689 case bp_shlib_event:
4690 case bp_thread_event:
4691 case bp_overlay_event:
4692 case bp_longjmp_master:
4693 case bp_std_terminate_master:
4694 case bp_exception_master:
4695 case bp_tracepoint:
4696 case bp_fast_tracepoint:
4697 case bp_static_tracepoint:
4698 case bp_jit_event:
4699 if (opts.addressprint)
4700 {
4701 annotate_field (4);
4702 if (header_of_multiple)
4703 ui_out_field_string (uiout, "addr", "<MULTIPLE>");
4704 else if (b->loc == NULL || loc->shlib_disabled)
4705 ui_out_field_string (uiout, "addr", "<PENDING>");
4706 else
4707 ui_out_field_core_addr (uiout, "addr",
4708 loc->gdbarch, loc->address);
4709 }
4710 annotate_field (5);
4711 if (!header_of_multiple)
4712 print_breakpoint_location (b, loc, wrap_indent, stb);
4713 if (b->loc)
4714 *last_loc = b->loc;
4715 break;
4716 }
4717
4718
4719 /* For backward compatibility, don't display inferiors unless there
4720 are several. */
4721 if (loc != NULL
4722 && !header_of_multiple
4723 && (allflag
4724 || (!gdbarch_has_global_breakpoints (target_gdbarch)
4725 && (number_of_program_spaces () > 1
4726 || number_of_inferiors () > 1)
4727 /* LOC is for existing B, it cannot be in moribund_locations and
4728 thus having NULL OWNER. */
4729 && loc->owner->type != bp_catchpoint)))
4730 {
4731 struct inferior *inf;
4732 int first = 1;
4733
4734 for (inf = inferior_list; inf != NULL; inf = inf->next)
4735 {
4736 if (inf->pspace == loc->pspace)
4737 {
4738 if (first)
4739 {
4740 first = 0;
4741 ui_out_text (uiout, " inf ");
4742 }
4743 else
4744 ui_out_text (uiout, ", ");
4745 ui_out_text (uiout, plongest (inf->num));
4746 }
4747 }
4748 }
4749
4750 if (!part_of_multiple)
4751 {
4752 if (b->thread != -1)
4753 {
4754 /* FIXME: This seems to be redundant and lost here; see the
4755 "stop only in" line a little further down. */
4756 ui_out_text (uiout, " thread ");
4757 ui_out_field_int (uiout, "thread", b->thread);
4758 }
4759 else if (b->task != 0)
4760 {
4761 ui_out_text (uiout, " task ");
4762 ui_out_field_int (uiout, "task", b->task);
4763 }
4764 }
4765
4766 ui_out_text (uiout, "\n");
4767
4768 if (!part_of_multiple && b->static_trace_marker_id)
4769 {
4770 gdb_assert (b->type == bp_static_tracepoint);
4771
4772 ui_out_text (uiout, "\tmarker id is ");
4773 ui_out_field_string (uiout, "static-tracepoint-marker-string-id",
4774 b->static_trace_marker_id);
4775 ui_out_text (uiout, "\n");
4776 }
4777
4778 if (part_of_multiple && frame_id_p (b->frame_id))
4779 {
4780 annotate_field (6);
4781 ui_out_text (uiout, "\tstop only in stack frame at ");
4782 /* FIXME: cagney/2002-12-01: Shouldn't be poeking around inside
4783 the frame ID. */
4784 ui_out_field_core_addr (uiout, "frame",
4785 b->gdbarch, b->frame_id.stack_addr);
4786 ui_out_text (uiout, "\n");
4787 }
4788
4789 if (!part_of_multiple && b->cond_string && !ada_exception_catchpoint_p (b))
4790 {
4791 /* We do not print the condition for Ada exception catchpoints
4792 because the condition is an internal implementation detail
4793 that we do not want to expose to the user. */
4794 annotate_field (7);
4795 if (is_tracepoint (b))
4796 ui_out_text (uiout, "\ttrace only if ");
4797 else
4798 ui_out_text (uiout, "\tstop only if ");
4799 ui_out_field_string (uiout, "cond", b->cond_string);
4800 ui_out_text (uiout, "\n");
4801 }
4802
4803 if (!part_of_multiple && b->thread != -1)
4804 {
4805 /* FIXME should make an annotation for this */
4806 ui_out_text (uiout, "\tstop only in thread ");
4807 ui_out_field_int (uiout, "thread", b->thread);
4808 ui_out_text (uiout, "\n");
4809 }
4810
4811 if (!part_of_multiple && b->hit_count)
4812 {
4813 /* FIXME should make an annotation for this */
4814 if (ep_is_catchpoint (b))
4815 ui_out_text (uiout, "\tcatchpoint");
4816 else
4817 ui_out_text (uiout, "\tbreakpoint");
4818 ui_out_text (uiout, " already hit ");
4819 ui_out_field_int (uiout, "times", b->hit_count);
4820 if (b->hit_count == 1)
4821 ui_out_text (uiout, " time\n");
4822 else
4823 ui_out_text (uiout, " times\n");
4824 }
4825
4826 /* Output the count also if it is zero, but only if this is
4827 mi. FIXME: Should have a better test for this. */
4828 if (ui_out_is_mi_like_p (uiout))
4829 if (!part_of_multiple && b->hit_count == 0)
4830 ui_out_field_int (uiout, "times", b->hit_count);
4831
4832 if (!part_of_multiple && b->ignore_count)
4833 {
4834 annotate_field (8);
4835 ui_out_text (uiout, "\tignore next ");
4836 ui_out_field_int (uiout, "ignore", b->ignore_count);
4837 ui_out_text (uiout, " hits\n");
4838 }
4839
4840 l = b->commands ? b->commands->commands : NULL;
4841 if (!part_of_multiple && l)
4842 {
4843 struct cleanup *script_chain;
4844
4845 annotate_field (9);
4846 script_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "script");
4847 print_command_lines (uiout, l, 4);
4848 do_cleanups (script_chain);
4849 }
4850
4851 if (!part_of_multiple && b->pass_count)
4852 {
4853 annotate_field (10);
4854 ui_out_text (uiout, "\tpass count ");
4855 ui_out_field_int (uiout, "pass", b->pass_count);
4856 ui_out_text (uiout, " \n");
4857 }
4858
4859 if (ui_out_is_mi_like_p (uiout) && !part_of_multiple)
4860 {
4861 if (b->addr_string)
4862 ui_out_field_string (uiout, "original-location", b->addr_string);
4863 else if (b->exp_string)
4864 ui_out_field_string (uiout, "original-location", b->exp_string);
4865 }
4866
4867 do_cleanups (bkpt_chain);
4868 do_cleanups (old_chain);
4869 }
4870
4871 static void
4872 print_one_breakpoint (struct breakpoint *b,
4873 struct bp_location **last_loc, int print_address_bits,
4874 int allflag)
4875 {
4876 print_one_breakpoint_location (b, NULL, 0, last_loc,
4877 print_address_bits, allflag);
4878
4879 /* If this breakpoint has custom print function,
4880 it's already printed. Otherwise, print individual
4881 locations, if any. */
4882 if (b->ops == NULL || b->ops->print_one == NULL)
4883 {
4884 /* If breakpoint has a single location that is
4885 disabled, we print it as if it had
4886 several locations, since otherwise it's hard to
4887 represent "breakpoint enabled, location disabled"
4888 situation.
4889 Note that while hardware watchpoints have
4890 several locations internally, that's no a property
4891 exposed to user. */
4892 if (b->loc
4893 && !is_hardware_watchpoint (b)
4894 && (b->loc->next || !b->loc->enabled)
4895 && !ui_out_is_mi_like_p (uiout))
4896 {
4897 struct bp_location *loc;
4898 int n = 1;
4899 for (loc = b->loc; loc; loc = loc->next, ++n)
4900 print_one_breakpoint_location (b, loc, n, last_loc,
4901 print_address_bits, allflag);
4902 }
4903 }
4904 }
4905
4906 static int
4907 breakpoint_address_bits (struct breakpoint *b)
4908 {
4909 int print_address_bits = 0;
4910 struct bp_location *loc;
4911
4912 for (loc = b->loc; loc; loc = loc->next)
4913 {
4914 int addr_bit;
4915
4916 /* Software watchpoints that aren't watching memory don't have
4917 an address to print. */
4918 if (b->type == bp_watchpoint && loc->watchpoint_type == -1)
4919 continue;
4920
4921 addr_bit = gdbarch_addr_bit (loc->gdbarch);
4922 if (addr_bit > print_address_bits)
4923 print_address_bits = addr_bit;
4924 }
4925
4926 return print_address_bits;
4927 }
4928
4929 struct captured_breakpoint_query_args
4930 {
4931 int bnum;
4932 };
4933
4934 static int
4935 do_captured_breakpoint_query (struct ui_out *uiout, void *data)
4936 {
4937 struct captured_breakpoint_query_args *args = data;
4938 struct breakpoint *b;
4939 struct bp_location *dummy_loc = NULL;
4940
4941 ALL_BREAKPOINTS (b)
4942 {
4943 if (args->bnum == b->number)
4944 {
4945 int print_address_bits = breakpoint_address_bits (b);
4946
4947 print_one_breakpoint (b, &dummy_loc, print_address_bits, 0);
4948 return GDB_RC_OK;
4949 }
4950 }
4951 return GDB_RC_NONE;
4952 }
4953
4954 enum gdb_rc
4955 gdb_breakpoint_query (struct ui_out *uiout, int bnum, char **error_message)
4956 {
4957 struct captured_breakpoint_query_args args;
4958
4959 args.bnum = bnum;
4960 /* For the moment we don't trust print_one_breakpoint() to not throw
4961 an error. */
4962 if (catch_exceptions_with_msg (uiout, do_captured_breakpoint_query, &args,
4963 error_message, RETURN_MASK_ALL) < 0)
4964 return GDB_RC_FAIL;
4965 else
4966 return GDB_RC_OK;
4967 }
4968
4969 /* Return non-zero if B is user settable (breakpoints, watchpoints,
4970 catchpoints, et.al.). */
4971
4972 static int
4973 user_settable_breakpoint (const struct breakpoint *b)
4974 {
4975 return (b->type == bp_breakpoint
4976 || b->type == bp_catchpoint
4977 || b->type == bp_hardware_breakpoint
4978 || is_tracepoint (b)
4979 || is_watchpoint (b));
4980 }
4981
4982 /* Print information on user settable breakpoint (watchpoint, etc)
4983 number BNUM. If BNUM is -1 print all user-settable breakpoints.
4984 If ALLFLAG is non-zero, include non-user-settable breakpoints. If
4985 FILTER is non-NULL, call it on each breakpoint and only include the
4986 ones for which it returns non-zero. Return the total number of
4987 breakpoints listed. */
4988
4989 static int
4990 breakpoint_1 (int bnum, int allflag, int (*filter) (const struct breakpoint *))
4991 {
4992 struct breakpoint *b;
4993 struct bp_location *last_loc = NULL;
4994 int nr_printable_breakpoints;
4995 struct cleanup *bkpttbl_chain;
4996 struct value_print_options opts;
4997 int print_address_bits = 0;
4998 int print_type_col_width = 14;
4999
5000 get_user_print_options (&opts);
5001
5002 /* Compute the number of rows in the table, as well as the
5003 size required for address fields. */
5004 nr_printable_breakpoints = 0;
5005 ALL_BREAKPOINTS (b)
5006 if (bnum == -1
5007 || bnum == b->number)
5008 {
5009 /* If we have a filter, only list the breakpoints it accepts. */
5010 if (filter && !filter (b))
5011 continue;
5012
5013 if (allflag || (user_settable_breakpoint (b)
5014 && b->number > 0))
5015 {
5016 int addr_bit, type_len;
5017
5018 addr_bit = breakpoint_address_bits (b);
5019 if (addr_bit > print_address_bits)
5020 print_address_bits = addr_bit;
5021
5022 type_len = strlen (bptype_string (b->type));
5023 if (type_len > print_type_col_width)
5024 print_type_col_width = type_len;
5025
5026 nr_printable_breakpoints++;
5027 }
5028 }
5029
5030 if (opts.addressprint)
5031 bkpttbl_chain
5032 = make_cleanup_ui_out_table_begin_end (uiout, 6, nr_printable_breakpoints,
5033 "BreakpointTable");
5034 else
5035 bkpttbl_chain
5036 = make_cleanup_ui_out_table_begin_end (uiout, 5, nr_printable_breakpoints,
5037 "BreakpointTable");
5038
5039 if (nr_printable_breakpoints > 0)
5040 annotate_breakpoints_headers ();
5041 if (nr_printable_breakpoints > 0)
5042 annotate_field (0);
5043 ui_out_table_header (uiout, 7, ui_left, "number", "Num"); /* 1 */
5044 if (nr_printable_breakpoints > 0)
5045 annotate_field (1);
5046 ui_out_table_header (uiout, print_type_col_width, ui_left,
5047 "type", "Type"); /* 2 */
5048 if (nr_printable_breakpoints > 0)
5049 annotate_field (2);
5050 ui_out_table_header (uiout, 4, ui_left, "disp", "Disp"); /* 3 */
5051 if (nr_printable_breakpoints > 0)
5052 annotate_field (3);
5053 ui_out_table_header (uiout, 3, ui_left, "enabled", "Enb"); /* 4 */
5054 if (opts.addressprint)
5055 {
5056 if (nr_printable_breakpoints > 0)
5057 annotate_field (4);
5058 if (print_address_bits <= 32)
5059 ui_out_table_header (uiout, 10, ui_left, "addr", "Address");/* 5 */
5060 else
5061 ui_out_table_header (uiout, 18, ui_left, "addr", "Address");/* 5 */
5062 }
5063 if (nr_printable_breakpoints > 0)
5064 annotate_field (5);
5065 ui_out_table_header (uiout, 40, ui_noalign, "what", "What"); /* 6 */
5066 ui_out_table_body (uiout);
5067 if (nr_printable_breakpoints > 0)
5068 annotate_breakpoints_table ();
5069
5070 ALL_BREAKPOINTS (b)
5071 {
5072 QUIT;
5073 if (bnum == -1
5074 || bnum == b->number)
5075 {
5076 /* If we have a filter, only list the breakpoints it accepts. */
5077 if (filter && !filter (b))
5078 continue;
5079
5080 /* We only print out user settable breakpoints unless the
5081 allflag is set. */
5082 if (allflag || (user_settable_breakpoint (b)
5083 && b->number > 0))
5084 print_one_breakpoint (b, &last_loc, print_address_bits, allflag);
5085 }
5086 }
5087
5088 do_cleanups (bkpttbl_chain);
5089
5090 if (nr_printable_breakpoints == 0)
5091 {
5092 /* If there's a filter, let the caller decide how to report empty list. */
5093 if (!filter)
5094 {
5095 if (bnum == -1)
5096 ui_out_message (uiout, 0, "No breakpoints or watchpoints.\n");
5097 else
5098 ui_out_message (uiout, 0, "No breakpoint or watchpoint number %d.\n",
5099 bnum);
5100 }
5101 }
5102 else
5103 {
5104 if (last_loc && !server_command)
5105 set_next_address (last_loc->gdbarch, last_loc->address);
5106 }
5107
5108 /* FIXME? Should this be moved up so that it is only called when
5109 there have been breakpoints? */
5110 annotate_breakpoints_table_end ();
5111
5112 return nr_printable_breakpoints;
5113 }
5114
5115 /* Display the value of default-collect in a way that is generally
5116 compatible with the breakpoint list. */
5117
5118 static void
5119 default_collect_info (void)
5120 {
5121 /* If it has no value (which is frequently the case), say nothing; a
5122 message like "No default-collect." gets in user's face when it's
5123 not wanted. */
5124 if (!*default_collect)
5125 return;
5126
5127 /* The following phrase lines up nicely with per-tracepoint collect
5128 actions. */
5129 ui_out_text (uiout, "default collect ");
5130 ui_out_field_string (uiout, "default-collect", default_collect);
5131 ui_out_text (uiout, " \n");
5132 }
5133
5134 static void
5135 breakpoints_info (char *bnum_exp, int from_tty)
5136 {
5137 int bnum = -1;
5138
5139 if (bnum_exp)
5140 bnum = parse_and_eval_long (bnum_exp);
5141
5142 breakpoint_1 (bnum, 0, NULL);
5143
5144 default_collect_info ();
5145 }
5146
5147 static void
5148 watchpoints_info (char *wpnum_exp, int from_tty)
5149 {
5150 int wpnum = -1, num_printed;
5151
5152 if (wpnum_exp)
5153 wpnum = parse_and_eval_long (wpnum_exp);
5154
5155 num_printed = breakpoint_1 (wpnum, 0, is_watchpoint);
5156
5157 if (num_printed == 0)
5158 {
5159 if (wpnum == -1)
5160 ui_out_message (uiout, 0, "No watchpoints.\n");
5161 else
5162 ui_out_message (uiout, 0, "No watchpoint number %d.\n", wpnum);
5163 }
5164 }
5165
5166 static void
5167 maintenance_info_breakpoints (char *bnum_exp, int from_tty)
5168 {
5169 int bnum = -1;
5170
5171 if (bnum_exp)
5172 bnum = parse_and_eval_long (bnum_exp);
5173
5174 breakpoint_1 (bnum, 1, NULL);
5175
5176 default_collect_info ();
5177 }
5178
5179 static int
5180 breakpoint_has_pc (struct breakpoint *b,
5181 struct program_space *pspace,
5182 CORE_ADDR pc, struct obj_section *section)
5183 {
5184 struct bp_location *bl = b->loc;
5185
5186 for (; bl; bl = bl->next)
5187 {
5188 if (bl->pspace == pspace
5189 && bl->address == pc
5190 && (!overlay_debugging || bl->section == section))
5191 return 1;
5192 }
5193 return 0;
5194 }
5195
5196 /* Print a message describing any breakpoints set at PC. This
5197 concerns with logical breakpoints, so we match program spaces, not
5198 address spaces. */
5199
5200 static void
5201 describe_other_breakpoints (struct gdbarch *gdbarch,
5202 struct program_space *pspace, CORE_ADDR pc,
5203 struct obj_section *section, int thread)
5204 {
5205 int others = 0;
5206 struct breakpoint *b;
5207
5208 ALL_BREAKPOINTS (b)
5209 others += breakpoint_has_pc (b, pspace, pc, section);
5210 if (others > 0)
5211 {
5212 if (others == 1)
5213 printf_filtered (_("Note: breakpoint "));
5214 else /* if (others == ???) */
5215 printf_filtered (_("Note: breakpoints "));
5216 ALL_BREAKPOINTS (b)
5217 if (breakpoint_has_pc (b, pspace, pc, section))
5218 {
5219 others--;
5220 printf_filtered ("%d", b->number);
5221 if (b->thread == -1 && thread != -1)
5222 printf_filtered (" (all threads)");
5223 else if (b->thread != -1)
5224 printf_filtered (" (thread %d)", b->thread);
5225 printf_filtered ("%s%s ",
5226 ((b->enable_state == bp_disabled
5227 || b->enable_state == bp_call_disabled
5228 || b->enable_state == bp_startup_disabled)
5229 ? " (disabled)"
5230 : b->enable_state == bp_permanent
5231 ? " (permanent)"
5232 : ""),
5233 (others > 1) ? ","
5234 : ((others == 1) ? " and" : ""));
5235 }
5236 printf_filtered (_("also set at pc "));
5237 fputs_filtered (paddress (gdbarch, pc), gdb_stdout);
5238 printf_filtered (".\n");
5239 }
5240 }
5241 \f
5242 /* Set the default place to put a breakpoint
5243 for the `break' command with no arguments. */
5244
5245 void
5246 set_default_breakpoint (int valid, struct program_space *pspace,
5247 CORE_ADDR addr, struct symtab *symtab,
5248 int line)
5249 {
5250 default_breakpoint_valid = valid;
5251 default_breakpoint_pspace = pspace;
5252 default_breakpoint_address = addr;
5253 default_breakpoint_symtab = symtab;
5254 default_breakpoint_line = line;
5255 }
5256
5257 /* Return true iff it is meaningful to use the address member of
5258 BPT. For some breakpoint types, the address member is irrelevant
5259 and it makes no sense to attempt to compare it to other addresses
5260 (or use it for any other purpose either).
5261
5262 More specifically, each of the following breakpoint types will always
5263 have a zero valued address and we don't want to mark breakpoints of any of
5264 these types to be a duplicate of an actual breakpoint at address zero:
5265
5266 bp_watchpoint
5267 bp_catchpoint
5268
5269 */
5270
5271 static int
5272 breakpoint_address_is_meaningful (struct breakpoint *bpt)
5273 {
5274 enum bptype type = bpt->type;
5275
5276 return (type != bp_watchpoint && type != bp_catchpoint);
5277 }
5278
5279 /* Assuming LOC1 and LOC2's owners are hardware watchpoints, returns
5280 true if LOC1 and LOC2 represent the same watchpoint location. */
5281
5282 static int
5283 watchpoint_locations_match (struct bp_location *loc1, struct bp_location *loc2)
5284 {
5285 /* Both of them must not be in moribund_locations. */
5286 gdb_assert (loc1->owner != NULL);
5287 gdb_assert (loc2->owner != NULL);
5288
5289 /* If the target can evaluate the condition expression in hardware, then we
5290 we need to insert both watchpoints even if they are at the same place.
5291 Otherwise the watchpoint will only trigger when the condition of whichever
5292 watchpoint was inserted evaluates to true, not giving a chance for GDB to
5293 check the condition of the other watchpoint. */
5294 if ((loc1->owner->cond_exp
5295 && target_can_accel_watchpoint_condition (loc1->address, loc1->length,
5296 loc1->watchpoint_type,
5297 loc1->owner->cond_exp))
5298 || (loc2->owner->cond_exp
5299 && target_can_accel_watchpoint_condition (loc2->address, loc2->length,
5300 loc2->watchpoint_type,
5301 loc2->owner->cond_exp)))
5302 return 0;
5303
5304 /* Note that this checks the owner's type, not the location's. In
5305 case the target does not support read watchpoints, but does
5306 support access watchpoints, we'll have bp_read_watchpoint
5307 watchpoints with hw_access locations. Those should be considered
5308 duplicates of hw_read locations. The hw_read locations will
5309 become hw_access locations later. */
5310 return (loc1->owner->type == loc2->owner->type
5311 && loc1->pspace->aspace == loc2->pspace->aspace
5312 && loc1->address == loc2->address
5313 && loc1->length == loc2->length);
5314 }
5315
5316 /* Returns true if {ASPACE1,ADDR1} and {ASPACE2,ADDR2} represent the
5317 same breakpoint location. In most targets, this can only be true
5318 if ASPACE1 matches ASPACE2. On targets that have global
5319 breakpoints, the address space doesn't really matter. */
5320
5321 static int
5322 breakpoint_address_match (struct address_space *aspace1, CORE_ADDR addr1,
5323 struct address_space *aspace2, CORE_ADDR addr2)
5324 {
5325 return ((gdbarch_has_global_breakpoints (target_gdbarch)
5326 || aspace1 == aspace2)
5327 && addr1 == addr2);
5328 }
5329
5330 /* Assuming LOC1 and LOC2's types' have meaningful target addresses
5331 (breakpoint_address_is_meaningful), returns true if LOC1 and LOC2
5332 represent the same location. */
5333
5334 static int
5335 breakpoint_locations_match (struct bp_location *loc1, struct bp_location *loc2)
5336 {
5337 int hw_point1, hw_point2;
5338
5339 /* Both of them must not be in moribund_locations. */
5340 gdb_assert (loc1->owner != NULL);
5341 gdb_assert (loc2->owner != NULL);
5342
5343 hw_point1 = is_hardware_watchpoint (loc1->owner);
5344 hw_point2 = is_hardware_watchpoint (loc2->owner);
5345
5346 if (hw_point1 != hw_point2)
5347 return 0;
5348 else if (hw_point1)
5349 return watchpoint_locations_match (loc1, loc2);
5350 else
5351 return breakpoint_address_match (loc1->pspace->aspace, loc1->address,
5352 loc2->pspace->aspace, loc2->address);
5353 }
5354
5355 static void
5356 breakpoint_adjustment_warning (CORE_ADDR from_addr, CORE_ADDR to_addr,
5357 int bnum, int have_bnum)
5358 {
5359 char astr1[40];
5360 char astr2[40];
5361
5362 strcpy (astr1, hex_string_custom ((unsigned long) from_addr, 8));
5363 strcpy (astr2, hex_string_custom ((unsigned long) to_addr, 8));
5364 if (have_bnum)
5365 warning (_("Breakpoint %d address previously adjusted from %s to %s."),
5366 bnum, astr1, astr2);
5367 else
5368 warning (_("Breakpoint address adjusted from %s to %s."), astr1, astr2);
5369 }
5370
5371 /* Adjust a breakpoint's address to account for architectural constraints
5372 on breakpoint placement. Return the adjusted address. Note: Very
5373 few targets require this kind of adjustment. For most targets,
5374 this function is simply the identity function. */
5375
5376 static CORE_ADDR
5377 adjust_breakpoint_address (struct gdbarch *gdbarch,
5378 CORE_ADDR bpaddr, enum bptype bptype)
5379 {
5380 if (!gdbarch_adjust_breakpoint_address_p (gdbarch))
5381 {
5382 /* Very few targets need any kind of breakpoint adjustment. */
5383 return bpaddr;
5384 }
5385 else if (bptype == bp_watchpoint
5386 || bptype == bp_hardware_watchpoint
5387 || bptype == bp_read_watchpoint
5388 || bptype == bp_access_watchpoint
5389 || bptype == bp_catchpoint)
5390 {
5391 /* Watchpoints and the various bp_catch_* eventpoints should not
5392 have their addresses modified. */
5393 return bpaddr;
5394 }
5395 else
5396 {
5397 CORE_ADDR adjusted_bpaddr;
5398
5399 /* Some targets have architectural constraints on the placement
5400 of breakpoint instructions. Obtain the adjusted address. */
5401 adjusted_bpaddr = gdbarch_adjust_breakpoint_address (gdbarch, bpaddr);
5402
5403 /* An adjusted breakpoint address can significantly alter
5404 a user's expectations. Print a warning if an adjustment
5405 is required. */
5406 if (adjusted_bpaddr != bpaddr)
5407 breakpoint_adjustment_warning (bpaddr, adjusted_bpaddr, 0, 0);
5408
5409 return adjusted_bpaddr;
5410 }
5411 }
5412
5413 /* Allocate a struct bp_location. */
5414
5415 static struct bp_location *
5416 allocate_bp_location (struct breakpoint *bpt)
5417 {
5418 struct bp_location *loc;
5419
5420 loc = xmalloc (sizeof (struct bp_location));
5421 memset (loc, 0, sizeof (*loc));
5422
5423 loc->owner = bpt;
5424 loc->cond = NULL;
5425 loc->shlib_disabled = 0;
5426 loc->enabled = 1;
5427
5428 switch (bpt->type)
5429 {
5430 case bp_breakpoint:
5431 case bp_until:
5432 case bp_finish:
5433 case bp_longjmp:
5434 case bp_longjmp_resume:
5435 case bp_exception:
5436 case bp_exception_resume:
5437 case bp_step_resume:
5438 case bp_watchpoint_scope:
5439 case bp_call_dummy:
5440 case bp_std_terminate:
5441 case bp_shlib_event:
5442 case bp_thread_event:
5443 case bp_overlay_event:
5444 case bp_jit_event:
5445 case bp_longjmp_master:
5446 case bp_std_terminate_master:
5447 case bp_exception_master:
5448 loc->loc_type = bp_loc_software_breakpoint;
5449 break;
5450 case bp_hardware_breakpoint:
5451 loc->loc_type = bp_loc_hardware_breakpoint;
5452 break;
5453 case bp_hardware_watchpoint:
5454 case bp_read_watchpoint:
5455 case bp_access_watchpoint:
5456 loc->loc_type = bp_loc_hardware_watchpoint;
5457 break;
5458 case bp_watchpoint:
5459 case bp_catchpoint:
5460 case bp_tracepoint:
5461 case bp_fast_tracepoint:
5462 case bp_static_tracepoint:
5463 loc->loc_type = bp_loc_other;
5464 break;
5465 default:
5466 internal_error (__FILE__, __LINE__, _("unknown breakpoint type"));
5467 }
5468
5469 loc->refc = 1;
5470 return loc;
5471 }
5472
5473 static void
5474 free_bp_location (struct bp_location *loc)
5475 {
5476 if (loc->cond)
5477 xfree (loc->cond);
5478
5479 if (loc->function_name)
5480 xfree (loc->function_name);
5481
5482 xfree (loc);
5483 }
5484
5485 /* Increment reference count. */
5486
5487 static void
5488 incref_bp_location (struct bp_location *bl)
5489 {
5490 ++bl->refc;
5491 }
5492
5493 /* Decrement reference count. If the reference count reaches 0,
5494 destroy the bp_location. Sets *BLP to NULL. */
5495
5496 static void
5497 decref_bp_location (struct bp_location **blp)
5498 {
5499 gdb_assert ((*blp)->refc > 0);
5500
5501 if (--(*blp)->refc == 0)
5502 free_bp_location (*blp);
5503 *blp = NULL;
5504 }
5505
5506 /* Helper to set_raw_breakpoint below. Creates a breakpoint
5507 that has type BPTYPE and has no locations as yet. */
5508 /* This function is used in gdbtk sources and thus can not be made static. */
5509
5510 static struct breakpoint *
5511 set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
5512 enum bptype bptype)
5513 {
5514 struct breakpoint *b, *b1;
5515
5516 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
5517 memset (b, 0, sizeof (*b));
5518
5519 b->type = bptype;
5520 b->gdbarch = gdbarch;
5521 b->language = current_language->la_language;
5522 b->input_radix = input_radix;
5523 b->thread = -1;
5524 b->enable_state = bp_enabled;
5525 b->next = 0;
5526 b->silent = 0;
5527 b->ignore_count = 0;
5528 b->commands = NULL;
5529 b->frame_id = null_frame_id;
5530 b->forked_inferior_pid = null_ptid;
5531 b->exec_pathname = NULL;
5532 b->syscalls_to_be_caught = NULL;
5533 b->ops = NULL;
5534 b->condition_not_parsed = 0;
5535 b->py_bp_object = NULL;
5536
5537 /* Add this breakpoint to the end of the chain
5538 so that a list of breakpoints will come out in order
5539 of increasing numbers. */
5540
5541 b1 = breakpoint_chain;
5542 if (b1 == 0)
5543 breakpoint_chain = b;
5544 else
5545 {
5546 while (b1->next)
5547 b1 = b1->next;
5548 b1->next = b;
5549 }
5550 return b;
5551 }
5552
5553 /* Initialize loc->function_name. */
5554 static void
5555 set_breakpoint_location_function (struct bp_location *loc)
5556 {
5557 gdb_assert (loc->owner != NULL);
5558
5559 if (loc->owner->type == bp_breakpoint
5560 || loc->owner->type == bp_hardware_breakpoint
5561 || is_tracepoint (loc->owner))
5562 {
5563 find_pc_partial_function (loc->address, &(loc->function_name),
5564 NULL, NULL);
5565 if (loc->function_name)
5566 loc->function_name = xstrdup (loc->function_name);
5567 }
5568 }
5569
5570 /* Attempt to determine architecture of location identified by SAL. */
5571 static struct gdbarch *
5572 get_sal_arch (struct symtab_and_line sal)
5573 {
5574 if (sal.section)
5575 return get_objfile_arch (sal.section->objfile);
5576 if (sal.symtab)
5577 return get_objfile_arch (sal.symtab->objfile);
5578
5579 return NULL;
5580 }
5581
5582 /* set_raw_breakpoint is a low level routine for allocating and
5583 partially initializing a breakpoint of type BPTYPE. The newly
5584 created breakpoint's address, section, source file name, and line
5585 number are provided by SAL. The newly created and partially
5586 initialized breakpoint is added to the breakpoint chain and
5587 is also returned as the value of this function.
5588
5589 It is expected that the caller will complete the initialization of
5590 the newly created breakpoint struct as well as output any status
5591 information regarding the creation of a new breakpoint. In
5592 particular, set_raw_breakpoint does NOT set the breakpoint
5593 number! Care should be taken to not allow an error to occur
5594 prior to completing the initialization of the breakpoint. If this
5595 should happen, a bogus breakpoint will be left on the chain. */
5596
5597 struct breakpoint *
5598 set_raw_breakpoint (struct gdbarch *gdbarch,
5599 struct symtab_and_line sal, enum bptype bptype)
5600 {
5601 struct breakpoint *b = set_raw_breakpoint_without_location (gdbarch, bptype);
5602 CORE_ADDR adjusted_address;
5603 struct gdbarch *loc_gdbarch;
5604
5605 loc_gdbarch = get_sal_arch (sal);
5606 if (!loc_gdbarch)
5607 loc_gdbarch = b->gdbarch;
5608
5609 if (bptype != bp_catchpoint)
5610 gdb_assert (sal.pspace != NULL);
5611
5612 /* Adjust the breakpoint's address prior to allocating a location.
5613 Once we call allocate_bp_location(), that mostly uninitialized
5614 location will be placed on the location chain. Adjustment of the
5615 breakpoint may cause target_read_memory() to be called and we do
5616 not want its scan of the location chain to find a breakpoint and
5617 location that's only been partially initialized. */
5618 adjusted_address = adjust_breakpoint_address (loc_gdbarch, sal.pc, b->type);
5619
5620 b->loc = allocate_bp_location (b);
5621 b->loc->gdbarch = loc_gdbarch;
5622 b->loc->requested_address = sal.pc;
5623 b->loc->address = adjusted_address;
5624 b->loc->pspace = sal.pspace;
5625
5626 /* Store the program space that was used to set the breakpoint, for
5627 breakpoint resetting. */
5628 b->pspace = sal.pspace;
5629
5630 if (sal.symtab == NULL)
5631 b->source_file = NULL;
5632 else
5633 b->source_file = xstrdup (sal.symtab->filename);
5634 b->loc->section = sal.section;
5635 b->line_number = sal.line;
5636
5637 set_breakpoint_location_function (b->loc);
5638
5639 breakpoints_changed ();
5640
5641 return b;
5642 }
5643
5644
5645 /* Note that the breakpoint object B describes a permanent breakpoint
5646 instruction, hard-wired into the inferior's code. */
5647 void
5648 make_breakpoint_permanent (struct breakpoint *b)
5649 {
5650 struct bp_location *bl;
5651
5652 b->enable_state = bp_permanent;
5653
5654 /* By definition, permanent breakpoints are already present in the code.
5655 Mark all locations as inserted. For now, make_breakpoint_permanent
5656 is called in just one place, so it's hard to say if it's reasonable
5657 to have permanent breakpoint with multiple locations or not,
5658 but it's easy to implmement. */
5659 for (bl = b->loc; bl; bl = bl->next)
5660 bl->inserted = 1;
5661 }
5662
5663 /* Call this routine when stepping and nexting to enable a breakpoint
5664 if we do a longjmp() or 'throw' in TP. FRAME is the frame which
5665 initiated the operation. */
5666
5667 void
5668 set_longjmp_breakpoint (struct thread_info *tp, struct frame_id frame)
5669 {
5670 struct breakpoint *b, *temp;
5671 int thread = tp->num;
5672
5673 /* To avoid having to rescan all objfile symbols at every step,
5674 we maintain a list of continually-inserted but always disabled
5675 longjmp "master" breakpoints. Here, we simply create momentary
5676 clones of those and enable them for the requested thread. */
5677 ALL_BREAKPOINTS_SAFE (b, temp)
5678 if (b->pspace == current_program_space
5679 && (b->type == bp_longjmp_master
5680 || b->type == bp_exception_master))
5681 {
5682 struct breakpoint *clone = clone_momentary_breakpoint (b);
5683
5684 clone->type = b->type == bp_longjmp_master ? bp_longjmp : bp_exception;
5685 clone->thread = thread;
5686 }
5687
5688 tp->initiating_frame = frame;
5689 }
5690
5691 /* Delete all longjmp breakpoints from THREAD. */
5692 void
5693 delete_longjmp_breakpoint (int thread)
5694 {
5695 struct breakpoint *b, *temp;
5696
5697 ALL_BREAKPOINTS_SAFE (b, temp)
5698 if (b->type == bp_longjmp || b->type == bp_exception)
5699 {
5700 if (b->thread == thread)
5701 delete_breakpoint (b);
5702 }
5703 }
5704
5705 void
5706 enable_overlay_breakpoints (void)
5707 {
5708 struct breakpoint *b;
5709
5710 ALL_BREAKPOINTS (b)
5711 if (b->type == bp_overlay_event)
5712 {
5713 b->enable_state = bp_enabled;
5714 update_global_location_list (1);
5715 overlay_events_enabled = 1;
5716 }
5717 }
5718
5719 void
5720 disable_overlay_breakpoints (void)
5721 {
5722 struct breakpoint *b;
5723
5724 ALL_BREAKPOINTS (b)
5725 if (b->type == bp_overlay_event)
5726 {
5727 b->enable_state = bp_disabled;
5728 update_global_location_list (0);
5729 overlay_events_enabled = 0;
5730 }
5731 }
5732
5733 /* Set an active std::terminate breakpoint for each std::terminate
5734 master breakpoint. */
5735 void
5736 set_std_terminate_breakpoint (void)
5737 {
5738 struct breakpoint *b, *temp;
5739
5740 ALL_BREAKPOINTS_SAFE (b, temp)
5741 if (b->pspace == current_program_space
5742 && b->type == bp_std_terminate_master)
5743 {
5744 struct breakpoint *clone = clone_momentary_breakpoint (b);
5745 clone->type = bp_std_terminate;
5746 }
5747 }
5748
5749 /* Delete all the std::terminate breakpoints. */
5750 void
5751 delete_std_terminate_breakpoint (void)
5752 {
5753 struct breakpoint *b, *temp;
5754
5755 ALL_BREAKPOINTS_SAFE (b, temp)
5756 if (b->type == bp_std_terminate)
5757 delete_breakpoint (b);
5758 }
5759
5760 struct breakpoint *
5761 create_thread_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
5762 {
5763 struct breakpoint *b;
5764
5765 b = create_internal_breakpoint (gdbarch, address, bp_thread_event);
5766
5767 b->enable_state = bp_enabled;
5768 /* addr_string has to be used or breakpoint_re_set will delete me. */
5769 b->addr_string
5770 = xstrprintf ("*%s", paddress (b->loc->gdbarch, b->loc->address));
5771
5772 update_global_location_list_nothrow (1);
5773
5774 return b;
5775 }
5776
5777 void
5778 remove_thread_event_breakpoints (void)
5779 {
5780 struct breakpoint *b, *temp;
5781
5782 ALL_BREAKPOINTS_SAFE (b, temp)
5783 if (b->type == bp_thread_event
5784 && b->loc->pspace == current_program_space)
5785 delete_breakpoint (b);
5786 }
5787
5788 struct captured_parse_breakpoint_args
5789 {
5790 char **arg_p;
5791 struct symtabs_and_lines *sals_p;
5792 char ***addr_string_p;
5793 int *not_found_ptr;
5794 };
5795
5796 struct lang_and_radix
5797 {
5798 enum language lang;
5799 int radix;
5800 };
5801
5802 /* Create a breakpoint for JIT code registration and unregistration. */
5803
5804 struct breakpoint *
5805 create_jit_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
5806 {
5807 struct breakpoint *b;
5808
5809 b = create_internal_breakpoint (gdbarch, address, bp_jit_event);
5810 update_global_location_list_nothrow (1);
5811 return b;
5812 }
5813
5814 void
5815 remove_solib_event_breakpoints (void)
5816 {
5817 struct breakpoint *b, *temp;
5818
5819 ALL_BREAKPOINTS_SAFE (b, temp)
5820 if (b->type == bp_shlib_event
5821 && b->loc->pspace == current_program_space)
5822 delete_breakpoint (b);
5823 }
5824
5825 struct breakpoint *
5826 create_solib_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
5827 {
5828 struct breakpoint *b;
5829
5830 b = create_internal_breakpoint (gdbarch, address, bp_shlib_event);
5831 update_global_location_list_nothrow (1);
5832 return b;
5833 }
5834
5835 /* Disable any breakpoints that are on code in shared libraries. Only
5836 apply to enabled breakpoints, disabled ones can just stay disabled. */
5837
5838 void
5839 disable_breakpoints_in_shlibs (void)
5840 {
5841 struct bp_location *loc, **locp_tmp;
5842
5843 ALL_BP_LOCATIONS (loc, locp_tmp)
5844 {
5845 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
5846 struct breakpoint *b = loc->owner;
5847
5848 /* We apply the check to all breakpoints, including disabled
5849 for those with loc->duplicate set. This is so that when breakpoint
5850 becomes enabled, or the duplicate is removed, gdb will try to insert
5851 all breakpoints. If we don't set shlib_disabled here, we'll try
5852 to insert those breakpoints and fail. */
5853 if (((b->type == bp_breakpoint)
5854 || (b->type == bp_jit_event)
5855 || (b->type == bp_hardware_breakpoint)
5856 || (is_tracepoint (b)))
5857 && loc->pspace == current_program_space
5858 && !loc->shlib_disabled
5859 #ifdef PC_SOLIB
5860 && PC_SOLIB (loc->address)
5861 #else
5862 && solib_name_from_address (loc->pspace, loc->address)
5863 #endif
5864 )
5865 {
5866 loc->shlib_disabled = 1;
5867 }
5868 }
5869 }
5870
5871 /* Disable any breakpoints that are in in an unloaded shared library. Only
5872 apply to enabled breakpoints, disabled ones can just stay disabled. */
5873
5874 static void
5875 disable_breakpoints_in_unloaded_shlib (struct so_list *solib)
5876 {
5877 struct bp_location *loc, **locp_tmp;
5878 int disabled_shlib_breaks = 0;
5879
5880 /* SunOS a.out shared libraries are always mapped, so do not
5881 disable breakpoints; they will only be reported as unloaded
5882 through clear_solib when GDB discards its shared library
5883 list. See clear_solib for more information. */
5884 if (exec_bfd != NULL
5885 && bfd_get_flavour (exec_bfd) == bfd_target_aout_flavour)
5886 return;
5887
5888 ALL_BP_LOCATIONS (loc, locp_tmp)
5889 {
5890 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
5891 struct breakpoint *b = loc->owner;
5892
5893 if ((loc->loc_type == bp_loc_hardware_breakpoint
5894 || loc->loc_type == bp_loc_software_breakpoint)
5895 && solib->pspace == loc->pspace
5896 && !loc->shlib_disabled
5897 && (b->type == bp_breakpoint
5898 || b->type == bp_jit_event
5899 || b->type == bp_hardware_breakpoint)
5900 && solib_contains_address_p (solib, loc->address))
5901 {
5902 loc->shlib_disabled = 1;
5903 /* At this point, we cannot rely on remove_breakpoint
5904 succeeding so we must mark the breakpoint as not inserted
5905 to prevent future errors occurring in remove_breakpoints. */
5906 loc->inserted = 0;
5907 if (!disabled_shlib_breaks)
5908 {
5909 target_terminal_ours_for_output ();
5910 warning (_("Temporarily disabling breakpoints for unloaded shared library \"%s\""),
5911 solib->so_name);
5912 }
5913 disabled_shlib_breaks = 1;
5914 }
5915 }
5916 }
5917
5918 /* FORK & VFORK catchpoints. */
5919
5920 /* Implement the "insert" breakpoint_ops method for fork catchpoints. */
5921
5922 static void
5923 insert_catch_fork (struct breakpoint *b)
5924 {
5925 target_insert_fork_catchpoint (PIDGET (inferior_ptid));
5926 }
5927
5928 /* Implement the "remove" breakpoint_ops method for fork catchpoints. */
5929
5930 static int
5931 remove_catch_fork (struct breakpoint *b)
5932 {
5933 return target_remove_fork_catchpoint (PIDGET (inferior_ptid));
5934 }
5935
5936 /* Implement the "breakpoint_hit" breakpoint_ops method for fork
5937 catchpoints. */
5938
5939 static int
5940 breakpoint_hit_catch_fork (struct breakpoint *b)
5941 {
5942 return inferior_has_forked (inferior_ptid, &b->forked_inferior_pid);
5943 }
5944
5945 /* Implement the "print_it" breakpoint_ops method for fork catchpoints. */
5946
5947 static enum print_stop_action
5948 print_it_catch_fork (struct breakpoint *b)
5949 {
5950 annotate_catchpoint (b->number);
5951 printf_filtered (_("\nCatchpoint %d (forked process %d), "),
5952 b->number, ptid_get_pid (b->forked_inferior_pid));
5953 return PRINT_SRC_AND_LOC;
5954 }
5955
5956 /* Implement the "print_one" breakpoint_ops method for fork catchpoints. */
5957
5958 static void
5959 print_one_catch_fork (struct breakpoint *b, struct bp_location **last_loc)
5960 {
5961 struct value_print_options opts;
5962
5963 get_user_print_options (&opts);
5964
5965 /* Field 4, the address, is omitted (which makes the columns
5966 not line up too nicely with the headers, but the effect
5967 is relatively readable). */
5968 if (opts.addressprint)
5969 ui_out_field_skip (uiout, "addr");
5970 annotate_field (5);
5971 ui_out_text (uiout, "fork");
5972 if (!ptid_equal (b->forked_inferior_pid, null_ptid))
5973 {
5974 ui_out_text (uiout, ", process ");
5975 ui_out_field_int (uiout, "what",
5976 ptid_get_pid (b->forked_inferior_pid));
5977 ui_out_spaces (uiout, 1);
5978 }
5979 }
5980
5981 /* Implement the "print_mention" breakpoint_ops method for fork
5982 catchpoints. */
5983
5984 static void
5985 print_mention_catch_fork (struct breakpoint *b)
5986 {
5987 printf_filtered (_("Catchpoint %d (fork)"), b->number);
5988 }
5989
5990 /* Implement the "print_recreate" breakpoint_ops method for fork
5991 catchpoints. */
5992
5993 static void
5994 print_recreate_catch_fork (struct breakpoint *b, struct ui_file *fp)
5995 {
5996 fprintf_unfiltered (fp, "catch fork");
5997 }
5998
5999 /* The breakpoint_ops structure to be used in fork catchpoints. */
6000
6001 static struct breakpoint_ops catch_fork_breakpoint_ops =
6002 {
6003 insert_catch_fork,
6004 remove_catch_fork,
6005 breakpoint_hit_catch_fork,
6006 print_it_catch_fork,
6007 print_one_catch_fork,
6008 print_mention_catch_fork,
6009 print_recreate_catch_fork
6010 };
6011
6012 /* Implement the "insert" breakpoint_ops method for vfork catchpoints. */
6013
6014 static void
6015 insert_catch_vfork (struct breakpoint *b)
6016 {
6017 target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
6018 }
6019
6020 /* Implement the "remove" breakpoint_ops method for vfork catchpoints. */
6021
6022 static int
6023 remove_catch_vfork (struct breakpoint *b)
6024 {
6025 return target_remove_vfork_catchpoint (PIDGET (inferior_ptid));
6026 }
6027
6028 /* Implement the "breakpoint_hit" breakpoint_ops method for vfork
6029 catchpoints. */
6030
6031 static int
6032 breakpoint_hit_catch_vfork (struct breakpoint *b)
6033 {
6034 return inferior_has_vforked (inferior_ptid, &b->forked_inferior_pid);
6035 }
6036
6037 /* Implement the "print_it" breakpoint_ops method for vfork catchpoints. */
6038
6039 static enum print_stop_action
6040 print_it_catch_vfork (struct breakpoint *b)
6041 {
6042 annotate_catchpoint (b->number);
6043 printf_filtered (_("\nCatchpoint %d (vforked process %d), "),
6044 b->number, ptid_get_pid (b->forked_inferior_pid));
6045 return PRINT_SRC_AND_LOC;
6046 }
6047
6048 /* Implement the "print_one" breakpoint_ops method for vfork catchpoints. */
6049
6050 static void
6051 print_one_catch_vfork (struct breakpoint *b, struct bp_location **last_loc)
6052 {
6053 struct value_print_options opts;
6054
6055 get_user_print_options (&opts);
6056 /* Field 4, the address, is omitted (which makes the columns
6057 not line up too nicely with the headers, but the effect
6058 is relatively readable). */
6059 if (opts.addressprint)
6060 ui_out_field_skip (uiout, "addr");
6061 annotate_field (5);
6062 ui_out_text (uiout, "vfork");
6063 if (!ptid_equal (b->forked_inferior_pid, null_ptid))
6064 {
6065 ui_out_text (uiout, ", process ");
6066 ui_out_field_int (uiout, "what",
6067 ptid_get_pid (b->forked_inferior_pid));
6068 ui_out_spaces (uiout, 1);
6069 }
6070 }
6071
6072 /* Implement the "print_mention" breakpoint_ops method for vfork
6073 catchpoints. */
6074
6075 static void
6076 print_mention_catch_vfork (struct breakpoint *b)
6077 {
6078 printf_filtered (_("Catchpoint %d (vfork)"), b->number);
6079 }
6080
6081 /* Implement the "print_recreate" breakpoint_ops method for vfork
6082 catchpoints. */
6083
6084 static void
6085 print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
6086 {
6087 fprintf_unfiltered (fp, "catch vfork");
6088 }
6089
6090 /* The breakpoint_ops structure to be used in vfork catchpoints. */
6091
6092 static struct breakpoint_ops catch_vfork_breakpoint_ops =
6093 {
6094 insert_catch_vfork,
6095 remove_catch_vfork,
6096 breakpoint_hit_catch_vfork,
6097 print_it_catch_vfork,
6098 print_one_catch_vfork,
6099 print_mention_catch_vfork,
6100 print_recreate_catch_vfork
6101 };
6102
6103 /* Implement the "insert" breakpoint_ops method for syscall
6104 catchpoints. */
6105
6106 static void
6107 insert_catch_syscall (struct breakpoint *b)
6108 {
6109 struct inferior *inf = current_inferior ();
6110
6111 ++inf->total_syscalls_count;
6112 if (!b->syscalls_to_be_caught)
6113 ++inf->any_syscall_count;
6114 else
6115 {
6116 int i, iter;
6117
6118 for (i = 0;
6119 VEC_iterate (int, b->syscalls_to_be_caught, i, iter);
6120 i++)
6121 {
6122 int elem;
6123
6124 if (iter >= VEC_length (int, inf->syscalls_counts))
6125 {
6126 int old_size = VEC_length (int, inf->syscalls_counts);
6127 uintptr_t vec_addr_offset = old_size * ((uintptr_t) sizeof (int));
6128 uintptr_t vec_addr;
6129 VEC_safe_grow (int, inf->syscalls_counts, iter + 1);
6130 vec_addr = (uintptr_t) VEC_address (int, inf->syscalls_counts) +
6131 vec_addr_offset;
6132 memset ((void *) vec_addr, 0,
6133 (iter + 1 - old_size) * sizeof (int));
6134 }
6135 elem = VEC_index (int, inf->syscalls_counts, iter);
6136 VEC_replace (int, inf->syscalls_counts, iter, ++elem);
6137 }
6138 }
6139
6140 target_set_syscall_catchpoint (PIDGET (inferior_ptid),
6141 inf->total_syscalls_count != 0,
6142 inf->any_syscall_count,
6143 VEC_length (int, inf->syscalls_counts),
6144 VEC_address (int, inf->syscalls_counts));
6145 }
6146
6147 /* Implement the "remove" breakpoint_ops method for syscall
6148 catchpoints. */
6149
6150 static int
6151 remove_catch_syscall (struct breakpoint *b)
6152 {
6153 struct inferior *inf = current_inferior ();
6154
6155 --inf->total_syscalls_count;
6156 if (!b->syscalls_to_be_caught)
6157 --inf->any_syscall_count;
6158 else
6159 {
6160 int i, iter;
6161
6162 for (i = 0;
6163 VEC_iterate (int, b->syscalls_to_be_caught, i, iter);
6164 i++)
6165 {
6166 int elem;
6167 if (iter >= VEC_length (int, inf->syscalls_counts))
6168 /* Shouldn't happen. */
6169 continue;
6170 elem = VEC_index (int, inf->syscalls_counts, iter);
6171 VEC_replace (int, inf->syscalls_counts, iter, --elem);
6172 }
6173 }
6174
6175 return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
6176 inf->total_syscalls_count != 0,
6177 inf->any_syscall_count,
6178 VEC_length (int, inf->syscalls_counts),
6179 VEC_address (int, inf->syscalls_counts));
6180 }
6181
6182 /* Implement the "breakpoint_hit" breakpoint_ops method for syscall
6183 catchpoints. */
6184
6185 static int
6186 breakpoint_hit_catch_syscall (struct breakpoint *b)
6187 {
6188 /* We must check if we are catching specific syscalls in this breakpoint.
6189 If we are, then we must guarantee that the called syscall is the same
6190 syscall we are catching. */
6191 int syscall_number = 0;
6192
6193 if (!inferior_has_called_syscall (inferior_ptid, &syscall_number))
6194 return 0;
6195
6196 /* Now, checking if the syscall is the same. */
6197 if (b->syscalls_to_be_caught)
6198 {
6199 int i, iter;
6200
6201 for (i = 0;
6202 VEC_iterate (int, b->syscalls_to_be_caught, i, iter);
6203 i++)
6204 if (syscall_number == iter)
6205 break;
6206 /* Not the same. */
6207 if (!iter)
6208 return 0;
6209 }
6210
6211 return 1;
6212 }
6213
6214 /* Implement the "print_it" breakpoint_ops method for syscall
6215 catchpoints. */
6216
6217 static enum print_stop_action
6218 print_it_catch_syscall (struct breakpoint *b)
6219 {
6220 /* These are needed because we want to know in which state a
6221 syscall is. It can be in the TARGET_WAITKIND_SYSCALL_ENTRY
6222 or TARGET_WAITKIND_SYSCALL_RETURN, and depending on it we
6223 must print "called syscall" or "returned from syscall". */
6224 ptid_t ptid;
6225 struct target_waitstatus last;
6226 struct syscall s;
6227 struct cleanup *old_chain;
6228 char *syscall_id;
6229
6230 get_last_target_status (&ptid, &last);
6231
6232 get_syscall_by_number (last.value.syscall_number, &s);
6233
6234 annotate_catchpoint (b->number);
6235
6236 if (s.name == NULL)
6237 syscall_id = xstrprintf ("%d", last.value.syscall_number);
6238 else
6239 syscall_id = xstrprintf ("'%s'", s.name);
6240
6241 old_chain = make_cleanup (xfree, syscall_id);
6242
6243 if (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY)
6244 printf_filtered (_("\nCatchpoint %d (call to syscall %s), "),
6245 b->number, syscall_id);
6246 else if (last.kind == TARGET_WAITKIND_SYSCALL_RETURN)
6247 printf_filtered (_("\nCatchpoint %d (returned from syscall %s), "),
6248 b->number, syscall_id);
6249
6250 do_cleanups (old_chain);
6251
6252 return PRINT_SRC_AND_LOC;
6253 }
6254
6255 /* Implement the "print_one" breakpoint_ops method for syscall
6256 catchpoints. */
6257
6258 static void
6259 print_one_catch_syscall (struct breakpoint *b,
6260 struct bp_location **last_loc)
6261 {
6262 struct value_print_options opts;
6263
6264 get_user_print_options (&opts);
6265 /* Field 4, the address, is omitted (which makes the columns
6266 not line up too nicely with the headers, but the effect
6267 is relatively readable). */
6268 if (opts.addressprint)
6269 ui_out_field_skip (uiout, "addr");
6270 annotate_field (5);
6271
6272 if (b->syscalls_to_be_caught
6273 && VEC_length (int, b->syscalls_to_be_caught) > 1)
6274 ui_out_text (uiout, "syscalls \"");
6275 else
6276 ui_out_text (uiout, "syscall \"");
6277
6278 if (b->syscalls_to_be_caught)
6279 {
6280 int i, iter;
6281 char *text = xstrprintf ("%s", "");
6282
6283 for (i = 0;
6284 VEC_iterate (int, b->syscalls_to_be_caught, i, iter);
6285 i++)
6286 {
6287 char *x = text;
6288 struct syscall s;
6289 get_syscall_by_number (iter, &s);
6290
6291 if (s.name != NULL)
6292 text = xstrprintf ("%s%s, ", text, s.name);
6293 else
6294 text = xstrprintf ("%s%d, ", text, iter);
6295
6296 /* We have to xfree the last 'text' (now stored at 'x')
6297 because xstrprintf dinamically allocates new space for it
6298 on every call. */
6299 xfree (x);
6300 }
6301 /* Remove the last comma. */
6302 text[strlen (text) - 2] = '\0';
6303 ui_out_field_string (uiout, "what", text);
6304 }
6305 else
6306 ui_out_field_string (uiout, "what", "<any syscall>");
6307 ui_out_text (uiout, "\" ");
6308 }
6309
6310 /* Implement the "print_mention" breakpoint_ops method for syscall
6311 catchpoints. */
6312
6313 static void
6314 print_mention_catch_syscall (struct breakpoint *b)
6315 {
6316 if (b->syscalls_to_be_caught)
6317 {
6318 int i, iter;
6319
6320 if (VEC_length (int, b->syscalls_to_be_caught) > 1)
6321 printf_filtered (_("Catchpoint %d (syscalls"), b->number);
6322 else
6323 printf_filtered (_("Catchpoint %d (syscall"), b->number);
6324
6325 for (i = 0;
6326 VEC_iterate (int, b->syscalls_to_be_caught, i, iter);
6327 i++)
6328 {
6329 struct syscall s;
6330 get_syscall_by_number (iter, &s);
6331
6332 if (s.name)
6333 printf_filtered (" '%s' [%d]", s.name, s.number);
6334 else
6335 printf_filtered (" %d", s.number);
6336 }
6337 printf_filtered (")");
6338 }
6339 else
6340 printf_filtered (_("Catchpoint %d (any syscall)"),
6341 b->number);
6342 }
6343
6344 /* Implement the "print_recreate" breakpoint_ops method for syscall
6345 catchpoints. */
6346
6347 static void
6348 print_recreate_catch_syscall (struct breakpoint *b, struct ui_file *fp)
6349 {
6350 fprintf_unfiltered (fp, "catch syscall");
6351
6352 if (b->syscalls_to_be_caught)
6353 {
6354 int i, iter;
6355
6356 for (i = 0;
6357 VEC_iterate (int, b->syscalls_to_be_caught, i, iter);
6358 i++)
6359 {
6360 struct syscall s;
6361
6362 get_syscall_by_number (iter, &s);
6363 if (s.name)
6364 fprintf_unfiltered (fp, " %s", s.name);
6365 else
6366 fprintf_unfiltered (fp, " %d", s.number);
6367 }
6368 }
6369 }
6370
6371 /* The breakpoint_ops structure to be used in syscall catchpoints. */
6372
6373 static struct breakpoint_ops catch_syscall_breakpoint_ops =
6374 {
6375 insert_catch_syscall,
6376 remove_catch_syscall,
6377 breakpoint_hit_catch_syscall,
6378 print_it_catch_syscall,
6379 print_one_catch_syscall,
6380 print_mention_catch_syscall,
6381 print_recreate_catch_syscall
6382 };
6383
6384 /* Returns non-zero if 'b' is a syscall catchpoint. */
6385
6386 static int
6387 syscall_catchpoint_p (struct breakpoint *b)
6388 {
6389 return (b->ops == &catch_syscall_breakpoint_ops);
6390 }
6391
6392 /* Create a new breakpoint of the bp_catchpoint kind and return it,
6393 but does NOT mention it nor update the global location list.
6394 This is useful if you need to fill more fields in the
6395 struct breakpoint before calling mention.
6396
6397 If TEMPFLAG is non-zero, then make the breakpoint temporary.
6398 If COND_STRING is not NULL, then store it in the breakpoint.
6399 OPS, if not NULL, is the breakpoint_ops structure associated
6400 to the catchpoint. */
6401
6402 static struct breakpoint *
6403 create_catchpoint_without_mention (struct gdbarch *gdbarch, int tempflag,
6404 char *cond_string,
6405 struct breakpoint_ops *ops)
6406 {
6407 struct symtab_and_line sal;
6408 struct breakpoint *b;
6409
6410 init_sal (&sal);
6411 sal.pspace = current_program_space;
6412
6413 b = set_raw_breakpoint (gdbarch, sal, bp_catchpoint);
6414 set_breakpoint_count (breakpoint_count + 1);
6415 b->number = breakpoint_count;
6416
6417 b->cond_string = (cond_string == NULL) ? NULL : xstrdup (cond_string);
6418 b->thread = -1;
6419 b->addr_string = NULL;
6420 b->enable_state = bp_enabled;
6421 b->disposition = tempflag ? disp_del : disp_donttouch;
6422 b->ops = ops;
6423
6424 return b;
6425 }
6426
6427 /* Create a new breakpoint of the bp_catchpoint kind and return it.
6428
6429 If TEMPFLAG is non-zero, then make the breakpoint temporary.
6430 If COND_STRING is not NULL, then store it in the breakpoint.
6431 OPS, if not NULL, is the breakpoint_ops structure associated
6432 to the catchpoint. */
6433
6434 static struct breakpoint *
6435 create_catchpoint (struct gdbarch *gdbarch, int tempflag,
6436 char *cond_string, struct breakpoint_ops *ops)
6437 {
6438 struct breakpoint *b =
6439 create_catchpoint_without_mention (gdbarch, tempflag, cond_string, ops);
6440
6441 mention (b);
6442 update_global_location_list (1);
6443
6444 return b;
6445 }
6446
6447 static void
6448 create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
6449 int tempflag, char *cond_string,
6450 struct breakpoint_ops *ops)
6451 {
6452 struct breakpoint *b
6453 = create_catchpoint (gdbarch, tempflag, cond_string, ops);
6454
6455 /* FIXME: We should put this information in a breakpoint private data
6456 area. */
6457 b->forked_inferior_pid = null_ptid;
6458 }
6459
6460 /* Exec catchpoints. */
6461
6462 static void
6463 insert_catch_exec (struct breakpoint *b)
6464 {
6465 target_insert_exec_catchpoint (PIDGET (inferior_ptid));
6466 }
6467
6468 static int
6469 remove_catch_exec (struct breakpoint *b)
6470 {
6471 return target_remove_exec_catchpoint (PIDGET (inferior_ptid));
6472 }
6473
6474 static int
6475 breakpoint_hit_catch_exec (struct breakpoint *b)
6476 {
6477 return inferior_has_execd (inferior_ptid, &b->exec_pathname);
6478 }
6479
6480 static enum print_stop_action
6481 print_it_catch_exec (struct breakpoint *b)
6482 {
6483 annotate_catchpoint (b->number);
6484 printf_filtered (_("\nCatchpoint %d (exec'd %s), "), b->number,
6485 b->exec_pathname);
6486 return PRINT_SRC_AND_LOC;
6487 }
6488
6489 static void
6490 print_one_catch_exec (struct breakpoint *b, struct bp_location **last_loc)
6491 {
6492 struct value_print_options opts;
6493
6494 get_user_print_options (&opts);
6495
6496 /* Field 4, the address, is omitted (which makes the columns
6497 not line up too nicely with the headers, but the effect
6498 is relatively readable). */
6499 if (opts.addressprint)
6500 ui_out_field_skip (uiout, "addr");
6501 annotate_field (5);
6502 ui_out_text (uiout, "exec");
6503 if (b->exec_pathname != NULL)
6504 {
6505 ui_out_text (uiout, ", program \"");
6506 ui_out_field_string (uiout, "what", b->exec_pathname);
6507 ui_out_text (uiout, "\" ");
6508 }
6509 }
6510
6511 static void
6512 print_mention_catch_exec (struct breakpoint *b)
6513 {
6514 printf_filtered (_("Catchpoint %d (exec)"), b->number);
6515 }
6516
6517 /* Implement the "print_recreate" breakpoint_ops method for exec
6518 catchpoints. */
6519
6520 static void
6521 print_recreate_catch_exec (struct breakpoint *b, struct ui_file *fp)
6522 {
6523 fprintf_unfiltered (fp, "catch exec");
6524 }
6525
6526 static struct breakpoint_ops catch_exec_breakpoint_ops =
6527 {
6528 insert_catch_exec,
6529 remove_catch_exec,
6530 breakpoint_hit_catch_exec,
6531 print_it_catch_exec,
6532 print_one_catch_exec,
6533 print_mention_catch_exec,
6534 print_recreate_catch_exec
6535 };
6536
6537 static void
6538 create_syscall_event_catchpoint (int tempflag, VEC(int) *filter,
6539 struct breakpoint_ops *ops)
6540 {
6541 struct gdbarch *gdbarch = get_current_arch ();
6542 struct breakpoint *b =
6543 create_catchpoint_without_mention (gdbarch, tempflag, NULL, ops);
6544
6545 b->syscalls_to_be_caught = filter;
6546
6547 /* Now, we have to mention the breakpoint and update the global
6548 location list. */
6549 mention (b);
6550 update_global_location_list (1);
6551 }
6552
6553 static int
6554 hw_breakpoint_used_count (void)
6555 {
6556 struct breakpoint *b;
6557 int i = 0;
6558
6559 ALL_BREAKPOINTS (b)
6560 {
6561 if (b->type == bp_hardware_breakpoint && breakpoint_enabled (b))
6562 i++;
6563 }
6564
6565 return i;
6566 }
6567
6568 static int
6569 hw_watchpoint_used_count (enum bptype type, int *other_type_used)
6570 {
6571 struct breakpoint *b;
6572 int i = 0;
6573
6574 *other_type_used = 0;
6575 ALL_BREAKPOINTS (b)
6576 {
6577 if (breakpoint_enabled (b))
6578 {
6579 if (b->type == type)
6580 i++;
6581 else if (is_hardware_watchpoint (b))
6582 *other_type_used = 1;
6583 }
6584 }
6585 return i;
6586 }
6587
6588 void
6589 disable_watchpoints_before_interactive_call_start (void)
6590 {
6591 struct breakpoint *b;
6592
6593 ALL_BREAKPOINTS (b)
6594 {
6595 if (is_watchpoint (b) && breakpoint_enabled (b))
6596 {
6597 b->enable_state = bp_call_disabled;
6598 update_global_location_list (0);
6599 }
6600 }
6601 }
6602
6603 void
6604 enable_watchpoints_after_interactive_call_stop (void)
6605 {
6606 struct breakpoint *b;
6607
6608 ALL_BREAKPOINTS (b)
6609 {
6610 if (is_watchpoint (b) && b->enable_state == bp_call_disabled)
6611 {
6612 b->enable_state = bp_enabled;
6613 update_global_location_list (1);
6614 }
6615 }
6616 }
6617
6618 void
6619 disable_breakpoints_before_startup (void)
6620 {
6621 struct breakpoint *b;
6622 int found = 0;
6623
6624 ALL_BREAKPOINTS (b)
6625 {
6626 if (b->pspace != current_program_space)
6627 continue;
6628
6629 if ((b->type == bp_breakpoint
6630 || b->type == bp_hardware_breakpoint)
6631 && breakpoint_enabled (b))
6632 {
6633 b->enable_state = bp_startup_disabled;
6634 found = 1;
6635 }
6636 }
6637
6638 if (found)
6639 update_global_location_list (0);
6640
6641 current_program_space->executing_startup = 1;
6642 }
6643
6644 void
6645 enable_breakpoints_after_startup (void)
6646 {
6647 struct breakpoint *b;
6648 int found = 0;
6649
6650 current_program_space->executing_startup = 0;
6651
6652 ALL_BREAKPOINTS (b)
6653 {
6654 if (b->pspace != current_program_space)
6655 continue;
6656
6657 if ((b->type == bp_breakpoint
6658 || b->type == bp_hardware_breakpoint)
6659 && b->enable_state == bp_startup_disabled)
6660 {
6661 b->enable_state = bp_enabled;
6662 found = 1;
6663 }
6664 }
6665
6666 if (found)
6667 breakpoint_re_set ();
6668 }
6669
6670
6671 /* Set a breakpoint that will evaporate an end of command
6672 at address specified by SAL.
6673 Restrict it to frame FRAME if FRAME is nonzero. */
6674
6675 struct breakpoint *
6676 set_momentary_breakpoint (struct gdbarch *gdbarch, struct symtab_and_line sal,
6677 struct frame_id frame_id, enum bptype type)
6678 {
6679 struct breakpoint *b;
6680
6681 /* If FRAME_ID is valid, it should be a real frame, not an inlined
6682 one. */
6683 gdb_assert (!frame_id_inlined_p (frame_id));
6684
6685 b = set_raw_breakpoint (gdbarch, sal, type);
6686 b->enable_state = bp_enabled;
6687 b->disposition = disp_donttouch;
6688 b->frame_id = frame_id;
6689
6690 /* If we're debugging a multi-threaded program, then we
6691 want momentary breakpoints to be active in only a
6692 single thread of control. */
6693 if (in_thread_list (inferior_ptid))
6694 b->thread = pid_to_thread_id (inferior_ptid);
6695
6696 update_global_location_list_nothrow (1);
6697
6698 return b;
6699 }
6700
6701 /* Make a deep copy of momentary breakpoint ORIG. Returns NULL if
6702 ORIG is NULL. */
6703
6704 struct breakpoint *
6705 clone_momentary_breakpoint (struct breakpoint *orig)
6706 {
6707 struct breakpoint *copy;
6708
6709 /* If there's nothing to clone, then return nothing. */
6710 if (orig == NULL)
6711 return NULL;
6712
6713 copy = set_raw_breakpoint_without_location (orig->gdbarch, orig->type);
6714 copy->loc = allocate_bp_location (copy);
6715 set_breakpoint_location_function (copy->loc);
6716
6717 copy->loc->gdbarch = orig->loc->gdbarch;
6718 copy->loc->requested_address = orig->loc->requested_address;
6719 copy->loc->address = orig->loc->address;
6720 copy->loc->section = orig->loc->section;
6721 copy->loc->pspace = orig->loc->pspace;
6722
6723 if (orig->source_file == NULL)
6724 copy->source_file = NULL;
6725 else
6726 copy->source_file = xstrdup (orig->source_file);
6727
6728 copy->line_number = orig->line_number;
6729 copy->frame_id = orig->frame_id;
6730 copy->thread = orig->thread;
6731 copy->pspace = orig->pspace;
6732
6733 copy->enable_state = bp_enabled;
6734 copy->disposition = disp_donttouch;
6735 copy->number = internal_breakpoint_number--;
6736
6737 update_global_location_list_nothrow (0);
6738 return copy;
6739 }
6740
6741 struct breakpoint *
6742 set_momentary_breakpoint_at_pc (struct gdbarch *gdbarch, CORE_ADDR pc,
6743 enum bptype type)
6744 {
6745 struct symtab_and_line sal;
6746
6747 sal = find_pc_line (pc, 0);
6748 sal.pc = pc;
6749 sal.section = find_pc_overlay (pc);
6750 sal.explicit_pc = 1;
6751
6752 return set_momentary_breakpoint (gdbarch, sal, null_frame_id, type);
6753 }
6754 \f
6755
6756 /* Tell the user we have just set a breakpoint B. */
6757
6758 static void
6759 mention (struct breakpoint *b)
6760 {
6761 int say_where = 0;
6762 struct cleanup *ui_out_chain;
6763 struct value_print_options opts;
6764
6765 get_user_print_options (&opts);
6766
6767 /* FIXME: This is misplaced; mention() is called by things (like
6768 hitting a watchpoint) other than breakpoint creation. It should
6769 be possible to clean this up and at the same time replace the
6770 random calls to breakpoint_changed with this hook. */
6771 observer_notify_breakpoint_created (b->number);
6772
6773 if (b->ops != NULL && b->ops->print_mention != NULL)
6774 b->ops->print_mention (b);
6775 else
6776 switch (b->type)
6777 {
6778 case bp_none:
6779 printf_filtered (_("(apparently deleted?) Eventpoint %d: "), b->number);
6780 break;
6781 case bp_watchpoint:
6782 ui_out_text (uiout, "Watchpoint ");
6783 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
6784 ui_out_field_int (uiout, "number", b->number);
6785 ui_out_text (uiout, ": ");
6786 ui_out_field_string (uiout, "exp", b->exp_string);
6787 do_cleanups (ui_out_chain);
6788 break;
6789 case bp_hardware_watchpoint:
6790 ui_out_text (uiout, "Hardware watchpoint ");
6791 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
6792 ui_out_field_int (uiout, "number", b->number);
6793 ui_out_text (uiout, ": ");
6794 ui_out_field_string (uiout, "exp", b->exp_string);
6795 do_cleanups (ui_out_chain);
6796 break;
6797 case bp_read_watchpoint:
6798 ui_out_text (uiout, "Hardware read watchpoint ");
6799 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt");
6800 ui_out_field_int (uiout, "number", b->number);
6801 ui_out_text (uiout, ": ");
6802 ui_out_field_string (uiout, "exp", b->exp_string);
6803 do_cleanups (ui_out_chain);
6804 break;
6805 case bp_access_watchpoint:
6806 ui_out_text (uiout, "Hardware access (read/write) watchpoint ");
6807 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt");
6808 ui_out_field_int (uiout, "number", b->number);
6809 ui_out_text (uiout, ": ");
6810 ui_out_field_string (uiout, "exp", b->exp_string);
6811 do_cleanups (ui_out_chain);
6812 break;
6813 case bp_breakpoint:
6814 if (ui_out_is_mi_like_p (uiout))
6815 {
6816 say_where = 0;
6817 break;
6818 }
6819 if (b->disposition == disp_del)
6820 printf_filtered (_("Temporary breakpoint"));
6821 else
6822 printf_filtered (_("Breakpoint"));
6823 printf_filtered (_(" %d"), b->number);
6824 say_where = 1;
6825 break;
6826 case bp_hardware_breakpoint:
6827 if (ui_out_is_mi_like_p (uiout))
6828 {
6829 say_where = 0;
6830 break;
6831 }
6832 printf_filtered (_("Hardware assisted breakpoint %d"), b->number);
6833 say_where = 1;
6834 break;
6835 case bp_tracepoint:
6836 if (ui_out_is_mi_like_p (uiout))
6837 {
6838 say_where = 0;
6839 break;
6840 }
6841 printf_filtered (_("Tracepoint"));
6842 printf_filtered (_(" %d"), b->number);
6843 say_where = 1;
6844 break;
6845 case bp_fast_tracepoint:
6846 if (ui_out_is_mi_like_p (uiout))
6847 {
6848 say_where = 0;
6849 break;
6850 }
6851 printf_filtered (_("Fast tracepoint"));
6852 printf_filtered (_(" %d"), b->number);
6853 say_where = 1;
6854 break;
6855 case bp_static_tracepoint:
6856 if (ui_out_is_mi_like_p (uiout))
6857 {
6858 say_where = 0;
6859 break;
6860 }
6861 printf_filtered (_("Static tracepoint"));
6862 printf_filtered (_(" %d"), b->number);
6863 say_where = 1;
6864 break;
6865
6866 case bp_until:
6867 case bp_finish:
6868 case bp_longjmp:
6869 case bp_longjmp_resume:
6870 case bp_exception:
6871 case bp_exception_resume:
6872 case bp_step_resume:
6873 case bp_call_dummy:
6874 case bp_std_terminate:
6875 case bp_watchpoint_scope:
6876 case bp_shlib_event:
6877 case bp_thread_event:
6878 case bp_overlay_event:
6879 case bp_jit_event:
6880 case bp_longjmp_master:
6881 case bp_std_terminate_master:
6882 case bp_exception_master:
6883 break;
6884 }
6885
6886 if (say_where)
6887 {
6888 /* i18n: cagney/2005-02-11: Below needs to be merged into a
6889 single string. */
6890 if (b->loc == NULL)
6891 {
6892 printf_filtered (_(" (%s) pending."), b->addr_string);
6893 }
6894 else
6895 {
6896 if (opts.addressprint || b->source_file == NULL)
6897 {
6898 printf_filtered (" at ");
6899 fputs_filtered (paddress (b->loc->gdbarch, b->loc->address),
6900 gdb_stdout);
6901 }
6902 if (b->source_file)
6903 printf_filtered (": file %s, line %d.",
6904 b->source_file, b->line_number);
6905
6906 if (b->loc->next)
6907 {
6908 struct bp_location *loc = b->loc;
6909 int n = 0;
6910 for (; loc; loc = loc->next)
6911 ++n;
6912 printf_filtered (" (%d locations)", n);
6913 }
6914
6915 }
6916 }
6917 if (ui_out_is_mi_like_p (uiout))
6918 return;
6919 printf_filtered ("\n");
6920 }
6921 \f
6922
6923 static struct bp_location *
6924 add_location_to_breakpoint (struct breakpoint *b,
6925 const struct symtab_and_line *sal)
6926 {
6927 struct bp_location *loc, **tmp;
6928
6929 loc = allocate_bp_location (b);
6930 for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
6931 ;
6932 *tmp = loc;
6933 loc->gdbarch = get_sal_arch (*sal);
6934 if (!loc->gdbarch)
6935 loc->gdbarch = b->gdbarch;
6936 loc->requested_address = sal->pc;
6937 loc->address = adjust_breakpoint_address (loc->gdbarch,
6938 loc->requested_address, b->type);
6939 loc->pspace = sal->pspace;
6940 gdb_assert (loc->pspace != NULL);
6941 loc->section = sal->section;
6942
6943 set_breakpoint_location_function (loc);
6944 return loc;
6945 }
6946 \f
6947
6948 /* Return 1 if LOC is pointing to a permanent breakpoint,
6949 return 0 otherwise. */
6950
6951 static int
6952 bp_loc_is_permanent (struct bp_location *loc)
6953 {
6954 int len;
6955 CORE_ADDR addr;
6956 const gdb_byte *brk;
6957 gdb_byte *target_mem;
6958 struct cleanup *cleanup;
6959 int retval = 0;
6960
6961 gdb_assert (loc != NULL);
6962
6963 addr = loc->address;
6964 brk = gdbarch_breakpoint_from_pc (loc->gdbarch, &addr, &len);
6965
6966 /* Software breakpoints unsupported? */
6967 if (brk == NULL)
6968 return 0;
6969
6970 target_mem = alloca (len);
6971
6972 /* Enable the automatic memory restoration from breakpoints while
6973 we read the memory. Otherwise we could say about our temporary
6974 breakpoints they are permanent. */
6975 cleanup = save_current_space_and_thread ();
6976
6977 switch_to_program_space_and_thread (loc->pspace);
6978 make_show_memory_breakpoints_cleanup (0);
6979
6980 if (target_read_memory (loc->address, target_mem, len) == 0
6981 && memcmp (target_mem, brk, len) == 0)
6982 retval = 1;
6983
6984 do_cleanups (cleanup);
6985
6986 return retval;
6987 }
6988
6989
6990
6991 /* Create a breakpoint with SAL as location. Use ADDR_STRING
6992 as textual description of the location, and COND_STRING
6993 as condition expression. */
6994
6995 static void
6996 create_breakpoint_sal (struct gdbarch *gdbarch,
6997 struct symtabs_and_lines sals, char *addr_string,
6998 char *cond_string,
6999 enum bptype type, enum bpdisp disposition,
7000 int thread, int task, int ignore_count,
7001 struct breakpoint_ops *ops, int from_tty,
7002 int enabled, int internal)
7003 {
7004 struct breakpoint *b = NULL;
7005 int i;
7006
7007 if (type == bp_hardware_breakpoint)
7008 {
7009 int i = hw_breakpoint_used_count ();
7010 int target_resources_ok =
7011 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
7012 i + 1, 0);
7013 if (target_resources_ok == 0)
7014 error (_("No hardware breakpoint support in the target."));
7015 else if (target_resources_ok < 0)
7016 error (_("Hardware breakpoints used exceeds limit."));
7017 }
7018
7019 gdb_assert (sals.nelts > 0);
7020
7021 for (i = 0; i < sals.nelts; ++i)
7022 {
7023 struct symtab_and_line sal = sals.sals[i];
7024 struct bp_location *loc;
7025
7026 if (from_tty)
7027 {
7028 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
7029 if (!loc_gdbarch)
7030 loc_gdbarch = gdbarch;
7031
7032 describe_other_breakpoints (loc_gdbarch,
7033 sal.pspace, sal.pc, sal.section, thread);
7034 }
7035
7036 if (i == 0)
7037 {
7038 b = set_raw_breakpoint (gdbarch, sal, type);
7039 set_breakpoint_number (internal, b);
7040 b->thread = thread;
7041 b->task = task;
7042
7043 b->cond_string = cond_string;
7044 b->ignore_count = ignore_count;
7045 b->enable_state = enabled ? bp_enabled : bp_disabled;
7046 b->disposition = disposition;
7047 b->pspace = sals.sals[0].pspace;
7048
7049 if (type == bp_static_tracepoint)
7050 {
7051 struct static_tracepoint_marker marker;
7052
7053 if (is_marker_spec (addr_string))
7054 {
7055 /* We already know the marker exists, otherwise, we
7056 wouldn't see a sal for it. */
7057 char *p = &addr_string[3];
7058 char *endp;
7059 char *marker_str;
7060 int i;
7061
7062 while (*p == ' ' || *p == '\t')
7063 p++;
7064
7065 endp = p;
7066 while (*endp != ' ' && *endp != '\t' && *endp != '\0')
7067 endp++;
7068
7069 marker_str = savestring (p, endp - p);
7070 b->static_trace_marker_id = marker_str;
7071
7072 printf_filtered (_("Probed static tracepoint marker \"%s\"\n"),
7073 b->static_trace_marker_id);
7074 }
7075 else if (target_static_tracepoint_marker_at (sal.pc, &marker))
7076 {
7077 b->static_trace_marker_id = xstrdup (marker.str_id);
7078 release_static_tracepoint_marker (&marker);
7079
7080 printf_filtered (_("Probed static tracepoint marker \"%s\"\n"),
7081 b->static_trace_marker_id);
7082 }
7083 else
7084 warning (_("\
7085 Couldn't determine the static tracepoint marker to probe"));
7086 }
7087
7088 if (enabled && b->pspace->executing_startup
7089 && (b->type == bp_breakpoint
7090 || b->type == bp_hardware_breakpoint))
7091 b->enable_state = bp_startup_disabled;
7092
7093 loc = b->loc;
7094 }
7095 else
7096 {
7097 loc = add_location_to_breakpoint (b, &sal);
7098 }
7099
7100 if (bp_loc_is_permanent (loc))
7101 make_breakpoint_permanent (b);
7102
7103 if (b->cond_string)
7104 {
7105 char *arg = b->cond_string;
7106 loc->cond = parse_exp_1 (&arg, block_for_pc (loc->address), 0);
7107 if (*arg)
7108 error (_("Garbage %s follows condition"), arg);
7109 }
7110 }
7111
7112 if (addr_string)
7113 b->addr_string = addr_string;
7114 else
7115 /* addr_string has to be used or breakpoint_re_set will delete
7116 me. */
7117 b->addr_string
7118 = xstrprintf ("*%s", paddress (b->loc->gdbarch, b->loc->address));
7119
7120 b->ops = ops;
7121 if (internal)
7122 /* Do not mention breakpoints with a negative number, but do
7123 notify observers. */
7124 observer_notify_breakpoint_created (b->number);
7125 else
7126 mention (b);
7127 }
7128
7129 /* Remove element at INDEX_TO_REMOVE from SAL, shifting other
7130 elements to fill the void space. */
7131 static void
7132 remove_sal (struct symtabs_and_lines *sal, int index_to_remove)
7133 {
7134 int i = index_to_remove+1;
7135 int last_index = sal->nelts-1;
7136
7137 for (;i <= last_index; ++i)
7138 sal->sals[i-1] = sal->sals[i];
7139
7140 --(sal->nelts);
7141 }
7142
7143 /* If appropriate, obtains all sals that correspond to the same file
7144 and line as SAL, in all program spaces. Users debugging with IDEs,
7145 will want to set a breakpoint at foo.c:line, and not really care
7146 about program spaces. This is done only if SAL does not have
7147 explicit PC and has line and file information. If we got just a
7148 single expanded sal, return the original.
7149
7150 Otherwise, if SAL.explicit_line is not set, filter out all sals for
7151 which the name of enclosing function is different from SAL. This
7152 makes sure that if we have breakpoint originally set in template
7153 instantiation, say foo<int>(), we won't expand SAL to locations at
7154 the same line in all existing instantiations of 'foo'. */
7155
7156 static struct symtabs_and_lines
7157 expand_line_sal_maybe (struct symtab_and_line sal)
7158 {
7159 struct symtabs_and_lines expanded;
7160 CORE_ADDR original_pc = sal.pc;
7161 char *original_function = NULL;
7162 int found;
7163 int i;
7164 struct cleanup *old_chain;
7165
7166 /* If we have explicit pc, don't expand.
7167 If we have no line number, we can't expand. */
7168 if (sal.explicit_pc || sal.line == 0 || sal.symtab == NULL)
7169 {
7170 expanded.nelts = 1;
7171 expanded.sals = xmalloc (sizeof (struct symtab_and_line));
7172 expanded.sals[0] = sal;
7173 return expanded;
7174 }
7175
7176 sal.pc = 0;
7177
7178 old_chain = save_current_space_and_thread ();
7179
7180 switch_to_program_space_and_thread (sal.pspace);
7181
7182 find_pc_partial_function (original_pc, &original_function, NULL, NULL);
7183
7184 /* Note that expand_line_sal visits *all* program spaces. */
7185 expanded = expand_line_sal (sal);
7186
7187 if (expanded.nelts == 1)
7188 {
7189 /* We had one sal, we got one sal. Return that sal, adjusting it
7190 past the function prologue if necessary. */
7191 xfree (expanded.sals);
7192 expanded.nelts = 1;
7193 expanded.sals = xmalloc (sizeof (struct symtab_and_line));
7194 sal.pc = original_pc;
7195 expanded.sals[0] = sal;
7196 skip_prologue_sal (&expanded.sals[0]);
7197 do_cleanups (old_chain);
7198 return expanded;
7199 }
7200
7201 if (!sal.explicit_line)
7202 {
7203 CORE_ADDR func_addr, func_end;
7204 for (i = 0; i < expanded.nelts; ++i)
7205 {
7206 CORE_ADDR pc = expanded.sals[i].pc;
7207 char *this_function;
7208
7209 /* We need to switch threads as well since we're about to
7210 read memory. */
7211 switch_to_program_space_and_thread (expanded.sals[i].pspace);
7212
7213 if (find_pc_partial_function (pc, &this_function,
7214 &func_addr, &func_end))
7215 {
7216 if (this_function
7217 && strcmp (this_function, original_function) != 0)
7218 {
7219 remove_sal (&expanded, i);
7220 --i;
7221 }
7222 }
7223 }
7224 }
7225
7226 /* Skip the function prologue if necessary. */
7227 for (i = 0; i < expanded.nelts; ++i)
7228 skip_prologue_sal (&expanded.sals[i]);
7229
7230 do_cleanups (old_chain);
7231
7232 if (expanded.nelts <= 1)
7233 {
7234 /* This is un ugly workaround. If we get zero
7235 expanded sals then something is really wrong.
7236 Fix that by returnign the original sal. */
7237 xfree (expanded.sals);
7238 expanded.nelts = 1;
7239 expanded.sals = xmalloc (sizeof (struct symtab_and_line));
7240 sal.pc = original_pc;
7241 expanded.sals[0] = sal;
7242 return expanded;
7243 }
7244
7245 if (original_pc)
7246 {
7247 found = 0;
7248 for (i = 0; i < expanded.nelts; ++i)
7249 if (expanded.sals[i].pc == original_pc)
7250 {
7251 found = 1;
7252 break;
7253 }
7254 gdb_assert (found);
7255 }
7256
7257 return expanded;
7258 }
7259
7260 /* Add SALS.nelts breakpoints to the breakpoint table. For each
7261 SALS.sal[i] breakpoint, include the corresponding ADDR_STRING[i]
7262 value. COND_STRING, if not NULL, specified the condition to be
7263 used for all breakpoints. Essentially the only case where
7264 SALS.nelts is not 1 is when we set a breakpoint on an overloaded
7265 function. In that case, it's still not possible to specify
7266 separate conditions for different overloaded functions, so
7267 we take just a single condition string.
7268
7269 NOTE: If the function succeeds, the caller is expected to cleanup
7270 the arrays ADDR_STRING, COND_STRING, and SALS (but not the
7271 array contents). If the function fails (error() is called), the
7272 caller is expected to cleanups both the ADDR_STRING, COND_STRING,
7273 COND and SALS arrays and each of those arrays contents. */
7274
7275 static void
7276 create_breakpoints_sal (struct gdbarch *gdbarch,
7277 struct symtabs_and_lines sals, char **addr_string,
7278 char *cond_string,
7279 enum bptype type, enum bpdisp disposition,
7280 int thread, int task, int ignore_count,
7281 struct breakpoint_ops *ops, int from_tty,
7282 int enabled, int internal)
7283 {
7284 int i;
7285
7286 for (i = 0; i < sals.nelts; ++i)
7287 {
7288 struct symtabs_and_lines expanded =
7289 expand_line_sal_maybe (sals.sals[i]);
7290
7291 create_breakpoint_sal (gdbarch, expanded, addr_string[i],
7292 cond_string, type, disposition,
7293 thread, task, ignore_count, ops,
7294 from_tty, enabled, internal);
7295 }
7296 }
7297
7298 /* Parse ARG which is assumed to be a SAL specification possibly
7299 followed by conditionals. On return, SALS contains an array of SAL
7300 addresses found. ADDR_STRING contains a vector of (canonical)
7301 address strings. ARG points to the end of the SAL. */
7302
7303 static void
7304 parse_breakpoint_sals (char **address,
7305 struct symtabs_and_lines *sals,
7306 char ***addr_string,
7307 int *not_found_ptr)
7308 {
7309 char *addr_start = *address;
7310
7311 *addr_string = NULL;
7312 /* If no arg given, or if first arg is 'if ', use the default
7313 breakpoint. */
7314 if ((*address) == NULL
7315 || (strncmp ((*address), "if", 2) == 0 && isspace ((*address)[2])))
7316 {
7317 if (default_breakpoint_valid)
7318 {
7319 struct symtab_and_line sal;
7320
7321 init_sal (&sal); /* initialize to zeroes */
7322 sals->sals = (struct symtab_and_line *)
7323 xmalloc (sizeof (struct symtab_and_line));
7324 sal.pc = default_breakpoint_address;
7325 sal.line = default_breakpoint_line;
7326 sal.symtab = default_breakpoint_symtab;
7327 sal.pspace = default_breakpoint_pspace;
7328 sal.section = find_pc_overlay (sal.pc);
7329
7330 /* "break" without arguments is equivalent to "break *PC" where PC is
7331 the default_breakpoint_address. So make sure to set
7332 sal.explicit_pc to prevent GDB from trying to expand the list of
7333 sals to include all other instances with the same symtab and line.
7334 */
7335 sal.explicit_pc = 1;
7336
7337 sals->sals[0] = sal;
7338 sals->nelts = 1;
7339 }
7340 else
7341 error (_("No default breakpoint address now."));
7342 }
7343 else
7344 {
7345 /* Force almost all breakpoints to be in terms of the
7346 current_source_symtab (which is decode_line_1's default). This
7347 should produce the results we want almost all of the time while
7348 leaving default_breakpoint_* alone.
7349 ObjC: However, don't match an Objective-C method name which
7350 may have a '+' or '-' succeeded by a '[' */
7351
7352 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
7353
7354 if (default_breakpoint_valid
7355 && (!cursal.symtab
7356 || ((strchr ("+-", (*address)[0]) != NULL)
7357 && ((*address)[1] != '['))))
7358 *sals = decode_line_1 (address, 1, default_breakpoint_symtab,
7359 default_breakpoint_line, addr_string,
7360 not_found_ptr);
7361 else
7362 *sals = decode_line_1 (address, 1, (struct symtab *) NULL, 0,
7363 addr_string, not_found_ptr);
7364 }
7365 /* For any SAL that didn't have a canonical string, fill one in. */
7366 if (sals->nelts > 0 && *addr_string == NULL)
7367 *addr_string = xcalloc (sals->nelts, sizeof (char **));
7368 if (addr_start != (*address))
7369 {
7370 int i;
7371
7372 for (i = 0; i < sals->nelts; i++)
7373 {
7374 /* Add the string if not present. */
7375 if ((*addr_string)[i] == NULL)
7376 (*addr_string)[i] = savestring (addr_start,
7377 (*address) - addr_start);
7378 }
7379 }
7380 }
7381
7382
7383 /* Convert each SAL into a real PC. Verify that the PC can be
7384 inserted as a breakpoint. If it can't throw an error. */
7385
7386 static void
7387 breakpoint_sals_to_pc (struct symtabs_and_lines *sals)
7388 {
7389 int i;
7390
7391 for (i = 0; i < sals->nelts; i++)
7392 resolve_sal_pc (&sals->sals[i]);
7393 }
7394
7395 /* Fast tracepoints may have restrictions on valid locations. For
7396 instance, a fast tracepoint using a jump instead of a trap will
7397 likely have to overwrite more bytes than a trap would, and so can
7398 only be placed where the instruction is longer than the jump, or a
7399 multi-instruction sequence does not have a jump into the middle of
7400 it, etc. */
7401
7402 static void
7403 check_fast_tracepoint_sals (struct gdbarch *gdbarch,
7404 struct symtabs_and_lines *sals)
7405 {
7406 int i, rslt;
7407 struct symtab_and_line *sal;
7408 char *msg;
7409 struct cleanup *old_chain;
7410
7411 for (i = 0; i < sals->nelts; i++)
7412 {
7413 sal = &sals->sals[i];
7414
7415 rslt = gdbarch_fast_tracepoint_valid_at (gdbarch, sal->pc,
7416 NULL, &msg);
7417 old_chain = make_cleanup (xfree, msg);
7418
7419 if (!rslt)
7420 error (_("May not have a fast tracepoint at 0x%s%s"),
7421 paddress (gdbarch, sal->pc), (msg ? msg : ""));
7422
7423 do_cleanups (old_chain);
7424 }
7425 }
7426
7427 static void
7428 do_captured_parse_breakpoint (struct ui_out *ui, void *data)
7429 {
7430 struct captured_parse_breakpoint_args *args = data;
7431
7432 parse_breakpoint_sals (args->arg_p, args->sals_p, args->addr_string_p,
7433 args->not_found_ptr);
7434 }
7435
7436 /* Given TOK, a string specification of condition and thread, as
7437 accepted by the 'break' command, extract the condition
7438 string and thread number and set *COND_STRING and *THREAD.
7439 PC identifies the context at which the condition should be parsed.
7440 If no condition is found, *COND_STRING is set to NULL.
7441 If no thread is found, *THREAD is set to -1. */
7442 static void
7443 find_condition_and_thread (char *tok, CORE_ADDR pc,
7444 char **cond_string, int *thread, int *task)
7445 {
7446 *cond_string = NULL;
7447 *thread = -1;
7448 while (tok && *tok)
7449 {
7450 char *end_tok;
7451 int toklen;
7452 char *cond_start = NULL;
7453 char *cond_end = NULL;
7454
7455 while (*tok == ' ' || *tok == '\t')
7456 tok++;
7457
7458 end_tok = tok;
7459
7460 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
7461 end_tok++;
7462
7463 toklen = end_tok - tok;
7464
7465 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
7466 {
7467 struct expression *expr;
7468
7469 tok = cond_start = end_tok + 1;
7470 expr = parse_exp_1 (&tok, block_for_pc (pc), 0);
7471 xfree (expr);
7472 cond_end = tok;
7473 *cond_string = savestring (cond_start,
7474 cond_end - cond_start);
7475 }
7476 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
7477 {
7478 char *tmptok;
7479
7480 tok = end_tok + 1;
7481 tmptok = tok;
7482 *thread = strtol (tok, &tok, 0);
7483 if (tok == tmptok)
7484 error (_("Junk after thread keyword."));
7485 if (!valid_thread_id (*thread))
7486 error (_("Unknown thread %d."), *thread);
7487 }
7488 else if (toklen >= 1 && strncmp (tok, "task", toklen) == 0)
7489 {
7490 char *tmptok;
7491
7492 tok = end_tok + 1;
7493 tmptok = tok;
7494 *task = strtol (tok, &tok, 0);
7495 if (tok == tmptok)
7496 error (_("Junk after task keyword."));
7497 if (!valid_task_id (*task))
7498 error (_("Unknown task %d."), *task);
7499 }
7500 else
7501 error (_("Junk at end of arguments."));
7502 }
7503 }
7504
7505 /* Decode a static tracepoint marker spec. */
7506
7507 static struct symtabs_and_lines
7508 decode_static_tracepoint_spec (char **arg_p)
7509 {
7510 VEC(static_tracepoint_marker_p) *markers = NULL;
7511 struct symtabs_and_lines sals;
7512 struct symtab_and_line sal;
7513 struct symbol *sym;
7514 struct cleanup *old_chain;
7515 char *p = &(*arg_p)[3];
7516 char *endp;
7517 char *marker_str;
7518 int i;
7519
7520 while (*p == ' ' || *p == '\t')
7521 p++;
7522
7523 endp = p;
7524 while (*endp != ' ' && *endp != '\t' && *endp != '\0')
7525 endp++;
7526
7527 marker_str = savestring (p, endp - p);
7528 old_chain = make_cleanup (xfree, marker_str);
7529
7530 markers = target_static_tracepoint_markers_by_strid (marker_str);
7531 if (VEC_empty(static_tracepoint_marker_p, markers))
7532 error (_("No known static tracepoint marker named %s"), marker_str);
7533
7534 sals.nelts = VEC_length(static_tracepoint_marker_p, markers);
7535 sals.sals = xmalloc (sizeof *sals.sals * sals.nelts);
7536
7537 for (i = 0; i < sals.nelts; i++)
7538 {
7539 struct static_tracepoint_marker *marker;
7540
7541 marker = VEC_index (static_tracepoint_marker_p, markers, i);
7542
7543 init_sal (&sals.sals[i]);
7544
7545 sals.sals[i] = find_pc_line (marker->address, 0);
7546 sals.sals[i].pc = marker->address;
7547
7548 release_static_tracepoint_marker (marker);
7549 }
7550
7551 do_cleanups (old_chain);
7552
7553 *arg_p = endp;
7554 return sals;
7555 }
7556
7557 /* Set a breakpoint. This function is shared between CLI and MI
7558 functions for setting a breakpoint. This function has two major
7559 modes of operations, selected by the PARSE_CONDITION_AND_THREAD
7560 parameter. If non-zero, the function will parse arg, extracting
7561 breakpoint location, address and thread. Otherwise, ARG is just the
7562 location of breakpoint, with condition and thread specified by the
7563 COND_STRING and THREAD parameters. If INTERNAL is non-zero, the
7564 breakpoint number will be allocated from the internal breakpoint
7565 count. Returns true if any breakpoint was created; false
7566 otherwise. */
7567
7568 int
7569 create_breakpoint (struct gdbarch *gdbarch,
7570 char *arg, char *cond_string, int thread,
7571 int parse_condition_and_thread,
7572 int tempflag, enum bptype type_wanted,
7573 int ignore_count,
7574 enum auto_boolean pending_break_support,
7575 struct breakpoint_ops *ops,
7576 int from_tty, int enabled, int internal)
7577 {
7578 struct gdb_exception e;
7579 struct symtabs_and_lines sals;
7580 struct symtab_and_line pending_sal;
7581 char *copy_arg;
7582 char *addr_start = arg;
7583 char **addr_string;
7584 struct cleanup *old_chain;
7585 struct cleanup *bkpt_chain = NULL;
7586 struct captured_parse_breakpoint_args parse_args;
7587 int i;
7588 int pending = 0;
7589 int not_found = 0;
7590 int task = 0;
7591 int prev_bkpt_count = breakpoint_count;
7592
7593 sals.sals = NULL;
7594 sals.nelts = 0;
7595 addr_string = NULL;
7596
7597 parse_args.arg_p = &arg;
7598 parse_args.sals_p = &sals;
7599 parse_args.addr_string_p = &addr_string;
7600 parse_args.not_found_ptr = &not_found;
7601
7602 if (type_wanted == bp_static_tracepoint && is_marker_spec (arg))
7603 {
7604 int i;
7605
7606 sals = decode_static_tracepoint_spec (&arg);
7607
7608 copy_arg = savestring (addr_start, arg - addr_start);
7609 addr_string = xcalloc (sals.nelts, sizeof (char **));
7610 for (i = 0; i < sals.nelts; i++)
7611 addr_string[i] = xstrdup (copy_arg);
7612 goto done;
7613 }
7614
7615 e = catch_exception (uiout, do_captured_parse_breakpoint,
7616 &parse_args, RETURN_MASK_ALL);
7617
7618 /* If caller is interested in rc value from parse, set value. */
7619 switch (e.reason)
7620 {
7621 case RETURN_QUIT:
7622 throw_exception (e);
7623 case RETURN_ERROR:
7624 switch (e.error)
7625 {
7626 case NOT_FOUND_ERROR:
7627
7628 /* If pending breakpoint support is turned off, throw
7629 error. */
7630
7631 if (pending_break_support == AUTO_BOOLEAN_FALSE)
7632 throw_exception (e);
7633
7634 exception_print (gdb_stderr, e);
7635
7636 /* If pending breakpoint support is auto query and the user
7637 selects no, then simply return the error code. */
7638 if (pending_break_support == AUTO_BOOLEAN_AUTO
7639 && !nquery (_("Make breakpoint pending on future shared library load? ")))
7640 return 0;
7641
7642 /* At this point, either the user was queried about setting
7643 a pending breakpoint and selected yes, or pending
7644 breakpoint behavior is on and thus a pending breakpoint
7645 is defaulted on behalf of the user. */
7646 copy_arg = xstrdup (addr_start);
7647 addr_string = &copy_arg;
7648 sals.nelts = 1;
7649 sals.sals = &pending_sal;
7650 pending_sal.pc = 0;
7651 pending = 1;
7652 break;
7653 default:
7654 throw_exception (e);
7655 }
7656 default:
7657 if (!sals.nelts)
7658 return 0;
7659 }
7660
7661 done:
7662
7663 /* Create a chain of things that always need to be cleaned up. */
7664 old_chain = make_cleanup (null_cleanup, 0);
7665
7666 if (!pending)
7667 {
7668 /* Make sure that all storage allocated to SALS gets freed. */
7669 make_cleanup (xfree, sals.sals);
7670
7671 /* Cleanup the addr_string array but not its contents. */
7672 make_cleanup (xfree, addr_string);
7673 }
7674
7675 /* ----------------------------- SNIP -----------------------------
7676 Anything added to the cleanup chain beyond this point is assumed
7677 to be part of a breakpoint. If the breakpoint create succeeds
7678 then the memory is not reclaimed. */
7679 bkpt_chain = make_cleanup (null_cleanup, 0);
7680
7681 /* Mark the contents of the addr_string for cleanup. These go on
7682 the bkpt_chain and only occur if the breakpoint create fails. */
7683 for (i = 0; i < sals.nelts; i++)
7684 {
7685 if (addr_string[i] != NULL)
7686 make_cleanup (xfree, addr_string[i]);
7687 }
7688
7689 /* Resolve all line numbers to PC's and verify that the addresses
7690 are ok for the target. */
7691 if (!pending)
7692 breakpoint_sals_to_pc (&sals);
7693
7694 /* Fast tracepoints may have additional restrictions on location. */
7695 if (type_wanted == bp_fast_tracepoint)
7696 check_fast_tracepoint_sals (gdbarch, &sals);
7697
7698 /* Verify that condition can be parsed, before setting any
7699 breakpoints. Allocate a separate condition expression for each
7700 breakpoint. */
7701 if (!pending)
7702 {
7703 if (parse_condition_and_thread)
7704 {
7705 /* Here we only parse 'arg' to separate condition
7706 from thread number, so parsing in context of first
7707 sal is OK. When setting the breakpoint we'll
7708 re-parse it in context of each sal. */
7709 cond_string = NULL;
7710 thread = -1;
7711 find_condition_and_thread (arg, sals.sals[0].pc, &cond_string,
7712 &thread, &task);
7713 if (cond_string)
7714 make_cleanup (xfree, cond_string);
7715 }
7716 else
7717 {
7718 /* Create a private copy of condition string. */
7719 if (cond_string)
7720 {
7721 cond_string = xstrdup (cond_string);
7722 make_cleanup (xfree, cond_string);
7723 }
7724 }
7725
7726 /* If the user is creating a static tracepoint by marker id
7727 (strace -m MARKER_ID), then store the sals index, so that
7728 breakpoint_re_set can try to match up which of the newly
7729 found markers corresponds to this one, and, don't try to
7730 expand multiple locations for each sal, given than SALS
7731 already should contain all sals for MARKER_ID. */
7732 if (type_wanted == bp_static_tracepoint
7733 && is_marker_spec (addr_string[0]))
7734 {
7735 int i;
7736
7737 for (i = 0; i < sals.nelts; ++i)
7738 {
7739 struct symtabs_and_lines expanded;
7740 struct breakpoint *tp;
7741 struct cleanup *old_chain;
7742
7743 expanded.nelts = 1;
7744 expanded.sals = xmalloc (sizeof (struct symtab_and_line));
7745 expanded.sals[0] = sals.sals[i];
7746 old_chain = make_cleanup (xfree, expanded.sals);
7747
7748 create_breakpoint_sal (gdbarch, expanded, addr_string[i],
7749 cond_string, type_wanted,
7750 tempflag ? disp_del : disp_donttouch,
7751 thread, task, ignore_count, ops,
7752 from_tty, enabled, internal);
7753
7754 do_cleanups (old_chain);
7755
7756 /* Get the tracepoint we just created. */
7757 if (internal)
7758 tp = get_breakpoint (internal_breakpoint_number);
7759 else
7760 tp = get_breakpoint (breakpoint_count);
7761 gdb_assert (tp != NULL);
7762
7763 /* Given that its possible to have multiple markers with
7764 the same string id, if the user is creating a static
7765 tracepoint by marker id ("strace -m MARKER_ID"), then
7766 store the sals index, so that breakpoint_re_set can
7767 try to match up which of the newly found markers
7768 corresponds to this one */
7769 tp->static_trace_marker_id_idx = i;
7770 }
7771 }
7772 else
7773 create_breakpoints_sal (gdbarch, sals, addr_string, cond_string,
7774 type_wanted, tempflag ? disp_del : disp_donttouch,
7775 thread, task, ignore_count, ops, from_tty,
7776 enabled, internal);
7777 }
7778 else
7779 {
7780 struct breakpoint *b;
7781
7782 make_cleanup (xfree, copy_arg);
7783
7784 b = set_raw_breakpoint_without_location (gdbarch, type_wanted);
7785 set_breakpoint_number (internal, b);
7786 b->thread = -1;
7787 b->addr_string = addr_string[0];
7788 b->cond_string = NULL;
7789 b->ignore_count = ignore_count;
7790 b->disposition = tempflag ? disp_del : disp_donttouch;
7791 b->condition_not_parsed = 1;
7792 b->ops = ops;
7793 b->enable_state = enabled ? bp_enabled : bp_disabled;
7794 b->pspace = current_program_space;
7795 b->py_bp_object = NULL;
7796
7797 if (enabled && b->pspace->executing_startup
7798 && (b->type == bp_breakpoint
7799 || b->type == bp_hardware_breakpoint))
7800 b->enable_state = bp_startup_disabled;
7801
7802 if (internal)
7803 /* Do not mention breakpoints with a negative number,
7804 but do notify observers. */
7805 observer_notify_breakpoint_created (b->number);
7806 else
7807 mention (b);
7808 }
7809
7810 if (sals.nelts > 1)
7811 {
7812 warning (_("Multiple breakpoints were set.\n"
7813 "Use the \"delete\" command to delete unwanted breakpoints."));
7814 prev_breakpoint_count = prev_bkpt_count;
7815 }
7816
7817 /* That's it. Discard the cleanups for data inserted into the
7818 breakpoint. */
7819 discard_cleanups (bkpt_chain);
7820 /* But cleanup everything else. */
7821 do_cleanups (old_chain);
7822
7823 /* error call may happen here - have BKPT_CHAIN already discarded. */
7824 update_global_location_list (1);
7825
7826 return 1;
7827 }
7828
7829 /* Set a breakpoint.
7830 ARG is a string describing breakpoint address,
7831 condition, and thread.
7832 FLAG specifies if a breakpoint is hardware on,
7833 and if breakpoint is temporary, using BP_HARDWARE_FLAG
7834 and BP_TEMPFLAG. */
7835
7836 static void
7837 break_command_1 (char *arg, int flag, int from_tty)
7838 {
7839 int tempflag = flag & BP_TEMPFLAG;
7840 enum bptype type_wanted = (flag & BP_HARDWAREFLAG
7841 ? bp_hardware_breakpoint
7842 : bp_breakpoint);
7843
7844 create_breakpoint (get_current_arch (),
7845 arg,
7846 NULL, 0, 1 /* parse arg */,
7847 tempflag, type_wanted,
7848 0 /* Ignore count */,
7849 pending_break_support,
7850 NULL /* breakpoint_ops */,
7851 from_tty,
7852 1 /* enabled */,
7853 0 /* internal */);
7854 }
7855
7856
7857 /* Helper function for break_command_1 and disassemble_command. */
7858
7859 void
7860 resolve_sal_pc (struct symtab_and_line *sal)
7861 {
7862 CORE_ADDR pc;
7863
7864 if (sal->pc == 0 && sal->symtab != NULL)
7865 {
7866 if (!find_line_pc (sal->symtab, sal->line, &pc))
7867 error (_("No line %d in file \"%s\"."),
7868 sal->line, sal->symtab->filename);
7869 sal->pc = pc;
7870
7871 /* If this SAL corresponds to a breakpoint inserted using
7872 a line number, then skip the function prologue if necessary. */
7873 if (sal->explicit_line)
7874 skip_prologue_sal (sal);
7875 }
7876
7877 if (sal->section == 0 && sal->symtab != NULL)
7878 {
7879 struct blockvector *bv;
7880 struct block *b;
7881 struct symbol *sym;
7882
7883 bv = blockvector_for_pc_sect (sal->pc, 0, &b, sal->symtab);
7884 if (bv != NULL)
7885 {
7886 sym = block_linkage_function (b);
7887 if (sym != NULL)
7888 {
7889 fixup_symbol_section (sym, sal->symtab->objfile);
7890 sal->section = SYMBOL_OBJ_SECTION (sym);
7891 }
7892 else
7893 {
7894 /* It really is worthwhile to have the section, so we'll just
7895 have to look harder. This case can be executed if we have
7896 line numbers but no functions (as can happen in assembly
7897 source). */
7898
7899 struct minimal_symbol *msym;
7900 struct cleanup *old_chain = save_current_space_and_thread ();
7901
7902 switch_to_program_space_and_thread (sal->pspace);
7903
7904 msym = lookup_minimal_symbol_by_pc (sal->pc);
7905 if (msym)
7906 sal->section = SYMBOL_OBJ_SECTION (msym);
7907
7908 do_cleanups (old_chain);
7909 }
7910 }
7911 }
7912 }
7913
7914 void
7915 break_command (char *arg, int from_tty)
7916 {
7917 break_command_1 (arg, 0, from_tty);
7918 }
7919
7920 void
7921 tbreak_command (char *arg, int from_tty)
7922 {
7923 break_command_1 (arg, BP_TEMPFLAG, from_tty);
7924 }
7925
7926 static void
7927 hbreak_command (char *arg, int from_tty)
7928 {
7929 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
7930 }
7931
7932 static void
7933 thbreak_command (char *arg, int from_tty)
7934 {
7935 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
7936 }
7937
7938 static void
7939 stop_command (char *arg, int from_tty)
7940 {
7941 printf_filtered (_("Specify the type of breakpoint to set.\n\
7942 Usage: stop in <function | address>\n\
7943 stop at <line>\n"));
7944 }
7945
7946 static void
7947 stopin_command (char *arg, int from_tty)
7948 {
7949 int badInput = 0;
7950
7951 if (arg == (char *) NULL)
7952 badInput = 1;
7953 else if (*arg != '*')
7954 {
7955 char *argptr = arg;
7956 int hasColon = 0;
7957
7958 /* look for a ':'. If this is a line number specification, then
7959 say it is bad, otherwise, it should be an address or
7960 function/method name */
7961 while (*argptr && !hasColon)
7962 {
7963 hasColon = (*argptr == ':');
7964 argptr++;
7965 }
7966
7967 if (hasColon)
7968 badInput = (*argptr != ':'); /* Not a class::method */
7969 else
7970 badInput = isdigit (*arg); /* a simple line number */
7971 }
7972
7973 if (badInput)
7974 printf_filtered (_("Usage: stop in <function | address>\n"));
7975 else
7976 break_command_1 (arg, 0, from_tty);
7977 }
7978
7979 static void
7980 stopat_command (char *arg, int from_tty)
7981 {
7982 int badInput = 0;
7983
7984 if (arg == (char *) NULL || *arg == '*') /* no line number */
7985 badInput = 1;
7986 else
7987 {
7988 char *argptr = arg;
7989 int hasColon = 0;
7990
7991 /* look for a ':'. If there is a '::' then get out, otherwise
7992 it is probably a line number. */
7993 while (*argptr && !hasColon)
7994 {
7995 hasColon = (*argptr == ':');
7996 argptr++;
7997 }
7998
7999 if (hasColon)
8000 badInput = (*argptr == ':'); /* we have class::method */
8001 else
8002 badInput = !isdigit (*arg); /* not a line number */
8003 }
8004
8005 if (badInput)
8006 printf_filtered (_("Usage: stop at <line>\n"));
8007 else
8008 break_command_1 (arg, 0, from_tty);
8009 }
8010
8011 /* Return non-zero if EXP is verified as constant. Returned zero means EXP is
8012 variable. Also the constant detection may fail for some constant
8013 expressions and in such case still falsely return zero. */
8014 static int
8015 watchpoint_exp_is_const (const struct expression *exp)
8016 {
8017 int i = exp->nelts;
8018
8019 while (i > 0)
8020 {
8021 int oplenp, argsp;
8022
8023 /* We are only interested in the descriptor of each element. */
8024 operator_length (exp, i, &oplenp, &argsp);
8025 i -= oplenp;
8026
8027 switch (exp->elts[i].opcode)
8028 {
8029 case BINOP_ADD:
8030 case BINOP_SUB:
8031 case BINOP_MUL:
8032 case BINOP_DIV:
8033 case BINOP_REM:
8034 case BINOP_MOD:
8035 case BINOP_LSH:
8036 case BINOP_RSH:
8037 case BINOP_LOGICAL_AND:
8038 case BINOP_LOGICAL_OR:
8039 case BINOP_BITWISE_AND:
8040 case BINOP_BITWISE_IOR:
8041 case BINOP_BITWISE_XOR:
8042 case BINOP_EQUAL:
8043 case BINOP_NOTEQUAL:
8044 case BINOP_LESS:
8045 case BINOP_GTR:
8046 case BINOP_LEQ:
8047 case BINOP_GEQ:
8048 case BINOP_REPEAT:
8049 case BINOP_COMMA:
8050 case BINOP_EXP:
8051 case BINOP_MIN:
8052 case BINOP_MAX:
8053 case BINOP_INTDIV:
8054 case BINOP_CONCAT:
8055 case BINOP_IN:
8056 case BINOP_RANGE:
8057 case TERNOP_COND:
8058 case TERNOP_SLICE:
8059 case TERNOP_SLICE_COUNT:
8060
8061 case OP_LONG:
8062 case OP_DOUBLE:
8063 case OP_DECFLOAT:
8064 case OP_LAST:
8065 case OP_COMPLEX:
8066 case OP_STRING:
8067 case OP_BITSTRING:
8068 case OP_ARRAY:
8069 case OP_TYPE:
8070 case OP_NAME:
8071 case OP_OBJC_NSSTRING:
8072
8073 case UNOP_NEG:
8074 case UNOP_LOGICAL_NOT:
8075 case UNOP_COMPLEMENT:
8076 case UNOP_ADDR:
8077 case UNOP_HIGH:
8078 /* Unary, binary and ternary operators: We have to check their
8079 operands. If they are constant, then so is the result of
8080 that operation. For instance, if A and B are determined to be
8081 constants, then so is "A + B".
8082
8083 UNOP_IND is one exception to the rule above, because the value
8084 of *ADDR is not necessarily a constant, even when ADDR is. */
8085 break;
8086
8087 case OP_VAR_VALUE:
8088 /* Check whether the associated symbol is a constant.
8089 We use SYMBOL_CLASS rather than TYPE_CONST because it's
8090 possible that a buggy compiler could mark a variable as constant
8091 even when it is not, and TYPE_CONST would return true in this
8092 case, while SYMBOL_CLASS wouldn't.
8093 We also have to check for function symbols because they are
8094 always constant. */
8095 {
8096 struct symbol *s = exp->elts[i + 2].symbol;
8097
8098 if (SYMBOL_CLASS (s) != LOC_BLOCK
8099 && SYMBOL_CLASS (s) != LOC_CONST
8100 && SYMBOL_CLASS (s) != LOC_CONST_BYTES)
8101 return 0;
8102 break;
8103 }
8104
8105 /* The default action is to return 0 because we are using
8106 the optimistic approach here: If we don't know something,
8107 then it is not a constant. */
8108 default:
8109 return 0;
8110 }
8111 }
8112
8113 return 1;
8114 }
8115
8116 /* accessflag: hw_write: watch write,
8117 hw_read: watch read,
8118 hw_access: watch access (read or write) */
8119 static void
8120 watch_command_1 (char *arg, int accessflag, int from_tty,
8121 int just_location, int internal)
8122 {
8123 struct breakpoint *b, *scope_breakpoint = NULL;
8124 struct expression *exp;
8125 struct block *exp_valid_block = NULL, *cond_exp_valid_block = NULL;
8126 struct value *val, *mark, *result;
8127 struct frame_info *frame;
8128 char *exp_start = NULL;
8129 char *exp_end = NULL;
8130 char *tok, *id_tok_start, *end_tok;
8131 int toklen;
8132 char *cond_start = NULL;
8133 char *cond_end = NULL;
8134 int i, other_type_used, target_resources_ok = 0;
8135 enum bptype bp_type;
8136 int mem_cnt = 0;
8137 int thread = -1;
8138 int pc = 0;
8139
8140 /* Make sure that we actually have parameters to parse. */
8141 if (arg != NULL && arg[0] != '\0')
8142 {
8143 toklen = strlen (arg); /* Size of argument list. */
8144
8145 /* Points tok to the end of the argument list. */
8146 tok = arg + toklen - 1;
8147
8148 /* Go backwards in the parameters list. Skip the last parameter.
8149 If we're expecting a 'thread <thread_num>' parameter, this should
8150 be the thread identifier. */
8151 while (tok > arg && (*tok == ' ' || *tok == '\t'))
8152 tok--;
8153 while (tok > arg && (*tok != ' ' && *tok != '\t'))
8154 tok--;
8155
8156 /* Points end_tok to the beginning of the last token. */
8157 id_tok_start = tok + 1;
8158
8159 /* Go backwards in the parameters list. Skip one more parameter.
8160 If we're expecting a 'thread <thread_num>' parameter, we should
8161 reach a "thread" token. */
8162 while (tok > arg && (*tok == ' ' || *tok == '\t'))
8163 tok--;
8164
8165 end_tok = tok;
8166
8167 while (tok > arg && (*tok != ' ' && *tok != '\t'))
8168 tok--;
8169
8170 /* Move the pointer forward to skip the whitespace and
8171 calculate the length of the token. */
8172 tok++;
8173 toklen = end_tok - tok;
8174
8175 if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
8176 {
8177 /* At this point we've found a "thread" token, which means
8178 the user is trying to set a watchpoint that triggers
8179 only in a specific thread. */
8180 char *endp;
8181
8182 /* Extract the thread ID from the next token. */
8183 thread = strtol (id_tok_start, &endp, 0);
8184
8185 /* Check if the user provided a valid numeric value for the
8186 thread ID. */
8187 if (*endp != ' ' && *endp != '\t' && *endp != '\0')
8188 error (_("Invalid thread ID specification %s."), id_tok_start);
8189
8190 /* Check if the thread actually exists. */
8191 if (!valid_thread_id (thread))
8192 error (_("Unknown thread %d."), thread);
8193
8194 /* Truncate the string and get rid of the thread <thread_num>
8195 parameter before the parameter list is parsed by the
8196 evaluate_expression() function. */
8197 *tok = '\0';
8198 }
8199 }
8200
8201 /* Parse the rest of the arguments. */
8202 innermost_block = NULL;
8203 exp_start = arg;
8204 exp = parse_exp_1 (&arg, 0, 0);
8205 exp_end = arg;
8206 /* Remove trailing whitespace from the expression before saving it.
8207 This makes the eventual display of the expression string a bit
8208 prettier. */
8209 while (exp_end > exp_start && (exp_end[-1] == ' ' || exp_end[-1] == '\t'))
8210 --exp_end;
8211
8212 /* Checking if the expression is not constant. */
8213 if (watchpoint_exp_is_const (exp))
8214 {
8215 int len;
8216
8217 len = exp_end - exp_start;
8218 while (len > 0 && isspace (exp_start[len - 1]))
8219 len--;
8220 error (_("Cannot watch constant value `%.*s'."), len, exp_start);
8221 }
8222
8223 exp_valid_block = innermost_block;
8224 mark = value_mark ();
8225 fetch_subexp_value (exp, &pc, &val, &result, NULL);
8226
8227 if (just_location)
8228 {
8229 exp_valid_block = NULL;
8230 val = value_addr (result);
8231 release_value (val);
8232 value_free_to_mark (mark);
8233 }
8234 else if (val != NULL)
8235 release_value (val);
8236
8237 tok = arg;
8238 while (*tok == ' ' || *tok == '\t')
8239 tok++;
8240 end_tok = tok;
8241
8242 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
8243 end_tok++;
8244
8245 toklen = end_tok - tok;
8246 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
8247 {
8248 struct expression *cond;
8249
8250 innermost_block = NULL;
8251 tok = cond_start = end_tok + 1;
8252 cond = parse_exp_1 (&tok, 0, 0);
8253
8254 /* The watchpoint expression may not be local, but the condition
8255 may still be. E.g.: `watch global if local > 0'. */
8256 cond_exp_valid_block = innermost_block;
8257
8258 xfree (cond);
8259 cond_end = tok;
8260 }
8261 if (*tok)
8262 error (_("Junk at end of command."));
8263
8264 if (accessflag == hw_read)
8265 bp_type = bp_read_watchpoint;
8266 else if (accessflag == hw_access)
8267 bp_type = bp_access_watchpoint;
8268 else
8269 bp_type = bp_hardware_watchpoint;
8270
8271 mem_cnt = can_use_hardware_watchpoint (val);
8272 if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
8273 error (_("Expression cannot be implemented with read/access watchpoint."));
8274 if (mem_cnt != 0)
8275 {
8276 i = hw_watchpoint_used_count (bp_type, &other_type_used);
8277 target_resources_ok =
8278 target_can_use_hardware_watchpoint (bp_type, i + mem_cnt,
8279 other_type_used);
8280 if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
8281 error (_("Target does not support this type of hardware watchpoint."));
8282
8283 if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
8284 error (_("Target can only support one kind of HW watchpoint at a time."));
8285 }
8286
8287 /* Change the type of breakpoint to an ordinary watchpoint if a hardware
8288 watchpoint could not be set. */
8289 if (!mem_cnt || target_resources_ok <= 0)
8290 bp_type = bp_watchpoint;
8291
8292 frame = block_innermost_frame (exp_valid_block);
8293
8294 /* If the expression is "local", then set up a "watchpoint scope"
8295 breakpoint at the point where we've left the scope of the watchpoint
8296 expression. Create the scope breakpoint before the watchpoint, so
8297 that we will encounter it first in bpstat_stop_status. */
8298 if (exp_valid_block && frame)
8299 {
8300 if (frame_id_p (frame_unwind_caller_id (frame)))
8301 {
8302 scope_breakpoint
8303 = create_internal_breakpoint (frame_unwind_caller_arch (frame),
8304 frame_unwind_caller_pc (frame),
8305 bp_watchpoint_scope);
8306
8307 scope_breakpoint->enable_state = bp_enabled;
8308
8309 /* Automatically delete the breakpoint when it hits. */
8310 scope_breakpoint->disposition = disp_del;
8311
8312 /* Only break in the proper frame (help with recursion). */
8313 scope_breakpoint->frame_id = frame_unwind_caller_id (frame);
8314
8315 /* Set the address at which we will stop. */
8316 scope_breakpoint->loc->gdbarch
8317 = frame_unwind_caller_arch (frame);
8318 scope_breakpoint->loc->requested_address
8319 = frame_unwind_caller_pc (frame);
8320 scope_breakpoint->loc->address
8321 = adjust_breakpoint_address (scope_breakpoint->loc->gdbarch,
8322 scope_breakpoint->loc->requested_address,
8323 scope_breakpoint->type);
8324 }
8325 }
8326
8327 /* Now set up the breakpoint. */
8328 b = set_raw_breakpoint_without_location (NULL, bp_type);
8329 set_breakpoint_number (internal, b);
8330 b->thread = thread;
8331 b->disposition = disp_donttouch;
8332 b->exp = exp;
8333 b->exp_valid_block = exp_valid_block;
8334 b->cond_exp_valid_block = cond_exp_valid_block;
8335 if (just_location)
8336 {
8337 struct type *t = value_type (val);
8338 CORE_ADDR addr = value_as_address (val);
8339 char *name;
8340
8341 t = check_typedef (TYPE_TARGET_TYPE (check_typedef (t)));
8342 name = type_to_string (t);
8343
8344 b->exp_string_reparse = xstrprintf ("* (%s *) %s", name,
8345 core_addr_to_string (addr));
8346 xfree (name);
8347
8348 b->exp_string = xstrprintf ("-location: %.*s",
8349 (int) (exp_end - exp_start), exp_start);
8350
8351 /* The above expression is in C. */
8352 b->language = language_c;
8353 }
8354 else
8355 b->exp_string = savestring (exp_start, exp_end - exp_start);
8356 b->val = val;
8357 b->val_valid = 1;
8358 if (cond_start)
8359 b->cond_string = savestring (cond_start, cond_end - cond_start);
8360 else
8361 b->cond_string = 0;
8362
8363 if (frame)
8364 {
8365 b->watchpoint_frame = get_frame_id (frame);
8366 b->watchpoint_thread = inferior_ptid;
8367 }
8368 else
8369 {
8370 b->watchpoint_frame = null_frame_id;
8371 b->watchpoint_thread = null_ptid;
8372 }
8373
8374 if (scope_breakpoint != NULL)
8375 {
8376 /* The scope breakpoint is related to the watchpoint. We will
8377 need to act on them together. */
8378 b->related_breakpoint = scope_breakpoint;
8379 scope_breakpoint->related_breakpoint = b;
8380 }
8381
8382 if (!just_location)
8383 value_free_to_mark (mark);
8384
8385 /* Finally update the new watchpoint. This creates the locations
8386 that should be inserted. */
8387 update_watchpoint (b, 1);
8388 if (internal)
8389 /* Do not mention breakpoints with a negative number, but do
8390 notify observers. */
8391 observer_notify_breakpoint_created (b->number);
8392 else
8393 mention (b);
8394 update_global_location_list (1);
8395 }
8396
8397 /* Return count of locations need to be watched and can be handled
8398 in hardware. If the watchpoint can not be handled
8399 in hardware return zero. */
8400
8401 static int
8402 can_use_hardware_watchpoint (struct value *v)
8403 {
8404 int found_memory_cnt = 0;
8405 struct value *head = v;
8406
8407 /* Did the user specifically forbid us to use hardware watchpoints? */
8408 if (!can_use_hw_watchpoints)
8409 return 0;
8410
8411 /* Make sure that the value of the expression depends only upon
8412 memory contents, and values computed from them within GDB. If we
8413 find any register references or function calls, we can't use a
8414 hardware watchpoint.
8415
8416 The idea here is that evaluating an expression generates a series
8417 of values, one holding the value of every subexpression. (The
8418 expression a*b+c has five subexpressions: a, b, a*b, c, and
8419 a*b+c.) GDB's values hold almost enough information to establish
8420 the criteria given above --- they identify memory lvalues,
8421 register lvalues, computed values, etcetera. So we can evaluate
8422 the expression, and then scan the chain of values that leaves
8423 behind to decide whether we can detect any possible change to the
8424 expression's final value using only hardware watchpoints.
8425
8426 However, I don't think that the values returned by inferior
8427 function calls are special in any way. So this function may not
8428 notice that an expression involving an inferior function call
8429 can't be watched with hardware watchpoints. FIXME. */
8430 for (; v; v = value_next (v))
8431 {
8432 if (VALUE_LVAL (v) == lval_memory)
8433 {
8434 if (v != head && value_lazy (v))
8435 /* A lazy memory lvalue in the chain is one that GDB never
8436 needed to fetch; we either just used its address (e.g.,
8437 `a' in `a.b') or we never needed it at all (e.g., `a'
8438 in `a,b'). This doesn't apply to HEAD; if that is
8439 lazy then it was not readable, but watch it anyway. */
8440 ;
8441 else
8442 {
8443 /* Ahh, memory we actually used! Check if we can cover
8444 it with hardware watchpoints. */
8445 struct type *vtype = check_typedef (value_type (v));
8446
8447 /* We only watch structs and arrays if user asked for it
8448 explicitly, never if they just happen to appear in a
8449 middle of some value chain. */
8450 if (v == head
8451 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
8452 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
8453 {
8454 CORE_ADDR vaddr = value_address (v);
8455 int len = TYPE_LENGTH (value_type (v));
8456
8457 if (!target_region_ok_for_hw_watchpoint (vaddr, len))
8458 return 0;
8459 else
8460 found_memory_cnt++;
8461 }
8462 }
8463 }
8464 else if (VALUE_LVAL (v) != not_lval
8465 && deprecated_value_modifiable (v) == 0)
8466 return 0; /* These are values from the history (e.g., $1). */
8467 else if (VALUE_LVAL (v) == lval_register)
8468 return 0; /* Cannot watch a register with a HW watchpoint. */
8469 }
8470
8471 /* The expression itself looks suitable for using a hardware
8472 watchpoint, but give the target machine a chance to reject it. */
8473 return found_memory_cnt;
8474 }
8475
8476 void
8477 watch_command_wrapper (char *arg, int from_tty, int internal)
8478 {
8479 watch_command_1 (arg, hw_write, from_tty, 0, internal);
8480 }
8481
8482 /* A helper function that looks for an argument at the start of a
8483 string. The argument must also either be at the end of the string,
8484 or be followed by whitespace. Returns 1 if it finds the argument,
8485 0 otherwise. If the argument is found, it updates *STR. */
8486
8487 static int
8488 check_for_argument (char **str, char *arg, int arg_len)
8489 {
8490 if (strncmp (*str, arg, arg_len) == 0
8491 && ((*str)[arg_len] == '\0' || isspace ((*str)[arg_len])))
8492 {
8493 *str += arg_len;
8494 return 1;
8495 }
8496 return 0;
8497 }
8498
8499 /* A helper function that looks for the "-location" argument and then
8500 calls watch_command_1. */
8501
8502 static void
8503 watch_maybe_just_location (char *arg, int accessflag, int from_tty)
8504 {
8505 int just_location = 0;
8506
8507 if (arg
8508 && (check_for_argument (&arg, "-location", sizeof ("-location") - 1)
8509 || check_for_argument (&arg, "-l", sizeof ("-l") - 1)))
8510 {
8511 ep_skip_leading_whitespace (&arg);
8512 just_location = 1;
8513 }
8514
8515 watch_command_1 (arg, accessflag, from_tty, just_location, 0);
8516 }
8517
8518 static void
8519 watch_command (char *arg, int from_tty)
8520 {
8521 watch_maybe_just_location (arg, hw_write, from_tty);
8522 }
8523
8524 void
8525 rwatch_command_wrapper (char *arg, int from_tty, int internal)
8526 {
8527 watch_command_1 (arg, hw_read, from_tty, 0, internal);
8528 }
8529
8530 static void
8531 rwatch_command (char *arg, int from_tty)
8532 {
8533 watch_maybe_just_location (arg, hw_read, from_tty);
8534 }
8535
8536 void
8537 awatch_command_wrapper (char *arg, int from_tty, int internal)
8538 {
8539 watch_command_1 (arg, hw_access, from_tty, 0, internal);
8540 }
8541
8542 static void
8543 awatch_command (char *arg, int from_tty)
8544 {
8545 watch_maybe_just_location (arg, hw_access, from_tty);
8546 }
8547 \f
8548
8549 /* Helper routines for the until_command routine in infcmd.c. Here
8550 because it uses the mechanisms of breakpoints. */
8551
8552 struct until_break_command_continuation_args
8553 {
8554 struct breakpoint *breakpoint;
8555 struct breakpoint *breakpoint2;
8556 int thread_num;
8557 };
8558
8559 /* This function is called by fetch_inferior_event via the
8560 cmd_continuation pointer, to complete the until command. It takes
8561 care of cleaning up the temporary breakpoints set up by the until
8562 command. */
8563 static void
8564 until_break_command_continuation (void *arg)
8565 {
8566 struct until_break_command_continuation_args *a = arg;
8567
8568 delete_breakpoint (a->breakpoint);
8569 if (a->breakpoint2)
8570 delete_breakpoint (a->breakpoint2);
8571 delete_longjmp_breakpoint (a->thread_num);
8572 }
8573
8574 void
8575 until_break_command (char *arg, int from_tty, int anywhere)
8576 {
8577 struct symtabs_and_lines sals;
8578 struct symtab_and_line sal;
8579 struct frame_info *frame = get_selected_frame (NULL);
8580 struct breakpoint *breakpoint;
8581 struct breakpoint *breakpoint2 = NULL;
8582 struct cleanup *old_chain;
8583 int thread;
8584 struct thread_info *tp;
8585
8586 clear_proceed_status ();
8587
8588 /* Set a breakpoint where the user wants it and at return from
8589 this function */
8590
8591 if (default_breakpoint_valid)
8592 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
8593 default_breakpoint_line, (char ***) NULL, NULL);
8594 else
8595 sals = decode_line_1 (&arg, 1, (struct symtab *) NULL,
8596 0, (char ***) NULL, NULL);
8597
8598 if (sals.nelts != 1)
8599 error (_("Couldn't get information on specified line."));
8600
8601 sal = sals.sals[0];
8602 xfree (sals.sals); /* malloc'd, so freed */
8603
8604 if (*arg)
8605 error (_("Junk at end of arguments."));
8606
8607 resolve_sal_pc (&sal);
8608
8609 if (anywhere)
8610 /* If the user told us to continue until a specified location,
8611 we don't specify a frame at which we need to stop. */
8612 breakpoint = set_momentary_breakpoint (get_frame_arch (frame), sal,
8613 null_frame_id, bp_until);
8614 else
8615 /* Otherwise, specify the selected frame, because we want to stop only
8616 at the very same frame. */
8617 breakpoint = set_momentary_breakpoint (get_frame_arch (frame), sal,
8618 get_stack_frame_id (frame),
8619 bp_until);
8620
8621 old_chain = make_cleanup_delete_breakpoint (breakpoint);
8622
8623 tp = inferior_thread ();
8624 thread = tp->num;
8625
8626 /* Keep within the current frame, or in frames called by the current
8627 one. */
8628
8629 if (frame_id_p (frame_unwind_caller_id (frame)))
8630 {
8631 sal = find_pc_line (frame_unwind_caller_pc (frame), 0);
8632 sal.pc = frame_unwind_caller_pc (frame);
8633 breakpoint2 = set_momentary_breakpoint (frame_unwind_caller_arch (frame),
8634 sal,
8635 frame_unwind_caller_id (frame),
8636 bp_until);
8637 make_cleanup_delete_breakpoint (breakpoint2);
8638
8639 set_longjmp_breakpoint (tp, frame_unwind_caller_id (frame));
8640 make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
8641 }
8642
8643 proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
8644
8645 /* If we are running asynchronously, and proceed call above has actually
8646 managed to start the target, arrange for breakpoints to be
8647 deleted when the target stops. Otherwise, we're already stopped and
8648 delete breakpoints via cleanup chain. */
8649
8650 if (target_can_async_p () && is_running (inferior_ptid))
8651 {
8652 struct until_break_command_continuation_args *args;
8653 args = xmalloc (sizeof (*args));
8654
8655 args->breakpoint = breakpoint;
8656 args->breakpoint2 = breakpoint2;
8657 args->thread_num = thread;
8658
8659 discard_cleanups (old_chain);
8660 add_continuation (inferior_thread (),
8661 until_break_command_continuation, args,
8662 xfree);
8663 }
8664 else
8665 do_cleanups (old_chain);
8666 }
8667
8668 static void
8669 ep_skip_leading_whitespace (char **s)
8670 {
8671 if ((s == NULL) || (*s == NULL))
8672 return;
8673 while (isspace (**s))
8674 *s += 1;
8675 }
8676
8677 /* This function attempts to parse an optional "if <cond>" clause
8678 from the arg string. If one is not found, it returns NULL.
8679
8680 Else, it returns a pointer to the condition string. (It does not
8681 attempt to evaluate the string against a particular block.) And,
8682 it updates arg to point to the first character following the parsed
8683 if clause in the arg string. */
8684
8685 static char *
8686 ep_parse_optional_if_clause (char **arg)
8687 {
8688 char *cond_string;
8689
8690 if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
8691 return NULL;
8692
8693 /* Skip the "if" keyword. */
8694 (*arg) += 2;
8695
8696 /* Skip any extra leading whitespace, and record the start of the
8697 condition string. */
8698 ep_skip_leading_whitespace (arg);
8699 cond_string = *arg;
8700
8701 /* Assume that the condition occupies the remainder of the arg string. */
8702 (*arg) += strlen (cond_string);
8703
8704 return cond_string;
8705 }
8706
8707 /* Commands to deal with catching events, such as signals, exceptions,
8708 process start/exit, etc. */
8709
8710 typedef enum
8711 {
8712 catch_fork_temporary, catch_vfork_temporary,
8713 catch_fork_permanent, catch_vfork_permanent
8714 }
8715 catch_fork_kind;
8716
8717 static void
8718 catch_fork_command_1 (char *arg, int from_tty,
8719 struct cmd_list_element *command)
8720 {
8721 struct gdbarch *gdbarch = get_current_arch ();
8722 char *cond_string = NULL;
8723 catch_fork_kind fork_kind;
8724 int tempflag;
8725
8726 fork_kind = (catch_fork_kind) (uintptr_t) get_cmd_context (command);
8727 tempflag = (fork_kind == catch_fork_temporary
8728 || fork_kind == catch_vfork_temporary);
8729
8730 if (!arg)
8731 arg = "";
8732 ep_skip_leading_whitespace (&arg);
8733
8734 /* The allowed syntax is:
8735 catch [v]fork
8736 catch [v]fork if <cond>
8737
8738 First, check if there's an if clause. */
8739 cond_string = ep_parse_optional_if_clause (&arg);
8740
8741 if ((*arg != '\0') && !isspace (*arg))
8742 error (_("Junk at end of arguments."));
8743
8744 /* If this target supports it, create a fork or vfork catchpoint
8745 and enable reporting of such events. */
8746 switch (fork_kind)
8747 {
8748 case catch_fork_temporary:
8749 case catch_fork_permanent:
8750 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
8751 &catch_fork_breakpoint_ops);
8752 break;
8753 case catch_vfork_temporary:
8754 case catch_vfork_permanent:
8755 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
8756 &catch_vfork_breakpoint_ops);
8757 break;
8758 default:
8759 error (_("unsupported or unknown fork kind; cannot catch it"));
8760 break;
8761 }
8762 }
8763
8764 static void
8765 catch_exec_command_1 (char *arg, int from_tty,
8766 struct cmd_list_element *command)
8767 {
8768 struct gdbarch *gdbarch = get_current_arch ();
8769 int tempflag;
8770 char *cond_string = NULL;
8771
8772 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
8773
8774 if (!arg)
8775 arg = "";
8776 ep_skip_leading_whitespace (&arg);
8777
8778 /* The allowed syntax is:
8779 catch exec
8780 catch exec if <cond>
8781
8782 First, check if there's an if clause. */
8783 cond_string = ep_parse_optional_if_clause (&arg);
8784
8785 if ((*arg != '\0') && !isspace (*arg))
8786 error (_("Junk at end of arguments."));
8787
8788 /* If this target supports it, create an exec catchpoint
8789 and enable reporting of such events. */
8790 create_catchpoint (gdbarch, tempflag, cond_string,
8791 &catch_exec_breakpoint_ops);
8792 }
8793
8794 static enum print_stop_action
8795 print_exception_catchpoint (struct breakpoint *b)
8796 {
8797 int bp_temp, bp_throw;
8798
8799 annotate_catchpoint (b->number);
8800
8801 bp_throw = strstr (b->addr_string, "throw") != NULL;
8802 if (b->loc->address != b->loc->requested_address)
8803 breakpoint_adjustment_warning (b->loc->requested_address,
8804 b->loc->address,
8805 b->number, 1);
8806 bp_temp = b->disposition == disp_del;
8807 ui_out_text (uiout,
8808 bp_temp ? "Temporary catchpoint "
8809 : "Catchpoint ");
8810 if (!ui_out_is_mi_like_p (uiout))
8811 ui_out_field_int (uiout, "bkptno", b->number);
8812 ui_out_text (uiout,
8813 bp_throw ? " (exception thrown), "
8814 : " (exception caught), ");
8815 if (ui_out_is_mi_like_p (uiout))
8816 {
8817 ui_out_field_string (uiout, "reason",
8818 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
8819 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
8820 ui_out_field_int (uiout, "bkptno", b->number);
8821 }
8822 return PRINT_SRC_AND_LOC;
8823 }
8824
8825 static void
8826 print_one_exception_catchpoint (struct breakpoint *b,
8827 struct bp_location **last_loc)
8828 {
8829 struct value_print_options opts;
8830
8831 get_user_print_options (&opts);
8832 if (opts.addressprint)
8833 {
8834 annotate_field (4);
8835 if (b->loc == NULL || b->loc->shlib_disabled)
8836 ui_out_field_string (uiout, "addr", "<PENDING>");
8837 else
8838 ui_out_field_core_addr (uiout, "addr",
8839 b->loc->gdbarch, b->loc->address);
8840 }
8841 annotate_field (5);
8842 if (b->loc)
8843 *last_loc = b->loc;
8844 if (strstr (b->addr_string, "throw") != NULL)
8845 ui_out_field_string (uiout, "what", "exception throw");
8846 else
8847 ui_out_field_string (uiout, "what", "exception catch");
8848 }
8849
8850 static void
8851 print_mention_exception_catchpoint (struct breakpoint *b)
8852 {
8853 int bp_temp;
8854 int bp_throw;
8855
8856 bp_temp = b->disposition == disp_del;
8857 bp_throw = strstr (b->addr_string, "throw") != NULL;
8858 ui_out_text (uiout, bp_temp ? _("Temporary catchpoint ")
8859 : _("Catchpoint "));
8860 ui_out_field_int (uiout, "bkptno", b->number);
8861 ui_out_text (uiout, bp_throw ? _(" (throw)")
8862 : _(" (catch)"));
8863 }
8864
8865 /* Implement the "print_recreate" breakpoint_ops method for throw and
8866 catch catchpoints. */
8867
8868 static void
8869 print_recreate_exception_catchpoint (struct breakpoint *b, struct ui_file *fp)
8870 {
8871 int bp_temp;
8872 int bp_throw;
8873
8874 bp_temp = b->disposition == disp_del;
8875 bp_throw = strstr (b->addr_string, "throw") != NULL;
8876 fprintf_unfiltered (fp, bp_temp ? "tcatch " : "catch ");
8877 fprintf_unfiltered (fp, bp_throw ? "throw" : "catch");
8878 }
8879
8880 static struct breakpoint_ops gnu_v3_exception_catchpoint_ops = {
8881 NULL, /* insert */
8882 NULL, /* remove */
8883 NULL, /* breakpoint_hit */
8884 print_exception_catchpoint,
8885 print_one_exception_catchpoint,
8886 print_mention_exception_catchpoint,
8887 print_recreate_exception_catchpoint
8888 };
8889
8890 static int
8891 handle_gnu_v3_exceptions (int tempflag, char *cond_string,
8892 enum exception_event_kind ex_event, int from_tty)
8893 {
8894 char *trigger_func_name;
8895
8896 if (ex_event == EX_EVENT_CATCH)
8897 trigger_func_name = "__cxa_begin_catch";
8898 else
8899 trigger_func_name = "__cxa_throw";
8900
8901 create_breakpoint (get_current_arch (),
8902 trigger_func_name, cond_string, -1,
8903 0 /* condition and thread are valid. */,
8904 tempflag, bp_breakpoint,
8905 0,
8906 AUTO_BOOLEAN_TRUE /* pending */,
8907 &gnu_v3_exception_catchpoint_ops, from_tty,
8908 1 /* enabled */,
8909 0 /* internal */);
8910
8911 return 1;
8912 }
8913
8914 /* Deal with "catch catch" and "catch throw" commands */
8915
8916 static void
8917 catch_exception_command_1 (enum exception_event_kind ex_event, char *arg,
8918 int tempflag, int from_tty)
8919 {
8920 char *cond_string = NULL;
8921
8922 if (!arg)
8923 arg = "";
8924 ep_skip_leading_whitespace (&arg);
8925
8926 cond_string = ep_parse_optional_if_clause (&arg);
8927
8928 if ((*arg != '\0') && !isspace (*arg))
8929 error (_("Junk at end of arguments."));
8930
8931 if (ex_event != EX_EVENT_THROW
8932 && ex_event != EX_EVENT_CATCH)
8933 error (_("Unsupported or unknown exception event; cannot catch it"));
8934
8935 if (handle_gnu_v3_exceptions (tempflag, cond_string, ex_event, from_tty))
8936 return;
8937
8938 warning (_("Unsupported with this platform/compiler combination."));
8939 }
8940
8941 /* Implementation of "catch catch" command. */
8942
8943 static void
8944 catch_catch_command (char *arg, int from_tty, struct cmd_list_element *command)
8945 {
8946 int tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
8947
8948 catch_exception_command_1 (EX_EVENT_CATCH, arg, tempflag, from_tty);
8949 }
8950
8951 /* Implementation of "catch throw" command. */
8952
8953 static void
8954 catch_throw_command (char *arg, int from_tty, struct cmd_list_element *command)
8955 {
8956 int tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
8957
8958 catch_exception_command_1 (EX_EVENT_THROW, arg, tempflag, from_tty);
8959 }
8960
8961 /* Create a breakpoint struct for Ada exception catchpoints. */
8962
8963 static void
8964 create_ada_exception_breakpoint (struct gdbarch *gdbarch,
8965 struct symtab_and_line sal,
8966 char *addr_string,
8967 char *exp_string,
8968 char *cond_string,
8969 struct expression *cond,
8970 struct breakpoint_ops *ops,
8971 int tempflag,
8972 int from_tty)
8973 {
8974 struct breakpoint *b;
8975
8976 if (from_tty)
8977 {
8978 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
8979 if (!loc_gdbarch)
8980 loc_gdbarch = gdbarch;
8981
8982 describe_other_breakpoints (loc_gdbarch,
8983 sal.pspace, sal.pc, sal.section, -1);
8984 /* FIXME: brobecker/2006-12-28: Actually, re-implement a special
8985 version for exception catchpoints, because two catchpoints
8986 used for different exception names will use the same address.
8987 In this case, a "breakpoint ... also set at..." warning is
8988 unproductive. Besides. the warning phrasing is also a bit
8989 inapropriate, we should use the word catchpoint, and tell
8990 the user what type of catchpoint it is. The above is good
8991 enough for now, though. */
8992 }
8993
8994 b = set_raw_breakpoint (gdbarch, sal, bp_breakpoint);
8995 set_breakpoint_count (breakpoint_count + 1);
8996
8997 b->enable_state = bp_enabled;
8998 b->disposition = tempflag ? disp_del : disp_donttouch;
8999 b->number = breakpoint_count;
9000 b->ignore_count = 0;
9001 b->loc->cond = cond;
9002 b->addr_string = addr_string;
9003 b->language = language_ada;
9004 b->cond_string = cond_string;
9005 b->exp_string = exp_string;
9006 b->thread = -1;
9007 b->ops = ops;
9008
9009 mention (b);
9010 update_global_location_list (1);
9011 }
9012
9013 /* Implement the "catch exception" command. */
9014
9015 static void
9016 catch_ada_exception_command (char *arg, int from_tty,
9017 struct cmd_list_element *command)
9018 {
9019 struct gdbarch *gdbarch = get_current_arch ();
9020 int tempflag;
9021 struct symtab_and_line sal;
9022 char *addr_string = NULL;
9023 char *exp_string = NULL;
9024 char *cond_string = NULL;
9025 struct expression *cond = NULL;
9026 struct breakpoint_ops *ops = NULL;
9027
9028 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
9029
9030 if (!arg)
9031 arg = "";
9032 sal = ada_decode_exception_location (arg, &addr_string, &exp_string,
9033 &cond_string, &cond, &ops);
9034 create_ada_exception_breakpoint (gdbarch, sal, addr_string, exp_string,
9035 cond_string, cond, ops, tempflag,
9036 from_tty);
9037 }
9038
9039 /* Cleanup function for a syscall filter list. */
9040 static void
9041 clean_up_filters (void *arg)
9042 {
9043 VEC(int) *iter = *(VEC(int) **) arg;
9044 VEC_free (int, iter);
9045 }
9046
9047 /* Splits the argument using space as delimiter. Returns an xmalloc'd
9048 filter list, or NULL if no filtering is required. */
9049 static VEC(int) *
9050 catch_syscall_split_args (char *arg)
9051 {
9052 VEC(int) *result = NULL;
9053 struct cleanup *cleanup = make_cleanup (clean_up_filters, &result);
9054
9055 while (*arg != '\0')
9056 {
9057 int i, syscall_number;
9058 char *endptr;
9059 char cur_name[128];
9060 struct syscall s;
9061
9062 /* Skip whitespace. */
9063 while (isspace (*arg))
9064 arg++;
9065
9066 for (i = 0; i < 127 && arg[i] && !isspace (arg[i]); ++i)
9067 cur_name[i] = arg[i];
9068 cur_name[i] = '\0';
9069 arg += i;
9070
9071 /* Check if the user provided a syscall name or a number. */
9072 syscall_number = (int) strtol (cur_name, &endptr, 0);
9073 if (*endptr == '\0')
9074 get_syscall_by_number (syscall_number, &s);
9075 else
9076 {
9077 /* We have a name. Let's check if it's valid and convert it
9078 to a number. */
9079 get_syscall_by_name (cur_name, &s);
9080
9081 if (s.number == UNKNOWN_SYSCALL)
9082 /* Here we have to issue an error instead of a warning, because
9083 GDB cannot do anything useful if there's no syscall number to
9084 be caught. */
9085 error (_("Unknown syscall name '%s'."), cur_name);
9086 }
9087
9088 /* Ok, it's valid. */
9089 VEC_safe_push (int, result, s.number);
9090 }
9091
9092 discard_cleanups (cleanup);
9093 return result;
9094 }
9095
9096 /* Implement the "catch syscall" command. */
9097
9098 static void
9099 catch_syscall_command_1 (char *arg, int from_tty,
9100 struct cmd_list_element *command)
9101 {
9102 int tempflag;
9103 VEC(int) *filter;
9104 struct syscall s;
9105 struct gdbarch *gdbarch = get_current_arch ();
9106
9107 /* Checking if the feature if supported. */
9108 if (gdbarch_get_syscall_number_p (gdbarch) == 0)
9109 error (_("The feature 'catch syscall' is not supported on \
9110 this architeture yet."));
9111
9112 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
9113
9114 ep_skip_leading_whitespace (&arg);
9115
9116 /* We need to do this first "dummy" translation in order
9117 to get the syscall XML file loaded or, most important,
9118 to display a warning to the user if there's no XML file
9119 for his/her architecture. */
9120 get_syscall_by_number (0, &s);
9121
9122 /* The allowed syntax is:
9123 catch syscall
9124 catch syscall <name | number> [<name | number> ... <name | number>]
9125
9126 Let's check if there's a syscall name. */
9127
9128 if (arg != NULL)
9129 filter = catch_syscall_split_args (arg);
9130 else
9131 filter = NULL;
9132
9133 create_syscall_event_catchpoint (tempflag, filter,
9134 &catch_syscall_breakpoint_ops);
9135 }
9136
9137 /* Implement the "catch assert" command. */
9138
9139 static void
9140 catch_assert_command (char *arg, int from_tty, struct cmd_list_element *command)
9141 {
9142 struct gdbarch *gdbarch = get_current_arch ();
9143 int tempflag;
9144 struct symtab_and_line sal;
9145 char *addr_string = NULL;
9146 struct breakpoint_ops *ops = NULL;
9147
9148 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
9149
9150 if (!arg)
9151 arg = "";
9152 sal = ada_decode_assert_location (arg, &addr_string, &ops);
9153 create_ada_exception_breakpoint (gdbarch, sal, addr_string, NULL, NULL, NULL,
9154 ops, tempflag, from_tty);
9155 }
9156
9157 static void
9158 catch_command (char *arg, int from_tty)
9159 {
9160 error (_("Catch requires an event name."));
9161 }
9162 \f
9163
9164 static void
9165 tcatch_command (char *arg, int from_tty)
9166 {
9167 error (_("Catch requires an event name."));
9168 }
9169
9170 /* Delete breakpoints by address or line. */
9171
9172 static void
9173 clear_command (char *arg, int from_tty)
9174 {
9175 struct breakpoint *b;
9176 VEC(breakpoint_p) *found = 0;
9177 int ix;
9178 int default_match;
9179 struct symtabs_and_lines sals;
9180 struct symtab_and_line sal;
9181 int i;
9182
9183 if (arg)
9184 {
9185 sals = decode_line_spec (arg, 1);
9186 default_match = 0;
9187 }
9188 else
9189 {
9190 sals.sals = (struct symtab_and_line *)
9191 xmalloc (sizeof (struct symtab_and_line));
9192 make_cleanup (xfree, sals.sals);
9193 init_sal (&sal); /* initialize to zeroes */
9194 sal.line = default_breakpoint_line;
9195 sal.symtab = default_breakpoint_symtab;
9196 sal.pc = default_breakpoint_address;
9197 sal.pspace = default_breakpoint_pspace;
9198 if (sal.symtab == 0)
9199 error (_("No source file specified."));
9200
9201 sals.sals[0] = sal;
9202 sals.nelts = 1;
9203
9204 default_match = 1;
9205 }
9206
9207 /* We don't call resolve_sal_pc here. That's not
9208 as bad as it seems, because all existing breakpoints
9209 typically have both file/line and pc set. So, if
9210 clear is given file/line, we can match this to existing
9211 breakpoint without obtaining pc at all.
9212
9213 We only support clearing given the address explicitly
9214 present in breakpoint table. Say, we've set breakpoint
9215 at file:line. There were several PC values for that file:line,
9216 due to optimization, all in one block.
9217 We've picked one PC value. If "clear" is issued with another
9218 PC corresponding to the same file:line, the breakpoint won't
9219 be cleared. We probably can still clear the breakpoint, but
9220 since the other PC value is never presented to user, user
9221 can only find it by guessing, and it does not seem important
9222 to support that. */
9223
9224 /* For each line spec given, delete bps which correspond
9225 to it. Do it in two passes, solely to preserve the current
9226 behavior that from_tty is forced true if we delete more than
9227 one breakpoint. */
9228
9229 found = NULL;
9230 for (i = 0; i < sals.nelts; i++)
9231 {
9232 /* If exact pc given, clear bpts at that pc.
9233 If line given (pc == 0), clear all bpts on specified line.
9234 If defaulting, clear all bpts on default line
9235 or at default pc.
9236
9237 defaulting sal.pc != 0 tests to do
9238
9239 0 1 pc
9240 1 1 pc _and_ line
9241 0 0 line
9242 1 0 <can't happen> */
9243
9244 sal = sals.sals[i];
9245
9246 /* Find all matching breakpoints and add them to
9247 'found'. */
9248 ALL_BREAKPOINTS (b)
9249 {
9250 int match = 0;
9251 /* Are we going to delete b? */
9252 if (b->type != bp_none && !is_watchpoint (b))
9253 {
9254 struct bp_location *loc = b->loc;
9255 for (; loc; loc = loc->next)
9256 {
9257 int pc_match = sal.pc
9258 && (loc->pspace == sal.pspace)
9259 && (loc->address == sal.pc)
9260 && (!section_is_overlay (loc->section)
9261 || loc->section == sal.section);
9262 int line_match = ((default_match || (0 == sal.pc))
9263 && b->source_file != NULL
9264 && sal.symtab != NULL
9265 && sal.pspace == loc->pspace
9266 && strcmp (b->source_file, sal.symtab->filename) == 0
9267 && b->line_number == sal.line);
9268 if (pc_match || line_match)
9269 {
9270 match = 1;
9271 break;
9272 }
9273 }
9274 }
9275
9276 if (match)
9277 VEC_safe_push(breakpoint_p, found, b);
9278 }
9279 }
9280 /* Now go thru the 'found' chain and delete them. */
9281 if (VEC_empty(breakpoint_p, found))
9282 {
9283 if (arg)
9284 error (_("No breakpoint at %s."), arg);
9285 else
9286 error (_("No breakpoint at this line."));
9287 }
9288
9289 if (VEC_length(breakpoint_p, found) > 1)
9290 from_tty = 1; /* Always report if deleted more than one */
9291 if (from_tty)
9292 {
9293 if (VEC_length(breakpoint_p, found) == 1)
9294 printf_unfiltered (_("Deleted breakpoint "));
9295 else
9296 printf_unfiltered (_("Deleted breakpoints "));
9297 }
9298 breakpoints_changed ();
9299
9300 for (ix = 0; VEC_iterate(breakpoint_p, found, ix, b); ix++)
9301 {
9302 if (from_tty)
9303 printf_unfiltered ("%d ", b->number);
9304 delete_breakpoint (b);
9305 }
9306 if (from_tty)
9307 putchar_unfiltered ('\n');
9308 }
9309 \f
9310 /* Delete breakpoint in BS if they are `delete' breakpoints and
9311 all breakpoints that are marked for deletion, whether hit or not.
9312 This is called after any breakpoint is hit, or after errors. */
9313
9314 void
9315 breakpoint_auto_delete (bpstat bs)
9316 {
9317 struct breakpoint *b, *temp;
9318
9319 for (; bs; bs = bs->next)
9320 if (bs->breakpoint_at
9321 && bs->breakpoint_at->disposition == disp_del
9322 && bs->stop)
9323 delete_breakpoint (bs->breakpoint_at);
9324
9325 ALL_BREAKPOINTS_SAFE (b, temp)
9326 {
9327 if (b->disposition == disp_del_at_next_stop)
9328 delete_breakpoint (b);
9329 }
9330 }
9331
9332 /* A comparison function for bp_location AP and BP being interfaced to qsort.
9333 Sort elements primarily by their ADDRESS (no matter what does
9334 breakpoint_address_is_meaningful say for its OWNER), secondarily by ordering
9335 first bp_permanent OWNERed elements and terciarily just ensuring the array
9336 is sorted stable way despite qsort being an instable algorithm. */
9337
9338 static int
9339 bp_location_compare (const void *ap, const void *bp)
9340 {
9341 struct bp_location *a = *(void **) ap;
9342 struct bp_location *b = *(void **) bp;
9343 /* A and B come from existing breakpoints having non-NULL OWNER. */
9344 int a_perm = a->owner->enable_state == bp_permanent;
9345 int b_perm = b->owner->enable_state == bp_permanent;
9346
9347 if (a->address != b->address)
9348 return (a->address > b->address) - (a->address < b->address);
9349
9350 /* Sort permanent breakpoints first. */
9351 if (a_perm != b_perm)
9352 return (a_perm < b_perm) - (a_perm > b_perm);
9353
9354 /* Make the user-visible order stable across GDB runs. Locations of the same
9355 breakpoint can be sorted in arbitrary order. */
9356
9357 if (a->owner->number != b->owner->number)
9358 return (a->owner->number > b->owner->number)
9359 - (a->owner->number < b->owner->number);
9360
9361 return (a > b) - (a < b);
9362 }
9363
9364 /* Set bp_location_placed_address_before_address_max and
9365 bp_location_shadow_len_after_address_max according to the current content of
9366 the bp_location array. */
9367
9368 static void
9369 bp_location_target_extensions_update (void)
9370 {
9371 struct bp_location *bl, **blp_tmp;
9372
9373 bp_location_placed_address_before_address_max = 0;
9374 bp_location_shadow_len_after_address_max = 0;
9375
9376 ALL_BP_LOCATIONS (bl, blp_tmp)
9377 {
9378 CORE_ADDR start, end, addr;
9379
9380 if (!bp_location_has_shadow (bl))
9381 continue;
9382
9383 start = bl->target_info.placed_address;
9384 end = start + bl->target_info.shadow_len;
9385
9386 gdb_assert (bl->address >= start);
9387 addr = bl->address - start;
9388 if (addr > bp_location_placed_address_before_address_max)
9389 bp_location_placed_address_before_address_max = addr;
9390
9391 /* Zero SHADOW_LEN would not pass bp_location_has_shadow. */
9392
9393 gdb_assert (bl->address < end);
9394 addr = end - bl->address;
9395 if (addr > bp_location_shadow_len_after_address_max)
9396 bp_location_shadow_len_after_address_max = addr;
9397 }
9398 }
9399
9400 /* If SHOULD_INSERT is false, do not insert any breakpoint locations
9401 into the inferior, only remove already-inserted locations that no
9402 longer should be inserted. Functions that delete a breakpoint or
9403 breakpoints should pass false, so that deleting a breakpoint
9404 doesn't have the side effect of inserting the locations of other
9405 breakpoints that are marked not-inserted, but should_be_inserted
9406 returns true on them.
9407
9408 This behaviour is useful is situations close to tear-down -- e.g.,
9409 after an exec, while the target still has execution, but breakpoint
9410 shadows of the previous executable image should *NOT* be restored
9411 to the new image; or before detaching, where the target still has
9412 execution and wants to delete breakpoints from GDB's lists, and all
9413 breakpoints had already been removed from the inferior. */
9414
9415 static void
9416 update_global_location_list (int should_insert)
9417 {
9418 struct breakpoint *b;
9419 struct bp_location **locp, *loc;
9420 struct cleanup *cleanups;
9421
9422 /* Used in the duplicates detection below. When iterating over all
9423 bp_locations, points to the first bp_location of a given address.
9424 Breakpoints and watchpoints of different types are never
9425 duplicates of each other. Keep one pointer for each type of
9426 breakpoint/watchpoint, so we only need to loop over all locations
9427 once. */
9428 struct bp_location *bp_loc_first; /* breakpoint */
9429 struct bp_location *wp_loc_first; /* hardware watchpoint */
9430 struct bp_location *awp_loc_first; /* access watchpoint */
9431 struct bp_location *rwp_loc_first; /* read watchpoint */
9432
9433 /* Saved former bp_location array which we compare against the newly built
9434 bp_location from the current state of ALL_BREAKPOINTS. */
9435 struct bp_location **old_location, **old_locp;
9436 unsigned old_location_count;
9437
9438 old_location = bp_location;
9439 old_location_count = bp_location_count;
9440 bp_location = NULL;
9441 bp_location_count = 0;
9442 cleanups = make_cleanup (xfree, old_location);
9443
9444 ALL_BREAKPOINTS (b)
9445 for (loc = b->loc; loc; loc = loc->next)
9446 bp_location_count++;
9447
9448 bp_location = xmalloc (sizeof (*bp_location) * bp_location_count);
9449 locp = bp_location;
9450 ALL_BREAKPOINTS (b)
9451 for (loc = b->loc; loc; loc = loc->next)
9452 *locp++ = loc;
9453 qsort (bp_location, bp_location_count, sizeof (*bp_location),
9454 bp_location_compare);
9455
9456 bp_location_target_extensions_update ();
9457
9458 /* Identify bp_location instances that are no longer present in the new
9459 list, and therefore should be freed. Note that it's not necessary that
9460 those locations should be removed from inferior -- if there's another
9461 location at the same address (previously marked as duplicate),
9462 we don't need to remove/insert the location.
9463
9464 LOCP is kept in sync with OLD_LOCP, each pointing to the current and
9465 former bp_location array state respectively. */
9466
9467 locp = bp_location;
9468 for (old_locp = old_location; old_locp < old_location + old_location_count;
9469 old_locp++)
9470 {
9471 struct bp_location *old_loc = *old_locp;
9472 struct bp_location **loc2p;
9473
9474 /* Tells if 'old_loc' is found amoung the new locations. If not, we
9475 have to free it. */
9476 int found_object = 0;
9477 /* Tells if the location should remain inserted in the target. */
9478 int keep_in_target = 0;
9479 int removed = 0;
9480
9481 /* Skip LOCP entries which will definitely never be needed. Stop either
9482 at or being the one matching OLD_LOC. */
9483 while (locp < bp_location + bp_location_count
9484 && (*locp)->address < old_loc->address)
9485 locp++;
9486
9487 for (loc2p = locp;
9488 (loc2p < bp_location + bp_location_count
9489 && (*loc2p)->address == old_loc->address);
9490 loc2p++)
9491 {
9492 if (*loc2p == old_loc)
9493 {
9494 found_object = 1;
9495 break;
9496 }
9497 }
9498
9499 /* If this location is no longer present, and inserted, look if there's
9500 maybe a new location at the same address. If so, mark that one
9501 inserted, and don't remove this one. This is needed so that we
9502 don't have a time window where a breakpoint at certain location is not
9503 inserted. */
9504
9505 if (old_loc->inserted)
9506 {
9507 /* If the location is inserted now, we might have to remove it. */
9508
9509 if (found_object && should_be_inserted (old_loc))
9510 {
9511 /* The location is still present in the location list, and still
9512 should be inserted. Don't do anything. */
9513 keep_in_target = 1;
9514 }
9515 else
9516 {
9517 /* The location is either no longer present, or got disabled.
9518 See if there's another location at the same address, in which
9519 case we don't need to remove this one from the target. */
9520
9521 /* OLD_LOC comes from existing struct breakpoint. */
9522 if (breakpoint_address_is_meaningful (old_loc->owner))
9523 {
9524 for (loc2p = locp;
9525 (loc2p < bp_location + bp_location_count
9526 && (*loc2p)->address == old_loc->address);
9527 loc2p++)
9528 {
9529 struct bp_location *loc2 = *loc2p;
9530
9531 if (breakpoint_locations_match (loc2, old_loc))
9532 {
9533 /* For the sake of should_be_inserted.
9534 Duplicates check below will fix up this later. */
9535 loc2->duplicate = 0;
9536
9537 /* Read watchpoint locations are switched to
9538 access watchpoints, if the former are not
9539 supported, but the latter are. */
9540 if (is_hardware_watchpoint (old_loc->owner))
9541 {
9542 gdb_assert (is_hardware_watchpoint (loc2->owner));
9543 loc2->watchpoint_type = old_loc->watchpoint_type;
9544 }
9545
9546 if (loc2 != old_loc && should_be_inserted (loc2))
9547 {
9548 loc2->inserted = 1;
9549 loc2->target_info = old_loc->target_info;
9550 keep_in_target = 1;
9551 break;
9552 }
9553 }
9554 }
9555 }
9556 }
9557
9558 if (!keep_in_target)
9559 {
9560 if (remove_breakpoint (old_loc, mark_uninserted))
9561 {
9562 /* This is just about all we can do. We could keep this
9563 location on the global list, and try to remove it next
9564 time, but there's no particular reason why we will
9565 succeed next time.
9566
9567 Note that at this point, old_loc->owner is still valid,
9568 as delete_breakpoint frees the breakpoint only
9569 after calling us. */
9570 printf_filtered (_("warning: Error removing breakpoint %d\n"),
9571 old_loc->owner->number);
9572 }
9573 removed = 1;
9574 }
9575 }
9576
9577 if (!found_object)
9578 {
9579 if (removed && non_stop
9580 && breakpoint_address_is_meaningful (old_loc->owner)
9581 && !is_hardware_watchpoint (old_loc->owner))
9582 {
9583 /* This location was removed from the target. In
9584 non-stop mode, a race condition is possible where
9585 we've removed a breakpoint, but stop events for that
9586 breakpoint are already queued and will arrive later.
9587 We apply an heuristic to be able to distinguish such
9588 SIGTRAPs from other random SIGTRAPs: we keep this
9589 breakpoint location for a bit, and will retire it
9590 after we see some number of events. The theory here
9591 is that reporting of events should, "on the average",
9592 be fair, so after a while we'll see events from all
9593 threads that have anything of interest, and no longer
9594 need to keep this breakpoint location around. We
9595 don't hold locations forever so to reduce chances of
9596 mistaking a non-breakpoint SIGTRAP for a breakpoint
9597 SIGTRAP.
9598
9599 The heuristic failing can be disastrous on
9600 decr_pc_after_break targets.
9601
9602 On decr_pc_after_break targets, like e.g., x86-linux,
9603 if we fail to recognize a late breakpoint SIGTRAP,
9604 because events_till_retirement has reached 0 too
9605 soon, we'll fail to do the PC adjustment, and report
9606 a random SIGTRAP to the user. When the user resumes
9607 the inferior, it will most likely immediately crash
9608 with SIGILL/SIGBUS/SIGSEGV, or worse, get silently
9609 corrupted, because of being resumed e.g., in the
9610 middle of a multi-byte instruction, or skipped a
9611 one-byte instruction. This was actually seen happen
9612 on native x86-linux, and should be less rare on
9613 targets that do not support new thread events, like
9614 remote, due to the heuristic depending on
9615 thread_count.
9616
9617 Mistaking a random SIGTRAP for a breakpoint trap
9618 causes similar symptoms (PC adjustment applied when
9619 it shouldn't), but then again, playing with SIGTRAPs
9620 behind the debugger's back is asking for trouble.
9621
9622 Since hardware watchpoint traps are always
9623 distinguishable from other traps, so we don't need to
9624 apply keep hardware watchpoint moribund locations
9625 around. We simply always ignore hardware watchpoint
9626 traps we can no longer explain. */
9627
9628 old_loc->events_till_retirement = 3 * (thread_count () + 1);
9629 old_loc->owner = NULL;
9630
9631 VEC_safe_push (bp_location_p, moribund_locations, old_loc);
9632 }
9633 else
9634 {
9635 old_loc->owner = NULL;
9636 decref_bp_location (&old_loc);
9637 }
9638 }
9639 }
9640
9641 /* Rescan breakpoints at the same address and section, marking the
9642 first one as "first" and any others as "duplicates". This is so
9643 that the bpt instruction is only inserted once. If we have a
9644 permanent breakpoint at the same place as BPT, make that one the
9645 official one, and the rest as duplicates. Permanent breakpoints
9646 are sorted first for the same address.
9647
9648 Do the same for hardware watchpoints, but also considering the
9649 watchpoint's type (regular/access/read) and length. */
9650
9651 bp_loc_first = NULL;
9652 wp_loc_first = NULL;
9653 awp_loc_first = NULL;
9654 rwp_loc_first = NULL;
9655 ALL_BP_LOCATIONS (loc, locp)
9656 {
9657 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
9658 struct breakpoint *b = loc->owner;
9659 struct bp_location **loc_first_p;
9660
9661 if (b->enable_state == bp_disabled
9662 || b->enable_state == bp_call_disabled
9663 || b->enable_state == bp_startup_disabled
9664 || !loc->enabled
9665 || loc->shlib_disabled
9666 || !breakpoint_address_is_meaningful (b)
9667 || is_tracepoint (b))
9668 continue;
9669
9670 /* Permanent breakpoint should always be inserted. */
9671 if (b->enable_state == bp_permanent && ! loc->inserted)
9672 internal_error (__FILE__, __LINE__,
9673 _("allegedly permanent breakpoint is not "
9674 "actually inserted"));
9675
9676 if (b->type == bp_hardware_watchpoint)
9677 loc_first_p = &wp_loc_first;
9678 else if (b->type == bp_read_watchpoint)
9679 loc_first_p = &rwp_loc_first;
9680 else if (b->type == bp_access_watchpoint)
9681 loc_first_p = &awp_loc_first;
9682 else
9683 loc_first_p = &bp_loc_first;
9684
9685 if (*loc_first_p == NULL
9686 || (overlay_debugging && loc->section != (*loc_first_p)->section)
9687 || !breakpoint_locations_match (loc, *loc_first_p))
9688 {
9689 *loc_first_p = loc;
9690 loc->duplicate = 0;
9691 continue;
9692 }
9693
9694 loc->duplicate = 1;
9695
9696 if ((*loc_first_p)->owner->enable_state == bp_permanent && loc->inserted
9697 && b->enable_state != bp_permanent)
9698 internal_error (__FILE__, __LINE__,
9699 _("another breakpoint was inserted on top of "
9700 "a permanent breakpoint"));
9701 }
9702
9703 if (breakpoints_always_inserted_mode () && should_insert
9704 && (have_live_inferiors ()
9705 || (gdbarch_has_global_breakpoints (target_gdbarch))))
9706 insert_breakpoint_locations ();
9707
9708 do_cleanups (cleanups);
9709 }
9710
9711 void
9712 breakpoint_retire_moribund (void)
9713 {
9714 struct bp_location *loc;
9715 int ix;
9716
9717 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
9718 if (--(loc->events_till_retirement) == 0)
9719 {
9720 decref_bp_location (&loc);
9721 VEC_unordered_remove (bp_location_p, moribund_locations, ix);
9722 --ix;
9723 }
9724 }
9725
9726 static void
9727 update_global_location_list_nothrow (int inserting)
9728 {
9729 struct gdb_exception e;
9730
9731 TRY_CATCH (e, RETURN_MASK_ERROR)
9732 update_global_location_list (inserting);
9733 }
9734
9735 /* Clear BKP from a BPS. */
9736
9737 static void
9738 bpstat_remove_bp_location (bpstat bps, struct breakpoint *bpt)
9739 {
9740 bpstat bs;
9741
9742 for (bs = bps; bs; bs = bs->next)
9743 if (bs->breakpoint_at == bpt)
9744 {
9745 bs->breakpoint_at = NULL;
9746 bs->old_val = NULL;
9747 /* bs->commands will be freed later. */
9748 }
9749 }
9750
9751 /* Callback for iterate_over_threads. */
9752 static int
9753 bpstat_remove_breakpoint_callback (struct thread_info *th, void *data)
9754 {
9755 struct breakpoint *bpt = data;
9756
9757 bpstat_remove_bp_location (th->control.stop_bpstat, bpt);
9758 return 0;
9759 }
9760
9761 /* Delete a breakpoint and clean up all traces of it in the data
9762 structures. */
9763
9764 void
9765 delete_breakpoint (struct breakpoint *bpt)
9766 {
9767 struct breakpoint *b;
9768
9769 gdb_assert (bpt != NULL);
9770
9771 /* Has this bp already been deleted? This can happen because multiple
9772 lists can hold pointers to bp's. bpstat lists are especial culprits.
9773
9774 One example of this happening is a watchpoint's scope bp. When the
9775 scope bp triggers, we notice that the watchpoint is out of scope, and
9776 delete it. We also delete its scope bp. But the scope bp is marked
9777 "auto-deleting", and is already on a bpstat. That bpstat is then
9778 checked for auto-deleting bp's, which are deleted.
9779
9780 A real solution to this problem might involve reference counts in bp's,
9781 and/or giving them pointers back to their referencing bpstat's, and
9782 teaching delete_breakpoint to only free a bp's storage when no more
9783 references were extent. A cheaper bandaid was chosen. */
9784 if (bpt->type == bp_none)
9785 return;
9786
9787 /* At least avoid this stale reference until the reference counting of
9788 breakpoints gets resolved. */
9789 if (bpt->related_breakpoint != NULL)
9790 {
9791 gdb_assert (bpt->related_breakpoint->related_breakpoint == bpt);
9792 bpt->related_breakpoint->disposition = disp_del_at_next_stop;
9793 bpt->related_breakpoint->related_breakpoint = NULL;
9794 bpt->related_breakpoint = NULL;
9795 }
9796
9797 observer_notify_breakpoint_deleted (bpt->number);
9798
9799 if (breakpoint_chain == bpt)
9800 breakpoint_chain = bpt->next;
9801
9802 ALL_BREAKPOINTS (b)
9803 if (b->next == bpt)
9804 {
9805 b->next = bpt->next;
9806 break;
9807 }
9808
9809 decref_counted_command_line (&bpt->commands);
9810 xfree (bpt->cond_string);
9811 xfree (bpt->cond_exp);
9812 xfree (bpt->addr_string);
9813 xfree (bpt->exp);
9814 xfree (bpt->exp_string);
9815 xfree (bpt->exp_string_reparse);
9816 value_free (bpt->val);
9817 xfree (bpt->source_file);
9818 xfree (bpt->exec_pathname);
9819 clean_up_filters (&bpt->syscalls_to_be_caught);
9820
9821
9822 /* Be sure no bpstat's are pointing at the breakpoint after it's
9823 been freed. */
9824 /* FIXME, how can we find all bpstat's? We just check stop_bpstat
9825 in all threeds for now. Note that we cannot just remove bpstats
9826 pointing at bpt from the stop_bpstat list entirely, as breakpoint
9827 commands are associated with the bpstat; if we remove it here,
9828 then the later call to bpstat_do_actions (&stop_bpstat); in
9829 event-top.c won't do anything, and temporary breakpoints with
9830 commands won't work. */
9831
9832 iterate_over_threads (bpstat_remove_breakpoint_callback, bpt);
9833
9834 /* Now that breakpoint is removed from breakpoint
9835 list, update the global location list. This
9836 will remove locations that used to belong to
9837 this breakpoint. Do this before freeing
9838 the breakpoint itself, since remove_breakpoint
9839 looks at location's owner. It might be better
9840 design to have location completely self-contained,
9841 but it's not the case now. */
9842 update_global_location_list (0);
9843
9844
9845 /* On the chance that someone will soon try again to delete this same
9846 bp, we mark it as deleted before freeing its storage. */
9847 bpt->type = bp_none;
9848
9849 xfree (bpt);
9850 }
9851
9852 static void
9853 do_delete_breakpoint_cleanup (void *b)
9854 {
9855 delete_breakpoint (b);
9856 }
9857
9858 struct cleanup *
9859 make_cleanup_delete_breakpoint (struct breakpoint *b)
9860 {
9861 return make_cleanup (do_delete_breakpoint_cleanup, b);
9862 }
9863
9864 /* A callback for map_breakpoint_numbers that calls
9865 delete_breakpoint. */
9866
9867 static void
9868 do_delete_breakpoint (struct breakpoint *b, void *ignore)
9869 {
9870 delete_breakpoint (b);
9871 }
9872
9873 void
9874 delete_command (char *arg, int from_tty)
9875 {
9876 struct breakpoint *b, *temp;
9877
9878 dont_repeat ();
9879
9880 if (arg == 0)
9881 {
9882 int breaks_to_delete = 0;
9883
9884 /* Delete all breakpoints if no argument.
9885 Do not delete internal or call-dummy breakpoints, these
9886 have to be deleted with an explicit breakpoint number argument. */
9887 ALL_BREAKPOINTS (b)
9888 {
9889 if (b->type != bp_call_dummy
9890 && b->type != bp_std_terminate
9891 && b->type != bp_shlib_event
9892 && b->type != bp_jit_event
9893 && b->type != bp_thread_event
9894 && b->type != bp_overlay_event
9895 && b->type != bp_longjmp_master
9896 && b->type != bp_std_terminate_master
9897 && b->type != bp_exception_master
9898 && b->number >= 0)
9899 {
9900 breaks_to_delete = 1;
9901 break;
9902 }
9903 }
9904
9905 /* Ask user only if there are some breakpoints to delete. */
9906 if (!from_tty
9907 || (breaks_to_delete && query (_("Delete all breakpoints? "))))
9908 {
9909 ALL_BREAKPOINTS_SAFE (b, temp)
9910 {
9911 if (b->type != bp_call_dummy
9912 && b->type != bp_std_terminate
9913 && b->type != bp_shlib_event
9914 && b->type != bp_thread_event
9915 && b->type != bp_jit_event
9916 && b->type != bp_overlay_event
9917 && b->type != bp_longjmp_master
9918 && b->type != bp_std_terminate_master
9919 && b->type != bp_exception_master
9920 && b->number >= 0)
9921 delete_breakpoint (b);
9922 }
9923 }
9924 }
9925 else
9926 map_breakpoint_numbers (arg, do_delete_breakpoint, NULL);
9927 }
9928
9929 static int
9930 all_locations_are_pending (struct bp_location *loc)
9931 {
9932 for (; loc; loc = loc->next)
9933 if (!loc->shlib_disabled)
9934 return 0;
9935 return 1;
9936 }
9937
9938 /* Subroutine of update_breakpoint_locations to simplify it.
9939 Return non-zero if multiple fns in list LOC have the same name.
9940 Null names are ignored. */
9941
9942 static int
9943 ambiguous_names_p (struct bp_location *loc)
9944 {
9945 struct bp_location *l;
9946 htab_t htab = htab_create_alloc (13, htab_hash_string,
9947 (int (*) (const void *,
9948 const void *)) streq,
9949 NULL, xcalloc, xfree);
9950
9951 for (l = loc; l != NULL; l = l->next)
9952 {
9953 const char **slot;
9954 const char *name = l->function_name;
9955
9956 /* Allow for some names to be NULL, ignore them. */
9957 if (name == NULL)
9958 continue;
9959
9960 slot = (const char **) htab_find_slot (htab, (const void *) name,
9961 INSERT);
9962 /* NOTE: We can assume slot != NULL here because xcalloc never returns
9963 NULL. */
9964 if (*slot != NULL)
9965 {
9966 htab_delete (htab);
9967 return 1;
9968 }
9969 *slot = name;
9970 }
9971
9972 htab_delete (htab);
9973 return 0;
9974 }
9975
9976 /* When symbols change, it probably means the sources changed as well,
9977 and it might mean the static tracepoint markers are no longer at
9978 the same address or line numbers they used to be at last we
9979 checked. Losing your static tracepoints whenever you rebuild is
9980 undesirable. This function tries to resync/rematch gdb static
9981 tracepoints with the markers on the target, for static tracepoints
9982 that have not been set by marker id. Static tracepoint that have
9983 been set by marker id are reset by marker id in breakpoint_re_set.
9984 The heuristic is:
9985
9986 1) For a tracepoint set at a specific address, look for a marker at
9987 the old PC. If one is found there, assume to be the same marker.
9988 If the name / string id of the marker found is different from the
9989 previous known name, assume that means the user renamed the marker
9990 in the sources, and output a warning.
9991
9992 2) For a tracepoint set at a given line number, look for a marker
9993 at the new address of the old line number. If one is found there,
9994 assume to be the same marker. If the name / string id of the
9995 marker found is different from the previous known name, assume that
9996 means the user renamed the marker in the sources, and output a
9997 warning.
9998
9999 3) If a marker is no longer found at the same address or line, it
10000 may mean the marker no longer exists. But it may also just mean
10001 the code changed a bit. Maybe the user added a few lines of code
10002 that made the marker move up or down (in line number terms). Ask
10003 the target for info about the marker with the string id as we knew
10004 it. If found, update line number and address in the matching
10005 static tracepoint. This will get confused if there's more than one
10006 marker with the same ID (possible in UST, although unadvised
10007 precisely because it confuses tools). */
10008
10009 static struct symtab_and_line
10010 update_static_tracepoint (struct breakpoint *b, struct symtab_and_line sal)
10011 {
10012 struct static_tracepoint_marker marker;
10013 CORE_ADDR pc;
10014 int i;
10015
10016 pc = sal.pc;
10017 if (sal.line)
10018 find_line_pc (sal.symtab, sal.line, &pc);
10019
10020 if (target_static_tracepoint_marker_at (pc, &marker))
10021 {
10022 if (strcmp (b->static_trace_marker_id, marker.str_id) != 0)
10023 warning (_("static tracepoint %d changed probed marker from %s to %s"),
10024 b->number,
10025 b->static_trace_marker_id, marker.str_id);
10026
10027 xfree (b->static_trace_marker_id);
10028 b->static_trace_marker_id = xstrdup (marker.str_id);
10029 release_static_tracepoint_marker (&marker);
10030
10031 return sal;
10032 }
10033
10034 /* Old marker wasn't found on target at lineno. Try looking it up
10035 by string ID. */
10036 if (!sal.explicit_pc
10037 && sal.line != 0
10038 && sal.symtab != NULL
10039 && b->static_trace_marker_id != NULL)
10040 {
10041 VEC(static_tracepoint_marker_p) *markers;
10042
10043 markers
10044 = target_static_tracepoint_markers_by_strid (b->static_trace_marker_id);
10045
10046 if (!VEC_empty(static_tracepoint_marker_p, markers))
10047 {
10048 struct symtab_and_line sal;
10049 struct symbol *sym;
10050 struct static_tracepoint_marker *marker;
10051
10052 marker = VEC_index (static_tracepoint_marker_p, markers, 0);
10053
10054 xfree (b->static_trace_marker_id);
10055 b->static_trace_marker_id = xstrdup (marker->str_id);
10056
10057 warning (_("marker for static tracepoint %d (%s) not "
10058 "found at previous line number"),
10059 b->number, b->static_trace_marker_id);
10060
10061 init_sal (&sal);
10062
10063 sal.pc = marker->address;
10064
10065 sal = find_pc_line (marker->address, 0);
10066 sym = find_pc_sect_function (marker->address, NULL);
10067 ui_out_text (uiout, "Now in ");
10068 if (sym)
10069 {
10070 ui_out_field_string (uiout, "func",
10071 SYMBOL_PRINT_NAME (sym));
10072 ui_out_text (uiout, " at ");
10073 }
10074 ui_out_field_string (uiout, "file", sal.symtab->filename);
10075 ui_out_text (uiout, ":");
10076
10077 if (ui_out_is_mi_like_p (uiout))
10078 {
10079 char *fullname = symtab_to_fullname (sal.symtab);
10080
10081 if (fullname)
10082 ui_out_field_string (uiout, "fullname", fullname);
10083 }
10084
10085 ui_out_field_int (uiout, "line", sal.line);
10086 ui_out_text (uiout, "\n");
10087
10088 b->line_number = sal.line;
10089
10090 xfree (b->source_file);
10091 if (sym)
10092 b->source_file = xstrdup (sal.symtab->filename);
10093 else
10094 b->source_file = NULL;
10095
10096 xfree (b->addr_string);
10097 b->addr_string = xstrprintf ("%s:%d",
10098 sal.symtab->filename, b->line_number);
10099
10100 /* Might be nice to check if function changed, and warn if
10101 so. */
10102
10103 release_static_tracepoint_marker (marker);
10104 }
10105 }
10106 return sal;
10107 }
10108
10109 static void
10110 update_breakpoint_locations (struct breakpoint *b,
10111 struct symtabs_and_lines sals)
10112 {
10113 int i;
10114 char *s;
10115 struct bp_location *existing_locations = b->loc;
10116
10117 /* If there's no new locations, and all existing locations
10118 are pending, don't do anything. This optimizes
10119 the common case where all locations are in the same
10120 shared library, that was unloaded. We'd like to
10121 retain the location, so that when the library
10122 is loaded again, we don't loose the enabled/disabled
10123 status of the individual locations. */
10124 if (all_locations_are_pending (existing_locations) && sals.nelts == 0)
10125 return;
10126
10127 b->loc = NULL;
10128
10129 for (i = 0; i < sals.nelts; ++i)
10130 {
10131 struct bp_location *new_loc =
10132 add_location_to_breakpoint (b, &(sals.sals[i]));
10133
10134 /* Reparse conditions, they might contain references to the
10135 old symtab. */
10136 if (b->cond_string != NULL)
10137 {
10138 struct gdb_exception e;
10139
10140 s = b->cond_string;
10141 TRY_CATCH (e, RETURN_MASK_ERROR)
10142 {
10143 new_loc->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc),
10144 0);
10145 }
10146 if (e.reason < 0)
10147 {
10148 warning (_("failed to reevaluate condition for breakpoint %d: %s"),
10149 b->number, e.message);
10150 new_loc->enabled = 0;
10151 }
10152 }
10153
10154 if (b->source_file != NULL)
10155 xfree (b->source_file);
10156 if (sals.sals[i].symtab == NULL)
10157 b->source_file = NULL;
10158 else
10159 b->source_file = xstrdup (sals.sals[i].symtab->filename);
10160
10161 if (b->line_number == 0)
10162 b->line_number = sals.sals[i].line;
10163 }
10164
10165 /* Update locations of permanent breakpoints. */
10166 if (b->enable_state == bp_permanent)
10167 make_breakpoint_permanent (b);
10168
10169 /* If possible, carry over 'disable' status from existing breakpoints. */
10170 {
10171 struct bp_location *e = existing_locations;
10172 /* If there are multiple breakpoints with the same function name,
10173 e.g. for inline functions, comparing function names won't work.
10174 Instead compare pc addresses; this is just a heuristic as things
10175 may have moved, but in practice it gives the correct answer
10176 often enough until a better solution is found. */
10177 int have_ambiguous_names = ambiguous_names_p (b->loc);
10178
10179 for (; e; e = e->next)
10180 {
10181 if (!e->enabled && e->function_name)
10182 {
10183 struct bp_location *l = b->loc;
10184 if (have_ambiguous_names)
10185 {
10186 for (; l; l = l->next)
10187 if (breakpoint_address_match (e->pspace->aspace, e->address,
10188 l->pspace->aspace, l->address))
10189 {
10190 l->enabled = 0;
10191 break;
10192 }
10193 }
10194 else
10195 {
10196 for (; l; l = l->next)
10197 if (l->function_name
10198 && strcmp (e->function_name, l->function_name) == 0)
10199 {
10200 l->enabled = 0;
10201 break;
10202 }
10203 }
10204 }
10205 }
10206 }
10207
10208 update_global_location_list (1);
10209 }
10210
10211 /* Reset a breakpoint given it's struct breakpoint * BINT.
10212 The value we return ends up being the return value from catch_errors.
10213 Unused in this case. */
10214
10215 static int
10216 breakpoint_re_set_one (void *bint)
10217 {
10218 /* get past catch_errs */
10219 struct breakpoint *b = (struct breakpoint *) bint;
10220 int not_found = 0;
10221 int *not_found_ptr = &not_found;
10222 struct symtabs_and_lines sals = {0};
10223 struct symtabs_and_lines expanded = {0};
10224 char *s;
10225 struct gdb_exception e;
10226 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
10227 int marker_spec = 0;
10228
10229 switch (b->type)
10230 {
10231 case bp_none:
10232 warning (_("attempted to reset apparently deleted breakpoint #%d?"),
10233 b->number);
10234 return 0;
10235 case bp_breakpoint:
10236 case bp_hardware_breakpoint:
10237 case bp_tracepoint:
10238 case bp_fast_tracepoint:
10239 case bp_static_tracepoint:
10240 /* Do not attempt to re-set breakpoints disabled during startup. */
10241 if (b->enable_state == bp_startup_disabled)
10242 return 0;
10243
10244 if (b->addr_string == NULL)
10245 {
10246 /* Anything without a string can't be re-set. */
10247 delete_breakpoint (b);
10248 return 0;
10249 }
10250
10251 input_radix = b->input_radix;
10252 s = b->addr_string;
10253
10254 save_current_space_and_thread ();
10255 switch_to_program_space_and_thread (b->pspace);
10256
10257 marker_spec = b->type == bp_static_tracepoint && is_marker_spec (s);
10258
10259 set_language (b->language);
10260 TRY_CATCH (e, RETURN_MASK_ERROR)
10261 {
10262 if (marker_spec)
10263 {
10264 sals = decode_static_tracepoint_spec (&s);
10265 if (sals.nelts > b->static_trace_marker_id_idx)
10266 {
10267 sals.sals[0] = sals.sals[b->static_trace_marker_id_idx];
10268 sals.nelts = 1;
10269 }
10270 else
10271 error (_("marker %s not found"), b->static_trace_marker_id);
10272 }
10273 else
10274 sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, (char ***) NULL,
10275 not_found_ptr);
10276 }
10277 if (e.reason < 0)
10278 {
10279 int not_found_and_ok = 0;
10280 /* For pending breakpoints, it's expected that parsing
10281 will fail until the right shared library is loaded.
10282 User has already told to create pending breakpoints and
10283 don't need extra messages. If breakpoint is in bp_shlib_disabled
10284 state, then user already saw the message about that breakpoint
10285 being disabled, and don't want to see more errors. */
10286 if (not_found
10287 && (b->condition_not_parsed
10288 || (b->loc && b->loc->shlib_disabled)
10289 || b->enable_state == bp_disabled))
10290 not_found_and_ok = 1;
10291
10292 if (!not_found_and_ok)
10293 {
10294 /* We surely don't want to warn about the same breakpoint
10295 10 times. One solution, implemented here, is disable
10296 the breakpoint on error. Another solution would be to
10297 have separate 'warning emitted' flag. Since this
10298 happens only when a binary has changed, I don't know
10299 which approach is better. */
10300 b->enable_state = bp_disabled;
10301 throw_exception (e);
10302 }
10303 }
10304
10305 if (!not_found)
10306 {
10307 gdb_assert (sals.nelts == 1);
10308
10309 resolve_sal_pc (&sals.sals[0]);
10310 if (b->condition_not_parsed && s && s[0])
10311 {
10312 char *cond_string = 0;
10313 int thread = -1;
10314 int task = 0;
10315
10316 find_condition_and_thread (s, sals.sals[0].pc,
10317 &cond_string, &thread, &task);
10318 if (cond_string)
10319 b->cond_string = cond_string;
10320 b->thread = thread;
10321 b->task = task;
10322 b->condition_not_parsed = 0;
10323 }
10324
10325 if (b->type == bp_static_tracepoint && !marker_spec)
10326 sals.sals[0] = update_static_tracepoint (b, sals.sals[0]);
10327
10328 expanded = expand_line_sal_maybe (sals.sals[0]);
10329 }
10330
10331 make_cleanup (xfree, sals.sals);
10332 update_breakpoint_locations (b, expanded);
10333 break;
10334
10335 case bp_watchpoint:
10336 case bp_hardware_watchpoint:
10337 case bp_read_watchpoint:
10338 case bp_access_watchpoint:
10339 /* Watchpoint can be either on expression using entirely global variables,
10340 or it can be on local variables.
10341
10342 Watchpoints of the first kind are never auto-deleted, and even persist
10343 across program restarts. Since they can use variables from shared
10344 libraries, we need to reparse expression as libraries are loaded
10345 and unloaded.
10346
10347 Watchpoints on local variables can also change meaning as result
10348 of solib event. For example, if a watchpoint uses both a local and
10349 a global variables in expression, it's a local watchpoint, but
10350 unloading of a shared library will make the expression invalid.
10351 This is not a very common use case, but we still re-evaluate
10352 expression, to avoid surprises to the user.
10353
10354 Note that for local watchpoints, we re-evaluate it only if
10355 watchpoints frame id is still valid. If it's not, it means
10356 the watchpoint is out of scope and will be deleted soon. In fact,
10357 I'm not sure we'll ever be called in this case.
10358
10359 If a local watchpoint's frame id is still valid, then
10360 b->exp_valid_block is likewise valid, and we can safely use it.
10361
10362 Don't do anything about disabled watchpoints, since they will
10363 be reevaluated again when enabled. */
10364 update_watchpoint (b, 1 /* reparse */);
10365 break;
10366 /* We needn't really do anything to reset these, since the mask
10367 that requests them is unaffected by e.g., new libraries being
10368 loaded. */
10369 case bp_catchpoint:
10370 break;
10371
10372 default:
10373 printf_filtered (_("Deleting unknown breakpoint type %d\n"), b->type);
10374 /* fall through */
10375 /* Delete overlay event and longjmp master breakpoints; they will be
10376 reset later by breakpoint_re_set. */
10377 case bp_overlay_event:
10378 case bp_longjmp_master:
10379 case bp_std_terminate_master:
10380 case bp_exception_master:
10381 delete_breakpoint (b);
10382 break;
10383
10384 /* This breakpoint is special, it's set up when the inferior
10385 starts and we really don't want to touch it. */
10386 case bp_shlib_event:
10387
10388 /* Like bp_shlib_event, this breakpoint type is special.
10389 Once it is set up, we do not want to touch it. */
10390 case bp_thread_event:
10391
10392 /* Keep temporary breakpoints, which can be encountered when we step
10393 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
10394 Otherwise these should have been blown away via the cleanup chain
10395 or by breakpoint_init_inferior when we rerun the executable. */
10396 case bp_until:
10397 case bp_finish:
10398 case bp_watchpoint_scope:
10399 case bp_call_dummy:
10400 case bp_std_terminate:
10401 case bp_step_resume:
10402 case bp_longjmp:
10403 case bp_longjmp_resume:
10404 case bp_exception:
10405 case bp_exception_resume:
10406 case bp_jit_event:
10407 break;
10408 }
10409
10410 do_cleanups (cleanups);
10411 return 0;
10412 }
10413
10414 /* Re-set all breakpoints after symbols have been re-loaded. */
10415 void
10416 breakpoint_re_set (void)
10417 {
10418 struct breakpoint *b, *temp;
10419 enum language save_language;
10420 int save_input_radix;
10421 struct cleanup *old_chain;
10422
10423 save_language = current_language->la_language;
10424 save_input_radix = input_radix;
10425 old_chain = save_current_program_space ();
10426
10427 ALL_BREAKPOINTS_SAFE (b, temp)
10428 {
10429 /* Format possible error msg */
10430 char *message = xstrprintf ("Error in re-setting breakpoint %d: ",
10431 b->number);
10432 struct cleanup *cleanups = make_cleanup (xfree, message);
10433 catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
10434 do_cleanups (cleanups);
10435 }
10436 set_language (save_language);
10437 input_radix = save_input_radix;
10438
10439 jit_breakpoint_re_set ();
10440
10441 do_cleanups (old_chain);
10442
10443 create_overlay_event_breakpoint ("_ovly_debug_event");
10444 create_longjmp_master_breakpoint ("longjmp");
10445 create_longjmp_master_breakpoint ("_longjmp");
10446 create_longjmp_master_breakpoint ("siglongjmp");
10447 create_longjmp_master_breakpoint ("_siglongjmp");
10448 create_std_terminate_master_breakpoint ("std::terminate()");
10449 create_exception_master_breakpoint ();
10450 }
10451 \f
10452 /* Reset the thread number of this breakpoint:
10453
10454 - If the breakpoint is for all threads, leave it as-is.
10455 - Else, reset it to the current thread for inferior_ptid. */
10456 void
10457 breakpoint_re_set_thread (struct breakpoint *b)
10458 {
10459 if (b->thread != -1)
10460 {
10461 if (in_thread_list (inferior_ptid))
10462 b->thread = pid_to_thread_id (inferior_ptid);
10463
10464 /* We're being called after following a fork. The new fork is
10465 selected as current, and unless this was a vfork will have a
10466 different program space from the original thread. Reset that
10467 as well. */
10468 b->loc->pspace = current_program_space;
10469 }
10470 }
10471
10472 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
10473 If from_tty is nonzero, it prints a message to that effect,
10474 which ends with a period (no newline). */
10475
10476 void
10477 set_ignore_count (int bptnum, int count, int from_tty)
10478 {
10479 struct breakpoint *b;
10480
10481 if (count < 0)
10482 count = 0;
10483
10484 ALL_BREAKPOINTS (b)
10485 if (b->number == bptnum)
10486 {
10487 if (is_tracepoint (b))
10488 {
10489 if (from_tty && count != 0)
10490 printf_filtered (_("Ignore count ignored for tracepoint %d."),
10491 bptnum);
10492 return;
10493 }
10494
10495 b->ignore_count = count;
10496 if (from_tty)
10497 {
10498 if (count == 0)
10499 printf_filtered (_("Will stop next time breakpoint %d is reached."),
10500 bptnum);
10501 else if (count == 1)
10502 printf_filtered (_("Will ignore next crossing of breakpoint %d."),
10503 bptnum);
10504 else
10505 printf_filtered (_("Will ignore next %d crossings of breakpoint %d."),
10506 count, bptnum);
10507 }
10508 breakpoints_changed ();
10509 observer_notify_breakpoint_modified (b->number);
10510 return;
10511 }
10512
10513 error (_("No breakpoint number %d."), bptnum);
10514 }
10515
10516 void
10517 make_breakpoint_silent (struct breakpoint *b)
10518 {
10519 /* Silence the breakpoint. */
10520 b->silent = 1;
10521 }
10522
10523 /* Command to set ignore-count of breakpoint N to COUNT. */
10524
10525 static void
10526 ignore_command (char *args, int from_tty)
10527 {
10528 char *p = args;
10529 int num;
10530
10531 if (p == 0)
10532 error_no_arg (_("a breakpoint number"));
10533
10534 num = get_number (&p);
10535 if (num == 0)
10536 error (_("bad breakpoint number: '%s'"), args);
10537 if (*p == 0)
10538 error (_("Second argument (specified ignore-count) is missing."));
10539
10540 set_ignore_count (num,
10541 longest_to_int (value_as_long (parse_and_eval (p))),
10542 from_tty);
10543 if (from_tty)
10544 printf_filtered ("\n");
10545 }
10546 \f
10547 /* Call FUNCTION on each of the breakpoints
10548 whose numbers are given in ARGS. */
10549
10550 static void
10551 map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *,
10552 void *),
10553 void *data)
10554 {
10555 char *p = args;
10556 char *p1;
10557 int num;
10558 struct breakpoint *b, *tmp;
10559 int match;
10560
10561 if (p == 0)
10562 error_no_arg (_("one or more breakpoint numbers"));
10563
10564 while (*p)
10565 {
10566 match = 0;
10567 p1 = p;
10568
10569 num = get_number_or_range (&p1);
10570 if (num == 0)
10571 {
10572 warning (_("bad breakpoint number at or near '%s'"), p);
10573 }
10574 else
10575 {
10576 ALL_BREAKPOINTS_SAFE (b, tmp)
10577 if (b->number == num)
10578 {
10579 struct breakpoint *related_breakpoint = b->related_breakpoint;
10580 match = 1;
10581 function (b, data);
10582 if (related_breakpoint)
10583 function (related_breakpoint, data);
10584 break;
10585 }
10586 if (match == 0)
10587 printf_unfiltered (_("No breakpoint number %d.\n"), num);
10588 }
10589 p = p1;
10590 }
10591 }
10592
10593 static struct bp_location *
10594 find_location_by_number (char *number)
10595 {
10596 char *dot = strchr (number, '.');
10597 char *p1;
10598 int bp_num;
10599 int loc_num;
10600 struct breakpoint *b;
10601 struct bp_location *loc;
10602
10603 *dot = '\0';
10604
10605 p1 = number;
10606 bp_num = get_number_or_range (&p1);
10607 if (bp_num == 0)
10608 error (_("Bad breakpoint number '%s'"), number);
10609
10610 ALL_BREAKPOINTS (b)
10611 if (b->number == bp_num)
10612 {
10613 break;
10614 }
10615
10616 if (!b || b->number != bp_num)
10617 error (_("Bad breakpoint number '%s'"), number);
10618
10619 p1 = dot+1;
10620 loc_num = get_number_or_range (&p1);
10621 if (loc_num == 0)
10622 error (_("Bad breakpoint location number '%s'"), number);
10623
10624 --loc_num;
10625 loc = b->loc;
10626 for (;loc_num && loc; --loc_num, loc = loc->next)
10627 ;
10628 if (!loc)
10629 error (_("Bad breakpoint location number '%s'"), dot+1);
10630
10631 return loc;
10632 }
10633
10634
10635 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
10636 If from_tty is nonzero, it prints a message to that effect,
10637 which ends with a period (no newline). */
10638
10639 void
10640 disable_breakpoint (struct breakpoint *bpt)
10641 {
10642 /* Never disable a watchpoint scope breakpoint; we want to
10643 hit them when we leave scope so we can delete both the
10644 watchpoint and its scope breakpoint at that time. */
10645 if (bpt->type == bp_watchpoint_scope)
10646 return;
10647
10648 /* You can't disable permanent breakpoints. */
10649 if (bpt->enable_state == bp_permanent)
10650 return;
10651
10652 bpt->enable_state = bp_disabled;
10653
10654 update_global_location_list (0);
10655
10656 observer_notify_breakpoint_modified (bpt->number);
10657 }
10658
10659 /* A callback for map_breakpoint_numbers that calls
10660 disable_breakpoint. */
10661
10662 static void
10663 do_map_disable_breakpoint (struct breakpoint *b, void *ignore)
10664 {
10665 disable_breakpoint (b);
10666 }
10667
10668 static void
10669 disable_command (char *args, int from_tty)
10670 {
10671 struct breakpoint *bpt;
10672
10673 if (args == 0)
10674 ALL_BREAKPOINTS (bpt)
10675 switch (bpt->type)
10676 {
10677 case bp_none:
10678 warning (_("attempted to disable apparently deleted breakpoint #%d?"),
10679 bpt->number);
10680 continue;
10681 case bp_breakpoint:
10682 case bp_tracepoint:
10683 case bp_fast_tracepoint:
10684 case bp_static_tracepoint:
10685 case bp_catchpoint:
10686 case bp_hardware_breakpoint:
10687 case bp_watchpoint:
10688 case bp_hardware_watchpoint:
10689 case bp_read_watchpoint:
10690 case bp_access_watchpoint:
10691 disable_breakpoint (bpt);
10692 default:
10693 continue;
10694 }
10695 else if (strchr (args, '.'))
10696 {
10697 struct bp_location *loc = find_location_by_number (args);
10698 if (loc)
10699 loc->enabled = 0;
10700 update_global_location_list (0);
10701 }
10702 else
10703 map_breakpoint_numbers (args, do_map_disable_breakpoint, NULL);
10704 }
10705
10706 static void
10707 do_enable_breakpoint (struct breakpoint *bpt, enum bpdisp disposition)
10708 {
10709 int target_resources_ok;
10710
10711 if (bpt->type == bp_hardware_breakpoint)
10712 {
10713 int i;
10714 i = hw_breakpoint_used_count ();
10715 target_resources_ok =
10716 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
10717 i + 1, 0);
10718 if (target_resources_ok == 0)
10719 error (_("No hardware breakpoint support in the target."));
10720 else if (target_resources_ok < 0)
10721 error (_("Hardware breakpoints used exceeds limit."));
10722 }
10723
10724 if (is_watchpoint (bpt))
10725 {
10726 struct gdb_exception e;
10727
10728 TRY_CATCH (e, RETURN_MASK_ALL)
10729 {
10730 update_watchpoint (bpt, 1 /* reparse */);
10731 }
10732 if (e.reason < 0)
10733 {
10734 exception_fprintf (gdb_stderr, e, _("Cannot enable watchpoint %d: "),
10735 bpt->number);
10736 return;
10737 }
10738 }
10739
10740 if (bpt->enable_state != bp_permanent)
10741 bpt->enable_state = bp_enabled;
10742 bpt->disposition = disposition;
10743 update_global_location_list (1);
10744 breakpoints_changed ();
10745
10746 observer_notify_breakpoint_modified (bpt->number);
10747 }
10748
10749
10750 void
10751 enable_breakpoint (struct breakpoint *bpt)
10752 {
10753 do_enable_breakpoint (bpt, bpt->disposition);
10754 }
10755
10756 /* A callback for map_breakpoint_numbers that calls
10757 enable_breakpoint. */
10758
10759 static void
10760 do_map_enable_breakpoint (struct breakpoint *b, void *ignore)
10761 {
10762 enable_breakpoint (b);
10763 }
10764
10765 /* The enable command enables the specified breakpoints (or all defined
10766 breakpoints) so they once again become (or continue to be) effective
10767 in stopping the inferior. */
10768
10769 static void
10770 enable_command (char *args, int from_tty)
10771 {
10772 struct breakpoint *bpt;
10773
10774 if (args == 0)
10775 ALL_BREAKPOINTS (bpt)
10776 switch (bpt->type)
10777 {
10778 case bp_none:
10779 warning (_("attempted to enable apparently deleted breakpoint #%d?"),
10780 bpt->number);
10781 continue;
10782 case bp_breakpoint:
10783 case bp_tracepoint:
10784 case bp_fast_tracepoint:
10785 case bp_static_tracepoint:
10786 case bp_catchpoint:
10787 case bp_hardware_breakpoint:
10788 case bp_watchpoint:
10789 case bp_hardware_watchpoint:
10790 case bp_read_watchpoint:
10791 case bp_access_watchpoint:
10792 enable_breakpoint (bpt);
10793 default:
10794 continue;
10795 }
10796 else if (strchr (args, '.'))
10797 {
10798 struct bp_location *loc = find_location_by_number (args);
10799 if (loc)
10800 loc->enabled = 1;
10801 update_global_location_list (1);
10802 }
10803 else
10804 map_breakpoint_numbers (args, do_map_enable_breakpoint, NULL);
10805 }
10806
10807 static void
10808 enable_once_breakpoint (struct breakpoint *bpt, void *ignore)
10809 {
10810 do_enable_breakpoint (bpt, disp_disable);
10811 }
10812
10813 static void
10814 enable_once_command (char *args, int from_tty)
10815 {
10816 map_breakpoint_numbers (args, enable_once_breakpoint, NULL);
10817 }
10818
10819 static void
10820 enable_delete_breakpoint (struct breakpoint *bpt, void *ignore)
10821 {
10822 do_enable_breakpoint (bpt, disp_del);
10823 }
10824
10825 static void
10826 enable_delete_command (char *args, int from_tty)
10827 {
10828 map_breakpoint_numbers (args, enable_delete_breakpoint, NULL);
10829 }
10830 \f
10831 static void
10832 set_breakpoint_cmd (char *args, int from_tty)
10833 {
10834 }
10835
10836 static void
10837 show_breakpoint_cmd (char *args, int from_tty)
10838 {
10839 }
10840
10841 /* Invalidate last known value of any hardware watchpoint if
10842 the memory which that value represents has been written to by
10843 GDB itself. */
10844
10845 static void
10846 invalidate_bp_value_on_memory_change (CORE_ADDR addr, int len,
10847 const bfd_byte *data)
10848 {
10849 struct breakpoint *bp;
10850
10851 ALL_BREAKPOINTS (bp)
10852 if (bp->enable_state == bp_enabled
10853 && bp->type == bp_hardware_watchpoint
10854 && bp->val_valid && bp->val)
10855 {
10856 struct bp_location *loc;
10857
10858 for (loc = bp->loc; loc != NULL; loc = loc->next)
10859 if (loc->loc_type == bp_loc_hardware_watchpoint
10860 && loc->address + loc->length > addr
10861 && addr + len > loc->address)
10862 {
10863 value_free (bp->val);
10864 bp->val = NULL;
10865 bp->val_valid = 0;
10866 }
10867 }
10868 }
10869
10870 /* Use default_breakpoint_'s, or nothing if they aren't valid. */
10871
10872 struct symtabs_and_lines
10873 decode_line_spec_1 (char *string, int funfirstline)
10874 {
10875 struct symtabs_and_lines sals;
10876
10877 if (string == 0)
10878 error (_("Empty line specification."));
10879 if (default_breakpoint_valid)
10880 sals = decode_line_1 (&string, funfirstline,
10881 default_breakpoint_symtab,
10882 default_breakpoint_line,
10883 (char ***) NULL, NULL);
10884 else
10885 sals = decode_line_1 (&string, funfirstline,
10886 (struct symtab *) NULL, 0, (char ***) NULL, NULL);
10887 if (*string)
10888 error (_("Junk at end of line specification: %s"), string);
10889 return sals;
10890 }
10891
10892 /* Create and insert a raw software breakpoint at PC. Return an
10893 identifier, which should be used to remove the breakpoint later.
10894 In general, places which call this should be using something on the
10895 breakpoint chain instead; this function should be eliminated
10896 someday. */
10897
10898 void *
10899 deprecated_insert_raw_breakpoint (struct gdbarch *gdbarch,
10900 struct address_space *aspace, CORE_ADDR pc)
10901 {
10902 struct bp_target_info *bp_tgt;
10903
10904 bp_tgt = XZALLOC (struct bp_target_info);
10905
10906 bp_tgt->placed_address_space = aspace;
10907 bp_tgt->placed_address = pc;
10908
10909 if (target_insert_breakpoint (gdbarch, bp_tgt) != 0)
10910 {
10911 /* Could not insert the breakpoint. */
10912 xfree (bp_tgt);
10913 return NULL;
10914 }
10915
10916 return bp_tgt;
10917 }
10918
10919 /* Remove a breakpoint BP inserted by deprecated_insert_raw_breakpoint. */
10920
10921 int
10922 deprecated_remove_raw_breakpoint (struct gdbarch *gdbarch, void *bp)
10923 {
10924 struct bp_target_info *bp_tgt = bp;
10925 int ret;
10926
10927 ret = target_remove_breakpoint (gdbarch, bp_tgt);
10928 xfree (bp_tgt);
10929
10930 return ret;
10931 }
10932
10933 /* One (or perhaps two) breakpoints used for software single stepping. */
10934
10935 static void *single_step_breakpoints[2];
10936 static struct gdbarch *single_step_gdbarch[2];
10937
10938 /* Create and insert a breakpoint for software single step. */
10939
10940 void
10941 insert_single_step_breakpoint (struct gdbarch *gdbarch,
10942 struct address_space *aspace, CORE_ADDR next_pc)
10943 {
10944 void **bpt_p;
10945
10946 if (single_step_breakpoints[0] == NULL)
10947 {
10948 bpt_p = &single_step_breakpoints[0];
10949 single_step_gdbarch[0] = gdbarch;
10950 }
10951 else
10952 {
10953 gdb_assert (single_step_breakpoints[1] == NULL);
10954 bpt_p = &single_step_breakpoints[1];
10955 single_step_gdbarch[1] = gdbarch;
10956 }
10957
10958 /* NOTE drow/2006-04-11: A future improvement to this function would be
10959 to only create the breakpoints once, and actually put them on the
10960 breakpoint chain. That would let us use set_raw_breakpoint. We could
10961 adjust the addresses each time they were needed. Doing this requires
10962 corresponding changes elsewhere where single step breakpoints are
10963 handled, however. So, for now, we use this. */
10964
10965 *bpt_p = deprecated_insert_raw_breakpoint (gdbarch, aspace, next_pc);
10966 if (*bpt_p == NULL)
10967 error (_("Could not insert single-step breakpoint at %s"),
10968 paddress (gdbarch, next_pc));
10969 }
10970
10971 /* Check if the breakpoints used for software single stepping
10972 were inserted or not. */
10973
10974 int
10975 single_step_breakpoints_inserted (void)
10976 {
10977 return (single_step_breakpoints[0] != NULL
10978 || single_step_breakpoints[1] != NULL);
10979 }
10980
10981 /* Remove and delete any breakpoints used for software single step. */
10982
10983 void
10984 remove_single_step_breakpoints (void)
10985 {
10986 gdb_assert (single_step_breakpoints[0] != NULL);
10987
10988 /* See insert_single_step_breakpoint for more about this deprecated
10989 call. */
10990 deprecated_remove_raw_breakpoint (single_step_gdbarch[0],
10991 single_step_breakpoints[0]);
10992 single_step_gdbarch[0] = NULL;
10993 single_step_breakpoints[0] = NULL;
10994
10995 if (single_step_breakpoints[1] != NULL)
10996 {
10997 deprecated_remove_raw_breakpoint (single_step_gdbarch[1],
10998 single_step_breakpoints[1]);
10999 single_step_gdbarch[1] = NULL;
11000 single_step_breakpoints[1] = NULL;
11001 }
11002 }
11003
11004 /* Delete software single step breakpoints without removing them from
11005 the inferior. This is intended to be used if the inferior's address
11006 space where they were inserted is already gone, e.g. after exit or
11007 exec. */
11008
11009 void
11010 cancel_single_step_breakpoints (void)
11011 {
11012 int i;
11013
11014 for (i = 0; i < 2; i++)
11015 if (single_step_breakpoints[i])
11016 {
11017 xfree (single_step_breakpoints[i]);
11018 single_step_breakpoints[i] = NULL;
11019 single_step_gdbarch[i] = NULL;
11020 }
11021 }
11022
11023 /* Detach software single-step breakpoints from INFERIOR_PTID without
11024 removing them. */
11025
11026 static void
11027 detach_single_step_breakpoints (void)
11028 {
11029 int i;
11030
11031 for (i = 0; i < 2; i++)
11032 if (single_step_breakpoints[i])
11033 target_remove_breakpoint (single_step_gdbarch[i],
11034 single_step_breakpoints[i]);
11035 }
11036
11037 /* Check whether a software single-step breakpoint is inserted at PC. */
11038
11039 static int
11040 single_step_breakpoint_inserted_here_p (struct address_space *aspace,
11041 CORE_ADDR pc)
11042 {
11043 int i;
11044
11045 for (i = 0; i < 2; i++)
11046 {
11047 struct bp_target_info *bp_tgt = single_step_breakpoints[i];
11048 if (bp_tgt
11049 && breakpoint_address_match (bp_tgt->placed_address_space,
11050 bp_tgt->placed_address,
11051 aspace, pc))
11052 return 1;
11053 }
11054
11055 return 0;
11056 }
11057
11058 /* Returns 0 if 'bp' is NOT a syscall catchpoint,
11059 non-zero otherwise. */
11060 static int
11061 is_syscall_catchpoint_enabled (struct breakpoint *bp)
11062 {
11063 if (syscall_catchpoint_p (bp)
11064 && bp->enable_state != bp_disabled
11065 && bp->enable_state != bp_call_disabled)
11066 return 1;
11067 else
11068 return 0;
11069 }
11070
11071 int
11072 catch_syscall_enabled (void)
11073 {
11074 struct inferior *inf = current_inferior ();
11075
11076 return inf->total_syscalls_count != 0;
11077 }
11078
11079 int
11080 catching_syscall_number (int syscall_number)
11081 {
11082 struct breakpoint *bp;
11083
11084 ALL_BREAKPOINTS (bp)
11085 if (is_syscall_catchpoint_enabled (bp))
11086 {
11087 if (bp->syscalls_to_be_caught)
11088 {
11089 int i, iter;
11090 for (i = 0;
11091 VEC_iterate (int, bp->syscalls_to_be_caught, i, iter);
11092 i++)
11093 if (syscall_number == iter)
11094 return 1;
11095 }
11096 else
11097 return 1;
11098 }
11099
11100 return 0;
11101 }
11102
11103 /* Complete syscall names. Used by "catch syscall". */
11104 static char **
11105 catch_syscall_completer (struct cmd_list_element *cmd,
11106 char *text, char *word)
11107 {
11108 const char **list = get_syscall_names ();
11109
11110 return (list == NULL) ? NULL : complete_on_enum (list, text, word);
11111 }
11112
11113 /* Tracepoint-specific operations. */
11114
11115 /* Set tracepoint count to NUM. */
11116 static void
11117 set_tracepoint_count (int num)
11118 {
11119 tracepoint_count = num;
11120 set_internalvar_integer (lookup_internalvar ("tpnum"), num);
11121 }
11122
11123 void
11124 trace_command (char *arg, int from_tty)
11125 {
11126 if (create_breakpoint (get_current_arch (),
11127 arg,
11128 NULL, 0, 1 /* parse arg */,
11129 0 /* tempflag */,
11130 bp_tracepoint /* type_wanted */,
11131 0 /* Ignore count */,
11132 pending_break_support,
11133 NULL,
11134 from_tty,
11135 1 /* enabled */,
11136 0 /* internal */))
11137 set_tracepoint_count (breakpoint_count);
11138 }
11139
11140 void
11141 ftrace_command (char *arg, int from_tty)
11142 {
11143 if (create_breakpoint (get_current_arch (),
11144 arg,
11145 NULL, 0, 1 /* parse arg */,
11146 0 /* tempflag */,
11147 bp_fast_tracepoint /* type_wanted */,
11148 0 /* Ignore count */,
11149 pending_break_support,
11150 NULL,
11151 from_tty,
11152 1 /* enabled */,
11153 0 /* internal */))
11154 set_tracepoint_count (breakpoint_count);
11155 }
11156
11157 /* strace command implementation. Creates a static tracepoint. */
11158
11159 void
11160 strace_command (char *arg, int from_tty)
11161 {
11162 if (create_breakpoint (get_current_arch (),
11163 arg,
11164 NULL, 0, 1 /* parse arg */,
11165 0 /* tempflag */,
11166 bp_static_tracepoint /* type_wanted */,
11167 0 /* Ignore count */,
11168 pending_break_support,
11169 NULL,
11170 from_tty,
11171 1 /* enabled */,
11172 0 /* internal */))
11173 set_tracepoint_count (breakpoint_count);
11174 }
11175
11176 /* Set up a fake reader function that gets command lines from a linked
11177 list that was acquired during tracepoint uploading. */
11178
11179 static struct uploaded_tp *this_utp;
11180 static int next_cmd;
11181
11182 static char *
11183 read_uploaded_action (void)
11184 {
11185 char *rslt;
11186
11187 VEC_iterate (char_ptr, this_utp->cmd_strings, next_cmd, rslt);
11188
11189 next_cmd++;
11190
11191 return rslt;
11192 }
11193
11194 /* Given information about a tracepoint as recorded on a target (which
11195 can be either a live system or a trace file), attempt to create an
11196 equivalent GDB tracepoint. This is not a reliable process, since
11197 the target does not necessarily have all the information used when
11198 the tracepoint was originally defined. */
11199
11200 struct breakpoint *
11201 create_tracepoint_from_upload (struct uploaded_tp *utp)
11202 {
11203 char *addr_str, small_buf[100];
11204 struct breakpoint *tp;
11205
11206 if (utp->at_string)
11207 addr_str = utp->at_string;
11208 else
11209 {
11210 /* In the absence of a source location, fall back to raw
11211 address. Since there is no way to confirm that the address
11212 means the same thing as when the trace was started, warn the
11213 user. */
11214 warning (_("Uploaded tracepoint %d has no source location, using raw address"),
11215 utp->number);
11216 sprintf (small_buf, "*%s", hex_string (utp->addr));
11217 addr_str = small_buf;
11218 }
11219
11220 /* There's not much we can do with a sequence of bytecodes. */
11221 if (utp->cond && !utp->cond_string)
11222 warning (_("Uploaded tracepoint %d condition has no source form, ignoring it"),
11223 utp->number);
11224
11225 if (!create_breakpoint (get_current_arch (),
11226 addr_str,
11227 utp->cond_string, -1, 0 /* parse cond/thread */,
11228 0 /* tempflag */,
11229 utp->type /* type_wanted */,
11230 0 /* Ignore count */,
11231 pending_break_support,
11232 NULL,
11233 0 /* from_tty */,
11234 utp->enabled /* enabled */,
11235 0 /* internal */))
11236 return NULL;
11237
11238 set_tracepoint_count (breakpoint_count);
11239
11240 /* Get the tracepoint we just created. */
11241 tp = get_tracepoint (tracepoint_count);
11242 gdb_assert (tp != NULL);
11243
11244 if (utp->pass > 0)
11245 {
11246 sprintf (small_buf, "%d %d", utp->pass, tp->number);
11247
11248 trace_pass_command (small_buf, 0);
11249 }
11250
11251 /* If we have uploaded versions of the original commands, set up a
11252 special-purpose "reader" function and call the usual command line
11253 reader, then pass the result to the breakpoint command-setting
11254 function. */
11255 if (!VEC_empty (char_ptr, utp->cmd_strings))
11256 {
11257 struct command_line *cmd_list;
11258
11259 this_utp = utp;
11260 next_cmd = 0;
11261
11262 cmd_list = read_command_lines_1 (read_uploaded_action, 1, NULL, NULL);
11263
11264 breakpoint_set_commands (tp, cmd_list);
11265 }
11266 else if (!VEC_empty (char_ptr, utp->actions)
11267 || !VEC_empty (char_ptr, utp->step_actions))
11268 warning (_("Uploaded tracepoint %d actions have no source form, ignoring them"),
11269 utp->number);
11270
11271 return tp;
11272 }
11273
11274 /* Print information on tracepoint number TPNUM_EXP, or all if
11275 omitted. */
11276
11277 static void
11278 tracepoints_info (char *tpnum_exp, int from_tty)
11279 {
11280 int tpnum = -1, num_printed;
11281
11282 if (tpnum_exp)
11283 tpnum = parse_and_eval_long (tpnum_exp);
11284
11285 num_printed = breakpoint_1 (tpnum, 0, is_tracepoint);
11286
11287 if (num_printed == 0)
11288 {
11289 if (tpnum == -1)
11290 ui_out_message (uiout, 0, "No tracepoints.\n");
11291 else
11292 ui_out_message (uiout, 0, "No tracepoint number %d.\n", tpnum);
11293 }
11294
11295 default_collect_info ();
11296 }
11297
11298 /* The 'enable trace' command enables tracepoints.
11299 Not supported by all targets. */
11300 static void
11301 enable_trace_command (char *args, int from_tty)
11302 {
11303 enable_command (args, from_tty);
11304 }
11305
11306 /* The 'disable trace' command disables tracepoints.
11307 Not supported by all targets. */
11308 static void
11309 disable_trace_command (char *args, int from_tty)
11310 {
11311 disable_command (args, from_tty);
11312 }
11313
11314 /* Remove a tracepoint (or all if no argument) */
11315 static void
11316 delete_trace_command (char *arg, int from_tty)
11317 {
11318 struct breakpoint *b, *temp;
11319
11320 dont_repeat ();
11321
11322 if (arg == 0)
11323 {
11324 int breaks_to_delete = 0;
11325
11326 /* Delete all breakpoints if no argument.
11327 Do not delete internal or call-dummy breakpoints, these
11328 have to be deleted with an explicit breakpoint number argument. */
11329 ALL_TRACEPOINTS (b)
11330 {
11331 if (b->number >= 0)
11332 {
11333 breaks_to_delete = 1;
11334 break;
11335 }
11336 }
11337
11338 /* Ask user only if there are some breakpoints to delete. */
11339 if (!from_tty
11340 || (breaks_to_delete && query (_("Delete all tracepoints? "))))
11341 {
11342 ALL_BREAKPOINTS_SAFE (b, temp)
11343 {
11344 if (is_tracepoint (b)
11345 && b->number >= 0)
11346 delete_breakpoint (b);
11347 }
11348 }
11349 }
11350 else
11351 map_breakpoint_numbers (arg, do_delete_breakpoint, NULL);
11352 }
11353
11354 /* Set passcount for tracepoint.
11355
11356 First command argument is passcount, second is tracepoint number.
11357 If tracepoint number omitted, apply to most recently defined.
11358 Also accepts special argument "all". */
11359
11360 static void
11361 trace_pass_command (char *args, int from_tty)
11362 {
11363 struct breakpoint *t1 = (struct breakpoint *) -1, *t2;
11364 unsigned int count;
11365 int all = 0;
11366
11367 if (args == 0 || *args == 0)
11368 error (_("passcount command requires an argument (count + optional TP num)"));
11369
11370 count = strtoul (args, &args, 10); /* Count comes first, then TP num. */
11371
11372 while (*args && isspace ((int) *args))
11373 args++;
11374
11375 if (*args && strncasecmp (args, "all", 3) == 0)
11376 {
11377 args += 3; /* Skip special argument "all". */
11378 all = 1;
11379 if (*args)
11380 error (_("Junk at end of arguments."));
11381 }
11382 else
11383 t1 = get_tracepoint_by_number (&args, 1, 1);
11384
11385 do
11386 {
11387 if (t1)
11388 {
11389 ALL_TRACEPOINTS (t2)
11390 if (t1 == (struct breakpoint *) -1 || t1 == t2)
11391 {
11392 t2->pass_count = count;
11393 observer_notify_tracepoint_modified (t2->number);
11394 if (from_tty)
11395 printf_filtered (_("Setting tracepoint %d's passcount to %d\n"),
11396 t2->number, count);
11397 }
11398 if (! all && *args)
11399 t1 = get_tracepoint_by_number (&args, 1, 0);
11400 }
11401 }
11402 while (*args);
11403 }
11404
11405 struct breakpoint *
11406 get_tracepoint (int num)
11407 {
11408 struct breakpoint *t;
11409
11410 ALL_TRACEPOINTS (t)
11411 if (t->number == num)
11412 return t;
11413
11414 return NULL;
11415 }
11416
11417 /* Find the tracepoint with the given target-side number (which may be
11418 different from the tracepoint number after disconnecting and
11419 reconnecting). */
11420
11421 struct breakpoint *
11422 get_tracepoint_by_number_on_target (int num)
11423 {
11424 struct breakpoint *t;
11425
11426 ALL_TRACEPOINTS (t)
11427 if (t->number_on_target == num)
11428 return t;
11429
11430 return NULL;
11431 }
11432
11433 /* Utility: parse a tracepoint number and look it up in the list.
11434 If MULTI_P is true, there might be a range of tracepoints in ARG.
11435 if OPTIONAL_P is true, then if the argument is missing, the most
11436 recent tracepoint (tracepoint_count) is returned. */
11437 struct breakpoint *
11438 get_tracepoint_by_number (char **arg, int multi_p, int optional_p)
11439 {
11440 extern int tracepoint_count;
11441 struct breakpoint *t;
11442 int tpnum;
11443 char *instring = arg == NULL ? NULL : *arg;
11444
11445 if (arg == NULL || *arg == NULL || ! **arg)
11446 {
11447 if (optional_p)
11448 tpnum = tracepoint_count;
11449 else
11450 error_no_arg (_("tracepoint number"));
11451 }
11452 else
11453 tpnum = multi_p ? get_number_or_range (arg) : get_number (arg);
11454
11455 if (tpnum <= 0)
11456 {
11457 if (instring && *instring)
11458 printf_filtered (_("bad tracepoint number at or near '%s'\n"),
11459 instring);
11460 else
11461 printf_filtered (_("Tracepoint argument missing and no previous tracepoint\n"));
11462 return NULL;
11463 }
11464
11465 ALL_TRACEPOINTS (t)
11466 if (t->number == tpnum)
11467 {
11468 return t;
11469 }
11470
11471 /* FIXME: if we are in the middle of a range we don't want to give
11472 a message. The current interface to get_number_or_range doesn't
11473 allow us to discover this. */
11474 printf_unfiltered ("No tracepoint number %d.\n", tpnum);
11475 return NULL;
11476 }
11477
11478 /* Save information on user settable breakpoints (watchpoints, etc) to
11479 a new script file named FILENAME. If FILTER is non-NULL, call it
11480 on each breakpoint and only include the ones for which it returns
11481 non-zero. */
11482
11483 static void
11484 save_breakpoints (char *filename, int from_tty,
11485 int (*filter) (const struct breakpoint *))
11486 {
11487 struct breakpoint *tp;
11488 int any = 0;
11489 char *pathname;
11490 struct cleanup *cleanup;
11491 struct ui_file *fp;
11492 int extra_trace_bits = 0;
11493
11494 if (filename == 0 || *filename == 0)
11495 error (_("Argument required (file name in which to save)"));
11496
11497 /* See if we have anything to save. */
11498 ALL_BREAKPOINTS (tp)
11499 {
11500 /* Skip internal and momentary breakpoints. */
11501 if (!user_settable_breakpoint (tp) || tp->number < 0)
11502 continue;
11503
11504 /* If we have a filter, only save the breakpoints it accepts. */
11505 if (filter && !filter (tp))
11506 continue;
11507
11508 any = 1;
11509
11510 if (is_tracepoint (tp))
11511 {
11512 extra_trace_bits = 1;
11513
11514 /* We can stop searching. */
11515 break;
11516 }
11517 }
11518
11519 if (!any)
11520 {
11521 warning (_("Nothing to save."));
11522 return;
11523 }
11524
11525 pathname = tilde_expand (filename);
11526 cleanup = make_cleanup (xfree, pathname);
11527 fp = gdb_fopen (pathname, "w");
11528 if (!fp)
11529 error (_("Unable to open file '%s' for saving (%s)"),
11530 filename, safe_strerror (errno));
11531 make_cleanup_ui_file_delete (fp);
11532
11533 if (extra_trace_bits)
11534 save_trace_state_variables (fp);
11535
11536 ALL_BREAKPOINTS (tp)
11537 {
11538 /* Skip internal and momentary breakpoints. */
11539 if (!user_settable_breakpoint (tp) || tp->number < 0)
11540 continue;
11541
11542 /* If we have a filter, only save the breakpoints it accepts. */
11543 if (filter && !filter (tp))
11544 continue;
11545
11546 if (tp->ops != NULL)
11547 (tp->ops->print_recreate) (tp, fp);
11548 else
11549 {
11550 if (tp->type == bp_fast_tracepoint)
11551 fprintf_unfiltered (fp, "ftrace");
11552 if (tp->type == bp_static_tracepoint)
11553 fprintf_unfiltered (fp, "strace");
11554 else if (tp->type == bp_tracepoint)
11555 fprintf_unfiltered (fp, "trace");
11556 else if (tp->type == bp_breakpoint && tp->disposition == disp_del)
11557 fprintf_unfiltered (fp, "tbreak");
11558 else if (tp->type == bp_breakpoint)
11559 fprintf_unfiltered (fp, "break");
11560 else if (tp->type == bp_hardware_breakpoint
11561 && tp->disposition == disp_del)
11562 fprintf_unfiltered (fp, "thbreak");
11563 else if (tp->type == bp_hardware_breakpoint)
11564 fprintf_unfiltered (fp, "hbreak");
11565 else if (tp->type == bp_watchpoint)
11566 fprintf_unfiltered (fp, "watch");
11567 else if (tp->type == bp_hardware_watchpoint)
11568 fprintf_unfiltered (fp, "watch");
11569 else if (tp->type == bp_read_watchpoint)
11570 fprintf_unfiltered (fp, "rwatch");
11571 else if (tp->type == bp_access_watchpoint)
11572 fprintf_unfiltered (fp, "awatch");
11573 else
11574 internal_error (__FILE__, __LINE__,
11575 _("unhandled breakpoint type %d"), (int) tp->type);
11576
11577 if (tp->exp_string)
11578 fprintf_unfiltered (fp, " %s", tp->exp_string);
11579 else if (tp->addr_string)
11580 fprintf_unfiltered (fp, " %s", tp->addr_string);
11581 else
11582 {
11583 char tmp[40];
11584
11585 sprintf_vma (tmp, tp->loc->address);
11586 fprintf_unfiltered (fp, " *0x%s", tmp);
11587 }
11588 }
11589
11590 if (tp->thread != -1)
11591 fprintf_unfiltered (fp, " thread %d", tp->thread);
11592
11593 if (tp->task != 0)
11594 fprintf_unfiltered (fp, " task %d", tp->task);
11595
11596 fprintf_unfiltered (fp, "\n");
11597
11598 /* Note, we can't rely on tp->number for anything, as we can't
11599 assume the recreated breakpoint numbers will match. Use $bpnum
11600 instead. */
11601
11602 if (tp->cond_string)
11603 fprintf_unfiltered (fp, " condition $bpnum %s\n", tp->cond_string);
11604
11605 if (tp->ignore_count)
11606 fprintf_unfiltered (fp, " ignore $bpnum %d\n", tp->ignore_count);
11607
11608 if (tp->pass_count)
11609 fprintf_unfiltered (fp, " passcount %d\n", tp->pass_count);
11610
11611 if (tp->commands)
11612 {
11613 volatile struct gdb_exception ex;
11614
11615 fprintf_unfiltered (fp, " commands\n");
11616
11617 ui_out_redirect (uiout, fp);
11618 TRY_CATCH (ex, RETURN_MASK_ALL)
11619 {
11620 print_command_lines (uiout, tp->commands->commands, 2);
11621 }
11622 ui_out_redirect (uiout, NULL);
11623
11624 if (ex.reason < 0)
11625 throw_exception (ex);
11626
11627 fprintf_unfiltered (fp, " end\n");
11628 }
11629
11630 if (tp->enable_state == bp_disabled)
11631 fprintf_unfiltered (fp, "disable\n");
11632
11633 /* If this is a multi-location breakpoint, check if the locations
11634 should be individually disabled. Watchpoint locations are
11635 special, and not user visible. */
11636 if (!is_watchpoint (tp) && tp->loc && tp->loc->next)
11637 {
11638 struct bp_location *loc;
11639 int n = 1;
11640
11641 for (loc = tp->loc; loc != NULL; loc = loc->next, n++)
11642 if (!loc->enabled)
11643 fprintf_unfiltered (fp, "disable $bpnum.%d\n", n);
11644 }
11645 }
11646
11647 if (extra_trace_bits && *default_collect)
11648 fprintf_unfiltered (fp, "set default-collect %s\n", default_collect);
11649
11650 do_cleanups (cleanup);
11651 if (from_tty)
11652 printf_filtered (_("Saved to file '%s'.\n"), filename);
11653 }
11654
11655 /* The `save breakpoints' command. */
11656
11657 static void
11658 save_breakpoints_command (char *args, int from_tty)
11659 {
11660 save_breakpoints (args, from_tty, NULL);
11661 }
11662
11663 /* The `save tracepoints' command. */
11664
11665 static void
11666 save_tracepoints_command (char *args, int from_tty)
11667 {
11668 save_breakpoints (args, from_tty, is_tracepoint);
11669 }
11670
11671 /* Create a vector of all tracepoints. */
11672
11673 VEC(breakpoint_p) *
11674 all_tracepoints ()
11675 {
11676 VEC(breakpoint_p) *tp_vec = 0;
11677 struct breakpoint *tp;
11678
11679 ALL_TRACEPOINTS (tp)
11680 {
11681 VEC_safe_push (breakpoint_p, tp_vec, tp);
11682 }
11683
11684 return tp_vec;
11685 }
11686
11687 \f
11688 /* This help string is used for the break, hbreak, tbreak and thbreak commands.
11689 It is defined as a macro to prevent duplication.
11690 COMMAND should be a string constant containing the name of the command. */
11691 #define BREAK_ARGS_HELP(command) \
11692 command" [LOCATION] [thread THREADNUM] [if CONDITION]\n\
11693 LOCATION may be a line number, function name, or \"*\" and an address.\n\
11694 If a line number is specified, break at start of code for that line.\n\
11695 If a function is specified, break at start of code for that function.\n\
11696 If an address is specified, break at that exact address.\n\
11697 With no LOCATION, uses current execution address of the selected\n\
11698 stack frame. This is useful for breaking on return to a stack frame.\n\
11699 \n\
11700 THREADNUM is the number from \"info threads\".\n\
11701 CONDITION is a boolean expression.\n\
11702 \n\
11703 Multiple breakpoints at one place are permitted, and useful if their\n\
11704 conditions are different.\n\
11705 \n\
11706 Do \"help breakpoints\" for info on other commands dealing with breakpoints."
11707
11708 /* List of subcommands for "catch". */
11709 static struct cmd_list_element *catch_cmdlist;
11710
11711 /* List of subcommands for "tcatch". */
11712 static struct cmd_list_element *tcatch_cmdlist;
11713
11714 /* Like add_cmd, but add the command to both the "catch" and "tcatch"
11715 lists, and pass some additional user data to the command function. */
11716 static void
11717 add_catch_command (char *name, char *docstring,
11718 void (*sfunc) (char *args, int from_tty,
11719 struct cmd_list_element *command),
11720 char **(*completer) (struct cmd_list_element *cmd,
11721 char *text, char *word),
11722 void *user_data_catch,
11723 void *user_data_tcatch)
11724 {
11725 struct cmd_list_element *command;
11726
11727 command = add_cmd (name, class_breakpoint, NULL, docstring,
11728 &catch_cmdlist);
11729 set_cmd_sfunc (command, sfunc);
11730 set_cmd_context (command, user_data_catch);
11731 set_cmd_completer (command, completer);
11732
11733 command = add_cmd (name, class_breakpoint, NULL, docstring,
11734 &tcatch_cmdlist);
11735 set_cmd_sfunc (command, sfunc);
11736 set_cmd_context (command, user_data_tcatch);
11737 set_cmd_completer (command, completer);
11738 }
11739
11740 static void
11741 clear_syscall_counts (struct inferior *inf)
11742 {
11743 inf->total_syscalls_count = 0;
11744 inf->any_syscall_count = 0;
11745 VEC_free (int, inf->syscalls_counts);
11746 }
11747
11748 static void
11749 save_command (char *arg, int from_tty)
11750 {
11751 printf_unfiltered (_("\
11752 \"save\" must be followed by the name of a save subcommand.\n"));
11753 help_list (save_cmdlist, "save ", -1, gdb_stdout);
11754 }
11755
11756 struct breakpoint *
11757 iterate_over_breakpoints (int (*callback) (struct breakpoint *, void *),
11758 void *data)
11759 {
11760 struct breakpoint *b, *temp;
11761
11762 ALL_BREAKPOINTS_SAFE (b, temp)
11763 {
11764 if ((*callback) (b, data))
11765 return b;
11766 }
11767
11768 return NULL;
11769 }
11770
11771 void
11772 _initialize_breakpoint (void)
11773 {
11774 struct cmd_list_element *c;
11775
11776 observer_attach_solib_unloaded (disable_breakpoints_in_unloaded_shlib);
11777 observer_attach_inferior_exit (clear_syscall_counts);
11778 observer_attach_memory_changed (invalidate_bp_value_on_memory_change);
11779
11780 breakpoint_chain = 0;
11781 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
11782 before a breakpoint is set. */
11783 breakpoint_count = 0;
11784
11785 tracepoint_count = 0;
11786
11787 add_com ("ignore", class_breakpoint, ignore_command, _("\
11788 Set ignore-count of breakpoint number N to COUNT.\n\
11789 Usage is `ignore N COUNT'."));
11790 if (xdb_commands)
11791 add_com_alias ("bc", "ignore", class_breakpoint, 1);
11792
11793 add_com ("commands", class_breakpoint, commands_command, _("\
11794 Set commands to be executed when a breakpoint is hit.\n\
11795 Give breakpoint number as argument after \"commands\".\n\
11796 With no argument, the targeted breakpoint is the last one set.\n\
11797 The commands themselves follow starting on the next line.\n\
11798 Type a line containing \"end\" to indicate the end of them.\n\
11799 Give \"silent\" as the first line to make the breakpoint silent;\n\
11800 then no output is printed when it is hit, except what the commands print."));
11801
11802 add_com ("condition", class_breakpoint, condition_command, _("\
11803 Specify breakpoint number N to break only if COND is true.\n\
11804 Usage is `condition N COND', where N is an integer and COND is an\n\
11805 expression to be evaluated whenever breakpoint N is reached."));
11806
11807 c = add_com ("tbreak", class_breakpoint, tbreak_command, _("\
11808 Set a temporary breakpoint.\n\
11809 Like \"break\" except the breakpoint is only temporary,\n\
11810 so it will be deleted when hit. Equivalent to \"break\" followed\n\
11811 by using \"enable delete\" on the breakpoint number.\n\
11812 \n"
11813 BREAK_ARGS_HELP ("tbreak")));
11814 set_cmd_completer (c, location_completer);
11815
11816 c = add_com ("hbreak", class_breakpoint, hbreak_command, _("\
11817 Set a hardware assisted breakpoint.\n\
11818 Like \"break\" except the breakpoint requires hardware support,\n\
11819 some target hardware may not have this support.\n\
11820 \n"
11821 BREAK_ARGS_HELP ("hbreak")));
11822 set_cmd_completer (c, location_completer);
11823
11824 c = add_com ("thbreak", class_breakpoint, thbreak_command, _("\
11825 Set a temporary hardware assisted breakpoint.\n\
11826 Like \"hbreak\" except the breakpoint is only temporary,\n\
11827 so it will be deleted when hit.\n\
11828 \n"
11829 BREAK_ARGS_HELP ("thbreak")));
11830 set_cmd_completer (c, location_completer);
11831
11832 add_prefix_cmd ("enable", class_breakpoint, enable_command, _("\
11833 Enable some breakpoints.\n\
11834 Give breakpoint numbers (separated by spaces) as arguments.\n\
11835 With no subcommand, breakpoints are enabled until you command otherwise.\n\
11836 This is used to cancel the effect of the \"disable\" command.\n\
11837 With a subcommand you can enable temporarily."),
11838 &enablelist, "enable ", 1, &cmdlist);
11839 if (xdb_commands)
11840 add_com ("ab", class_breakpoint, enable_command, _("\
11841 Enable some breakpoints.\n\
11842 Give breakpoint numbers (separated by spaces) as arguments.\n\
11843 With no subcommand, breakpoints are enabled until you command otherwise.\n\
11844 This is used to cancel the effect of the \"disable\" command.\n\
11845 With a subcommand you can enable temporarily."));
11846
11847 add_com_alias ("en", "enable", class_breakpoint, 1);
11848
11849 add_prefix_cmd ("breakpoints", class_breakpoint, enable_command, _("\
11850 Enable some breakpoints.\n\
11851 Give breakpoint numbers (separated by spaces) as arguments.\n\
11852 This is used to cancel the effect of the \"disable\" command.\n\
11853 May be abbreviated to simply \"enable\".\n"),
11854 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
11855
11856 add_cmd ("once", no_class, enable_once_command, _("\
11857 Enable breakpoints for one hit. Give breakpoint numbers.\n\
11858 If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
11859 &enablebreaklist);
11860
11861 add_cmd ("delete", no_class, enable_delete_command, _("\
11862 Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
11863 If a breakpoint is hit while enabled in this fashion, it is deleted."),
11864 &enablebreaklist);
11865
11866 add_cmd ("delete", no_class, enable_delete_command, _("\
11867 Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
11868 If a breakpoint is hit while enabled in this fashion, it is deleted."),
11869 &enablelist);
11870
11871 add_cmd ("once", no_class, enable_once_command, _("\
11872 Enable breakpoints for one hit. Give breakpoint numbers.\n\
11873 If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
11874 &enablelist);
11875
11876 add_prefix_cmd ("disable", class_breakpoint, disable_command, _("\
11877 Disable some breakpoints.\n\
11878 Arguments are breakpoint numbers with spaces in between.\n\
11879 To disable all breakpoints, give no argument.\n\
11880 A disabled breakpoint is not forgotten, but has no effect until reenabled."),
11881 &disablelist, "disable ", 1, &cmdlist);
11882 add_com_alias ("dis", "disable", class_breakpoint, 1);
11883 add_com_alias ("disa", "disable", class_breakpoint, 1);
11884 if (xdb_commands)
11885 add_com ("sb", class_breakpoint, disable_command, _("\
11886 Disable some breakpoints.\n\
11887 Arguments are breakpoint numbers with spaces in between.\n\
11888 To disable all breakpoints, give no argument.\n\
11889 A disabled breakpoint is not forgotten, but has no effect until reenabled."));
11890
11891 add_cmd ("breakpoints", class_alias, disable_command, _("\
11892 Disable some breakpoints.\n\
11893 Arguments are breakpoint numbers with spaces in between.\n\
11894 To disable all breakpoints, give no argument.\n\
11895 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
11896 This command may be abbreviated \"disable\"."),
11897 &disablelist);
11898
11899 add_prefix_cmd ("delete", class_breakpoint, delete_command, _("\
11900 Delete some breakpoints or auto-display expressions.\n\
11901 Arguments are breakpoint numbers with spaces in between.\n\
11902 To delete all breakpoints, give no argument.\n\
11903 \n\
11904 Also a prefix command for deletion of other GDB objects.\n\
11905 The \"unset\" command is also an alias for \"delete\"."),
11906 &deletelist, "delete ", 1, &cmdlist);
11907 add_com_alias ("d", "delete", class_breakpoint, 1);
11908 add_com_alias ("del", "delete", class_breakpoint, 1);
11909 if (xdb_commands)
11910 add_com ("db", class_breakpoint, delete_command, _("\
11911 Delete some breakpoints.\n\
11912 Arguments are breakpoint numbers with spaces in between.\n\
11913 To delete all breakpoints, give no argument.\n"));
11914
11915 add_cmd ("breakpoints", class_alias, delete_command, _("\
11916 Delete some breakpoints or auto-display expressions.\n\
11917 Arguments are breakpoint numbers with spaces in between.\n\
11918 To delete all breakpoints, give no argument.\n\
11919 This command may be abbreviated \"delete\"."),
11920 &deletelist);
11921
11922 add_com ("clear", class_breakpoint, clear_command, _("\
11923 Clear breakpoint at specified line or function.\n\
11924 Argument may be line number, function name, or \"*\" and an address.\n\
11925 If line number is specified, all breakpoints in that line are cleared.\n\
11926 If function is specified, breakpoints at beginning of function are cleared.\n\
11927 If an address is specified, breakpoints at that address are cleared.\n\
11928 \n\
11929 With no argument, clears all breakpoints in the line that the selected frame\n\
11930 is executing in.\n\
11931 \n\
11932 See also the \"delete\" command which clears breakpoints by number."));
11933 add_com_alias ("cl", "clear", class_breakpoint, 1);
11934
11935 c = add_com ("break", class_breakpoint, break_command, _("\
11936 Set breakpoint at specified line or function.\n"
11937 BREAK_ARGS_HELP ("break")));
11938 set_cmd_completer (c, location_completer);
11939
11940 add_com_alias ("b", "break", class_run, 1);
11941 add_com_alias ("br", "break", class_run, 1);
11942 add_com_alias ("bre", "break", class_run, 1);
11943 add_com_alias ("brea", "break", class_run, 1);
11944
11945 if (xdb_commands)
11946 add_com_alias ("ba", "break", class_breakpoint, 1);
11947
11948 if (dbx_commands)
11949 {
11950 add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command, _("\
11951 Break in function/address or break at a line in the current file."),
11952 &stoplist, "stop ", 1, &cmdlist);
11953 add_cmd ("in", class_breakpoint, stopin_command,
11954 _("Break in function or address."), &stoplist);
11955 add_cmd ("at", class_breakpoint, stopat_command,
11956 _("Break at a line in the current file."), &stoplist);
11957 add_com ("status", class_info, breakpoints_info, _("\
11958 Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
11959 The \"Type\" column indicates one of:\n\
11960 \tbreakpoint - normal breakpoint\n\
11961 \twatchpoint - watchpoint\n\
11962 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
11963 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
11964 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
11965 address and file/line number respectively.\n\
11966 \n\
11967 Convenience variable \"$_\" and default examine address for \"x\"\n\
11968 are set to the address of the last breakpoint listed unless the command\n\
11969 is prefixed with \"server \".\n\n\
11970 Convenience variable \"$bpnum\" contains the number of the last\n\
11971 breakpoint set."));
11972 }
11973
11974 add_info ("breakpoints", breakpoints_info, _("\
11975 Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
11976 The \"Type\" column indicates one of:\n\
11977 \tbreakpoint - normal breakpoint\n\
11978 \twatchpoint - watchpoint\n\
11979 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
11980 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
11981 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
11982 address and file/line number respectively.\n\
11983 \n\
11984 Convenience variable \"$_\" and default examine address for \"x\"\n\
11985 are set to the address of the last breakpoint listed unless the command\n\
11986 is prefixed with \"server \".\n\n\
11987 Convenience variable \"$bpnum\" contains the number of the last\n\
11988 breakpoint set."));
11989
11990 add_info_alias ("b", "breakpoints", 1);
11991
11992 if (xdb_commands)
11993 add_com ("lb", class_breakpoint, breakpoints_info, _("\
11994 Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
11995 The \"Type\" column indicates one of:\n\
11996 \tbreakpoint - normal breakpoint\n\
11997 \twatchpoint - watchpoint\n\
11998 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
11999 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
12000 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
12001 address and file/line number respectively.\n\
12002 \n\
12003 Convenience variable \"$_\" and default examine address for \"x\"\n\
12004 are set to the address of the last breakpoint listed unless the command\n\
12005 is prefixed with \"server \".\n\n\
12006 Convenience variable \"$bpnum\" contains the number of the last\n\
12007 breakpoint set."));
12008
12009 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints, _("\
12010 Status of all breakpoints, or breakpoint number NUMBER.\n\
12011 The \"Type\" column indicates one of:\n\
12012 \tbreakpoint - normal breakpoint\n\
12013 \twatchpoint - watchpoint\n\
12014 \tlongjmp - internal breakpoint used to step through longjmp()\n\
12015 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
12016 \tuntil - internal breakpoint used by the \"until\" command\n\
12017 \tfinish - internal breakpoint used by the \"finish\" command\n\
12018 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
12019 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
12020 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
12021 address and file/line number respectively.\n\
12022 \n\
12023 Convenience variable \"$_\" and default examine address for \"x\"\n\
12024 are set to the address of the last breakpoint listed unless the command\n\
12025 is prefixed with \"server \".\n\n\
12026 Convenience variable \"$bpnum\" contains the number of the last\n\
12027 breakpoint set."),
12028 &maintenanceinfolist);
12029
12030 add_prefix_cmd ("catch", class_breakpoint, catch_command, _("\
12031 Set catchpoints to catch events."),
12032 &catch_cmdlist, "catch ",
12033 0/*allow-unknown*/, &cmdlist);
12034
12035 add_prefix_cmd ("tcatch", class_breakpoint, tcatch_command, _("\
12036 Set temporary catchpoints to catch events."),
12037 &tcatch_cmdlist, "tcatch ",
12038 0/*allow-unknown*/, &cmdlist);
12039
12040 /* Add catch and tcatch sub-commands. */
12041 add_catch_command ("catch", _("\
12042 Catch an exception, when caught.\n\
12043 With an argument, catch only exceptions with the given name."),
12044 catch_catch_command,
12045 NULL,
12046 CATCH_PERMANENT,
12047 CATCH_TEMPORARY);
12048 add_catch_command ("throw", _("\
12049 Catch an exception, when thrown.\n\
12050 With an argument, catch only exceptions with the given name."),
12051 catch_throw_command,
12052 NULL,
12053 CATCH_PERMANENT,
12054 CATCH_TEMPORARY);
12055 add_catch_command ("fork", _("Catch calls to fork."),
12056 catch_fork_command_1,
12057 NULL,
12058 (void *) (uintptr_t) catch_fork_permanent,
12059 (void *) (uintptr_t) catch_fork_temporary);
12060 add_catch_command ("vfork", _("Catch calls to vfork."),
12061 catch_fork_command_1,
12062 NULL,
12063 (void *) (uintptr_t) catch_vfork_permanent,
12064 (void *) (uintptr_t) catch_vfork_temporary);
12065 add_catch_command ("exec", _("Catch calls to exec."),
12066 catch_exec_command_1,
12067 NULL,
12068 CATCH_PERMANENT,
12069 CATCH_TEMPORARY);
12070 add_catch_command ("syscall", _("\
12071 Catch system calls by their names and/or numbers.\n\
12072 Arguments say which system calls to catch. If no arguments\n\
12073 are given, every system call will be caught.\n\
12074 Arguments, if given, should be one or more system call names\n\
12075 (if your system supports that), or system call numbers."),
12076 catch_syscall_command_1,
12077 catch_syscall_completer,
12078 CATCH_PERMANENT,
12079 CATCH_TEMPORARY);
12080 add_catch_command ("exception", _("\
12081 Catch Ada exceptions, when raised.\n\
12082 With an argument, catch only exceptions with the given name."),
12083 catch_ada_exception_command,
12084 NULL,
12085 CATCH_PERMANENT,
12086 CATCH_TEMPORARY);
12087 add_catch_command ("assert", _("\
12088 Catch failed Ada assertions, when raised.\n\
12089 With an argument, catch only exceptions with the given name."),
12090 catch_assert_command,
12091 NULL,
12092 CATCH_PERMANENT,
12093 CATCH_TEMPORARY);
12094
12095 c = add_com ("watch", class_breakpoint, watch_command, _("\
12096 Set a watchpoint for an expression.\n\
12097 Usage: watch [-l|-location] EXPRESSION\n\
12098 A watchpoint stops execution of your program whenever the value of\n\
12099 an expression changes.\n\
12100 If -l or -location is given, this evaluates EXPRESSION and watches\n\
12101 the memory to which it refers."));
12102 set_cmd_completer (c, expression_completer);
12103
12104 c = add_com ("rwatch", class_breakpoint, rwatch_command, _("\
12105 Set a read watchpoint for an expression.\n\
12106 Usage: rwatch [-l|-location] EXPRESSION\n\
12107 A watchpoint stops execution of your program whenever the value of\n\
12108 an expression is read.\n\
12109 If -l or -location is given, this evaluates EXPRESSION and watches\n\
12110 the memory to which it refers."));
12111 set_cmd_completer (c, expression_completer);
12112
12113 c = add_com ("awatch", class_breakpoint, awatch_command, _("\
12114 Set a watchpoint for an expression.\n\
12115 Usage: awatch [-l|-location] EXPRESSION\n\
12116 A watchpoint stops execution of your program whenever the value of\n\
12117 an expression is either read or written.\n\
12118 If -l or -location is given, this evaluates EXPRESSION and watches\n\
12119 the memory to which it refers."));
12120 set_cmd_completer (c, expression_completer);
12121
12122 add_info ("watchpoints", watchpoints_info, _("\
12123 Status of watchpoints, or watchpoint number NUMBER."));
12124
12125
12126
12127 /* XXX: cagney/2005-02-23: This should be a boolean, and should
12128 respond to changes - contrary to the description. */
12129 add_setshow_zinteger_cmd ("can-use-hw-watchpoints", class_support,
12130 &can_use_hw_watchpoints, _("\
12131 Set debugger's willingness to use watchpoint hardware."), _("\
12132 Show debugger's willingness to use watchpoint hardware."), _("\
12133 If zero, gdb will not use hardware for new watchpoints, even if\n\
12134 such is available. (However, any hardware watchpoints that were\n\
12135 created before setting this to nonzero, will continue to use watchpoint\n\
12136 hardware.)"),
12137 NULL,
12138 show_can_use_hw_watchpoints,
12139 &setlist, &showlist);
12140
12141 can_use_hw_watchpoints = 1;
12142
12143 /* Tracepoint manipulation commands. */
12144
12145 c = add_com ("trace", class_breakpoint, trace_command, _("\
12146 Set a tracepoint at specified line or function.\n\
12147 \n"
12148 BREAK_ARGS_HELP ("trace") "\n\
12149 Do \"help tracepoints\" for info on other tracepoint commands."));
12150 set_cmd_completer (c, location_completer);
12151
12152 add_com_alias ("tp", "trace", class_alias, 0);
12153 add_com_alias ("tr", "trace", class_alias, 1);
12154 add_com_alias ("tra", "trace", class_alias, 1);
12155 add_com_alias ("trac", "trace", class_alias, 1);
12156
12157 c = add_com ("ftrace", class_breakpoint, ftrace_command, _("\
12158 Set a fast tracepoint at specified line or function.\n\
12159 \n"
12160 BREAK_ARGS_HELP ("ftrace") "\n\
12161 Do \"help tracepoints\" for info on other tracepoint commands."));
12162 set_cmd_completer (c, location_completer);
12163
12164 c = add_com ("strace", class_breakpoint, strace_command, _("\
12165 Set a static tracepoint at specified line, function or marker.\n\
12166 \n\
12167 strace [LOCATION] [if CONDITION]\n\
12168 LOCATION may be a line number, function name, \"*\" and an address,\n\
12169 or -m MARKER_ID.\n\
12170 If a line number is specified, probe the marker at start of code\n\
12171 for that line. If a function is specified, probe the marker at start\n\
12172 of code for that function. If an address is specified, probe the marker\n\
12173 at that exact address. If a marker id is specified, probe the marker\n\
12174 with that name. With no LOCATION, uses current execution address of\n\
12175 the selected stack frame.\n\
12176 Static tracepoints accept an extra collect action -- ``collect $_sdata''.\n\
12177 This collects arbitrary user data passed in the probe point call to the\n\
12178 tracing library. You can inspect it when analyzing the trace buffer,\n\
12179 by printing the $_sdata variable like any other convenience variable.\n\
12180 \n\
12181 CONDITION is a boolean expression.\n\
12182 \n\
12183 Multiple tracepoints at one place are permitted, and useful if their\n\
12184 conditions are different.\n\
12185 \n\
12186 Do \"help breakpoints\" for info on other commands dealing with breakpoints.\n\
12187 Do \"help tracepoints\" for info on other tracepoint commands."));
12188 set_cmd_completer (c, location_completer);
12189
12190 add_info ("tracepoints", tracepoints_info, _("\
12191 Status of tracepoints, or tracepoint number NUMBER.\n\
12192 Convenience variable \"$tpnum\" contains the number of the\n\
12193 last tracepoint set."));
12194
12195 add_info_alias ("tp", "tracepoints", 1);
12196
12197 add_cmd ("tracepoints", class_trace, delete_trace_command, _("\
12198 Delete specified tracepoints.\n\
12199 Arguments are tracepoint numbers, separated by spaces.\n\
12200 No argument means delete all tracepoints."),
12201 &deletelist);
12202
12203 c = add_cmd ("tracepoints", class_trace, disable_trace_command, _("\
12204 Disable specified tracepoints.\n\
12205 Arguments are tracepoint numbers, separated by spaces.\n\
12206 No argument means disable all tracepoints."),
12207 &disablelist);
12208 deprecate_cmd (c, "disable");
12209
12210 c = add_cmd ("tracepoints", class_trace, enable_trace_command, _("\
12211 Enable specified tracepoints.\n\
12212 Arguments are tracepoint numbers, separated by spaces.\n\
12213 No argument means enable all tracepoints."),
12214 &enablelist);
12215 deprecate_cmd (c, "enable");
12216
12217 add_com ("passcount", class_trace, trace_pass_command, _("\
12218 Set the passcount for a tracepoint.\n\
12219 The trace will end when the tracepoint has been passed 'count' times.\n\
12220 Usage: passcount COUNT TPNUM, where TPNUM may also be \"all\";\n\
12221 if TPNUM is omitted, passcount refers to the last tracepoint defined."));
12222
12223 add_prefix_cmd ("save", class_breakpoint, save_command,
12224 _("Save breakpoint definitions as a script."),
12225 &save_cmdlist, "save ",
12226 0/*allow-unknown*/, &cmdlist);
12227
12228 c = add_cmd ("breakpoints", class_breakpoint, save_breakpoints_command, _("\
12229 Save current breakpoint definitions as a script.\n\
12230 This includes all types of breakpoints (breakpoints, watchpoints,\n\
12231 catchpoints, tracepoints). Use the 'source' command in another debug\n\
12232 session to restore them."),
12233 &save_cmdlist);
12234 set_cmd_completer (c, filename_completer);
12235
12236 c = add_cmd ("tracepoints", class_trace, save_tracepoints_command, _("\
12237 Save current tracepoint definitions as a script.\n\
12238 Use the 'source' command in another debug session to restore them."),
12239 &save_cmdlist);
12240 set_cmd_completer (c, filename_completer);
12241
12242 c = add_com_alias ("save-tracepoints", "save tracepoints", class_trace, 0);
12243 deprecate_cmd (c, "save tracepoints");
12244
12245 add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, _("\
12246 Breakpoint specific settings\n\
12247 Configure various breakpoint-specific variables such as\n\
12248 pending breakpoint behavior"),
12249 &breakpoint_set_cmdlist, "set breakpoint ",
12250 0/*allow-unknown*/, &setlist);
12251 add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, _("\
12252 Breakpoint specific settings\n\
12253 Configure various breakpoint-specific variables such as\n\
12254 pending breakpoint behavior"),
12255 &breakpoint_show_cmdlist, "show breakpoint ",
12256 0/*allow-unknown*/, &showlist);
12257
12258 add_setshow_auto_boolean_cmd ("pending", no_class,
12259 &pending_break_support, _("\
12260 Set debugger's behavior regarding pending breakpoints."), _("\
12261 Show debugger's behavior regarding pending breakpoints."), _("\
12262 If on, an unrecognized breakpoint location will cause gdb to create a\n\
12263 pending breakpoint. If off, an unrecognized breakpoint location results in\n\
12264 an error. If auto, an unrecognized breakpoint location results in a\n\
12265 user-query to see if a pending breakpoint should be created."),
12266 NULL,
12267 show_pending_break_support,
12268 &breakpoint_set_cmdlist,
12269 &breakpoint_show_cmdlist);
12270
12271 pending_break_support = AUTO_BOOLEAN_AUTO;
12272
12273 add_setshow_boolean_cmd ("auto-hw", no_class,
12274 &automatic_hardware_breakpoints, _("\
12275 Set automatic usage of hardware breakpoints."), _("\
12276 Show automatic usage of hardware breakpoints."), _("\
12277 If set, the debugger will automatically use hardware breakpoints for\n\
12278 breakpoints set with \"break\" but falling in read-only memory. If not set,\n\
12279 a warning will be emitted for such breakpoints."),
12280 NULL,
12281 show_automatic_hardware_breakpoints,
12282 &breakpoint_set_cmdlist,
12283 &breakpoint_show_cmdlist);
12284
12285 add_setshow_enum_cmd ("always-inserted", class_support,
12286 always_inserted_enums, &always_inserted_mode, _("\
12287 Set mode for inserting breakpoints."), _("\
12288 Show mode for inserting breakpoints."), _("\
12289 When this mode is off, breakpoints are inserted in inferior when it is\n\
12290 resumed, and removed when execution stops. When this mode is on,\n\
12291 breakpoints are inserted immediately and removed only when the user\n\
12292 deletes the breakpoint. When this mode is auto (which is the default),\n\
12293 the behaviour depends on the non-stop setting (see help set non-stop).\n\
12294 In this case, if gdb is controlling the inferior in non-stop mode, gdb\n\
12295 behaves as if always-inserted mode is on; if gdb is controlling the\n\
12296 inferior in all-stop mode, gdb behaves as if always-inserted mode is off."),
12297 NULL,
12298 &show_always_inserted_mode,
12299 &breakpoint_set_cmdlist,
12300 &breakpoint_show_cmdlist);
12301
12302 automatic_hardware_breakpoints = 1;
12303
12304 observer_attach_about_to_proceed (breakpoint_about_to_proceed);
12305 }
This page took 0.31611 seconds and 4 git commands to generate.