fixup position of #ifdef BFD64 for powerpc delta recently applied.
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2
3 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
4 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software
5 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 2 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, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
23
24 #include "defs.h"
25 #include <ctype.h>
26 #include "symtab.h"
27 #include "frame.h"
28 #include "breakpoint.h"
29 #include "gdbtypes.h"
30 #include "expression.h"
31 #include "gdbcore.h"
32 #include "gdbcmd.h"
33 #include "value.h"
34 #include "command.h"
35 #include "inferior.h"
36 #include "gdbthread.h"
37 #include "target.h"
38 #include "language.h"
39 #include "gdb_string.h"
40 #include "demangle.h"
41 #include "annotate.h"
42 #include "symfile.h"
43 #include "objfiles.h"
44 #include "linespec.h"
45 #include "completer.h"
46 #include "gdb.h"
47 #include "ui-out.h"
48
49 #include "gdb-events.h"
50
51 /* Prototypes for local functions. */
52
53 static void until_break_command_continuation (struct continuation_arg *arg);
54
55 static void catch_command_1 (char *, int, int);
56
57 static void enable_delete_command (char *, int);
58
59 static void enable_delete_breakpoint (struct breakpoint *);
60
61 static void enable_once_command (char *, int);
62
63 static void enable_once_breakpoint (struct breakpoint *);
64
65 static void disable_command (char *, int);
66
67 static void enable_command (char *, int);
68
69 static void map_breakpoint_numbers (char *, void (*)(struct breakpoint *));
70
71 static void ignore_command (char *, int);
72
73 static int breakpoint_re_set_one (PTR);
74
75 static void clear_command (char *, int);
76
77 static void catch_command (char *, int);
78
79 static void handle_gnu_4_16_catch_command (char *, int, int);
80
81 static struct symtabs_and_lines get_catch_sals (int);
82
83 static void watch_command (char *, int);
84
85 static int can_use_hardware_watchpoint (struct value *);
86
87 extern void break_at_finish_command (char *, int);
88 extern void break_at_finish_at_depth_command (char *, int);
89
90 extern void tbreak_at_finish_command (char *, int);
91
92 static void break_command_1 (char *, int, int);
93
94 static void mention (struct breakpoint *);
95
96 struct breakpoint *set_raw_breakpoint (struct symtab_and_line, enum bptype);
97
98 static void check_duplicates (struct breakpoint *);
99
100 static void describe_other_breakpoints (CORE_ADDR, asection *);
101
102 static void breakpoints_info (char *, int);
103
104 static void breakpoint_1 (int, int);
105
106 static bpstat bpstat_alloc (struct breakpoint *, bpstat);
107
108 static int breakpoint_cond_eval (PTR);
109
110 static void cleanup_executing_breakpoints (PTR);
111
112 static void commands_command (char *, int);
113
114 static void condition_command (char *, int);
115
116 static int get_number_trailer (char **, int);
117
118 void set_breakpoint_count (int);
119
120 typedef enum
121 {
122 mark_inserted,
123 mark_uninserted
124 }
125 insertion_state_t;
126
127 static int remove_breakpoint (struct breakpoint *, insertion_state_t);
128
129 static enum print_stop_action print_it_typical (bpstat);
130
131 static enum print_stop_action print_bp_stop_message (bpstat bs);
132
133 typedef struct
134 {
135 enum exception_event_kind kind;
136 int enable_p;
137 }
138 args_for_catchpoint_enable;
139
140 static int watchpoint_check (PTR);
141
142 static int cover_target_enable_exception_callback (PTR);
143
144 static void maintenance_info_breakpoints (char *, int);
145
146 static void create_longjmp_breakpoint (char *);
147
148 static void create_overlay_event_breakpoint (char *);
149
150 static int hw_breakpoint_used_count (void);
151
152 static int hw_watchpoint_used_count (enum bptype, int *);
153
154 static void hbreak_command (char *, int);
155
156 static void thbreak_command (char *, int);
157
158 static void watch_command_1 (char *, int, int);
159
160 static void rwatch_command (char *, int);
161
162 static void awatch_command (char *, int);
163
164 static void do_enable_breakpoint (struct breakpoint *, enum bpdisp);
165
166 static void solib_load_unload_1 (char *hookname,
167 int tempflag,
168 char *dll_pathname,
169 char *cond_string, enum bptype bp_kind);
170
171 static void create_fork_vfork_event_catchpoint (int tempflag,
172 char *cond_string,
173 enum bptype bp_kind);
174
175 static void break_at_finish_at_depth_command_1 (char *arg,
176 int flag, int from_tty);
177
178 static void break_at_finish_command_1 (char *arg, int flag, int from_tty);
179
180 static void stop_command (char *arg, int from_tty);
181
182 static void stopin_command (char *arg, int from_tty);
183
184 static void stopat_command (char *arg, int from_tty);
185
186 static char *ep_find_event_name_end (char *arg);
187
188 static char *ep_parse_optional_if_clause (char **arg);
189
190 static char *ep_parse_optional_filename (char **arg);
191
192 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
193 static void catch_exec_command_1 (char *arg, int tempflag, int from_tty);
194 #endif
195
196 static void create_exception_catchpoint (int tempflag, char *cond_string,
197 enum exception_event_kind ex_event,
198 struct symtab_and_line *sal);
199
200 static void catch_exception_command_1 (enum exception_event_kind ex_event,
201 char *arg, int tempflag, int from_tty);
202
203 static void tcatch_command (char *arg, int from_tty);
204
205 static void ep_skip_leading_whitespace (char **s);
206
207 /* Prototypes for exported functions. */
208
209 /* If FALSE, gdb will not use hardware support for watchpoints, even
210 if such is available. */
211 static int can_use_hw_watchpoints;
212
213 void _initialize_breakpoint (void);
214
215 extern int addressprint; /* Print machine addresses? */
216
217 /* Are we executing breakpoint commands? */
218 static int executing_breakpoint_commands;
219
220 /* Are overlay event breakpoints enabled? */
221 static int overlay_events_enabled;
222
223 /* Walk the following statement or block through all breakpoints.
224 ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
225 breakpoint. */
226
227 #define ALL_BREAKPOINTS(B) for (B = breakpoint_chain; B; B = B->next)
228
229 #define ALL_BREAKPOINTS_SAFE(B,TMP) \
230 for (B = breakpoint_chain; \
231 B ? (TMP=B->next, 1): 0; \
232 B = TMP)
233
234 /* True if SHIFT_INST_REGS defined, false otherwise. */
235
236 int must_shift_inst_regs =
237 #if defined(SHIFT_INST_REGS)
238 1
239 #else
240 0
241 #endif
242 ;
243
244 /* True if breakpoint hit counts should be displayed in breakpoint info. */
245
246 int show_breakpoint_hit_counts = 1;
247
248 /* Chain of all breakpoints defined. */
249
250 struct breakpoint *breakpoint_chain;
251
252 /* Number of last breakpoint made. */
253
254 int breakpoint_count;
255
256 /* Pointer to current exception event record */
257 static struct exception_event_record *current_exception_event;
258
259 /* Indicator of whether exception catchpoints should be nuked
260 between runs of a program */
261 int exception_catchpoints_are_fragile = 0;
262
263 /* Indicator of when exception catchpoints set-up should be
264 reinitialized -- e.g. when program is re-run */
265 int exception_support_initialized = 0;
266
267 /* This function returns a pointer to the string representation of the
268 pathname of the dynamically-linked library that has just been
269 loaded.
270
271 This function must be used only when SOLIB_HAVE_LOAD_EVENT is TRUE,
272 or undefined results are guaranteed.
273
274 This string's contents are only valid immediately after the
275 inferior has stopped in the dynamic linker hook, and becomes
276 invalid as soon as the inferior is continued. Clients should make
277 a copy of this string if they wish to continue the inferior and
278 then access the string. */
279
280 #ifndef SOLIB_LOADED_LIBRARY_PATHNAME
281 #define SOLIB_LOADED_LIBRARY_PATHNAME(pid) ""
282 #endif
283
284 /* This function returns a pointer to the string representation of the
285 pathname of the dynamically-linked library that has just been
286 unloaded.
287
288 This function must be used only when SOLIB_HAVE_UNLOAD_EVENT is
289 TRUE, or undefined results are guaranteed.
290
291 This string's contents are only valid immediately after the
292 inferior has stopped in the dynamic linker hook, and becomes
293 invalid as soon as the inferior is continued. Clients should make
294 a copy of this string if they wish to continue the inferior and
295 then access the string. */
296
297 #ifndef SOLIB_UNLOADED_LIBRARY_PATHNAME
298 #define SOLIB_UNLOADED_LIBRARY_PATHNAME(pid) ""
299 #endif
300
301 /* This function is called by the "catch load" command. It allows the
302 debugger to be notified by the dynamic linker when a specified
303 library file (or any library file, if filename is NULL) is loaded. */
304
305 #ifndef SOLIB_CREATE_CATCH_LOAD_HOOK
306 #define SOLIB_CREATE_CATCH_LOAD_HOOK(pid,tempflag,filename,cond_string) \
307 error ("catch of library loads not yet implemented on this platform")
308 #endif
309
310 /* This function is called by the "catch unload" command. It allows
311 the debugger to be notified by the dynamic linker when a specified
312 library file (or any library file, if filename is NULL) is
313 unloaded. */
314
315 #ifndef SOLIB_CREATE_CATCH_UNLOAD_HOOK
316 #define SOLIB_CREATE_CATCH_UNLOAD_HOOK(pid,tempflag,filename,cond_string) \
317 error ("catch of library unloads not yet implemented on this platform")
318 #endif
319
320 /* Set breakpoint count to NUM. */
321
322 void
323 set_breakpoint_count (int num)
324 {
325 breakpoint_count = num;
326 set_internalvar (lookup_internalvar ("bpnum"),
327 value_from_longest (builtin_type_int, (LONGEST) num));
328 }
329
330 /* Used in run_command to zero the hit count when a new run starts. */
331
332 void
333 clear_breakpoint_hit_counts (void)
334 {
335 struct breakpoint *b;
336
337 ALL_BREAKPOINTS (b)
338 b->hit_count = 0;
339 }
340
341 /* Default address, symtab and line to put a breakpoint at
342 for "break" command with no arg.
343 if default_breakpoint_valid is zero, the other three are
344 not valid, and "break" with no arg is an error.
345
346 This set by print_stack_frame, which calls set_default_breakpoint. */
347
348 int default_breakpoint_valid;
349 CORE_ADDR default_breakpoint_address;
350 struct symtab *default_breakpoint_symtab;
351 int default_breakpoint_line;
352 \f
353 /* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
354 Advance *PP after the string and any trailing whitespace.
355
356 Currently the string can either be a number or "$" followed by the name
357 of a convenience variable. Making it an expression wouldn't work well
358 for map_breakpoint_numbers (e.g. "4 + 5 + 6").
359
360 TRAILER is a character which can be found after the number; most
361 commonly this is `-'. If you don't want a trailer, use \0. */
362 static int
363 get_number_trailer (char **pp, int trailer)
364 {
365 int retval = 0; /* default */
366 char *p = *pp;
367
368 if (p == NULL)
369 /* Empty line means refer to the last breakpoint. */
370 return breakpoint_count;
371 else if (*p == '$')
372 {
373 /* Make a copy of the name, so we can null-terminate it
374 to pass to lookup_internalvar(). */
375 char *varname;
376 char *start = ++p;
377 struct value *val;
378
379 while (isalnum (*p) || *p == '_')
380 p++;
381 varname = (char *) alloca (p - start + 1);
382 strncpy (varname, start, p - start);
383 varname[p - start] = '\0';
384 val = value_of_internalvar (lookup_internalvar (varname));
385 if (TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT)
386 retval = (int) value_as_long (val);
387 else
388 {
389 printf_filtered ("Convenience variable must have integer value.\n");
390 retval = 0;
391 }
392 }
393 else
394 {
395 if (*p == '-')
396 ++p;
397 while (*p >= '0' && *p <= '9')
398 ++p;
399 if (p == *pp)
400 /* There is no number here. (e.g. "cond a == b"). */
401 {
402 /* Skip non-numeric token */
403 while (*p && !isspace((int) *p))
404 ++p;
405 /* Return zero, which caller must interpret as error. */
406 retval = 0;
407 }
408 else
409 retval = atoi (*pp);
410 }
411 if (!(isspace (*p) || *p == '\0' || *p == trailer))
412 {
413 /* Trailing junk: return 0 and let caller print error msg. */
414 while (!(isspace (*p) || *p == '\0' || *p == trailer))
415 ++p;
416 retval = 0;
417 }
418 while (isspace (*p))
419 p++;
420 *pp = p;
421 return retval;
422 }
423
424
425 /* Like get_number_trailer, but don't allow a trailer. */
426 int
427 get_number (char **pp)
428 {
429 return get_number_trailer (pp, '\0');
430 }
431
432 /* Parse a number or a range.
433 * A number will be of the form handled by get_number.
434 * A range will be of the form <number1> - <number2>, and
435 * will represent all the integers between number1 and number2,
436 * inclusive.
437 *
438 * While processing a range, this fuction is called iteratively;
439 * At each call it will return the next value in the range.
440 *
441 * At the beginning of parsing a range, the char pointer PP will
442 * be advanced past <number1> and left pointing at the '-' token.
443 * Subsequent calls will not advance the pointer until the range
444 * is completed. The call that completes the range will advance
445 * pointer PP past <number2>.
446 */
447
448 int
449 get_number_or_range (char **pp)
450 {
451 static int last_retval, end_value;
452 static char *end_ptr;
453 static int in_range = 0;
454
455 if (**pp != '-')
456 {
457 /* Default case: pp is pointing either to a solo number,
458 or to the first number of a range. */
459 last_retval = get_number_trailer (pp, '-');
460 if (**pp == '-')
461 {
462 char **temp;
463
464 /* This is the start of a range (<number1> - <number2>).
465 Skip the '-', parse and remember the second number,
466 and also remember the end of the final token. */
467
468 temp = &end_ptr;
469 end_ptr = *pp + 1;
470 while (isspace ((int) *end_ptr))
471 end_ptr++; /* skip white space */
472 end_value = get_number (temp);
473 if (end_value < last_retval)
474 {
475 error ("inverted range");
476 }
477 else if (end_value == last_retval)
478 {
479 /* degenerate range (number1 == number2). Advance the
480 token pointer so that the range will be treated as a
481 single number. */
482 *pp = end_ptr;
483 }
484 else
485 in_range = 1;
486 }
487 }
488 else if (! in_range)
489 error ("negative value");
490 else
491 {
492 /* pp points to the '-' that betokens a range. All
493 number-parsing has already been done. Return the next
494 integer value (one greater than the saved previous value).
495 Do not advance the token pointer 'pp' until the end of range
496 is reached. */
497
498 if (++last_retval == end_value)
499 {
500 /* End of range reached; advance token pointer. */
501 *pp = end_ptr;
502 in_range = 0;
503 }
504 }
505 return last_retval;
506 }
507
508
509 \f
510 /* condition N EXP -- set break condition of breakpoint N to EXP. */
511
512 static void
513 condition_command (char *arg, int from_tty)
514 {
515 register struct breakpoint *b;
516 char *p;
517 register int bnum;
518
519 if (arg == 0)
520 error_no_arg ("breakpoint number");
521
522 p = arg;
523 bnum = get_number (&p);
524 if (bnum == 0)
525 error ("Bad breakpoint argument: '%s'", arg);
526
527 ALL_BREAKPOINTS (b)
528 if (b->number == bnum)
529 {
530 if (b->cond)
531 {
532 xfree (b->cond);
533 b->cond = 0;
534 }
535 if (b->cond_string != NULL)
536 xfree (b->cond_string);
537
538 if (*p == 0)
539 {
540 b->cond = 0;
541 b->cond_string = NULL;
542 if (from_tty)
543 printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
544 }
545 else
546 {
547 arg = p;
548 /* I don't know if it matters whether this is the string the user
549 typed in or the decompiled expression. */
550 b->cond_string = savestring (arg, strlen (arg));
551 b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
552 if (*arg)
553 error ("Junk at end of expression");
554 }
555 breakpoints_changed ();
556 breakpoint_modify_event (b->number);
557 return;
558 }
559
560 error ("No breakpoint number %d.", bnum);
561 }
562
563 /* ARGSUSED */
564 static void
565 commands_command (char *arg, int from_tty)
566 {
567 register struct breakpoint *b;
568 char *p;
569 register int bnum;
570 struct command_line *l;
571
572 /* If we allowed this, we would have problems with when to
573 free the storage, if we change the commands currently
574 being read from. */
575
576 if (executing_breakpoint_commands)
577 error ("Can't use the \"commands\" command among a breakpoint's commands.");
578
579 p = arg;
580 bnum = get_number (&p);
581
582 if (p && *p)
583 error ("Unexpected extra arguments following breakpoint number.");
584
585 ALL_BREAKPOINTS (b)
586 if (b->number == bnum)
587 {
588 char tmpbuf[128];
589 sprintf (tmpbuf,
590 "Type commands for when breakpoint %d is hit, one per line.",
591 bnum);
592 l = read_command_lines (tmpbuf, from_tty);
593 free_command_lines (&b->commands);
594 b->commands = l;
595 breakpoints_changed ();
596 breakpoint_modify_event (b->number);
597 return;
598 }
599 error ("No breakpoint number %d.", bnum);
600 }
601 \f
602 /* Like target_read_memory() but if breakpoints are inserted, return
603 the shadow contents instead of the breakpoints themselves.
604
605 Read "memory data" from whatever target or inferior we have.
606 Returns zero if successful, errno value if not. EIO is used
607 for address out of bounds. If breakpoints are inserted, returns
608 shadow contents, not the breakpoints themselves. From breakpoint.c. */
609
610 int
611 read_memory_nobpt (CORE_ADDR memaddr, char *myaddr, unsigned len)
612 {
613 int status;
614 struct breakpoint *b;
615 CORE_ADDR bp_addr = 0;
616 int bp_size = 0;
617
618 if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
619 /* No breakpoints on this machine. */
620 return target_read_memory (memaddr, myaddr, len);
621
622 ALL_BREAKPOINTS (b)
623 {
624 if (b->type == bp_none)
625 warning ("reading through apparently deleted breakpoint #%d?",
626 b->number);
627
628 /* memory breakpoint? */
629 if (b->type == bp_watchpoint
630 || b->type == bp_hardware_watchpoint
631 || b->type == bp_read_watchpoint
632 || b->type == bp_access_watchpoint)
633 continue;
634 /* bp in memory? */
635 if (!b->inserted)
636 continue;
637 /* Addresses and length of the part of the breakpoint that
638 we need to copy. */
639 /* XXXX The m68k, sh and h8300 have different local and remote
640 breakpoint values. BREAKPOINT_FROM_PC still manages to
641 correctly determine the breakpoints memory address and size
642 for these targets. */
643 bp_addr = b->address;
644 bp_size = 0;
645 if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
646 continue;
647 if (bp_size == 0)
648 /* bp isn't valid */
649 continue;
650 if (bp_addr + bp_size <= memaddr)
651 /* The breakpoint is entirely before the chunk of memory we
652 are reading. */
653 continue;
654 if (bp_addr >= memaddr + len)
655 /* The breakpoint is entirely after the chunk of memory we are
656 reading. */
657 continue;
658 /* Copy the breakpoint from the shadow contents, and recurse for
659 the things before and after. */
660 {
661 /* Offset within shadow_contents. */
662 int bptoffset = 0;
663
664 if (bp_addr < memaddr)
665 {
666 /* Only copy the second part of the breakpoint. */
667 bp_size -= memaddr - bp_addr;
668 bptoffset = memaddr - bp_addr;
669 bp_addr = memaddr;
670 }
671
672 if (bp_addr + bp_size > memaddr + len)
673 {
674 /* Only copy the first part of the breakpoint. */
675 bp_size -= (bp_addr + bp_size) - (memaddr + len);
676 }
677
678 memcpy (myaddr + bp_addr - memaddr,
679 b->shadow_contents + bptoffset, bp_size);
680
681 if (bp_addr > memaddr)
682 {
683 /* Copy the section of memory before the breakpoint. */
684 status = read_memory_nobpt (memaddr, myaddr, bp_addr - memaddr);
685 if (status != 0)
686 return status;
687 }
688
689 if (bp_addr + bp_size < memaddr + len)
690 {
691 /* Copy the section of memory after the breakpoint. */
692 status = read_memory_nobpt (bp_addr + bp_size,
693 myaddr + bp_addr + bp_size - memaddr,
694 memaddr + len - (bp_addr + bp_size));
695 if (status != 0)
696 return status;
697 }
698 return 0;
699 }
700 }
701 /* Nothing overlaps. Just call read_memory_noerr. */
702 return target_read_memory (memaddr, myaddr, len);
703 }
704 \f
705
706 /* insert_breakpoints is used when starting or continuing the program.
707 remove_breakpoints is used when the program stops.
708 Both return zero if successful,
709 or an `errno' value if could not write the inferior. */
710
711 int
712 insert_breakpoints (void)
713 {
714 register struct breakpoint *b, *temp;
715 int return_val = 0; /* return success code. */
716 int val = 0;
717 int disabled_breaks = 0;
718
719 static char message1[] = "Error inserting catchpoint %d:\n";
720 static char message[sizeof (message1) + 30];
721
722
723 ALL_BREAKPOINTS_SAFE (b, temp)
724 {
725 if (b->enable_state == bp_permanent)
726 /* Permanent breakpoints cannot be inserted or removed. */
727 continue;
728 else if (b->type != bp_watchpoint
729 && b->type != bp_hardware_watchpoint
730 && b->type != bp_read_watchpoint
731 && b->type != bp_access_watchpoint
732 && b->type != bp_catch_fork
733 && b->type != bp_catch_vfork
734 && b->type != bp_catch_exec
735 && b->type != bp_catch_throw
736 && b->type != bp_catch_catch
737 && b->enable_state != bp_disabled
738 && b->enable_state != bp_shlib_disabled
739 && b->enable_state != bp_call_disabled
740 && !b->inserted
741 && !b->duplicate)
742 {
743 /* "Normal" instruction breakpoint: either the standard
744 trap-instruction bp (bp_breakpoint), or a
745 bp_hardware_breakpoint. */
746
747 /* First check to see if we have to handle an overlay. */
748 if (overlay_debugging == ovly_off
749 || b->section == NULL
750 || !(section_is_overlay (b->section)))
751 {
752 /* No overlay handling: just set the breakpoint. */
753
754 if (b->type == bp_hardware_breakpoint)
755 val = target_insert_hw_breakpoint (b->address,
756 b->shadow_contents);
757 else
758 val = target_insert_breakpoint (b->address, b->shadow_contents);
759 }
760 else
761 {
762 /* This breakpoint is in an overlay section.
763 Shall we set a breakpoint at the LMA? */
764 if (!overlay_events_enabled)
765 {
766 /* Yes -- overlay event support is not active,
767 so we must try to set a breakpoint at the LMA.
768 This will not work for a hardware breakpoint. */
769 if (b->type == bp_hardware_breakpoint)
770 warning ("hardware breakpoint %d not supported in overlay!\n",
771 b->number);
772 else
773 {
774 CORE_ADDR addr = overlay_unmapped_address (b->address,
775 b->section);
776 /* Set a software (trap) breakpoint at the LMA. */
777 val = target_insert_breakpoint (addr, b->shadow_contents);
778 if (val != 0)
779 warning ("overlay breakpoint %d failed: in ROM?",
780 b->number);
781 }
782 }
783 /* Shall we set a breakpoint at the VMA? */
784 if (section_is_mapped (b->section))
785 {
786 /* Yes. This overlay section is mapped into memory. */
787 if (b->type == bp_hardware_breakpoint)
788 val = target_insert_hw_breakpoint (b->address,
789 b->shadow_contents);
790 else
791 val = target_insert_breakpoint (b->address,
792 b->shadow_contents);
793 }
794 else
795 {
796 /* No. This breakpoint will not be inserted.
797 No error, but do not mark the bp as 'inserted'. */
798 continue;
799 }
800 }
801
802 if (val)
803 {
804 /* Can't set the breakpoint. */
805 #if defined (DISABLE_UNSETTABLE_BREAK)
806 if (DISABLE_UNSETTABLE_BREAK (b->address))
807 {
808 /* See also: disable_breakpoints_in_shlibs. */
809 val = 0;
810 b->enable_state = bp_shlib_disabled;
811 if (!disabled_breaks)
812 {
813 target_terminal_ours_for_output ();
814 warning ("Cannot insert breakpoint %d:", b->number);
815 warning ("Temporarily disabling shared library breakpoints:");
816 }
817 disabled_breaks = 1;
818 warning ("breakpoint #%d ", b->number);
819 }
820 else
821 #endif
822 {
823 target_terminal_ours_for_output ();
824 warning ("Cannot insert breakpoint %d:", b->number);
825 #ifdef ONE_PROCESS_WRITETEXT
826 warning ("The same program may be running in another process.");
827 #endif
828 memory_error (val, b->address); /* which bombs us out */
829 }
830 }
831 else
832 b->inserted = 1;
833
834 if (val)
835 return_val = val; /* remember failure */
836 }
837 else if (ep_is_exception_catchpoint (b)
838 && b->enable_state != bp_disabled
839 && b->enable_state != bp_shlib_disabled
840 && b->enable_state != bp_call_disabled
841 && !b->inserted
842 && !b->duplicate)
843
844 {
845 /* If we get here, we must have a callback mechanism for exception
846 events -- with g++ style embedded label support, we insert
847 ordinary breakpoints and not catchpoints. */
848 /* Format possible error message */
849 sprintf (message, message1, b->number);
850
851 val = target_insert_breakpoint (b->address, b->shadow_contents);
852 if (val)
853 {
854 /* Couldn't set breakpoint for some reason */
855 target_terminal_ours_for_output ();
856 warning ("Cannot insert catchpoint %d; disabling it.",
857 b->number);
858 b->enable_state = bp_disabled;
859 }
860 else
861 {
862 /* Bp set, now make sure callbacks are enabled */
863 int val;
864 args_for_catchpoint_enable args;
865 args.kind = b->type == bp_catch_catch ?
866 EX_EVENT_CATCH : EX_EVENT_THROW;
867 args.enable_p = 1;
868 val = catch_errors (cover_target_enable_exception_callback,
869 &args,
870 message, RETURN_MASK_ALL);
871 if (val != 0 && val != -1)
872 {
873 b->inserted = 1;
874 }
875 /* Check if something went wrong; val == 0 can be ignored */
876 if (val == -1)
877 {
878 /* something went wrong */
879 target_terminal_ours_for_output ();
880 warning ("Cannot insert catchpoint %d; disabling it.",
881 b->number);
882 b->enable_state = bp_disabled;
883 }
884 }
885
886 if (val)
887 return_val = val; /* remember failure */
888 }
889
890 else if ((b->type == bp_hardware_watchpoint ||
891 b->type == bp_read_watchpoint ||
892 b->type == bp_access_watchpoint)
893 && b->enable_state == bp_enabled
894 && b->disposition != disp_del_at_next_stop
895 && !b->inserted
896 && !b->duplicate)
897 {
898 struct frame_info *saved_frame;
899 int saved_level, within_current_scope;
900 struct value *mark = value_mark ();
901 struct value *v;
902
903 /* Save the current frame and level so we can restore it after
904 evaluating the watchpoint expression on its own frame. */
905 saved_frame = selected_frame;
906 saved_level = frame_relative_level (selected_frame);
907
908 /* Determine if the watchpoint is within scope. */
909 if (b->exp_valid_block == NULL)
910 within_current_scope = 1;
911 else
912 {
913 struct frame_info *fi;
914 fi = frame_find_by_id (b->watchpoint_frame);
915 within_current_scope = (fi != NULL);
916 if (within_current_scope)
917 select_frame (fi);
918 }
919
920 if (within_current_scope)
921 {
922 /* Evaluate the expression and cut the chain of values
923 produced off from the value chain.
924
925 Make sure the value returned isn't lazy; we use
926 laziness to determine what memory GDB actually needed
927 in order to compute the value of the expression. */
928 v = evaluate_expression (b->exp);
929 VALUE_CONTENTS(v);
930 value_release_to_mark (mark);
931
932 b->val_chain = v;
933 b->inserted = 1;
934
935 /* Look at each value on the value chain. */
936 for (; v; v = v->next)
937 {
938 /* If it's a memory location, and GDB actually needed
939 its contents to evaluate the expression, then we
940 must watch it. */
941 if (VALUE_LVAL (v) == lval_memory
942 && ! VALUE_LAZY (v))
943 {
944 struct type *vtype = check_typedef (VALUE_TYPE (v));
945
946 /* We only watch structs and arrays if user asked
947 for it explicitly, never if they just happen to
948 appear in the middle of some value chain. */
949 if (v == b->val_chain
950 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
951 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
952 {
953 CORE_ADDR addr;
954 int len, type;
955
956 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
957 len = TYPE_LENGTH (VALUE_TYPE (v));
958 type = hw_write;
959 if (b->type == bp_read_watchpoint)
960 type = hw_read;
961 else if (b->type == bp_access_watchpoint)
962 type = hw_access;
963
964 val = target_insert_watchpoint (addr, len, type);
965 if (val == -1)
966 {
967 /* Don't exit the loop, try to insert
968 every value on the value chain. That's
969 because we will be removing all the
970 watches below, and removing a
971 watchpoint we didn't insert could have
972 adverse effects. */
973 b->inserted = 0;
974 }
975 val = 0;
976 }
977 }
978 }
979 /* Failure to insert a watchpoint on any memory value in the
980 value chain brings us here. */
981 if (!b->inserted)
982 {
983 remove_breakpoint (b, mark_uninserted);
984 warning ("Could not insert hardware watchpoint %d.",
985 b->number);
986 val = -1;
987 }
988 }
989 else
990 {
991 printf_filtered ("Hardware watchpoint %d deleted ", b->number);
992 printf_filtered ("because the program has left the block \n");
993 printf_filtered ("in which its expression is valid.\n");
994 if (b->related_breakpoint)
995 b->related_breakpoint->disposition = disp_del_at_next_stop;
996 b->disposition = disp_del_at_next_stop;
997 }
998
999 /* Restore the frame and level. */
1000 if ((saved_frame != selected_frame) ||
1001 (saved_level != frame_relative_level (selected_frame)))
1002 select_frame (saved_frame);
1003
1004 if (val)
1005 return_val = val; /* remember failure */
1006 }
1007 else if ((b->type == bp_catch_fork
1008 || b->type == bp_catch_vfork
1009 || b->type == bp_catch_exec)
1010 && b->enable_state == bp_enabled
1011 && !b->inserted
1012 && !b->duplicate)
1013 {
1014 val = -1;
1015 switch (b->type)
1016 {
1017 case bp_catch_fork:
1018 val = target_insert_fork_catchpoint (PIDGET (inferior_ptid));
1019 break;
1020 case bp_catch_vfork:
1021 val = target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
1022 break;
1023 case bp_catch_exec:
1024 val = target_insert_exec_catchpoint (PIDGET (inferior_ptid));
1025 break;
1026 default:
1027 warning ("Internal error, %s line %d.", __FILE__, __LINE__);
1028 break;
1029 }
1030 if (val < 0)
1031 {
1032 target_terminal_ours_for_output ();
1033 warning ("Cannot insert catchpoint %d.", b->number);
1034 }
1035 else
1036 b->inserted = 1;
1037
1038 if (val)
1039 return_val = val; /* remember failure */
1040 }
1041 }
1042
1043 return return_val;
1044 }
1045
1046
1047 int
1048 remove_breakpoints (void)
1049 {
1050 register struct breakpoint *b;
1051 int val;
1052
1053 ALL_BREAKPOINTS (b)
1054 {
1055 if (b->inserted)
1056 {
1057 val = remove_breakpoint (b, mark_uninserted);
1058 if (val != 0)
1059 return val;
1060 }
1061 }
1062 return 0;
1063 }
1064
1065 int
1066 remove_hw_watchpoints (void)
1067 {
1068 register struct breakpoint *b;
1069 int val;
1070
1071 ALL_BREAKPOINTS (b)
1072 {
1073 if (b->inserted
1074 && (b->type == bp_hardware_watchpoint
1075 || b->type == bp_read_watchpoint
1076 || b->type == bp_access_watchpoint))
1077 {
1078 val = remove_breakpoint (b, mark_uninserted);
1079 if (val != 0)
1080 return val;
1081 }
1082 }
1083 return 0;
1084 }
1085
1086 int
1087 reattach_breakpoints (int pid)
1088 {
1089 register struct breakpoint *b;
1090 int val;
1091 struct cleanup *old_chain = save_inferior_ptid ();
1092
1093 /* Set inferior_ptid; remove_breakpoint uses this global. */
1094 inferior_ptid = pid_to_ptid (pid);
1095 ALL_BREAKPOINTS (b)
1096 {
1097 if (b->inserted)
1098 {
1099 remove_breakpoint (b, mark_inserted);
1100 if (b->type == bp_hardware_breakpoint)
1101 val = target_insert_hw_breakpoint (b->address, b->shadow_contents);
1102 else
1103 val = target_insert_breakpoint (b->address, b->shadow_contents);
1104 if (val != 0)
1105 {
1106 do_cleanups (old_chain);
1107 return val;
1108 }
1109 }
1110 }
1111 do_cleanups (old_chain);
1112 return 0;
1113 }
1114
1115 void
1116 update_breakpoints_after_exec (void)
1117 {
1118 struct breakpoint *b;
1119 struct breakpoint *temp;
1120
1121 /* Doing this first prevents the badness of having delete_breakpoint()
1122 write a breakpoint's current "shadow contents" to lift the bp. That
1123 shadow is NOT valid after an exec()! */
1124 mark_breakpoints_out ();
1125
1126 ALL_BREAKPOINTS_SAFE (b, temp)
1127 {
1128 /* Solib breakpoints must be explicitly reset after an exec(). */
1129 if (b->type == bp_shlib_event)
1130 {
1131 delete_breakpoint (b);
1132 continue;
1133 }
1134
1135 /* Thread event breakpoints must be set anew after an exec(),
1136 as must overlay event breakpoints. */
1137 if (b->type == bp_thread_event || b->type == bp_overlay_event)
1138 {
1139 delete_breakpoint (b);
1140 continue;
1141 }
1142
1143 /* Step-resume breakpoints are meaningless after an exec(). */
1144 if (b->type == bp_step_resume)
1145 {
1146 delete_breakpoint (b);
1147 continue;
1148 }
1149
1150 /* Ditto the sigtramp handler breakpoints. */
1151 if (b->type == bp_through_sigtramp)
1152 {
1153 delete_breakpoint (b);
1154 continue;
1155 }
1156
1157 /* Ditto the exception-handling catchpoints. */
1158 if ((b->type == bp_catch_catch) || (b->type == bp_catch_throw))
1159 {
1160 delete_breakpoint (b);
1161 continue;
1162 }
1163
1164 /* Don't delete an exec catchpoint, because else the inferior
1165 won't stop when it ought!
1166
1167 Similarly, we probably ought to keep vfork catchpoints, 'cause
1168 on this target, we may not be able to stop when the vfork is
1169 seen, but only when the subsequent exec is seen. (And because
1170 deleting fork catchpoints here but not vfork catchpoints will
1171 seem mysterious to users, keep those too.)
1172
1173 ??rehrauer: Let's hope that merely clearing out this catchpoint's
1174 target address field, if any, is sufficient to have it be reset
1175 automagically. Certainly on HP-UX that's true.
1176
1177 Jim Blandy <jimb@redhat.com>: Actually, zero is a perfectly
1178 valid code address on some platforms (like the mn10200 and
1179 mn10300 simulators). We shouldn't assign any special
1180 interpretation to a breakpoint with a zero address. And in
1181 fact, GDB doesn't --- I can't see what that comment above is
1182 talking about. As far as I can tell, setting the address of a
1183 bp_catch_exec/bp_catch_vfork/bp_catch_fork breakpoint to zero
1184 is meaningless, since those are implemented with HP-UX kernel
1185 hackery, not by storing breakpoint instructions somewhere. */
1186 if ((b->type == bp_catch_exec) ||
1187 (b->type == bp_catch_vfork) ||
1188 (b->type == bp_catch_fork))
1189 {
1190 b->address = (CORE_ADDR) NULL;
1191 continue;
1192 }
1193
1194 /* bp_finish is a special case. The only way we ought to be able
1195 to see one of these when an exec() has happened, is if the user
1196 caught a vfork, and then said "finish". Ordinarily a finish just
1197 carries them to the call-site of the current callee, by setting
1198 a temporary bp there and resuming. But in this case, the finish
1199 will carry them entirely through the vfork & exec.
1200
1201 We don't want to allow a bp_finish to remain inserted now. But
1202 we can't safely delete it, 'cause finish_command has a handle to
1203 the bp on a bpstat, and will later want to delete it. There's a
1204 chance (and I've seen it happen) that if we delete the bp_finish
1205 here, that its storage will get reused by the time finish_command
1206 gets 'round to deleting the "use to be a bp_finish" breakpoint.
1207 We really must allow finish_command to delete a bp_finish.
1208
1209 In the absense of a general solution for the "how do we know
1210 it's safe to delete something others may have handles to?"
1211 problem, what we'll do here is just uninsert the bp_finish, and
1212 let finish_command delete it.
1213
1214 (We know the bp_finish is "doomed" in the sense that it's
1215 momentary, and will be deleted as soon as finish_command sees
1216 the inferior stopped. So it doesn't matter that the bp's
1217 address is probably bogus in the new a.out, unlike e.g., the
1218 solib breakpoints.) */
1219
1220 if (b->type == bp_finish)
1221 {
1222 continue;
1223 }
1224
1225 /* Without a symbolic address, we have little hope of the
1226 pre-exec() address meaning the same thing in the post-exec()
1227 a.out. */
1228 if (b->addr_string == NULL)
1229 {
1230 delete_breakpoint (b);
1231 continue;
1232 }
1233
1234 /* If this breakpoint has survived the above battery of checks, then
1235 it must have a symbolic address. Be sure that it gets reevaluated
1236 to a target address, rather than reusing the old evaluation.
1237
1238 Jim Blandy <jimb@redhat.com>: As explained above in the comment
1239 for bp_catch_exec and friends, I'm pretty sure this is entirely
1240 unnecessary. A call to breakpoint_re_set_one always recomputes
1241 the breakpoint's address from scratch, or deletes it if it can't.
1242 So I think this assignment could be deleted without effect. */
1243 b->address = (CORE_ADDR) NULL;
1244 }
1245 /* FIXME what about longjmp breakpoints? Re-create them here? */
1246 create_overlay_event_breakpoint ("_ovly_debug_event");
1247 }
1248
1249 int
1250 detach_breakpoints (int pid)
1251 {
1252 register struct breakpoint *b;
1253 int val;
1254 struct cleanup *old_chain = save_inferior_ptid ();
1255
1256 if (pid == PIDGET (inferior_ptid))
1257 error ("Cannot detach breakpoints of inferior_ptid");
1258
1259 /* Set inferior_ptid; remove_breakpoint uses this global. */
1260 inferior_ptid = pid_to_ptid (pid);
1261 ALL_BREAKPOINTS (b)
1262 {
1263 if (b->inserted)
1264 {
1265 val = remove_breakpoint (b, mark_inserted);
1266 if (val != 0)
1267 {
1268 do_cleanups (old_chain);
1269 return val;
1270 }
1271 }
1272 }
1273 do_cleanups (old_chain);
1274 return 0;
1275 }
1276
1277 static int
1278 remove_breakpoint (struct breakpoint *b, insertion_state_t is)
1279 {
1280 int val;
1281
1282 if (b->enable_state == bp_permanent)
1283 /* Permanent breakpoints cannot be inserted or removed. */
1284 return 0;
1285
1286 if (b->type == bp_none)
1287 warning ("attempted to remove apparently deleted breakpoint #%d?",
1288 b->number);
1289
1290 if (b->type != bp_watchpoint
1291 && b->type != bp_hardware_watchpoint
1292 && b->type != bp_read_watchpoint
1293 && b->type != bp_access_watchpoint
1294 && b->type != bp_catch_fork
1295 && b->type != bp_catch_vfork
1296 && b->type != bp_catch_exec
1297 && b->type != bp_catch_catch
1298 && b->type != bp_catch_throw)
1299 {
1300 /* "Normal" instruction breakpoint: either the standard
1301 trap-instruction bp (bp_breakpoint), or a
1302 bp_hardware_breakpoint. */
1303
1304 /* First check to see if we have to handle an overlay. */
1305 if (overlay_debugging == ovly_off
1306 || b->section == NULL
1307 || !(section_is_overlay (b->section)))
1308 {
1309 /* No overlay handling: just remove the breakpoint. */
1310
1311 if (b->type == bp_hardware_breakpoint)
1312 val = target_remove_hw_breakpoint (b->address,
1313 b->shadow_contents);
1314 else
1315 val = target_remove_breakpoint (b->address, b->shadow_contents);
1316 }
1317 else
1318 {
1319 /* This breakpoint is in an overlay section.
1320 Did we set a breakpoint at the LMA? */
1321 if (!overlay_events_enabled)
1322 {
1323 /* Yes -- overlay event support is not active, so we
1324 should have set a breakpoint at the LMA. Remove it.
1325 */
1326 CORE_ADDR addr = overlay_unmapped_address (b->address,
1327 b->section);
1328 /* Ignore any failures: if the LMA is in ROM, we will
1329 have already warned when we failed to insert it. */
1330 if (b->type != bp_hardware_breakpoint)
1331 target_remove_hw_breakpoint (addr, b->shadow_contents);
1332 else
1333 target_remove_breakpoint (addr, b->shadow_contents);
1334 }
1335 /* Did we set a breakpoint at the VMA?
1336 If so, we will have marked the breakpoint 'inserted'. */
1337 if (b->inserted)
1338 {
1339 /* Yes -- remove it. Previously we did not bother to
1340 remove the breakpoint if the section had been
1341 unmapped, but let's not rely on that being safe. We
1342 don't know what the overlay manager might do. */
1343 if (b->type == bp_hardware_breakpoint)
1344 val = target_remove_hw_breakpoint (b->address,
1345 b->shadow_contents);
1346 else
1347 val = target_remove_breakpoint (b->address,
1348 b->shadow_contents);
1349 }
1350 else
1351 {
1352 /* No -- not inserted, so no need to remove. No error. */
1353 val = 0;
1354 }
1355 }
1356 if (val)
1357 return val;
1358 b->inserted = (is == mark_inserted);
1359 }
1360 else if ((b->type == bp_hardware_watchpoint ||
1361 b->type == bp_read_watchpoint ||
1362 b->type == bp_access_watchpoint)
1363 && b->enable_state == bp_enabled
1364 && !b->duplicate)
1365 {
1366 struct value *v;
1367 struct value *n;
1368
1369 b->inserted = (is == mark_inserted);
1370 /* Walk down the saved value chain. */
1371 for (v = b->val_chain; v; v = v->next)
1372 {
1373 /* For each memory reference remove the watchpoint
1374 at that address. */
1375 if (VALUE_LVAL (v) == lval_memory
1376 && ! VALUE_LAZY (v))
1377 {
1378 struct type *vtype = check_typedef (VALUE_TYPE (v));
1379
1380 if (v == b->val_chain
1381 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
1382 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
1383 {
1384 CORE_ADDR addr;
1385 int len, type;
1386
1387 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1388 len = TYPE_LENGTH (VALUE_TYPE (v));
1389 type = hw_write;
1390 if (b->type == bp_read_watchpoint)
1391 type = hw_read;
1392 else if (b->type == bp_access_watchpoint)
1393 type = hw_access;
1394
1395 val = target_remove_watchpoint (addr, len, type);
1396 if (val == -1)
1397 b->inserted = 1;
1398 val = 0;
1399 }
1400 }
1401 }
1402 /* Failure to remove any of the hardware watchpoints comes here. */
1403 if ((is == mark_uninserted) && (b->inserted))
1404 warning ("Could not remove hardware watchpoint %d.",
1405 b->number);
1406
1407 /* Free the saved value chain. We will construct a new one
1408 the next time the watchpoint is inserted. */
1409 for (v = b->val_chain; v; v = n)
1410 {
1411 n = v->next;
1412 value_free (v);
1413 }
1414 b->val_chain = NULL;
1415 }
1416 else if ((b->type == bp_catch_fork ||
1417 b->type == bp_catch_vfork ||
1418 b->type == bp_catch_exec)
1419 && b->enable_state == bp_enabled
1420 && !b->duplicate)
1421 {
1422 val = -1;
1423 switch (b->type)
1424 {
1425 case bp_catch_fork:
1426 val = target_remove_fork_catchpoint (PIDGET (inferior_ptid));
1427 break;
1428 case bp_catch_vfork:
1429 val = target_remove_vfork_catchpoint (PIDGET (inferior_ptid));
1430 break;
1431 case bp_catch_exec:
1432 val = target_remove_exec_catchpoint (PIDGET (inferior_ptid));
1433 break;
1434 default:
1435 warning ("Internal error, %s line %d.", __FILE__, __LINE__);
1436 break;
1437 }
1438 if (val)
1439 return val;
1440 b->inserted = (is == mark_inserted);
1441 }
1442 else if ((b->type == bp_catch_catch ||
1443 b->type == bp_catch_throw)
1444 && b->enable_state == bp_enabled
1445 && !b->duplicate)
1446 {
1447
1448 val = target_remove_breakpoint (b->address, b->shadow_contents);
1449 if (val)
1450 return val;
1451 b->inserted = (is == mark_inserted);
1452 }
1453 else if (ep_is_exception_catchpoint (b)
1454 && b->inserted /* sometimes previous insert doesn't happen */
1455 && b->enable_state == bp_enabled
1456 && !b->duplicate)
1457 {
1458
1459 val = target_remove_breakpoint (b->address, b->shadow_contents);
1460 if (val)
1461 return val;
1462
1463 b->inserted = (is == mark_inserted);
1464 }
1465
1466 return 0;
1467 }
1468
1469 /* Clear the "inserted" flag in all breakpoints. */
1470
1471 void
1472 mark_breakpoints_out (void)
1473 {
1474 register struct breakpoint *b;
1475
1476 ALL_BREAKPOINTS (b)
1477 b->inserted = 0;
1478 }
1479
1480 /* Clear the "inserted" flag in all breakpoints and delete any
1481 breakpoints which should go away between runs of the program.
1482
1483 Plus other such housekeeping that has to be done for breakpoints
1484 between runs.
1485
1486 Note: this function gets called at the end of a run (by
1487 generic_mourn_inferior) and when a run begins (by
1488 init_wait_for_inferior). */
1489
1490
1491
1492 void
1493 breakpoint_init_inferior (enum inf_context context)
1494 {
1495 register struct breakpoint *b, *temp;
1496 static int warning_needed = 0;
1497
1498 ALL_BREAKPOINTS_SAFE (b, temp)
1499 {
1500 b->inserted = 0;
1501
1502 switch (b->type)
1503 {
1504 case bp_call_dummy:
1505 case bp_watchpoint_scope:
1506
1507 /* If the call dummy breakpoint is at the entry point it will
1508 cause problems when the inferior is rerun, so we better
1509 get rid of it.
1510
1511 Also get rid of scope breakpoints. */
1512 delete_breakpoint (b);
1513 break;
1514
1515 case bp_watchpoint:
1516 case bp_hardware_watchpoint:
1517 case bp_read_watchpoint:
1518 case bp_access_watchpoint:
1519
1520 /* Likewise for watchpoints on local expressions. */
1521 if (b->exp_valid_block != NULL)
1522 delete_breakpoint (b);
1523 break;
1524 default:
1525 /* Likewise for exception catchpoints in dynamic-linked
1526 executables where required */
1527 if (ep_is_exception_catchpoint (b) &&
1528 exception_catchpoints_are_fragile)
1529 {
1530 warning_needed = 1;
1531 delete_breakpoint (b);
1532 }
1533 break;
1534 }
1535 }
1536
1537 if (exception_catchpoints_are_fragile)
1538 exception_support_initialized = 0;
1539
1540 /* Don't issue the warning unless it's really needed... */
1541 if (warning_needed && (context != inf_exited))
1542 {
1543 warning ("Exception catchpoints from last run were deleted.");
1544 warning ("You must reinsert them explicitly.");
1545 warning_needed = 0;
1546 }
1547 }
1548
1549 /* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint
1550 exists at PC. It returns ordinary_breakpoint_here if it's an
1551 ordinary breakpoint, or permanent_breakpoint_here if it's a
1552 permanent breakpoint.
1553 - When continuing from a location with an ordinary breakpoint, we
1554 actually single step once before calling insert_breakpoints.
1555 - When continuing from a localion with a permanent breakpoint, we
1556 need to use the `SKIP_PERMANENT_BREAKPOINT' macro, provided by
1557 the target, to advance the PC past the breakpoint. */
1558
1559 enum breakpoint_here
1560 breakpoint_here_p (CORE_ADDR pc)
1561 {
1562 register struct breakpoint *b;
1563 int any_breakpoint_here = 0;
1564
1565 ALL_BREAKPOINTS (b)
1566 if ((b->enable_state == bp_enabled
1567 || b->enable_state == bp_permanent)
1568 && b->address == pc) /* bp is enabled and matches pc */
1569 {
1570 if (overlay_debugging
1571 && section_is_overlay (b->section)
1572 && !section_is_mapped (b->section))
1573 continue; /* unmapped overlay -- can't be a match */
1574 else if (b->enable_state == bp_permanent)
1575 return permanent_breakpoint_here;
1576 else
1577 any_breakpoint_here = 1;
1578 }
1579
1580 return any_breakpoint_here ? ordinary_breakpoint_here : 0;
1581 }
1582
1583
1584 /* breakpoint_inserted_here_p (PC) is just like breakpoint_here_p(),
1585 but it only returns true if there is actually a breakpoint inserted
1586 at PC. */
1587
1588 int
1589 breakpoint_inserted_here_p (CORE_ADDR pc)
1590 {
1591 register struct breakpoint *b;
1592
1593 ALL_BREAKPOINTS (b)
1594 if (b->inserted
1595 && b->address == pc) /* bp is inserted and matches pc */
1596 {
1597 if (overlay_debugging
1598 && section_is_overlay (b->section)
1599 && !section_is_mapped (b->section))
1600 continue; /* unmapped overlay -- can't be a match */
1601 else
1602 return 1;
1603 }
1604
1605 return 0;
1606 }
1607
1608 /* Return nonzero if FRAME is a dummy frame. We can't use
1609 PC_IN_CALL_DUMMY because figuring out the saved SP would take too
1610 much time, at least using get_saved_register on the 68k. This
1611 means that for this function to work right a port must use the
1612 bp_call_dummy breakpoint. */
1613
1614 int
1615 frame_in_dummy (struct frame_info *frame)
1616 {
1617 struct breakpoint *b;
1618
1619 if (!CALL_DUMMY_P)
1620 return 0;
1621
1622 if (USE_GENERIC_DUMMY_FRAMES)
1623 return generic_pc_in_call_dummy (frame->pc, frame->frame, frame->frame);
1624
1625 ALL_BREAKPOINTS (b)
1626 {
1627 if (b->type == bp_call_dummy
1628 && b->frame == frame->frame
1629 /* We need to check the PC as well as the frame on the sparc,
1630 for signals.exp in the testsuite. */
1631 && (frame->pc
1632 >= (b->address
1633 - SIZEOF_CALL_DUMMY_WORDS / sizeof (LONGEST) * REGISTER_SIZE))
1634 && frame->pc <= b->address)
1635 return 1;
1636 }
1637 return 0;
1638 }
1639
1640 /* breakpoint_thread_match (PC, PID) returns true if the breakpoint at
1641 PC is valid for process/thread PID. */
1642
1643 int
1644 breakpoint_thread_match (CORE_ADDR pc, ptid_t ptid)
1645 {
1646 struct breakpoint *b;
1647 int thread;
1648
1649 thread = pid_to_thread_id (ptid);
1650
1651 ALL_BREAKPOINTS (b)
1652 if (b->enable_state != bp_disabled
1653 && b->enable_state != bp_shlib_disabled
1654 && b->enable_state != bp_call_disabled
1655 && b->address == pc
1656 && (b->thread == -1 || b->thread == thread))
1657 {
1658 if (overlay_debugging
1659 && section_is_overlay (b->section)
1660 && !section_is_mapped (b->section))
1661 continue; /* unmapped overlay -- can't be a match */
1662 else
1663 return 1;
1664 }
1665
1666 return 0;
1667 }
1668 \f
1669
1670 /* bpstat stuff. External routines' interfaces are documented
1671 in breakpoint.h. */
1672
1673 int
1674 ep_is_catchpoint (struct breakpoint *ep)
1675 {
1676 return
1677 (ep->type == bp_catch_load)
1678 || (ep->type == bp_catch_unload)
1679 || (ep->type == bp_catch_fork)
1680 || (ep->type == bp_catch_vfork)
1681 || (ep->type == bp_catch_exec)
1682 || (ep->type == bp_catch_catch)
1683 || (ep->type == bp_catch_throw);
1684
1685 /* ??rehrauer: Add more kinds here, as are implemented... */
1686 }
1687
1688 int
1689 ep_is_shlib_catchpoint (struct breakpoint *ep)
1690 {
1691 return
1692 (ep->type == bp_catch_load)
1693 || (ep->type == bp_catch_unload);
1694 }
1695
1696 int
1697 ep_is_exception_catchpoint (struct breakpoint *ep)
1698 {
1699 return
1700 (ep->type == bp_catch_catch)
1701 || (ep->type == bp_catch_throw);
1702 }
1703
1704 /* Clear a bpstat so that it says we are not at any breakpoint.
1705 Also free any storage that is part of a bpstat. */
1706
1707 void
1708 bpstat_clear (bpstat *bsp)
1709 {
1710 bpstat p;
1711 bpstat q;
1712
1713 if (bsp == 0)
1714 return;
1715 p = *bsp;
1716 while (p != NULL)
1717 {
1718 q = p->next;
1719 if (p->old_val != NULL)
1720 value_free (p->old_val);
1721 xfree (p);
1722 p = q;
1723 }
1724 *bsp = NULL;
1725 }
1726
1727 /* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
1728 is part of the bpstat is copied as well. */
1729
1730 bpstat
1731 bpstat_copy (bpstat bs)
1732 {
1733 bpstat p = NULL;
1734 bpstat tmp;
1735 bpstat retval = NULL;
1736
1737 if (bs == NULL)
1738 return bs;
1739
1740 for (; bs != NULL; bs = bs->next)
1741 {
1742 tmp = (bpstat) xmalloc (sizeof (*tmp));
1743 memcpy (tmp, bs, sizeof (*tmp));
1744 if (p == NULL)
1745 /* This is the first thing in the chain. */
1746 retval = tmp;
1747 else
1748 p->next = tmp;
1749 p = tmp;
1750 }
1751 p->next = NULL;
1752 return retval;
1753 }
1754
1755 /* Find the bpstat associated with this breakpoint */
1756
1757 bpstat
1758 bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
1759 {
1760 if (bsp == NULL)
1761 return NULL;
1762
1763 for (; bsp != NULL; bsp = bsp->next)
1764 {
1765 if (bsp->breakpoint_at == breakpoint)
1766 return bsp;
1767 }
1768 return NULL;
1769 }
1770
1771 /* Find a step_resume breakpoint associated with this bpstat.
1772 (If there are multiple step_resume bp's on the list, this function
1773 will arbitrarily pick one.)
1774
1775 It is an error to use this function if BPSTAT doesn't contain a
1776 step_resume breakpoint.
1777
1778 See wait_for_inferior's use of this function. */
1779 struct breakpoint *
1780 bpstat_find_step_resume_breakpoint (bpstat bsp)
1781 {
1782 int current_thread;
1783
1784 if (bsp == NULL)
1785 error ("Internal error (bpstat_find_step_resume_breakpoint)");
1786
1787 current_thread = pid_to_thread_id (inferior_ptid);
1788
1789 for (; bsp != NULL; bsp = bsp->next)
1790 {
1791 if ((bsp->breakpoint_at != NULL) &&
1792 (bsp->breakpoint_at->type == bp_step_resume) &&
1793 (bsp->breakpoint_at->thread == current_thread ||
1794 bsp->breakpoint_at->thread == -1))
1795 return bsp->breakpoint_at;
1796 }
1797
1798 error ("Internal error (no step_resume breakpoint found)");
1799 }
1800
1801
1802 /* Return the breakpoint number of the first breakpoint we are stopped
1803 at. *BSP upon return is a bpstat which points to the remaining
1804 breakpoints stopped at (but which is not guaranteed to be good for
1805 anything but further calls to bpstat_num).
1806 Return 0 if passed a bpstat which does not indicate any breakpoints. */
1807
1808 int
1809 bpstat_num (bpstat *bsp)
1810 {
1811 struct breakpoint *b;
1812
1813 if ((*bsp) == NULL)
1814 return 0; /* No more breakpoint values */
1815 else
1816 {
1817 b = (*bsp)->breakpoint_at;
1818 *bsp = (*bsp)->next;
1819 if (b == NULL)
1820 return -1; /* breakpoint that's been deleted since */
1821 else
1822 return b->number; /* We have its number */
1823 }
1824 }
1825
1826 /* Modify BS so that the actions will not be performed. */
1827
1828 void
1829 bpstat_clear_actions (bpstat bs)
1830 {
1831 for (; bs != NULL; bs = bs->next)
1832 {
1833 bs->commands = NULL;
1834 if (bs->old_val != NULL)
1835 {
1836 value_free (bs->old_val);
1837 bs->old_val = NULL;
1838 }
1839 }
1840 }
1841
1842 /* Stub for cleaning up our state if we error-out of a breakpoint command */
1843 /* ARGSUSED */
1844 static void
1845 cleanup_executing_breakpoints (PTR ignore)
1846 {
1847 executing_breakpoint_commands = 0;
1848 }
1849
1850 /* Execute all the commands associated with all the breakpoints at this
1851 location. Any of these commands could cause the process to proceed
1852 beyond this point, etc. We look out for such changes by checking
1853 the global "breakpoint_proceeded" after each command. */
1854
1855 void
1856 bpstat_do_actions (bpstat *bsp)
1857 {
1858 bpstat bs;
1859 struct cleanup *old_chain;
1860 struct command_line *cmd;
1861
1862 /* Avoid endless recursion if a `source' command is contained
1863 in bs->commands. */
1864 if (executing_breakpoint_commands)
1865 return;
1866
1867 executing_breakpoint_commands = 1;
1868 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
1869
1870 top:
1871 /* Note that (as of this writing), our callers all appear to
1872 be passing us the address of global stop_bpstat. And, if
1873 our calls to execute_control_command cause the inferior to
1874 proceed, that global (and hence, *bsp) will change.
1875
1876 We must be careful to not touch *bsp unless the inferior
1877 has not proceeded. */
1878
1879 /* This pointer will iterate over the list of bpstat's. */
1880 bs = *bsp;
1881
1882 breakpoint_proceeded = 0;
1883 for (; bs != NULL; bs = bs->next)
1884 {
1885 cmd = bs->commands;
1886 while (cmd != NULL)
1887 {
1888 execute_control_command (cmd);
1889
1890 if (breakpoint_proceeded)
1891 break;
1892 else
1893 cmd = cmd->next;
1894 }
1895 if (breakpoint_proceeded)
1896 /* The inferior is proceeded by the command; bomb out now.
1897 The bpstat chain has been blown away by wait_for_inferior.
1898 But since execution has stopped again, there is a new bpstat
1899 to look at, so start over. */
1900 goto top;
1901 else
1902 bs->commands = NULL;
1903 }
1904
1905 executing_breakpoint_commands = 0;
1906 discard_cleanups (old_chain);
1907 }
1908
1909 /* This is the normal print function for a bpstat. In the future,
1910 much of this logic could (should?) be moved to bpstat_stop_status,
1911 by having it set different print_it values.
1912
1913 Current scheme: When we stop, bpstat_print() is called. It loops
1914 through the bpstat list of things causing this stop, calling the
1915 print_bp_stop_message function on each one. The behavior of the
1916 print_bp_stop_message function depends on the print_it field of
1917 bpstat. If such field so indicates, call this function here.
1918
1919 Return values from this routine (ultimately used by bpstat_print()
1920 and normal_stop() to decide what to do):
1921 PRINT_NOTHING: Means we already printed all we needed to print,
1922 don't print anything else.
1923 PRINT_SRC_ONLY: Means we printed something, and we do *not* desire
1924 that something to be followed by a location.
1925 PRINT_SCR_AND_LOC: Means we printed something, and we *do* desire
1926 that something to be followed by a location.
1927 PRINT_UNKNOWN: Means we printed nothing or we need to do some more
1928 analysis. */
1929
1930 static enum print_stop_action
1931 print_it_typical (bpstat bs)
1932 {
1933 struct cleanup *old_chain;
1934 struct ui_stream *stb;
1935 stb = ui_out_stream_new (uiout);
1936 old_chain = make_cleanup_ui_out_stream_delete (stb);
1937 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
1938 which has since been deleted. */
1939 if (bs->breakpoint_at == NULL)
1940 return PRINT_UNKNOWN;
1941
1942 switch (bs->breakpoint_at->type)
1943 {
1944 case bp_breakpoint:
1945 case bp_hardware_breakpoint:
1946 annotate_breakpoint (bs->breakpoint_at->number);
1947 ui_out_text (uiout, "\nBreakpoint ");
1948 if (ui_out_is_mi_like_p (uiout))
1949 ui_out_field_string (uiout, "reason", "breakpoint-hit");
1950 ui_out_field_int (uiout, "bkptno", bs->breakpoint_at->number);
1951 ui_out_text (uiout, ", ");
1952 return PRINT_SRC_AND_LOC;
1953 break;
1954
1955 case bp_shlib_event:
1956 /* Did we stop because the user set the stop_on_solib_events
1957 variable? (If so, we report this as a generic, "Stopped due
1958 to shlib event" message.) */
1959 printf_filtered ("Stopped due to shared library event\n");
1960 return PRINT_NOTHING;
1961 break;
1962
1963 case bp_thread_event:
1964 /* Not sure how we will get here.
1965 GDB should not stop for these breakpoints. */
1966 printf_filtered ("Thread Event Breakpoint: gdb should not stop!\n");
1967 return PRINT_NOTHING;
1968 break;
1969
1970 case bp_overlay_event:
1971 /* By analogy with the thread event, GDB should not stop for these. */
1972 printf_filtered ("Overlay Event Breakpoint: gdb should not stop!\n");
1973 return PRINT_NOTHING;
1974 break;
1975
1976 case bp_catch_load:
1977 annotate_catchpoint (bs->breakpoint_at->number);
1978 printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1979 printf_filtered ("loaded");
1980 printf_filtered (" %s), ", bs->breakpoint_at->triggered_dll_pathname);
1981 return PRINT_SRC_AND_LOC;
1982 break;
1983
1984 case bp_catch_unload:
1985 annotate_catchpoint (bs->breakpoint_at->number);
1986 printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1987 printf_filtered ("unloaded");
1988 printf_filtered (" %s), ", bs->breakpoint_at->triggered_dll_pathname);
1989 return PRINT_SRC_AND_LOC;
1990 break;
1991
1992 case bp_catch_fork:
1993 annotate_catchpoint (bs->breakpoint_at->number);
1994 printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1995 printf_filtered ("forked");
1996 printf_filtered (" process %d), ",
1997 bs->breakpoint_at->forked_inferior_pid);
1998 return PRINT_SRC_AND_LOC;
1999 break;
2000
2001 case bp_catch_vfork:
2002 annotate_catchpoint (bs->breakpoint_at->number);
2003 printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
2004 printf_filtered ("vforked");
2005 printf_filtered (" process %d), ",
2006 bs->breakpoint_at->forked_inferior_pid);
2007 return PRINT_SRC_AND_LOC;
2008 break;
2009
2010 case bp_catch_exec:
2011 annotate_catchpoint (bs->breakpoint_at->number);
2012 printf_filtered ("\nCatchpoint %d (exec'd %s), ",
2013 bs->breakpoint_at->number,
2014 bs->breakpoint_at->exec_pathname);
2015 return PRINT_SRC_AND_LOC;
2016 break;
2017
2018 case bp_catch_catch:
2019 if (current_exception_event &&
2020 (CURRENT_EXCEPTION_KIND == EX_EVENT_CATCH))
2021 {
2022 annotate_catchpoint (bs->breakpoint_at->number);
2023 printf_filtered ("\nCatchpoint %d (exception caught), ",
2024 bs->breakpoint_at->number);
2025 printf_filtered ("throw location ");
2026 if (CURRENT_EXCEPTION_THROW_PC && CURRENT_EXCEPTION_THROW_LINE)
2027 printf_filtered ("%s:%d",
2028 CURRENT_EXCEPTION_THROW_FILE,
2029 CURRENT_EXCEPTION_THROW_LINE);
2030 else
2031 printf_filtered ("unknown");
2032
2033 printf_filtered (", catch location ");
2034 if (CURRENT_EXCEPTION_CATCH_PC && CURRENT_EXCEPTION_CATCH_LINE)
2035 printf_filtered ("%s:%d",
2036 CURRENT_EXCEPTION_CATCH_FILE,
2037 CURRENT_EXCEPTION_CATCH_LINE);
2038 else
2039 printf_filtered ("unknown");
2040
2041 printf_filtered ("\n");
2042 /* don't bother to print location frame info */
2043 return PRINT_SRC_ONLY;
2044 }
2045 else
2046 {
2047 /* really throw, some other bpstat will handle it */
2048 return PRINT_UNKNOWN;
2049 }
2050 break;
2051
2052 case bp_catch_throw:
2053 if (current_exception_event &&
2054 (CURRENT_EXCEPTION_KIND == EX_EVENT_THROW))
2055 {
2056 annotate_catchpoint (bs->breakpoint_at->number);
2057 printf_filtered ("\nCatchpoint %d (exception thrown), ",
2058 bs->breakpoint_at->number);
2059 printf_filtered ("throw location ");
2060 if (CURRENT_EXCEPTION_THROW_PC && CURRENT_EXCEPTION_THROW_LINE)
2061 printf_filtered ("%s:%d",
2062 CURRENT_EXCEPTION_THROW_FILE,
2063 CURRENT_EXCEPTION_THROW_LINE);
2064 else
2065 printf_filtered ("unknown");
2066
2067 printf_filtered (", catch location ");
2068 if (CURRENT_EXCEPTION_CATCH_PC && CURRENT_EXCEPTION_CATCH_LINE)
2069 printf_filtered ("%s:%d",
2070 CURRENT_EXCEPTION_CATCH_FILE,
2071 CURRENT_EXCEPTION_CATCH_LINE);
2072 else
2073 printf_filtered ("unknown");
2074
2075 printf_filtered ("\n");
2076 /* don't bother to print location frame info */
2077 return PRINT_SRC_ONLY;
2078 }
2079 else
2080 {
2081 /* really catch, some other bpstat will handle it */
2082 return PRINT_UNKNOWN;
2083 }
2084 break;
2085
2086 case bp_watchpoint:
2087 case bp_hardware_watchpoint:
2088 if (bs->old_val != NULL)
2089 {
2090 annotate_watchpoint (bs->breakpoint_at->number);
2091 if (ui_out_is_mi_like_p (uiout))
2092 ui_out_field_string (uiout, "reason", "watchpoint-trigger");
2093 mention (bs->breakpoint_at);
2094 ui_out_tuple_begin (uiout, "value");
2095 ui_out_text (uiout, "\nOld value = ");
2096 value_print (bs->old_val, stb->stream, 0, Val_pretty_default);
2097 ui_out_field_stream (uiout, "old", stb);
2098 ui_out_text (uiout, "\nNew value = ");
2099 value_print (bs->breakpoint_at->val, stb->stream, 0, Val_pretty_default);
2100 ui_out_field_stream (uiout, "new", stb);
2101 ui_out_tuple_end (uiout);
2102 ui_out_text (uiout, "\n");
2103 value_free (bs->old_val);
2104 bs->old_val = NULL;
2105 }
2106 /* More than one watchpoint may have been triggered. */
2107 return PRINT_UNKNOWN;
2108 break;
2109
2110 case bp_read_watchpoint:
2111 if (ui_out_is_mi_like_p (uiout))
2112 ui_out_field_string (uiout, "reason", "read-watchpoint-trigger");
2113 mention (bs->breakpoint_at);
2114 ui_out_tuple_begin (uiout, "value");
2115 ui_out_text (uiout, "\nValue = ");
2116 value_print (bs->breakpoint_at->val, stb->stream, 0, Val_pretty_default);
2117 ui_out_field_stream (uiout, "value", stb);
2118 ui_out_tuple_end (uiout);
2119 ui_out_text (uiout, "\n");
2120 return PRINT_UNKNOWN;
2121 break;
2122
2123 case bp_access_watchpoint:
2124 if (bs->old_val != NULL)
2125 {
2126 annotate_watchpoint (bs->breakpoint_at->number);
2127 if (ui_out_is_mi_like_p (uiout))
2128 ui_out_field_string (uiout, "reason", "access-watchpoint-trigger");
2129 mention (bs->breakpoint_at);
2130 ui_out_tuple_begin (uiout, "value");
2131 ui_out_text (uiout, "\nOld value = ");
2132 value_print (bs->old_val, stb->stream, 0, Val_pretty_default);
2133 ui_out_field_stream (uiout, "old", stb);
2134 value_free (bs->old_val);
2135 bs->old_val = NULL;
2136 ui_out_text (uiout, "\nNew value = ");
2137 }
2138 else
2139 {
2140 mention (bs->breakpoint_at);
2141 if (ui_out_is_mi_like_p (uiout))
2142 ui_out_field_string (uiout, "reason", "access-watchpoint-trigger");
2143 ui_out_tuple_begin (uiout, "value");
2144 ui_out_text (uiout, "\nValue = ");
2145 }
2146 value_print (bs->breakpoint_at->val, stb->stream, 0,Val_pretty_default);
2147 ui_out_field_stream (uiout, "new", stb);
2148 ui_out_tuple_end (uiout);
2149 ui_out_text (uiout, "\n");
2150 return PRINT_UNKNOWN;
2151 break;
2152
2153 /* Fall through, we don't deal with these types of breakpoints
2154 here. */
2155
2156 case bp_finish:
2157 if (ui_out_is_mi_like_p (uiout))
2158 ui_out_field_string (uiout, "reason", "function-finished");
2159 return PRINT_UNKNOWN;
2160 break;
2161
2162 case bp_until:
2163 if (ui_out_is_mi_like_p (uiout))
2164 ui_out_field_string (uiout, "reason", "location-reached");
2165 return PRINT_UNKNOWN;
2166 break;
2167
2168 case bp_none:
2169 case bp_longjmp:
2170 case bp_longjmp_resume:
2171 case bp_step_resume:
2172 case bp_through_sigtramp:
2173 case bp_watchpoint_scope:
2174 case bp_call_dummy:
2175 default:
2176 return PRINT_UNKNOWN;
2177 }
2178 }
2179
2180 /* Generic routine for printing messages indicating why we
2181 stopped. The behavior of this function depends on the value
2182 'print_it' in the bpstat structure. Under some circumstances we
2183 may decide not to print anything here and delegate the task to
2184 normal_stop(). */
2185
2186 static enum print_stop_action
2187 print_bp_stop_message (bpstat bs)
2188 {
2189 switch (bs->print_it)
2190 {
2191 case print_it_noop:
2192 /* Nothing should be printed for this bpstat entry. */
2193 return PRINT_UNKNOWN;
2194 break;
2195
2196 case print_it_done:
2197 /* We still want to print the frame, but we already printed the
2198 relevant messages. */
2199 return PRINT_SRC_AND_LOC;
2200 break;
2201
2202 case print_it_normal:
2203 /* Normal case, we handle everything in print_it_typical. */
2204 return print_it_typical (bs);
2205 break;
2206 default:
2207 internal_error (__FILE__, __LINE__,
2208 "print_bp_stop_message: unrecognized enum value");
2209 break;
2210 }
2211 }
2212
2213 /* Print a message indicating what happened. This is called from
2214 normal_stop(). The input to this routine is the head of the bpstat
2215 list - a list of the eventpoints that caused this stop. This
2216 routine calls the generic print routine for printing a message
2217 about reasons for stopping. This will print (for example) the
2218 "Breakpoint n," part of the output. The return value of this
2219 routine is one of:
2220
2221 PRINT_UNKNOWN: Means we printed nothing
2222 PRINT_SRC_AND_LOC: Means we printed something, and expect subsequent
2223 code to print the location. An example is
2224 "Breakpoint 1, " which should be followed by
2225 the location.
2226 PRINT_SRC_ONLY: Means we printed something, but there is no need
2227 to also print the location part of the message.
2228 An example is the catch/throw messages, which
2229 don't require a location appended to the end.
2230 PRINT_NOTHING: We have done some printing and we don't need any
2231 further info to be printed.*/
2232
2233 enum print_stop_action
2234 bpstat_print (bpstat bs)
2235 {
2236 int val;
2237
2238 /* Maybe another breakpoint in the chain caused us to stop.
2239 (Currently all watchpoints go on the bpstat whether hit or not.
2240 That probably could (should) be changed, provided care is taken
2241 with respect to bpstat_explains_signal). */
2242 for (; bs; bs = bs->next)
2243 {
2244 val = print_bp_stop_message (bs);
2245 if (val == PRINT_SRC_ONLY
2246 || val == PRINT_SRC_AND_LOC
2247 || val == PRINT_NOTHING)
2248 return val;
2249 }
2250
2251 /* We reached the end of the chain, or we got a null BS to start
2252 with and nothing was printed. */
2253 return PRINT_UNKNOWN;
2254 }
2255
2256 /* Evaluate the expression EXP and return 1 if value is zero.
2257 This is used inside a catch_errors to evaluate the breakpoint condition.
2258 The argument is a "struct expression *" that has been cast to char * to
2259 make it pass through catch_errors. */
2260
2261 static int
2262 breakpoint_cond_eval (PTR exp)
2263 {
2264 struct value *mark = value_mark ();
2265 int i = !value_true (evaluate_expression ((struct expression *) exp));
2266 value_free_to_mark (mark);
2267 return i;
2268 }
2269
2270 /* Allocate a new bpstat and chain it to the current one. */
2271
2272 static bpstat
2273 bpstat_alloc (struct breakpoint *b, bpstat cbs /* Current "bs" value */ )
2274 {
2275 bpstat bs;
2276
2277 bs = (bpstat) xmalloc (sizeof (*bs));
2278 cbs->next = bs;
2279 bs->breakpoint_at = b;
2280 /* If the condition is false, etc., don't do the commands. */
2281 bs->commands = NULL;
2282 bs->old_val = NULL;
2283 bs->print_it = print_it_normal;
2284 return bs;
2285 }
2286 \f
2287 /* Possible return values for watchpoint_check (this can't be an enum
2288 because of check_errors). */
2289 /* The watchpoint has been deleted. */
2290 #define WP_DELETED 1
2291 /* The value has changed. */
2292 #define WP_VALUE_CHANGED 2
2293 /* The value has not changed. */
2294 #define WP_VALUE_NOT_CHANGED 3
2295
2296 #define BP_TEMPFLAG 1
2297 #define BP_HARDWAREFLAG 2
2298
2299 /* Check watchpoint condition. */
2300
2301 static int
2302 watchpoint_check (PTR p)
2303 {
2304 bpstat bs = (bpstat) p;
2305 struct breakpoint *b;
2306 struct frame_info *fr;
2307 int within_current_scope;
2308
2309 b = bs->breakpoint_at;
2310
2311 if (b->exp_valid_block == NULL)
2312 within_current_scope = 1;
2313 else
2314 {
2315 /* There is no current frame at this moment. If we're going to have
2316 any chance of handling watchpoints on local variables, we'll need
2317 the frame chain (so we can determine if we're in scope). */
2318 reinit_frame_cache ();
2319 fr = frame_find_by_id (b->watchpoint_frame);
2320 within_current_scope = (fr != NULL);
2321 /* in_function_epilogue_p() returns a non-zero value if we're still
2322 in the function but the stack frame has already been invalidated.
2323 Since we can't rely on the values of local variables after the
2324 stack has been destroyed, we are treating the watchpoint in that
2325 state as `not changed' without further checking. */
2326 if (within_current_scope && fr == get_current_frame ()
2327 && gdbarch_in_function_epilogue_p (current_gdbarch, read_pc ()))
2328 return WP_VALUE_NOT_CHANGED;
2329 if (within_current_scope)
2330 /* If we end up stopping, the current frame will get selected
2331 in normal_stop. So this call to select_frame won't affect
2332 the user. */
2333 select_frame (fr);
2334 }
2335
2336 if (within_current_scope)
2337 {
2338 /* We use value_{,free_to_}mark because it could be a
2339 *long* time before we return to the command level and
2340 call free_all_values. We can't call free_all_values because
2341 we might be in the middle of evaluating a function call. */
2342
2343 struct value *mark = value_mark ();
2344 struct value *new_val = evaluate_expression (bs->breakpoint_at->exp);
2345 if (!value_equal (b->val, new_val))
2346 {
2347 release_value (new_val);
2348 value_free_to_mark (mark);
2349 bs->old_val = b->val;
2350 b->val = new_val;
2351 /* We will stop here */
2352 return WP_VALUE_CHANGED;
2353 }
2354 else
2355 {
2356 /* Nothing changed, don't do anything. */
2357 value_free_to_mark (mark);
2358 /* We won't stop here */
2359 return WP_VALUE_NOT_CHANGED;
2360 }
2361 }
2362 else
2363 {
2364 /* This seems like the only logical thing to do because
2365 if we temporarily ignored the watchpoint, then when
2366 we reenter the block in which it is valid it contains
2367 garbage (in the case of a function, it may have two
2368 garbage values, one before and one after the prologue).
2369 So we can't even detect the first assignment to it and
2370 watch after that (since the garbage may or may not equal
2371 the first value assigned). */
2372 /* We print all the stop information in print_it_typical(), but
2373 in this case, by the time we call print_it_typical() this bp
2374 will be deleted already. So we have no choice but print the
2375 information here. */
2376 if (ui_out_is_mi_like_p (uiout))
2377 ui_out_field_string (uiout, "reason", "watchpoint-scope");
2378 ui_out_text (uiout, "\nWatchpoint ");
2379 ui_out_field_int (uiout, "wpnum", bs->breakpoint_at->number);
2380 ui_out_text (uiout, " deleted because the program has left the block in\n\
2381 which its expression is valid.\n");
2382
2383 if (b->related_breakpoint)
2384 b->related_breakpoint->disposition = disp_del_at_next_stop;
2385 b->disposition = disp_del_at_next_stop;
2386
2387 return WP_DELETED;
2388 }
2389 }
2390
2391 /* Get a bpstat associated with having just stopped at address *PC
2392 and frame address CORE_ADDRESS. Update *PC to point at the
2393 breakpoint (if we hit a breakpoint). NOT_A_BREAKPOINT is nonzero
2394 if this is known to not be a real breakpoint (it could still be a
2395 watchpoint, though). */
2396
2397 /* Determine whether we stopped at a breakpoint, etc, or whether we
2398 don't understand this stop. Result is a chain of bpstat's such that:
2399
2400 if we don't understand the stop, the result is a null pointer.
2401
2402 if we understand why we stopped, the result is not null.
2403
2404 Each element of the chain refers to a particular breakpoint or
2405 watchpoint at which we have stopped. (We may have stopped for
2406 several reasons concurrently.)
2407
2408 Each element of the chain has valid next, breakpoint_at,
2409 commands, FIXME??? fields. */
2410
2411 bpstat
2412 bpstat_stop_status (CORE_ADDR *pc, int not_a_breakpoint)
2413 {
2414 register struct breakpoint *b, *temp;
2415 CORE_ADDR bp_addr;
2416 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
2417 int real_breakpoint = 0;
2418 /* Root of the chain of bpstat's */
2419 struct bpstats root_bs[1];
2420 /* Pointer to the last thing in the chain currently. */
2421 bpstat bs = root_bs;
2422 static char message1[] =
2423 "Error evaluating expression for watchpoint %d\n";
2424 char message[sizeof (message1) + 30 /* slop */ ];
2425
2426 /* Get the address where the breakpoint would have been.
2427 The "not_a_breakpoint" argument is meant to distinguish
2428 between a breakpoint trap event and a trace/singlestep
2429 trap event. For a trace/singlestep trap event, we would
2430 not want to subtract DECR_PC_AFTER_BREAK from the PC. */
2431
2432 bp_addr = *pc - (not_a_breakpoint && !SOFTWARE_SINGLE_STEP_P () ?
2433 0 : DECR_PC_AFTER_BREAK);
2434
2435 ALL_BREAKPOINTS_SAFE (b, temp)
2436 {
2437 if (b->enable_state == bp_disabled
2438 || b->enable_state == bp_shlib_disabled
2439 || b->enable_state == bp_call_disabled)
2440 continue;
2441
2442 if (b->type != bp_watchpoint
2443 && b->type != bp_hardware_watchpoint
2444 && b->type != bp_read_watchpoint
2445 && b->type != bp_access_watchpoint
2446 && b->type != bp_hardware_breakpoint
2447 && b->type != bp_catch_fork
2448 && b->type != bp_catch_vfork
2449 && b->type != bp_catch_exec
2450 && b->type != bp_catch_catch
2451 && b->type != bp_catch_throw) /* a non-watchpoint bp */
2452 {
2453 if (b->address != bp_addr) /* address doesn't match */
2454 continue;
2455 if (overlay_debugging /* unmapped overlay section */
2456 && section_is_overlay (b->section)
2457 && !section_is_mapped (b->section))
2458 continue;
2459 }
2460
2461 if (b->type == bp_hardware_breakpoint)
2462 {
2463 if (b->address != (*pc - DECR_PC_AFTER_HW_BREAK))
2464 continue;
2465 if (overlay_debugging /* unmapped overlay section */
2466 && section_is_overlay (b->section)
2467 && !section_is_mapped (b->section))
2468 continue;
2469 }
2470
2471 /* Is this a catchpoint of a load or unload? If so, did we
2472 get a load or unload of the specified library? If not,
2473 ignore it. */
2474 if ((b->type == bp_catch_load)
2475 #if defined(SOLIB_HAVE_LOAD_EVENT)
2476 && (!SOLIB_HAVE_LOAD_EVENT (PIDGET (inferior_ptid))
2477 || ((b->dll_pathname != NULL)
2478 && (strcmp (b->dll_pathname,
2479 SOLIB_LOADED_LIBRARY_PATHNAME (
2480 PIDGET (inferior_ptid)))
2481 != 0)))
2482 #endif
2483 )
2484 continue;
2485
2486 if ((b->type == bp_catch_unload)
2487 #if defined(SOLIB_HAVE_UNLOAD_EVENT)
2488 && (!SOLIB_HAVE_UNLOAD_EVENT (PIDGET (inferior_ptid))
2489 || ((b->dll_pathname != NULL)
2490 && (strcmp (b->dll_pathname,
2491 SOLIB_UNLOADED_LIBRARY_PATHNAME (
2492 PIDGET (inferior_ptid)))
2493 != 0)))
2494 #endif
2495 )
2496 continue;
2497
2498 if ((b->type == bp_catch_fork)
2499 && !target_has_forked (PIDGET (inferior_ptid),
2500 &b->forked_inferior_pid))
2501 continue;
2502
2503 if ((b->type == bp_catch_vfork)
2504 && !target_has_vforked (PIDGET (inferior_ptid),
2505 &b->forked_inferior_pid))
2506 continue;
2507
2508 if ((b->type == bp_catch_exec)
2509 && !target_has_execd (PIDGET (inferior_ptid), &b->exec_pathname))
2510 continue;
2511
2512 if (ep_is_exception_catchpoint (b) &&
2513 !(current_exception_event = target_get_current_exception_event ()))
2514 continue;
2515
2516 /* Come here if it's a watchpoint, or if the break address matches */
2517
2518 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
2519
2520 /* Watchpoints may change this, if not found to have triggered. */
2521 bs->stop = 1;
2522 bs->print = 1;
2523
2524 sprintf (message, message1, b->number);
2525 if (b->type == bp_watchpoint ||
2526 b->type == bp_hardware_watchpoint)
2527 {
2528 switch (catch_errors (watchpoint_check, bs, message,
2529 RETURN_MASK_ALL))
2530 {
2531 case WP_DELETED:
2532 /* We've already printed what needs to be printed. */
2533 /* Actually this is superfluous, because by the time we
2534 call print_it_typical() the wp will be already deleted,
2535 and the function will return immediately. */
2536 bs->print_it = print_it_done;
2537 /* Stop. */
2538 break;
2539 case WP_VALUE_CHANGED:
2540 /* Stop. */
2541 ++(b->hit_count);
2542 break;
2543 case WP_VALUE_NOT_CHANGED:
2544 /* Don't stop. */
2545 bs->print_it = print_it_noop;
2546 bs->stop = 0;
2547 continue;
2548 default:
2549 /* Can't happen. */
2550 /* FALLTHROUGH */
2551 case 0:
2552 /* Error from catch_errors. */
2553 printf_filtered ("Watchpoint %d deleted.\n", b->number);
2554 if (b->related_breakpoint)
2555 b->related_breakpoint->disposition = disp_del_at_next_stop;
2556 b->disposition = disp_del_at_next_stop;
2557 /* We've already printed what needs to be printed. */
2558 bs->print_it = print_it_done;
2559
2560 /* Stop. */
2561 break;
2562 }
2563 }
2564 else if (b->type == bp_read_watchpoint ||
2565 b->type == bp_access_watchpoint)
2566 {
2567 CORE_ADDR addr;
2568 struct value *v;
2569 int found = 0;
2570
2571 addr = target_stopped_data_address ();
2572 if (addr == 0)
2573 continue;
2574 for (v = b->val_chain; v; v = v->next)
2575 {
2576 if (VALUE_LVAL (v) == lval_memory
2577 && ! VALUE_LAZY (v))
2578 {
2579 struct type *vtype = check_typedef (VALUE_TYPE (v));
2580
2581 if (v == b->val_chain
2582 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
2583 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
2584 {
2585 CORE_ADDR vaddr;
2586
2587 vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
2588 /* Exact match not required. Within range is
2589 sufficient. */
2590 if (addr >= vaddr &&
2591 addr < vaddr + TYPE_LENGTH (VALUE_TYPE (v)))
2592 found = 1;
2593 }
2594 }
2595 }
2596 if (found)
2597 switch (catch_errors (watchpoint_check, bs, message,
2598 RETURN_MASK_ALL))
2599 {
2600 case WP_DELETED:
2601 /* We've already printed what needs to be printed. */
2602 bs->print_it = print_it_done;
2603 /* Stop. */
2604 break;
2605 case WP_VALUE_CHANGED:
2606 if (b->type == bp_read_watchpoint)
2607 {
2608 /* Don't stop: read watchpoints shouldn't fire if
2609 the value has changed. This is for targets which
2610 cannot set read-only watchpoints. */
2611 bs->print_it = print_it_noop;
2612 bs->stop = 0;
2613 continue;
2614 }
2615 ++(b->hit_count);
2616 break;
2617 case WP_VALUE_NOT_CHANGED:
2618 /* Stop. */
2619 ++(b->hit_count);
2620 break;
2621 default:
2622 /* Can't happen. */
2623 case 0:
2624 /* Error from catch_errors. */
2625 printf_filtered ("Watchpoint %d deleted.\n", b->number);
2626 if (b->related_breakpoint)
2627 b->related_breakpoint->disposition = disp_del_at_next_stop;
2628 b->disposition = disp_del_at_next_stop;
2629 /* We've already printed what needs to be printed. */
2630 bs->print_it = print_it_done;
2631 break;
2632 }
2633 else /* found == 0 */
2634 {
2635 /* This is a case where some watchpoint(s) triggered,
2636 but not at the address of this watchpoint (FOUND
2637 was left zero). So don't print anything for this
2638 watchpoint. */
2639 bs->print_it = print_it_noop;
2640 bs->stop = 0;
2641 continue;
2642 }
2643 }
2644 else
2645 {
2646 /* By definition, an encountered breakpoint is a triggered
2647 breakpoint. */
2648 ++(b->hit_count);
2649
2650 real_breakpoint = 1;
2651 }
2652
2653 if (b->frame &&
2654 b->frame != (get_current_frame ())->frame)
2655 bs->stop = 0;
2656 else
2657 {
2658 int value_is_zero = 0;
2659
2660 if (b->cond)
2661 {
2662 /* Need to select the frame, with all that implies
2663 so that the conditions will have the right context. */
2664 select_frame (get_current_frame ());
2665 value_is_zero
2666 = catch_errors (breakpoint_cond_eval, (b->cond),
2667 "Error in testing breakpoint condition:\n",
2668 RETURN_MASK_ALL);
2669 /* FIXME-someday, should give breakpoint # */
2670 free_all_values ();
2671 }
2672 if (b->cond && value_is_zero)
2673 {
2674 bs->stop = 0;
2675 /* Don't consider this a hit. */
2676 --(b->hit_count);
2677 }
2678 else if (b->ignore_count > 0)
2679 {
2680 b->ignore_count--;
2681 annotate_ignore_count_change ();
2682 bs->stop = 0;
2683 }
2684 else
2685 {
2686 /* We will stop here */
2687 if (b->disposition == disp_disable)
2688 b->enable_state = bp_disabled;
2689 bs->commands = b->commands;
2690 if (b->silent)
2691 bs->print = 0;
2692 if (bs->commands &&
2693 (STREQ ("silent", bs->commands->line) ||
2694 (xdb_commands && STREQ ("Q", bs->commands->line))))
2695 {
2696 bs->commands = bs->commands->next;
2697 bs->print = 0;
2698 }
2699 }
2700 }
2701 /* Print nothing for this entry if we dont stop or if we dont print. */
2702 if (bs->stop == 0 || bs->print == 0)
2703 bs->print_it = print_it_noop;
2704 }
2705
2706 bs->next = NULL; /* Terminate the chain */
2707 bs = root_bs->next; /* Re-grab the head of the chain */
2708
2709 if (real_breakpoint && bs)
2710 {
2711 if (bs->breakpoint_at->type == bp_hardware_breakpoint)
2712 {
2713 if (DECR_PC_AFTER_HW_BREAK != 0)
2714 {
2715 *pc = *pc - DECR_PC_AFTER_HW_BREAK;
2716 write_pc (*pc);
2717 }
2718 }
2719 else
2720 {
2721 if (DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs)
2722 {
2723 *pc = bp_addr;
2724 #if defined (SHIFT_INST_REGS)
2725 SHIFT_INST_REGS ();
2726 #else /* No SHIFT_INST_REGS. */
2727 write_pc (bp_addr);
2728 #endif /* No SHIFT_INST_REGS. */
2729 }
2730 }
2731 }
2732
2733 /* The value of a hardware watchpoint hasn't changed, but the
2734 intermediate memory locations we are watching may have. */
2735 if (bs && !bs->stop &&
2736 (bs->breakpoint_at->type == bp_hardware_watchpoint ||
2737 bs->breakpoint_at->type == bp_read_watchpoint ||
2738 bs->breakpoint_at->type == bp_access_watchpoint))
2739 {
2740 remove_breakpoints ();
2741 insert_breakpoints ();
2742 }
2743 return bs;
2744 }
2745 \f
2746 /* Tell what to do about this bpstat. */
2747 struct bpstat_what
2748 bpstat_what (bpstat bs)
2749 {
2750 /* Classify each bpstat as one of the following. */
2751 enum class
2752 {
2753 /* This bpstat element has no effect on the main_action. */
2754 no_effect = 0,
2755
2756 /* There was a watchpoint, stop but don't print. */
2757 wp_silent,
2758
2759 /* There was a watchpoint, stop and print. */
2760 wp_noisy,
2761
2762 /* There was a breakpoint but we're not stopping. */
2763 bp_nostop,
2764
2765 /* There was a breakpoint, stop but don't print. */
2766 bp_silent,
2767
2768 /* There was a breakpoint, stop and print. */
2769 bp_noisy,
2770
2771 /* We hit the longjmp breakpoint. */
2772 long_jump,
2773
2774 /* We hit the longjmp_resume breakpoint. */
2775 long_resume,
2776
2777 /* We hit the step_resume breakpoint. */
2778 step_resume,
2779
2780 /* We hit the through_sigtramp breakpoint. */
2781 through_sig,
2782
2783 /* We hit the shared library event breakpoint. */
2784 shlib_event,
2785
2786 /* We caught a shared library event. */
2787 catch_shlib_event,
2788
2789 /* This is just used to count how many enums there are. */
2790 class_last
2791 };
2792
2793 /* Here is the table which drives this routine. So that we can
2794 format it pretty, we define some abbreviations for the
2795 enum bpstat_what codes. */
2796 #define kc BPSTAT_WHAT_KEEP_CHECKING
2797 #define ss BPSTAT_WHAT_STOP_SILENT
2798 #define sn BPSTAT_WHAT_STOP_NOISY
2799 #define sgl BPSTAT_WHAT_SINGLE
2800 #define slr BPSTAT_WHAT_SET_LONGJMP_RESUME
2801 #define clr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
2802 #define clrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
2803 #define sr BPSTAT_WHAT_STEP_RESUME
2804 #define ts BPSTAT_WHAT_THROUGH_SIGTRAMP
2805 #define shl BPSTAT_WHAT_CHECK_SHLIBS
2806 #define shlr BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK
2807
2808 /* "Can't happen." Might want to print an error message.
2809 abort() is not out of the question, but chances are GDB is just
2810 a bit confused, not unusable. */
2811 #define err BPSTAT_WHAT_STOP_NOISY
2812
2813 /* Given an old action and a class, come up with a new action. */
2814 /* One interesting property of this table is that wp_silent is the same
2815 as bp_silent and wp_noisy is the same as bp_noisy. That is because
2816 after stopping, the check for whether to step over a breakpoint
2817 (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
2818 reference to how we stopped. We retain separate wp_silent and
2819 bp_silent codes in case we want to change that someday.
2820
2821 Another possibly interesting property of this table is that
2822 there's a partial ordering, priority-like, of the actions. Once
2823 you've decided that some action is appropriate, you'll never go
2824 back and decide something of a lower priority is better. The
2825 ordering is:
2826
2827 kc < clr sgl shl shlr slr sn sr ss ts
2828 sgl < clrs shl shlr slr sn sr ss ts
2829 slr < err shl shlr sn sr ss ts
2830 clr < clrs err shl shlr sn sr ss ts
2831 clrs < err shl shlr sn sr ss ts
2832 ss < shl shlr sn sr ts
2833 sn < shl shlr sr ts
2834 sr < shl shlr ts
2835 shl < shlr
2836 ts <
2837 shlr <
2838
2839 What I think this means is that we don't need a damned table
2840 here. If you just put the rows and columns in the right order,
2841 it'd look awfully regular. We could simply walk the bpstat list
2842 and choose the highest priority action we find, with a little
2843 logic to handle the 'err' cases, and the CLEAR_LONGJMP_RESUME/
2844 CLEAR_LONGJMP_RESUME_SINGLE distinction (which breakpoint.h says
2845 is messy anyway). */
2846
2847 /* step_resume entries: a step resume breakpoint overrides another
2848 breakpoint of signal handling (see comment in wait_for_inferior
2849 at first PC_IN_SIGTRAMP where we set the step_resume breakpoint). */
2850 /* We handle the through_sigtramp_breakpoint the same way; having both
2851 one of those and a step_resume_breakpoint is probably very rare (?). */
2852
2853 static const enum bpstat_what_main_action
2854 table[(int) class_last][(int) BPSTAT_WHAT_LAST] =
2855 {
2856 /* old action */
2857 /* kc ss sn sgl slr clr clrs sr ts shl shlr
2858 */
2859 /*no_effect */
2860 {kc, ss, sn, sgl, slr, clr, clrs, sr, ts, shl, shlr},
2861 /*wp_silent */
2862 {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl, shlr},
2863 /*wp_noisy */
2864 {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl, shlr},
2865 /*bp_nostop */
2866 {sgl, ss, sn, sgl, slr, clrs, clrs, sr, ts, shl, shlr},
2867 /*bp_silent */
2868 {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl, shlr},
2869 /*bp_noisy */
2870 {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl, shlr},
2871 /*long_jump */
2872 {slr, ss, sn, slr, slr, err, err, sr, ts, shl, shlr},
2873 /*long_resume */
2874 {clr, ss, sn, clrs, err, err, err, sr, ts, shl, shlr},
2875 /*step_resume */
2876 {sr, sr, sr, sr, sr, sr, sr, sr, ts, shl, shlr},
2877 /*through_sig */
2878 {ts, ts, ts, ts, ts, ts, ts, ts, ts, shl, shlr},
2879 /*shlib */
2880 {shl, shl, shl, shl, shl, shl, shl, shl, ts, shl, shlr},
2881 /*catch_shlib */
2882 {shlr, shlr, shlr, shlr, shlr, shlr, shlr, shlr, ts, shlr, shlr}
2883 };
2884
2885 #undef kc
2886 #undef ss
2887 #undef sn
2888 #undef sgl
2889 #undef slr
2890 #undef clr
2891 #undef clrs
2892 #undef err
2893 #undef sr
2894 #undef ts
2895 #undef shl
2896 #undef shlr
2897 enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
2898 struct bpstat_what retval;
2899
2900 retval.call_dummy = 0;
2901 for (; bs != NULL; bs = bs->next)
2902 {
2903 enum class bs_class = no_effect;
2904 if (bs->breakpoint_at == NULL)
2905 /* I suspect this can happen if it was a momentary breakpoint
2906 which has since been deleted. */
2907 continue;
2908 switch (bs->breakpoint_at->type)
2909 {
2910 case bp_none:
2911 continue;
2912
2913 case bp_breakpoint:
2914 case bp_hardware_breakpoint:
2915 case bp_until:
2916 case bp_finish:
2917 if (bs->stop)
2918 {
2919 if (bs->print)
2920 bs_class = bp_noisy;
2921 else
2922 bs_class = bp_silent;
2923 }
2924 else
2925 bs_class = bp_nostop;
2926 break;
2927 case bp_watchpoint:
2928 case bp_hardware_watchpoint:
2929 case bp_read_watchpoint:
2930 case bp_access_watchpoint:
2931 if (bs->stop)
2932 {
2933 if (bs->print)
2934 bs_class = wp_noisy;
2935 else
2936 bs_class = wp_silent;
2937 }
2938 else
2939 /* There was a watchpoint, but we're not stopping.
2940 This requires no further action. */
2941 bs_class = no_effect;
2942 break;
2943 case bp_longjmp:
2944 bs_class = long_jump;
2945 break;
2946 case bp_longjmp_resume:
2947 bs_class = long_resume;
2948 break;
2949 case bp_step_resume:
2950 if (bs->stop)
2951 {
2952 bs_class = step_resume;
2953 }
2954 else
2955 /* It is for the wrong frame. */
2956 bs_class = bp_nostop;
2957 break;
2958 case bp_through_sigtramp:
2959 bs_class = through_sig;
2960 break;
2961 case bp_watchpoint_scope:
2962 bs_class = bp_nostop;
2963 break;
2964 case bp_shlib_event:
2965 bs_class = shlib_event;
2966 break;
2967 case bp_thread_event:
2968 case bp_overlay_event:
2969 bs_class = bp_nostop;
2970 break;
2971 case bp_catch_load:
2972 case bp_catch_unload:
2973 /* Only if this catchpoint triggered should we cause the
2974 step-out-of-dld behaviour. Otherwise, we ignore this
2975 catchpoint. */
2976 if (bs->stop)
2977 bs_class = catch_shlib_event;
2978 else
2979 bs_class = no_effect;
2980 break;
2981 case bp_catch_fork:
2982 case bp_catch_vfork:
2983 case bp_catch_exec:
2984 if (bs->stop)
2985 {
2986 if (bs->print)
2987 bs_class = bp_noisy;
2988 else
2989 bs_class = bp_silent;
2990 }
2991 else
2992 /* There was a catchpoint, but we're not stopping.
2993 This requires no further action. */
2994 bs_class = no_effect;
2995 break;
2996 case bp_catch_catch:
2997 if (!bs->stop || CURRENT_EXCEPTION_KIND != EX_EVENT_CATCH)
2998 bs_class = bp_nostop;
2999 else if (bs->stop)
3000 bs_class = bs->print ? bp_noisy : bp_silent;
3001 break;
3002 case bp_catch_throw:
3003 if (!bs->stop || CURRENT_EXCEPTION_KIND != EX_EVENT_THROW)
3004 bs_class = bp_nostop;
3005 else if (bs->stop)
3006 bs_class = bs->print ? bp_noisy : bp_silent;
3007 break;
3008 case bp_call_dummy:
3009 /* Make sure the action is stop (silent or noisy),
3010 so infrun.c pops the dummy frame. */
3011 bs_class = bp_silent;
3012 retval.call_dummy = 1;
3013 break;
3014 }
3015 current_action = table[(int) bs_class][(int) current_action];
3016 }
3017 retval.main_action = current_action;
3018 return retval;
3019 }
3020
3021 /* Nonzero if we should step constantly (e.g. watchpoints on machines
3022 without hardware support). This isn't related to a specific bpstat,
3023 just to things like whether watchpoints are set. */
3024
3025 int
3026 bpstat_should_step (void)
3027 {
3028 struct breakpoint *b;
3029 ALL_BREAKPOINTS (b)
3030 if (b->enable_state == bp_enabled && b->type == bp_watchpoint)
3031 return 1;
3032 return 0;
3033 }
3034
3035 /* Nonzero if there are enabled hardware watchpoints. */
3036 int
3037 bpstat_have_active_hw_watchpoints (void)
3038 {
3039 struct breakpoint *b;
3040 ALL_BREAKPOINTS (b)
3041 if ((b->enable_state == bp_enabled) &&
3042 (b->inserted) &&
3043 ((b->type == bp_hardware_watchpoint) ||
3044 (b->type == bp_read_watchpoint) ||
3045 (b->type == bp_access_watchpoint)))
3046 return 1;
3047 return 0;
3048 }
3049 \f
3050
3051 /* Given a bpstat that records zero or more triggered eventpoints, this
3052 function returns another bpstat which contains only the catchpoints
3053 on that first list, if any. */
3054 void
3055 bpstat_get_triggered_catchpoints (bpstat ep_list, bpstat *cp_list)
3056 {
3057 struct bpstats root_bs[1];
3058 bpstat bs = root_bs;
3059 struct breakpoint *ep;
3060 char *dll_pathname;
3061
3062 bpstat_clear (cp_list);
3063 root_bs->next = NULL;
3064
3065 for (; ep_list != NULL; ep_list = ep_list->next)
3066 {
3067 /* Is this eventpoint a catchpoint? If not, ignore it. */
3068 ep = ep_list->breakpoint_at;
3069 if (ep == NULL)
3070 break;
3071 if ((ep->type != bp_catch_load) &&
3072 (ep->type != bp_catch_unload) &&
3073 (ep->type != bp_catch_catch) &&
3074 (ep->type != bp_catch_throw))
3075 /* pai: (temp) ADD fork/vfork here!! */
3076 continue;
3077
3078 /* Yes; add it to the list. */
3079 bs = bpstat_alloc (ep, bs);
3080 *bs = *ep_list;
3081 bs->next = NULL;
3082 bs = root_bs->next;
3083
3084 #if defined(SOLIB_ADD)
3085 /* Also, for each triggered catchpoint, tag it with the name of
3086 the library that caused this trigger. (We copy the name now,
3087 because it's only guaranteed to be available NOW, when the
3088 catchpoint triggers. Clients who may wish to know the name
3089 later must get it from the catchpoint itself.) */
3090 if (ep->triggered_dll_pathname != NULL)
3091 xfree (ep->triggered_dll_pathname);
3092 if (ep->type == bp_catch_load)
3093 dll_pathname = SOLIB_LOADED_LIBRARY_PATHNAME (
3094 PIDGET (inferior_ptid));
3095 else
3096 dll_pathname = SOLIB_UNLOADED_LIBRARY_PATHNAME (
3097 PIDGET (inferior_ptid));
3098 #else
3099 dll_pathname = NULL;
3100 #endif
3101 if (dll_pathname)
3102 {
3103 ep->triggered_dll_pathname = (char *)
3104 xmalloc (strlen (dll_pathname) + 1);
3105 strcpy (ep->triggered_dll_pathname, dll_pathname);
3106 }
3107 else
3108 ep->triggered_dll_pathname = NULL;
3109 }
3110
3111 *cp_list = bs;
3112 }
3113
3114 /* Print B to gdb_stdout. */
3115 static void
3116 print_one_breakpoint (struct breakpoint *b,
3117 CORE_ADDR *last_addr)
3118 {
3119 register struct command_line *l;
3120 register struct symbol *sym;
3121 struct ep_type_description
3122 {
3123 enum bptype type;
3124 char *description;
3125 };
3126 static struct ep_type_description bptypes[] =
3127 {
3128 {bp_none, "?deleted?"},
3129 {bp_breakpoint, "breakpoint"},
3130 {bp_hardware_breakpoint, "hw breakpoint"},
3131 {bp_until, "until"},
3132 {bp_finish, "finish"},
3133 {bp_watchpoint, "watchpoint"},
3134 {bp_hardware_watchpoint, "hw watchpoint"},
3135 {bp_read_watchpoint, "read watchpoint"},
3136 {bp_access_watchpoint, "acc watchpoint"},
3137 {bp_longjmp, "longjmp"},
3138 {bp_longjmp_resume, "longjmp resume"},
3139 {bp_step_resume, "step resume"},
3140 {bp_through_sigtramp, "sigtramp"},
3141 {bp_watchpoint_scope, "watchpoint scope"},
3142 {bp_call_dummy, "call dummy"},
3143 {bp_shlib_event, "shlib events"},
3144 {bp_thread_event, "thread events"},
3145 {bp_overlay_event, "overlay events"},
3146 {bp_catch_load, "catch load"},
3147 {bp_catch_unload, "catch unload"},
3148 {bp_catch_fork, "catch fork"},
3149 {bp_catch_vfork, "catch vfork"},
3150 {bp_catch_exec, "catch exec"},
3151 {bp_catch_catch, "catch catch"},
3152 {bp_catch_throw, "catch throw"}
3153 };
3154
3155 static char *bpdisps[] =
3156 {"del", "dstp", "dis", "keep"};
3157 static char bpenables[] = "nynny";
3158 char wrap_indent[80];
3159 struct ui_stream *stb = ui_out_stream_new (uiout);
3160 struct cleanup *old_chain = make_cleanup_ui_out_stream_delete (stb);
3161
3162 annotate_record ();
3163 ui_out_tuple_begin (uiout, "bkpt");
3164
3165 /* 1 */
3166 annotate_field (0);
3167 ui_out_field_int (uiout, "number", b->number);
3168
3169 /* 2 */
3170 annotate_field (1);
3171 if (((int) b->type > (sizeof (bptypes) / sizeof (bptypes[0])))
3172 || ((int) b->type != bptypes[(int) b->type].type))
3173 internal_error (__FILE__, __LINE__,
3174 "bptypes table does not describe type #%d.",
3175 (int) b->type);
3176 ui_out_field_string (uiout, "type", bptypes[(int) b->type].description);
3177
3178 /* 3 */
3179 annotate_field (2);
3180 ui_out_field_string (uiout, "disp", bpdisps[(int) b->disposition]);
3181
3182 /* 4 */
3183 annotate_field (3);
3184 ui_out_field_fmt (uiout, "enabled", "%c", bpenables[(int) b->enable_state]);
3185 ui_out_spaces (uiout, 2);
3186
3187 /* 5 and 6 */
3188 strcpy (wrap_indent, " ");
3189 if (addressprint)
3190 {
3191 if (TARGET_ADDR_BIT <= 32)
3192 strcat (wrap_indent, " ");
3193 else
3194 strcat (wrap_indent, " ");
3195 }
3196 switch (b->type)
3197 {
3198 case bp_none:
3199 internal_error (__FILE__, __LINE__,
3200 "print_one_breakpoint: bp_none encountered\n");
3201 break;
3202
3203 case bp_watchpoint:
3204 case bp_hardware_watchpoint:
3205 case bp_read_watchpoint:
3206 case bp_access_watchpoint:
3207 /* Field 4, the address, is omitted (which makes the columns
3208 not line up too nicely with the headers, but the effect
3209 is relatively readable). */
3210 if (addressprint)
3211 ui_out_field_skip (uiout, "addr");
3212 annotate_field (5);
3213 print_expression (b->exp, stb->stream);
3214 ui_out_field_stream (uiout, "what", stb);
3215 break;
3216
3217 case bp_catch_load:
3218 case bp_catch_unload:
3219 /* Field 4, the address, is omitted (which makes the columns
3220 not line up too nicely with the headers, but the effect
3221 is relatively readable). */
3222 if (addressprint)
3223 ui_out_field_skip (uiout, "addr");
3224 annotate_field (5);
3225 if (b->dll_pathname == NULL)
3226 {
3227 ui_out_field_string (uiout, "what", "<any library>");
3228 ui_out_spaces (uiout, 1);
3229 }
3230 else
3231 {
3232 ui_out_text (uiout, "library \"");
3233 ui_out_field_string (uiout, "what", b->dll_pathname);
3234 ui_out_text (uiout, "\" ");
3235 }
3236 break;
3237
3238 case bp_catch_fork:
3239 case bp_catch_vfork:
3240 /* Field 4, the address, is omitted (which makes the columns
3241 not line up too nicely with the headers, but the effect
3242 is relatively readable). */
3243 if (addressprint)
3244 ui_out_field_skip (uiout, "addr");
3245 annotate_field (5);
3246 if (b->forked_inferior_pid != 0)
3247 {
3248 ui_out_text (uiout, "process ");
3249 ui_out_field_int (uiout, "what", b->forked_inferior_pid);
3250 ui_out_spaces (uiout, 1);
3251 }
3252
3253 case bp_catch_exec:
3254 /* Field 4, the address, is omitted (which makes the columns
3255 not line up too nicely with the headers, but the effect
3256 is relatively readable). */
3257 if (addressprint)
3258 ui_out_field_skip (uiout, "addr");
3259 annotate_field (5);
3260 if (b->exec_pathname != NULL)
3261 {
3262 ui_out_text (uiout, "program \"");
3263 ui_out_field_string (uiout, "what", b->exec_pathname);
3264 ui_out_text (uiout, "\" ");
3265 }
3266 break;
3267
3268 case bp_catch_catch:
3269 /* Field 4, the address, is omitted (which makes the columns
3270 not line up too nicely with the headers, but the effect
3271 is relatively readable). */
3272 if (addressprint)
3273 ui_out_field_skip (uiout, "addr");
3274 annotate_field (5);
3275 ui_out_field_string (uiout, "what", "exception catch");
3276 ui_out_spaces (uiout, 1);
3277 break;
3278
3279 case bp_catch_throw:
3280 /* Field 4, the address, is omitted (which makes the columns
3281 not line up too nicely with the headers, but the effect
3282 is relatively readable). */
3283 if (addressprint)
3284 ui_out_field_skip (uiout, "addr");
3285 annotate_field (5);
3286 ui_out_field_string (uiout, "what", "exception throw");
3287 ui_out_spaces (uiout, 1);
3288 break;
3289
3290 case bp_breakpoint:
3291 case bp_hardware_breakpoint:
3292 case bp_until:
3293 case bp_finish:
3294 case bp_longjmp:
3295 case bp_longjmp_resume:
3296 case bp_step_resume:
3297 case bp_through_sigtramp:
3298 case bp_watchpoint_scope:
3299 case bp_call_dummy:
3300 case bp_shlib_event:
3301 case bp_thread_event:
3302 case bp_overlay_event:
3303 if (addressprint)
3304 {
3305 annotate_field (4);
3306 ui_out_field_core_addr (uiout, "addr", b->address);
3307 }
3308 annotate_field (5);
3309 *last_addr = b->address;
3310 if (b->source_file)
3311 {
3312 sym = find_pc_sect_function (b->address, b->section);
3313 if (sym)
3314 {
3315 ui_out_text (uiout, "in ");
3316 ui_out_field_string (uiout, "func",
3317 SYMBOL_SOURCE_NAME (sym));
3318 ui_out_wrap_hint (uiout, wrap_indent);
3319 ui_out_text (uiout, " at ");
3320 }
3321 ui_out_field_string (uiout, "file", b->source_file);
3322 ui_out_text (uiout, ":");
3323 ui_out_field_int (uiout, "line", b->line_number);
3324 }
3325 else
3326 {
3327 print_address_symbolic (b->address, stb->stream, demangle, "");
3328 ui_out_field_stream (uiout, "at", stb);
3329 }
3330 break;
3331 }
3332
3333 if (b->thread != -1)
3334 {
3335 /* FIXME: This seems to be redundant and lost here; see the
3336 "stop only in" line a little further down. */
3337 ui_out_text (uiout, " thread ");
3338 ui_out_field_int (uiout, "thread", b->thread);
3339 }
3340
3341 ui_out_text (uiout, "\n");
3342
3343 if (b->frame)
3344 {
3345 annotate_field (6);
3346 ui_out_text (uiout, "\tstop only in stack frame at ");
3347 ui_out_field_core_addr (uiout, "frame", b->frame);
3348 ui_out_text (uiout, "\n");
3349 }
3350
3351 if (b->cond)
3352 {
3353 annotate_field (7);
3354 ui_out_text (uiout, "\tstop only if ");
3355 print_expression (b->cond, stb->stream);
3356 ui_out_field_stream (uiout, "cond", stb);
3357 ui_out_text (uiout, "\n");
3358 }
3359
3360 if (b->thread != -1)
3361 {
3362 /* FIXME should make an annotation for this */
3363 ui_out_text (uiout, "\tstop only in thread ");
3364 ui_out_field_int (uiout, "thread", b->thread);
3365 ui_out_text (uiout, "\n");
3366 }
3367
3368 if (show_breakpoint_hit_counts && b->hit_count)
3369 {
3370 /* FIXME should make an annotation for this */
3371 if (ep_is_catchpoint (b))
3372 ui_out_text (uiout, "\tcatchpoint");
3373 else
3374 ui_out_text (uiout, "\tbreakpoint");
3375 ui_out_text (uiout, " already hit ");
3376 ui_out_field_int (uiout, "times", b->hit_count);
3377 if (b->hit_count == 1)
3378 ui_out_text (uiout, " time\n");
3379 else
3380 ui_out_text (uiout, " times\n");
3381 }
3382
3383 /* Output the count also if it is zero, but only if this is
3384 mi. FIXME: Should have a better test for this. */
3385 if (ui_out_is_mi_like_p (uiout))
3386 if (show_breakpoint_hit_counts && b->hit_count == 0)
3387 ui_out_field_int (uiout, "times", b->hit_count);
3388
3389 if (b->ignore_count)
3390 {
3391 annotate_field (8);
3392 ui_out_text (uiout, "\tignore next ");
3393 ui_out_field_int (uiout, "ignore", b->ignore_count);
3394 ui_out_text (uiout, " hits\n");
3395 }
3396
3397 if ((l = b->commands))
3398 {
3399 annotate_field (9);
3400 ui_out_tuple_begin (uiout, "script");
3401 print_command_lines (uiout, l, 4);
3402 ui_out_tuple_end (uiout);
3403 }
3404 ui_out_tuple_end (uiout);
3405 do_cleanups (old_chain);
3406 }
3407
3408 struct captured_breakpoint_query_args
3409 {
3410 int bnum;
3411 };
3412
3413 static int
3414 do_captured_breakpoint_query (struct ui_out *uiout, void *data)
3415 {
3416 struct captured_breakpoint_query_args *args = data;
3417 register struct breakpoint *b;
3418 CORE_ADDR dummy_addr = 0;
3419 ALL_BREAKPOINTS (b)
3420 {
3421 if (args->bnum == b->number)
3422 {
3423 print_one_breakpoint (b, &dummy_addr);
3424 return GDB_RC_OK;
3425 }
3426 }
3427 return GDB_RC_NONE;
3428 }
3429
3430 enum gdb_rc
3431 gdb_breakpoint_query (struct ui_out *uiout, int bnum)
3432 {
3433 struct captured_breakpoint_query_args args;
3434 args.bnum = bnum;
3435 /* For the moment we don't trust print_one_breakpoint() to not throw
3436 an error. */
3437 return catch_exceptions (uiout, do_captured_breakpoint_query, &args,
3438 NULL, RETURN_MASK_ALL);
3439 }
3440
3441 /* Return non-zero if B is user settable (breakpoints, watchpoints,
3442 catchpoints, et.al.). */
3443
3444 static int
3445 user_settable_breakpoint (const struct breakpoint *b)
3446 {
3447 return (b->type == bp_breakpoint
3448 || b->type == bp_catch_load
3449 || b->type == bp_catch_unload
3450 || b->type == bp_catch_fork
3451 || b->type == bp_catch_vfork
3452 || b->type == bp_catch_exec
3453 || b->type == bp_catch_catch
3454 || b->type == bp_catch_throw
3455 || b->type == bp_hardware_breakpoint
3456 || b->type == bp_watchpoint
3457 || b->type == bp_read_watchpoint
3458 || b->type == bp_access_watchpoint
3459 || b->type == bp_hardware_watchpoint);
3460 }
3461
3462 /* Print information on user settable breakpoint (watchpoint, etc)
3463 number BNUM. If BNUM is -1 print all user settable breakpoints.
3464 If ALLFLAG is non-zero, include non- user settable breakpoints. */
3465
3466 static void
3467 breakpoint_1 (int bnum, int allflag)
3468 {
3469 register struct breakpoint *b;
3470 CORE_ADDR last_addr = (CORE_ADDR) -1;
3471 int nr_printable_breakpoints;
3472
3473 /* Compute the number of rows in the table. */
3474 nr_printable_breakpoints = 0;
3475 ALL_BREAKPOINTS (b)
3476 if (bnum == -1
3477 || bnum == b->number)
3478 {
3479 if (allflag || user_settable_breakpoint (b))
3480 nr_printable_breakpoints++;
3481 }
3482
3483 if (addressprint)
3484 ui_out_table_begin (uiout, 6, nr_printable_breakpoints, "BreakpointTable");
3485 else
3486 ui_out_table_begin (uiout, 5, nr_printable_breakpoints, "BreakpointTable");
3487
3488 if (nr_printable_breakpoints > 0)
3489 annotate_breakpoints_headers ();
3490 if (nr_printable_breakpoints > 0)
3491 annotate_field (0);
3492 ui_out_table_header (uiout, 3, ui_left, "number", "Num"); /* 1 */
3493 if (nr_printable_breakpoints > 0)
3494 annotate_field (1);
3495 ui_out_table_header (uiout, 14, ui_left, "type", "Type"); /* 2 */
3496 if (nr_printable_breakpoints > 0)
3497 annotate_field (2);
3498 ui_out_table_header (uiout, 4, ui_left, "disp", "Disp"); /* 3 */
3499 if (nr_printable_breakpoints > 0)
3500 annotate_field (3);
3501 ui_out_table_header (uiout, 3, ui_left, "enabled", "Enb"); /* 4 */
3502 if (addressprint)
3503 {
3504 if (nr_printable_breakpoints > 0)
3505 annotate_field (4);
3506 if (TARGET_ADDR_BIT <= 32)
3507 ui_out_table_header (uiout, 10, ui_left, "addr", "Address");/* 5 */
3508 else
3509 ui_out_table_header (uiout, 18, ui_left, "addr", "Address");/* 5 */
3510 }
3511 if (nr_printable_breakpoints > 0)
3512 annotate_field (5);
3513 ui_out_table_header (uiout, 40, ui_noalign, "what", "What"); /* 6 */
3514 ui_out_table_body (uiout);
3515 if (nr_printable_breakpoints > 0)
3516 annotate_breakpoints_table ();
3517
3518 ALL_BREAKPOINTS (b)
3519 if (bnum == -1
3520 || bnum == b->number)
3521 {
3522 /* We only print out user settable breakpoints unless the
3523 allflag is set. */
3524 if (allflag || user_settable_breakpoint (b))
3525 print_one_breakpoint (b, &last_addr);
3526 }
3527
3528 ui_out_table_end (uiout);
3529
3530 if (nr_printable_breakpoints == 0)
3531 {
3532 if (bnum == -1)
3533 ui_out_message (uiout, 0, "No breakpoints or watchpoints.\n");
3534 else
3535 ui_out_message (uiout, 0, "No breakpoint or watchpoint number %d.\n",
3536 bnum);
3537 }
3538 else
3539 {
3540 /* Compare against (CORE_ADDR)-1 in case some compiler decides
3541 that a comparison of an unsigned with -1 is always false. */
3542 if (last_addr != (CORE_ADDR) -1)
3543 set_next_address (last_addr);
3544 }
3545
3546 /* FIXME? Should this be moved up so that it is only called when
3547 there have been breakpoints? */
3548 annotate_breakpoints_table_end ();
3549 }
3550
3551 /* ARGSUSED */
3552 static void
3553 breakpoints_info (char *bnum_exp, int from_tty)
3554 {
3555 int bnum = -1;
3556
3557 if (bnum_exp)
3558 bnum = parse_and_eval_long (bnum_exp);
3559
3560 breakpoint_1 (bnum, 0);
3561 }
3562
3563 /* ARGSUSED */
3564 static void
3565 maintenance_info_breakpoints (char *bnum_exp, int from_tty)
3566 {
3567 int bnum = -1;
3568
3569 if (bnum_exp)
3570 bnum = parse_and_eval_long (bnum_exp);
3571
3572 breakpoint_1 (bnum, 1);
3573 }
3574
3575 /* Print a message describing any breakpoints set at PC. */
3576
3577 static void
3578 describe_other_breakpoints (CORE_ADDR pc, asection *section)
3579 {
3580 register int others = 0;
3581 register struct breakpoint *b;
3582
3583 ALL_BREAKPOINTS (b)
3584 if (b->address == pc) /* address match / overlay match */
3585 if (!overlay_debugging || b->section == section)
3586 others++;
3587 if (others > 0)
3588 {
3589 printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
3590 ALL_BREAKPOINTS (b)
3591 if (b->address == pc) /* address match / overlay match */
3592 if (!overlay_debugging || b->section == section)
3593 {
3594 others--;
3595 printf_filtered ("%d%s%s ",
3596 b->number,
3597 ((b->enable_state == bp_disabled ||
3598 b->enable_state == bp_shlib_disabled ||
3599 b->enable_state == bp_call_disabled)
3600 ? " (disabled)"
3601 : b->enable_state == bp_permanent
3602 ? " (permanent)"
3603 : ""),
3604 (others > 1) ? ","
3605 : ((others == 1) ? " and" : ""));
3606 }
3607 printf_filtered ("also set at pc ");
3608 print_address_numeric (pc, 1, gdb_stdout);
3609 printf_filtered (".\n");
3610 }
3611 }
3612 \f
3613 /* Set the default place to put a breakpoint
3614 for the `break' command with no arguments. */
3615
3616 void
3617 set_default_breakpoint (int valid, CORE_ADDR addr, struct symtab *symtab,
3618 int line)
3619 {
3620 default_breakpoint_valid = valid;
3621 default_breakpoint_address = addr;
3622 default_breakpoint_symtab = symtab;
3623 default_breakpoint_line = line;
3624 }
3625
3626 /* Return true iff it is meaningful to use the address member of
3627 BPT. For some breakpoint types, the address member is irrelevant
3628 and it makes no sense to attempt to compare it to other addresses
3629 (or use it for any other purpose either).
3630
3631 More specifically, each of the following breakpoint types will always
3632 have a zero valued address and we don't want check_duplicates() to mark
3633 breakpoints of any of these types to be a duplicate of an actual
3634 breakpoint at address zero:
3635
3636 bp_watchpoint
3637 bp_hardware_watchpoint
3638 bp_read_watchpoint
3639 bp_access_watchpoint
3640 bp_catch_exec
3641 bp_longjmp_resume
3642 bp_catch_fork
3643 bp_catch_vork */
3644
3645 static int
3646 breakpoint_address_is_meaningful (struct breakpoint *bpt)
3647 {
3648 enum bptype type = bpt->type;
3649
3650 return (type != bp_watchpoint
3651 && type != bp_hardware_watchpoint
3652 && type != bp_read_watchpoint
3653 && type != bp_access_watchpoint
3654 && type != bp_catch_exec
3655 && type != bp_longjmp_resume
3656 && type != bp_catch_fork
3657 && type != bp_catch_vfork);
3658 }
3659
3660 /* Rescan breakpoints at the same address and section as BPT,
3661 marking the first one as "first" and any others as "duplicates".
3662 This is so that the bpt instruction is only inserted once.
3663 If we have a permanent breakpoint at the same place as BPT, make
3664 that one the official one, and the rest as duplicates. */
3665
3666 static void
3667 check_duplicates (struct breakpoint *bpt)
3668 {
3669 register struct breakpoint *b;
3670 register int count = 0;
3671 struct breakpoint *perm_bp = 0;
3672 CORE_ADDR address = bpt->address;
3673 asection *section = bpt->section;
3674
3675 if (! breakpoint_address_is_meaningful (bpt))
3676 return;
3677
3678 ALL_BREAKPOINTS (b)
3679 if (b->enable_state != bp_disabled
3680 && b->enable_state != bp_shlib_disabled
3681 && b->enable_state != bp_call_disabled
3682 && b->address == address /* address / overlay match */
3683 && (!overlay_debugging || b->section == section)
3684 && breakpoint_address_is_meaningful (b))
3685 {
3686 /* Have we found a permanent breakpoint? */
3687 if (b->enable_state == bp_permanent)
3688 {
3689 perm_bp = b;
3690 break;
3691 }
3692
3693 count++;
3694 b->duplicate = count > 1;
3695 }
3696
3697 /* If we found a permanent breakpoint at this address, go over the
3698 list again and declare all the other breakpoints there to be the
3699 duplicates. */
3700 if (perm_bp)
3701 {
3702 perm_bp->duplicate = 0;
3703
3704 /* Permanent breakpoint should always be inserted. */
3705 if (! perm_bp->inserted)
3706 internal_error (__FILE__, __LINE__,
3707 "allegedly permanent breakpoint is not "
3708 "actually inserted");
3709
3710 ALL_BREAKPOINTS (b)
3711 if (b != perm_bp)
3712 {
3713 if (b->inserted)
3714 internal_error (__FILE__, __LINE__,
3715 "another breakpoint was inserted on top of "
3716 "a permanent breakpoint");
3717
3718 if (b->enable_state != bp_disabled
3719 && b->enable_state != bp_shlib_disabled
3720 && b->enable_state != bp_call_disabled
3721 && b->address == address /* address / overlay match */
3722 && (!overlay_debugging || b->section == section)
3723 && breakpoint_address_is_meaningful (b))
3724 b->duplicate = 1;
3725 }
3726 }
3727 }
3728
3729 /* set_raw_breakpoint() is a low level routine for allocating and
3730 partially initializing a breakpoint of type BPTYPE. The newly
3731 created breakpoint's address, section, source file name, and line
3732 number are provided by SAL. The newly created and partially
3733 initialized breakpoint is added to the breakpoint chain and
3734 is also returned as the value of this function.
3735
3736 It is expected that the caller will complete the initialization of
3737 the newly created breakpoint struct as well as output any status
3738 information regarding the creation of a new breakpoint. In
3739 particular, set_raw_breakpoint() does NOT set the breakpoint
3740 number! Care should be taken to not allow an error() to occur
3741 prior to completing the initialization of the breakpoint. If this
3742 should happen, a bogus breakpoint will be left on the chain. */
3743
3744 struct breakpoint *
3745 set_raw_breakpoint (struct symtab_and_line sal, enum bptype bptype)
3746 {
3747 register struct breakpoint *b, *b1;
3748
3749 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
3750 memset (b, 0, sizeof (*b));
3751 b->address = sal.pc;
3752 if (sal.symtab == NULL)
3753 b->source_file = NULL;
3754 else
3755 b->source_file = savestring (sal.symtab->filename,
3756 strlen (sal.symtab->filename));
3757 b->section = sal.section;
3758 b->type = bptype;
3759 b->language = current_language->la_language;
3760 b->input_radix = input_radix;
3761 b->thread = -1;
3762 b->line_number = sal.line;
3763 b->enable_state = bp_enabled;
3764 b->next = 0;
3765 b->silent = 0;
3766 b->ignore_count = 0;
3767 b->commands = NULL;
3768 b->frame = 0;
3769 b->dll_pathname = NULL;
3770 b->triggered_dll_pathname = NULL;
3771 b->forked_inferior_pid = 0;
3772 b->exec_pathname = NULL;
3773
3774 /* Add this breakpoint to the end of the chain
3775 so that a list of breakpoints will come out in order
3776 of increasing numbers. */
3777
3778 b1 = breakpoint_chain;
3779 if (b1 == 0)
3780 breakpoint_chain = b;
3781 else
3782 {
3783 while (b1->next)
3784 b1 = b1->next;
3785 b1->next = b;
3786 }
3787
3788 check_duplicates (b);
3789 breakpoints_changed ();
3790
3791 return b;
3792 }
3793
3794
3795 /* Note that the breakpoint object B describes a permanent breakpoint
3796 instruction, hard-wired into the inferior's code. */
3797 void
3798 make_breakpoint_permanent (struct breakpoint *b)
3799 {
3800 b->enable_state = bp_permanent;
3801
3802 /* By definition, permanent breakpoints are already present in the code. */
3803 b->inserted = 1;
3804 }
3805
3806 static struct breakpoint *
3807 create_internal_breakpoint (CORE_ADDR address, enum bptype type)
3808 {
3809 static int internal_breakpoint_number = -1;
3810 struct symtab_and_line sal;
3811 struct breakpoint *b;
3812
3813 INIT_SAL (&sal); /* initialize to zeroes */
3814
3815 sal.pc = address;
3816 sal.section = find_pc_overlay (sal.pc);
3817
3818 b = set_raw_breakpoint (sal, type);
3819 b->number = internal_breakpoint_number--;
3820 b->disposition = disp_donttouch;
3821
3822 return b;
3823 }
3824
3825
3826 static void
3827 create_longjmp_breakpoint (char *func_name)
3828 {
3829 struct breakpoint *b;
3830 struct minimal_symbol *m;
3831
3832 if (func_name == NULL)
3833 b = create_internal_breakpoint (0, bp_longjmp_resume);
3834 else
3835 {
3836 if ((m = lookup_minimal_symbol_text (func_name, NULL, NULL)) == NULL)
3837 return;
3838
3839 b = create_internal_breakpoint (SYMBOL_VALUE_ADDRESS (m), bp_longjmp);
3840 }
3841
3842 b->enable_state = bp_disabled;
3843 b->silent = 1;
3844 if (func_name)
3845 b->addr_string = xstrdup (func_name);
3846 }
3847
3848 /* Call this routine when stepping and nexting to enable a breakpoint
3849 if we do a longjmp(). When we hit that breakpoint, call
3850 set_longjmp_resume_breakpoint() to figure out where we are going. */
3851
3852 void
3853 enable_longjmp_breakpoint (void)
3854 {
3855 register struct breakpoint *b;
3856
3857 ALL_BREAKPOINTS (b)
3858 if (b->type == bp_longjmp)
3859 {
3860 b->enable_state = bp_enabled;
3861 check_duplicates (b);
3862 }
3863 }
3864
3865 void
3866 disable_longjmp_breakpoint (void)
3867 {
3868 register struct breakpoint *b;
3869
3870 ALL_BREAKPOINTS (b)
3871 if (b->type == bp_longjmp
3872 || b->type == bp_longjmp_resume)
3873 {
3874 b->enable_state = bp_disabled;
3875 check_duplicates (b);
3876 }
3877 }
3878
3879 static void
3880 create_overlay_event_breakpoint (char *func_name)
3881 {
3882 struct breakpoint *b;
3883 struct minimal_symbol *m;
3884
3885 if ((m = lookup_minimal_symbol_text (func_name, NULL, NULL)) == NULL)
3886 return;
3887
3888 b = create_internal_breakpoint (SYMBOL_VALUE_ADDRESS (m),
3889 bp_overlay_event);
3890 b->addr_string = xstrdup (func_name);
3891
3892 if (overlay_debugging == ovly_auto)
3893 {
3894 b->enable_state = bp_enabled;
3895 overlay_events_enabled = 1;
3896 }
3897 else
3898 {
3899 b->enable_state = bp_disabled;
3900 overlay_events_enabled = 0;
3901 }
3902 }
3903
3904 void
3905 enable_overlay_breakpoints (void)
3906 {
3907 register struct breakpoint *b;
3908
3909 ALL_BREAKPOINTS (b)
3910 if (b->type == bp_overlay_event)
3911 {
3912 b->enable_state = bp_enabled;
3913 check_duplicates (b);
3914 overlay_events_enabled = 1;
3915 }
3916 }
3917
3918 void
3919 disable_overlay_breakpoints (void)
3920 {
3921 register struct breakpoint *b;
3922
3923 ALL_BREAKPOINTS (b)
3924 if (b->type == bp_overlay_event)
3925 {
3926 b->enable_state = bp_disabled;
3927 check_duplicates (b);
3928 overlay_events_enabled = 0;
3929 }
3930 }
3931
3932 struct breakpoint *
3933 create_thread_event_breakpoint (CORE_ADDR address)
3934 {
3935 struct breakpoint *b;
3936 char addr_string[80]; /* Surely an addr can't be longer than that. */
3937
3938 b = create_internal_breakpoint (address, bp_thread_event);
3939
3940 b->enable_state = bp_enabled;
3941 /* addr_string has to be used or breakpoint_re_set will delete me. */
3942 sprintf (addr_string, "*0x%s", paddr (b->address));
3943 b->addr_string = xstrdup (addr_string);
3944
3945 return b;
3946 }
3947
3948 void
3949 remove_thread_event_breakpoints (void)
3950 {
3951 struct breakpoint *b, *temp;
3952
3953 ALL_BREAKPOINTS_SAFE (b, temp)
3954 if (b->type == bp_thread_event)
3955 delete_breakpoint (b);
3956 }
3957
3958 #ifdef SOLIB_ADD
3959 void
3960 remove_solib_event_breakpoints (void)
3961 {
3962 register struct breakpoint *b, *temp;
3963
3964 ALL_BREAKPOINTS_SAFE (b, temp)
3965 if (b->type == bp_shlib_event)
3966 delete_breakpoint (b);
3967 }
3968
3969 struct breakpoint *
3970 create_solib_event_breakpoint (CORE_ADDR address)
3971 {
3972 struct breakpoint *b;
3973
3974 b = create_internal_breakpoint (address, bp_shlib_event);
3975 return b;
3976 }
3977
3978 /* Disable any breakpoints that are on code in shared libraries. Only
3979 apply to enabled breakpoints, disabled ones can just stay disabled. */
3980
3981 void
3982 disable_breakpoints_in_shlibs (int silent)
3983 {
3984 struct breakpoint *b;
3985 int disabled_shlib_breaks = 0;
3986
3987 /* See also: insert_breakpoints, under DISABLE_UNSETTABLE_BREAK. */
3988 ALL_BREAKPOINTS (b)
3989 {
3990 #if defined (PC_SOLIB)
3991 if (((b->type == bp_breakpoint) ||
3992 (b->type == bp_hardware_breakpoint)) &&
3993 b->enable_state == bp_enabled &&
3994 !b->duplicate &&
3995 PC_SOLIB (b->address))
3996 {
3997 b->enable_state = bp_shlib_disabled;
3998 if (!silent)
3999 {
4000 if (!disabled_shlib_breaks)
4001 {
4002 target_terminal_ours_for_output ();
4003 warning ("Temporarily disabling shared library breakpoints:");
4004 }
4005 disabled_shlib_breaks = 1;
4006 warning ("breakpoint #%d ", b->number);
4007 }
4008 }
4009 #endif
4010 }
4011 }
4012
4013 /* Try to reenable any breakpoints in shared libraries. */
4014 void
4015 re_enable_breakpoints_in_shlibs (void)
4016 {
4017 struct breakpoint *b;
4018
4019 ALL_BREAKPOINTS (b)
4020 if (b->enable_state == bp_shlib_disabled)
4021 {
4022 char buf[1];
4023
4024 /* Do not reenable the breakpoint if the shared library
4025 is still not mapped in. */
4026 if (target_read_memory (b->address, buf, 1) == 0)
4027 b->enable_state = bp_enabled;
4028 }
4029 }
4030
4031 #endif
4032
4033 static void
4034 solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname,
4035 char *cond_string, enum bptype bp_kind)
4036 {
4037 struct breakpoint *b;
4038 struct symtabs_and_lines sals;
4039 struct cleanup *old_chain;
4040 struct cleanup *canonical_strings_chain = NULL;
4041 char *addr_start = hookname;
4042 char *addr_end = NULL;
4043 char **canonical = (char **) NULL;
4044 int thread = -1; /* All threads. */
4045
4046 /* Set a breakpoint on the specified hook. */
4047 sals = decode_line_1 (&hookname, 1, (struct symtab *) NULL, 0, &canonical);
4048 addr_end = hookname;
4049
4050 if (sals.nelts == 0)
4051 {
4052 warning ("Unable to set a breakpoint on dynamic linker callback.");
4053 warning ("Suggest linking with /opt/langtools/lib/end.o.");
4054 warning ("GDB will be unable to track shl_load/shl_unload calls");
4055 return;
4056 }
4057 if (sals.nelts != 1)
4058 {
4059 warning ("Unable to set unique breakpoint on dynamic linker callback.");
4060 warning ("GDB will be unable to track shl_load/shl_unload calls");
4061 return;
4062 }
4063
4064 /* Make sure that all storage allocated in decode_line_1 gets freed
4065 in case the following errors out. */
4066 old_chain = make_cleanup (xfree, sals.sals);
4067 if (canonical != (char **) NULL)
4068 {
4069 make_cleanup (xfree, canonical);
4070 canonical_strings_chain = make_cleanup (null_cleanup, 0);
4071 if (canonical[0] != NULL)
4072 make_cleanup (xfree, canonical[0]);
4073 }
4074
4075 resolve_sal_pc (&sals.sals[0]);
4076
4077 /* Remove the canonical strings from the cleanup, they are needed below. */
4078 if (canonical != (char **) NULL)
4079 discard_cleanups (canonical_strings_chain);
4080
4081 b = set_raw_breakpoint (sals.sals[0], bp_kind);
4082 set_breakpoint_count (breakpoint_count + 1);
4083 b->number = breakpoint_count;
4084 b->cond = NULL;
4085 b->cond_string = (cond_string == NULL) ?
4086 NULL : savestring (cond_string, strlen (cond_string));
4087 b->thread = thread;
4088
4089 if (canonical != (char **) NULL && canonical[0] != NULL)
4090 b->addr_string = canonical[0];
4091 else if (addr_start)
4092 b->addr_string = savestring (addr_start, addr_end - addr_start);
4093
4094 b->enable_state = bp_enabled;
4095 b->disposition = tempflag ? disp_del : disp_donttouch;
4096
4097 if (dll_pathname == NULL)
4098 b->dll_pathname = NULL;
4099 else
4100 {
4101 b->dll_pathname = (char *) xmalloc (strlen (dll_pathname) + 1);
4102 strcpy (b->dll_pathname, dll_pathname);
4103 }
4104
4105 mention (b);
4106 do_cleanups (old_chain);
4107 }
4108
4109 void
4110 create_solib_load_event_breakpoint (char *hookname, int tempflag,
4111 char *dll_pathname, char *cond_string)
4112 {
4113 solib_load_unload_1 (hookname, tempflag, dll_pathname,
4114 cond_string, bp_catch_load);
4115 }
4116
4117 void
4118 create_solib_unload_event_breakpoint (char *hookname, int tempflag,
4119 char *dll_pathname, char *cond_string)
4120 {
4121 solib_load_unload_1 (hookname,tempflag, dll_pathname,
4122 cond_string, bp_catch_unload);
4123 }
4124
4125 static void
4126 create_fork_vfork_event_catchpoint (int tempflag, char *cond_string,
4127 enum bptype bp_kind)
4128 {
4129 struct symtab_and_line sal;
4130 struct breakpoint *b;
4131 int thread = -1; /* All threads. */
4132
4133 INIT_SAL (&sal);
4134 sal.pc = 0;
4135 sal.symtab = NULL;
4136 sal.line = 0;
4137
4138 b = set_raw_breakpoint (sal, bp_kind);
4139 set_breakpoint_count (breakpoint_count + 1);
4140 b->number = breakpoint_count;
4141 b->cond = NULL;
4142 b->cond_string = (cond_string == NULL) ?
4143 NULL : savestring (cond_string, strlen (cond_string));
4144 b->thread = thread;
4145 b->addr_string = NULL;
4146 b->enable_state = bp_enabled;
4147 b->disposition = tempflag ? disp_del : disp_donttouch;
4148 b->forked_inferior_pid = 0;
4149
4150 mention (b);
4151 }
4152
4153 void
4154 create_fork_event_catchpoint (int tempflag, char *cond_string)
4155 {
4156 create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_fork);
4157 }
4158
4159 void
4160 create_vfork_event_catchpoint (int tempflag, char *cond_string)
4161 {
4162 create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_vfork);
4163 }
4164
4165 void
4166 create_exec_event_catchpoint (int tempflag, char *cond_string)
4167 {
4168 struct symtab_and_line sal;
4169 struct breakpoint *b;
4170 int thread = -1; /* All threads. */
4171
4172 INIT_SAL (&sal);
4173 sal.pc = 0;
4174 sal.symtab = NULL;
4175 sal.line = 0;
4176
4177 b = set_raw_breakpoint (sal, bp_catch_exec);
4178 set_breakpoint_count (breakpoint_count + 1);
4179 b->number = breakpoint_count;
4180 b->cond = NULL;
4181 b->cond_string = (cond_string == NULL) ?
4182 NULL : savestring (cond_string, strlen (cond_string));
4183 b->thread = thread;
4184 b->addr_string = NULL;
4185 b->enable_state = bp_enabled;
4186 b->disposition = tempflag ? disp_del : disp_donttouch;
4187
4188 mention (b);
4189 }
4190
4191 static int
4192 hw_breakpoint_used_count (void)
4193 {
4194 register struct breakpoint *b;
4195 int i = 0;
4196
4197 ALL_BREAKPOINTS (b)
4198 {
4199 if (b->type == bp_hardware_breakpoint && b->enable_state == bp_enabled)
4200 i++;
4201 }
4202
4203 return i;
4204 }
4205
4206 static int
4207 hw_watchpoint_used_count (enum bptype type, int *other_type_used)
4208 {
4209 register struct breakpoint *b;
4210 int i = 0;
4211
4212 *other_type_used = 0;
4213 ALL_BREAKPOINTS (b)
4214 {
4215 if (b->enable_state == bp_enabled)
4216 {
4217 if (b->type == type)
4218 i++;
4219 else if ((b->type == bp_hardware_watchpoint ||
4220 b->type == bp_read_watchpoint ||
4221 b->type == bp_access_watchpoint)
4222 && b->enable_state == bp_enabled)
4223 *other_type_used = 1;
4224 }
4225 }
4226 return i;
4227 }
4228
4229 /* Call this after hitting the longjmp() breakpoint. Use this to set
4230 a new breakpoint at the target of the jmp_buf.
4231
4232 FIXME - This ought to be done by setting a temporary breakpoint
4233 that gets deleted automatically... */
4234
4235 void
4236 set_longjmp_resume_breakpoint (CORE_ADDR pc, struct frame_info *frame)
4237 {
4238 register struct breakpoint *b;
4239
4240 ALL_BREAKPOINTS (b)
4241 if (b->type == bp_longjmp_resume)
4242 {
4243 b->address = pc;
4244 b->enable_state = bp_enabled;
4245 if (frame != NULL)
4246 b->frame = frame->frame;
4247 else
4248 b->frame = 0;
4249 check_duplicates (b);
4250 return;
4251 }
4252 }
4253
4254 void
4255 disable_watchpoints_before_interactive_call_start (void)
4256 {
4257 struct breakpoint *b;
4258
4259 ALL_BREAKPOINTS (b)
4260 {
4261 if (((b->type == bp_watchpoint)
4262 || (b->type == bp_hardware_watchpoint)
4263 || (b->type == bp_read_watchpoint)
4264 || (b->type == bp_access_watchpoint)
4265 || ep_is_exception_catchpoint (b))
4266 && (b->enable_state == bp_enabled))
4267 {
4268 b->enable_state = bp_call_disabled;
4269 check_duplicates (b);
4270 }
4271 }
4272 }
4273
4274 void
4275 enable_watchpoints_after_interactive_call_stop (void)
4276 {
4277 struct breakpoint *b;
4278
4279 ALL_BREAKPOINTS (b)
4280 {
4281 if (((b->type == bp_watchpoint)
4282 || (b->type == bp_hardware_watchpoint)
4283 || (b->type == bp_read_watchpoint)
4284 || (b->type == bp_access_watchpoint)
4285 || ep_is_exception_catchpoint (b))
4286 && (b->enable_state == bp_call_disabled))
4287 {
4288 b->enable_state = bp_enabled;
4289 check_duplicates (b);
4290 }
4291 }
4292 }
4293
4294
4295 /* Set a breakpoint that will evaporate an end of command
4296 at address specified by SAL.
4297 Restrict it to frame FRAME if FRAME is nonzero. */
4298
4299 struct breakpoint *
4300 set_momentary_breakpoint (struct symtab_and_line sal, struct frame_info *frame,
4301 enum bptype type)
4302 {
4303 register struct breakpoint *b;
4304 b = set_raw_breakpoint (sal, type);
4305 b->enable_state = bp_enabled;
4306 b->disposition = disp_donttouch;
4307 b->frame = (frame ? frame->frame : 0);
4308
4309 /* If we're debugging a multi-threaded program, then we
4310 want momentary breakpoints to be active in only a
4311 single thread of control. */
4312 if (in_thread_list (inferior_ptid))
4313 b->thread = pid_to_thread_id (inferior_ptid);
4314
4315 return b;
4316 }
4317 \f
4318
4319 /* Tell the user we have just set a breakpoint B. */
4320
4321 static void
4322 mention (struct breakpoint *b)
4323 {
4324 int say_where = 0;
4325 struct cleanup *old_chain;
4326 struct ui_stream *stb;
4327
4328 stb = ui_out_stream_new (uiout);
4329 old_chain = make_cleanup_ui_out_stream_delete (stb);
4330
4331 /* FIXME: This is misplaced; mention() is called by things (like hitting a
4332 watchpoint) other than breakpoint creation. It should be possible to
4333 clean this up and at the same time replace the random calls to
4334 breakpoint_changed with this hook, as has already been done for
4335 delete_breakpoint_hook and so on. */
4336 if (create_breakpoint_hook)
4337 create_breakpoint_hook (b);
4338 breakpoint_create_event (b->number);
4339
4340 switch (b->type)
4341 {
4342 case bp_none:
4343 printf_filtered ("(apparently deleted?) Eventpoint %d: ", b->number);
4344 break;
4345 case bp_watchpoint:
4346 ui_out_text (uiout, "Watchpoint ");
4347 ui_out_tuple_begin (uiout, "wpt");
4348 ui_out_field_int (uiout, "number", b->number);
4349 ui_out_text (uiout, ": ");
4350 print_expression (b->exp, stb->stream);
4351 ui_out_field_stream (uiout, "exp", stb);
4352 ui_out_tuple_end (uiout);
4353 break;
4354 case bp_hardware_watchpoint:
4355 ui_out_text (uiout, "Hardware watchpoint ");
4356 ui_out_tuple_begin (uiout, "wpt");
4357 ui_out_field_int (uiout, "number", b->number);
4358 ui_out_text (uiout, ": ");
4359 print_expression (b->exp, stb->stream);
4360 ui_out_field_stream (uiout, "exp", stb);
4361 ui_out_tuple_end (uiout);
4362 break;
4363 case bp_read_watchpoint:
4364 ui_out_text (uiout, "Hardware read watchpoint ");
4365 ui_out_tuple_begin (uiout, "hw-rwpt");
4366 ui_out_field_int (uiout, "number", b->number);
4367 ui_out_text (uiout, ": ");
4368 print_expression (b->exp, stb->stream);
4369 ui_out_field_stream (uiout, "exp", stb);
4370 ui_out_tuple_end (uiout);
4371 break;
4372 case bp_access_watchpoint:
4373 ui_out_text (uiout, "Hardware access (read/write) watchpoint ");
4374 ui_out_tuple_begin (uiout, "hw-awpt");
4375 ui_out_field_int (uiout, "number", b->number);
4376 ui_out_text (uiout, ": ");
4377 print_expression (b->exp, stb->stream);
4378 ui_out_field_stream (uiout, "exp", stb);
4379 ui_out_tuple_end (uiout);
4380 break;
4381 case bp_breakpoint:
4382 if (ui_out_is_mi_like_p (uiout))
4383 {
4384 say_where = 0;
4385 break;
4386 }
4387 printf_filtered ("Breakpoint %d", b->number);
4388 say_where = 1;
4389 break;
4390 case bp_hardware_breakpoint:
4391 if (ui_out_is_mi_like_p (uiout))
4392 {
4393 say_where = 0;
4394 break;
4395 }
4396 printf_filtered ("Hardware assisted breakpoint %d", b->number);
4397 say_where = 1;
4398 break;
4399 case bp_catch_load:
4400 case bp_catch_unload:
4401 printf_filtered ("Catchpoint %d (%s %s)",
4402 b->number,
4403 (b->type == bp_catch_load) ? "load" : "unload",
4404 (b->dll_pathname != NULL) ?
4405 b->dll_pathname : "<any library>");
4406 break;
4407 case bp_catch_fork:
4408 case bp_catch_vfork:
4409 printf_filtered ("Catchpoint %d (%s)",
4410 b->number,
4411 (b->type == bp_catch_fork) ? "fork" : "vfork");
4412 break;
4413 case bp_catch_exec:
4414 printf_filtered ("Catchpoint %d (exec)",
4415 b->number);
4416 break;
4417 case bp_catch_catch:
4418 case bp_catch_throw:
4419 printf_filtered ("Catchpoint %d (%s)",
4420 b->number,
4421 (b->type == bp_catch_catch) ? "catch" : "throw");
4422 break;
4423
4424 case bp_until:
4425 case bp_finish:
4426 case bp_longjmp:
4427 case bp_longjmp_resume:
4428 case bp_step_resume:
4429 case bp_through_sigtramp:
4430 case bp_call_dummy:
4431 case bp_watchpoint_scope:
4432 case bp_shlib_event:
4433 case bp_thread_event:
4434 case bp_overlay_event:
4435 break;
4436 }
4437 if (say_where)
4438 {
4439 if (addressprint || b->source_file == NULL)
4440 {
4441 printf_filtered (" at ");
4442 print_address_numeric (b->address, 1, gdb_stdout);
4443 }
4444 if (b->source_file)
4445 printf_filtered (": file %s, line %d.",
4446 b->source_file, b->line_number);
4447 }
4448 do_cleanups (old_chain);
4449 if (ui_out_is_mi_like_p (uiout))
4450 return;
4451 printf_filtered ("\n");
4452 }
4453 \f
4454
4455 /* Add SALS.nelts breakpoints to the breakpoint table. For each
4456 SALS.sal[i] breakpoint, include the corresponding ADDR_STRING[i],
4457 COND[i] and COND_STRING[i] values.
4458
4459 NOTE: If the function succeeds, the caller is expected to cleanup
4460 the arrays ADDR_STRING, COND_STRING, COND and SALS (but not the
4461 array contents). If the function fails (error() is called), the
4462 caller is expected to cleanups both the ADDR_STRING, COND_STRING,
4463 COND and SALS arrays and each of those arrays contents. */
4464
4465 static void
4466 create_breakpoints (struct symtabs_and_lines sals, char **addr_string,
4467 struct expression **cond, char **cond_string,
4468 enum bptype type, enum bpdisp disposition,
4469 int thread, int ignore_count, int from_tty)
4470 {
4471 if (type == bp_hardware_breakpoint)
4472 {
4473 int i = hw_breakpoint_used_count ();
4474 int target_resources_ok =
4475 TARGET_CAN_USE_HARDWARE_WATCHPOINT (bp_hardware_breakpoint,
4476 i + sals.nelts, 0);
4477 if (target_resources_ok == 0)
4478 error ("No hardware breakpoint support in the target.");
4479 else if (target_resources_ok < 0)
4480 error ("Hardware breakpoints used exceeds limit.");
4481 }
4482
4483 /* Now set all the breakpoints. */
4484 {
4485 int i;
4486 for (i = 0; i < sals.nelts; i++)
4487 {
4488 struct breakpoint *b;
4489 struct symtab_and_line sal = sals.sals[i];
4490
4491 if (from_tty)
4492 describe_other_breakpoints (sal.pc, sal.section);
4493
4494 b = set_raw_breakpoint (sal, type);
4495 set_breakpoint_count (breakpoint_count + 1);
4496 b->number = breakpoint_count;
4497 b->cond = cond[i];
4498 b->thread = thread;
4499 b->addr_string = addr_string[i];
4500 b->cond_string = cond_string[i];
4501 b->ignore_count = ignore_count;
4502 b->enable_state = bp_enabled;
4503 b->disposition = disposition;
4504 mention (b);
4505 }
4506 }
4507 }
4508
4509 /* Parse ARG which is assumed to be a SAL specification possibly
4510 followed by conditionals. On return, SALS contains an array of SAL
4511 addresses found. ADDR_STRING contains a vector of (canonical)
4512 address strings. ARG points to the end of the SAL. */
4513
4514 void
4515 parse_breakpoint_sals (char **address,
4516 struct symtabs_and_lines *sals,
4517 char ***addr_string)
4518 {
4519 char *addr_start = *address;
4520 *addr_string = NULL;
4521 /* If no arg given, or if first arg is 'if ', use the default
4522 breakpoint. */
4523 if ((*address) == NULL
4524 || (strncmp ((*address), "if", 2) == 0 && isspace ((*address)[2])))
4525 {
4526 if (default_breakpoint_valid)
4527 {
4528 struct symtab_and_line sal;
4529 INIT_SAL (&sal); /* initialize to zeroes */
4530 sals->sals = (struct symtab_and_line *)
4531 xmalloc (sizeof (struct symtab_and_line));
4532 sal.pc = default_breakpoint_address;
4533 sal.line = default_breakpoint_line;
4534 sal.symtab = default_breakpoint_symtab;
4535 sal.section = find_pc_overlay (sal.pc);
4536 sals->sals[0] = sal;
4537 sals->nelts = 1;
4538 }
4539 else
4540 error ("No default breakpoint address now.");
4541 }
4542 else
4543 {
4544 /* Force almost all breakpoints to be in terms of the
4545 current_source_symtab (which is decode_line_1's default). This
4546 should produce the results we want almost all of the time while
4547 leaving default_breakpoint_* alone. */
4548 if (default_breakpoint_valid
4549 && (!current_source_symtab
4550 || (strchr ("+-", (*address)[0]) != NULL)))
4551 *sals = decode_line_1 (address, 1, default_breakpoint_symtab,
4552 default_breakpoint_line, addr_string);
4553 else
4554 *sals = decode_line_1 (address, 1, (struct symtab *) NULL, 0, addr_string);
4555 }
4556 /* For any SAL that didn't have a canonical string, fill one in. */
4557 if (sals->nelts > 0 && *addr_string == NULL)
4558 *addr_string = xcalloc (sals->nelts, sizeof (char **));
4559 if (addr_start != (*address))
4560 {
4561 int i;
4562 for (i = 0; i < sals->nelts; i++)
4563 {
4564 /* Add the string if not present. */
4565 if ((*addr_string)[i] == NULL)
4566 (*addr_string)[i] = savestring (addr_start, (*address) - addr_start);
4567 }
4568 }
4569 }
4570
4571
4572 /* Convert each SAL into a real PC. Verify that the PC can be
4573 inserted as a breakpoint. If it can't throw an error. */
4574
4575 void
4576 breakpoint_sals_to_pc (struct symtabs_and_lines *sals,
4577 char *address)
4578 {
4579 int i;
4580 for (i = 0; i < sals->nelts; i++)
4581 {
4582 resolve_sal_pc (&sals->sals[i]);
4583
4584 /* It's possible for the PC to be nonzero, but still an illegal
4585 value on some targets.
4586
4587 For example, on HP-UX if you start gdb, and before running the
4588 inferior you try to set a breakpoint on a shared library function
4589 "foo" where the inferior doesn't call "foo" directly but does
4590 pass its address to another function call, then we do find a
4591 minimal symbol for the "foo", but it's address is invalid.
4592 (Appears to be an index into a table that the loader sets up
4593 when the inferior is run.)
4594
4595 Give the target a chance to bless sals.sals[i].pc before we
4596 try to make a breakpoint for it. */
4597 if (PC_REQUIRES_RUN_BEFORE_USE (sals->sals[i].pc))
4598 {
4599 if (address == NULL)
4600 error ("Cannot break without a running program.");
4601 else
4602 error ("Cannot break on %s without a running program.",
4603 address);
4604 }
4605 }
4606 }
4607
4608 /* Set a breakpoint according to ARG (function, linenum or *address)
4609 flag: first bit : 0 non-temporary, 1 temporary.
4610 second bit : 0 normal breakpoint, 1 hardware breakpoint. */
4611
4612 static void
4613 break_command_1 (char *arg, int flag, int from_tty)
4614 {
4615 int tempflag, hardwareflag;
4616 struct symtabs_and_lines sals;
4617 register struct expression **cond = 0;
4618 /* Pointers in arg to the start, and one past the end, of the
4619 condition. */
4620 char **cond_string = (char **) NULL;
4621 char *addr_start = arg;
4622 char **addr_string;
4623 struct cleanup *old_chain;
4624 struct cleanup *breakpoint_chain = NULL;
4625 int i;
4626 int thread = -1;
4627 int ignore_count = 0;
4628
4629 hardwareflag = flag & BP_HARDWAREFLAG;
4630 tempflag = flag & BP_TEMPFLAG;
4631
4632 sals.sals = NULL;
4633 sals.nelts = 0;
4634 addr_string = NULL;
4635 parse_breakpoint_sals (&arg, &sals, &addr_string);
4636
4637 if (!sals.nelts)
4638 return;
4639
4640 /* Create a chain of things that always need to be cleaned up. */
4641 old_chain = make_cleanup (null_cleanup, 0);
4642
4643 /* Make sure that all storage allocated to SALS gets freed. */
4644 make_cleanup (xfree, sals.sals);
4645
4646 /* Cleanup the addr_string array but not its contents. */
4647 make_cleanup (xfree, addr_string);
4648
4649 /* Allocate space for all the cond expressions. */
4650 cond = xcalloc (sals.nelts, sizeof (struct expression *));
4651 make_cleanup (xfree, cond);
4652
4653 /* Allocate space for all the cond strings. */
4654 cond_string = xcalloc (sals.nelts, sizeof (char **));
4655 make_cleanup (xfree, cond_string);
4656
4657 /* ----------------------------- SNIP -----------------------------
4658 Anything added to the cleanup chain beyond this point is assumed
4659 to be part of a breakpoint. If the breakpoint create succeeds
4660 then the memory is not reclaimed. */
4661 breakpoint_chain = make_cleanup (null_cleanup, 0);
4662
4663 /* Mark the contents of the addr_string for cleanup. These go on
4664 the breakpoint_chain and only occure if the breakpoint create
4665 fails. */
4666 for (i = 0; i < sals.nelts; i++)
4667 {
4668 if (addr_string[i] != NULL)
4669 make_cleanup (xfree, addr_string[i]);
4670 }
4671
4672 /* Resolve all line numbers to PC's and verify that the addresses
4673 are ok for the target. */
4674 breakpoint_sals_to_pc (&sals, addr_start);
4675
4676 /* Verify that condition can be parsed, before setting any
4677 breakpoints. Allocate a separate condition expression for each
4678 breakpoint. */
4679 thread = -1; /* No specific thread yet */
4680 for (i = 0; i < sals.nelts; i++)
4681 {
4682 char *tok = arg;
4683 while (tok && *tok)
4684 {
4685 char *end_tok;
4686 int toklen;
4687 char *cond_start = NULL;
4688 char *cond_end = NULL;
4689 while (*tok == ' ' || *tok == '\t')
4690 tok++;
4691
4692 end_tok = tok;
4693
4694 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
4695 end_tok++;
4696
4697 toklen = end_tok - tok;
4698
4699 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
4700 {
4701 tok = cond_start = end_tok + 1;
4702 cond[i] = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
4703 make_cleanup (xfree, cond[i]);
4704 cond_end = tok;
4705 cond_string[i] = savestring (cond_start, cond_end - cond_start);
4706 make_cleanup (xfree, cond_string[i]);
4707 }
4708 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
4709 {
4710 char *tmptok;
4711
4712 tok = end_tok + 1;
4713 tmptok = tok;
4714 thread = strtol (tok, &tok, 0);
4715 if (tok == tmptok)
4716 error ("Junk after thread keyword.");
4717 if (!valid_thread_id (thread))
4718 error ("Unknown thread %d\n", thread);
4719 }
4720 else
4721 error ("Junk at end of arguments.");
4722 }
4723 }
4724
4725 create_breakpoints (sals, addr_string, cond, cond_string,
4726 hardwareflag ? bp_hardware_breakpoint : bp_breakpoint,
4727 tempflag ? disp_del : disp_donttouch,
4728 thread, ignore_count, from_tty);
4729
4730 if (sals.nelts > 1)
4731 {
4732 warning ("Multiple breakpoints were set.");
4733 warning ("Use the \"delete\" command to delete unwanted breakpoints.");
4734 }
4735 /* That's it. Discard the cleanups for data inserted into the
4736 breakpoint. */
4737 discard_cleanups (breakpoint_chain);
4738 /* But cleanup everything else. */
4739 do_cleanups (old_chain);
4740 }
4741
4742 /* Set a breakpoint of TYPE/DISPOSITION according to ARG (function,
4743 linenum or *address) with COND and IGNORE_COUNT. */
4744
4745 struct captured_breakpoint_args
4746 {
4747 char *address;
4748 char *condition;
4749 int hardwareflag;
4750 int tempflag;
4751 int thread;
4752 int ignore_count;
4753 };
4754
4755 static int
4756 do_captured_breakpoint (void *data)
4757 {
4758 struct captured_breakpoint_args *args = data;
4759 struct symtabs_and_lines sals;
4760 register struct expression **cond;
4761 struct cleanup *old_chain;
4762 struct cleanup *breakpoint_chain = NULL;
4763 int i;
4764 char **addr_string;
4765 char **cond_string;
4766
4767 char *address_end;
4768
4769 /* Parse the source and lines spec. Delay check that the expression
4770 didn't contain trailing garbage until after cleanups are in
4771 place. */
4772 sals.sals = NULL;
4773 sals.nelts = 0;
4774 address_end = args->address;
4775 addr_string = NULL;
4776 parse_breakpoint_sals (&address_end, &sals, &addr_string);
4777
4778 if (!sals.nelts)
4779 return GDB_RC_NONE;
4780
4781 /* Create a chain of things at always need to be cleaned up. */
4782 old_chain = make_cleanup (null_cleanup, 0);
4783
4784 /* Always have a addr_string array, even if it is empty. */
4785 make_cleanup (xfree, addr_string);
4786
4787 /* Make sure that all storage allocated to SALS gets freed. */
4788 make_cleanup (xfree, sals.sals);
4789
4790 /* Allocate space for all the cond expressions. */
4791 cond = xcalloc (sals.nelts, sizeof (struct expression *));
4792 make_cleanup (xfree, cond);
4793
4794 /* Allocate space for all the cond strings. */
4795 cond_string = xcalloc (sals.nelts, sizeof (char **));
4796 make_cleanup (xfree, cond_string);
4797
4798 /* ----------------------------- SNIP -----------------------------
4799 Anything added to the cleanup chain beyond this point is assumed
4800 to be part of a breakpoint. If the breakpoint create goes
4801 through then that memory is not cleaned up. */
4802 breakpoint_chain = make_cleanup (null_cleanup, 0);
4803
4804 /* Mark the contents of the addr_string for cleanup. These go on
4805 the breakpoint_chain and only occure if the breakpoint create
4806 fails. */
4807 for (i = 0; i < sals.nelts; i++)
4808 {
4809 if (addr_string[i] != NULL)
4810 make_cleanup (xfree, addr_string[i]);
4811 }
4812
4813 /* Wait until now before checking for garbage at the end of the
4814 address. That way cleanups can take care of freeing any
4815 memory. */
4816 if (*address_end != '\0')
4817 error ("Garbage %s following breakpoint address", address_end);
4818
4819 /* Resolve all line numbers to PC's. */
4820 breakpoint_sals_to_pc (&sals, args->address);
4821
4822 /* Verify that conditions can be parsed, before setting any
4823 breakpoints. */
4824 for (i = 0; i < sals.nelts; i++)
4825 {
4826 if (args->condition != NULL)
4827 {
4828 char *tok = args->condition;
4829 cond[i] = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
4830 if (*tok != '\0')
4831 error ("Garbage %s follows condition", tok);
4832 make_cleanup (xfree, cond[i]);
4833 cond_string[i] = xstrdup (args->condition);
4834 }
4835 }
4836
4837 create_breakpoints (sals, addr_string, cond, cond_string,
4838 args->hardwareflag ? bp_hardware_breakpoint : bp_breakpoint,
4839 args->tempflag ? disp_del : disp_donttouch,
4840 args->thread, args->ignore_count, 0/*from-tty*/);
4841
4842 /* That's it. Discard the cleanups for data inserted into the
4843 breakpoint. */
4844 discard_cleanups (breakpoint_chain);
4845 /* But cleanup everything else. */
4846 do_cleanups (old_chain);
4847 return GDB_RC_OK;
4848 }
4849
4850 enum gdb_rc
4851 gdb_breakpoint (char *address, char *condition,
4852 int hardwareflag, int tempflag,
4853 int thread, int ignore_count)
4854 {
4855 struct captured_breakpoint_args args;
4856 args.address = address;
4857 args.condition = condition;
4858 args.hardwareflag = hardwareflag;
4859 args.tempflag = tempflag;
4860 args.thread = thread;
4861 args.ignore_count = ignore_count;
4862 return catch_errors (do_captured_breakpoint, &args,
4863 NULL, RETURN_MASK_ALL);
4864 }
4865
4866
4867 static void
4868 break_at_finish_at_depth_command_1 (char *arg, int flag, int from_tty)
4869 {
4870 struct frame_info *frame;
4871 CORE_ADDR low, high, selected_pc = 0;
4872 char *extra_args = NULL;
4873 char *level_arg;
4874 char *addr_string;
4875 int extra_args_len = 0, if_arg = 0;
4876
4877 if (!arg ||
4878 (arg[0] == 'i' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\t')))
4879 {
4880
4881 if (default_breakpoint_valid)
4882 {
4883 if (selected_frame)
4884 {
4885 selected_pc = selected_frame->pc;
4886 if (arg)
4887 if_arg = 1;
4888 }
4889 else
4890 error ("No selected frame.");
4891 }
4892 else
4893 error ("No default breakpoint address now.");
4894 }
4895 else
4896 {
4897 extra_args = strchr (arg, ' ');
4898 if (extra_args)
4899 {
4900 extra_args++;
4901 extra_args_len = strlen (extra_args);
4902 level_arg = (char *) xmalloc (extra_args - arg);
4903 strncpy (level_arg, arg, extra_args - arg - 1);
4904 level_arg[extra_args - arg - 1] = '\0';
4905 }
4906 else
4907 {
4908 level_arg = (char *) xmalloc (strlen (arg) + 1);
4909 strcpy (level_arg, arg);
4910 }
4911
4912 frame = parse_frame_specification (level_arg);
4913 if (frame)
4914 selected_pc = frame->pc;
4915 else
4916 selected_pc = 0;
4917 }
4918 if (if_arg)
4919 {
4920 extra_args = arg;
4921 extra_args_len = strlen (arg);
4922 }
4923
4924 if (selected_pc)
4925 {
4926 if (find_pc_partial_function (selected_pc, (char **) NULL, &low, &high))
4927 {
4928 addr_string = (char *) xmalloc (26 + extra_args_len);
4929 if (extra_args_len)
4930 sprintf (addr_string, "*0x%s %s", paddr_nz (high), extra_args);
4931 else
4932 sprintf (addr_string, "*0x%s", paddr_nz (high));
4933 break_command_1 (addr_string, flag, from_tty);
4934 xfree (addr_string);
4935 }
4936 else
4937 error ("No function contains the specified address");
4938 }
4939 else
4940 error ("Unable to set breakpoint at procedure exit");
4941 }
4942
4943
4944 static void
4945 break_at_finish_command_1 (char *arg, int flag, int from_tty)
4946 {
4947 char *addr_string, *break_string, *beg_addr_string;
4948 CORE_ADDR low, high;
4949 struct symtabs_and_lines sals;
4950 struct symtab_and_line sal;
4951 struct cleanup *old_chain;
4952 char *extra_args = NULL;
4953 int extra_args_len = 0;
4954 int i, if_arg = 0;
4955
4956 if (!arg ||
4957 (arg[0] == 'i' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\t')))
4958 {
4959 if (default_breakpoint_valid)
4960 {
4961 if (selected_frame)
4962 {
4963 addr_string = (char *) xmalloc (15);
4964 sprintf (addr_string, "*0x%s", paddr_nz (selected_frame->pc));
4965 if (arg)
4966 if_arg = 1;
4967 }
4968 else
4969 error ("No selected frame.");
4970 }
4971 else
4972 error ("No default breakpoint address now.");
4973 }
4974 else
4975 {
4976 addr_string = (char *) xmalloc (strlen (arg) + 1);
4977 strcpy (addr_string, arg);
4978 }
4979
4980 if (if_arg)
4981 {
4982 extra_args = arg;
4983 extra_args_len = strlen (arg);
4984 }
4985 else if (arg)
4986 {
4987 /* get the stuff after the function name or address */
4988 extra_args = strchr (arg, ' ');
4989 if (extra_args)
4990 {
4991 extra_args++;
4992 extra_args_len = strlen (extra_args);
4993 }
4994 }
4995
4996 sals.sals = NULL;
4997 sals.nelts = 0;
4998
4999 beg_addr_string = addr_string;
5000 sals = decode_line_1 (&addr_string, 1, (struct symtab *) NULL, 0,
5001 (char ***) NULL);
5002
5003 xfree (beg_addr_string);
5004 old_chain = make_cleanup (xfree, sals.sals);
5005 for (i = 0; (i < sals.nelts); i++)
5006 {
5007 sal = sals.sals[i];
5008 if (find_pc_partial_function (sal.pc, (char **) NULL, &low, &high))
5009 {
5010 break_string = (char *) xmalloc (extra_args_len + 26);
5011 if (extra_args_len)
5012 sprintf (break_string, "*0x%s %s", paddr_nz (high), extra_args);
5013 else
5014 sprintf (break_string, "*0x%s", paddr_nz (high));
5015 break_command_1 (break_string, flag, from_tty);
5016 xfree (break_string);
5017 }
5018 else
5019 error ("No function contains the specified address");
5020 }
5021 if (sals.nelts > 1)
5022 {
5023 warning ("Multiple breakpoints were set.\n");
5024 warning ("Use the \"delete\" command to delete unwanted breakpoints.");
5025 }
5026 do_cleanups (old_chain);
5027 }
5028
5029
5030 /* Helper function for break_command_1 and disassemble_command. */
5031
5032 void
5033 resolve_sal_pc (struct symtab_and_line *sal)
5034 {
5035 CORE_ADDR pc;
5036
5037 if (sal->pc == 0 && sal->symtab != NULL)
5038 {
5039 if (!find_line_pc (sal->symtab, sal->line, &pc))
5040 error ("No line %d in file \"%s\".",
5041 sal->line, sal->symtab->filename);
5042 sal->pc = pc;
5043 }
5044
5045 if (sal->section == 0 && sal->symtab != NULL)
5046 {
5047 struct blockvector *bv;
5048 struct block *b;
5049 struct symbol *sym;
5050 int index;
5051
5052 bv = blockvector_for_pc_sect (sal->pc, 0, &index, sal->symtab);
5053 if (bv != NULL)
5054 {
5055 b = BLOCKVECTOR_BLOCK (bv, index);
5056 sym = block_function (b);
5057 if (sym != NULL)
5058 {
5059 fixup_symbol_section (sym, sal->symtab->objfile);
5060 sal->section = SYMBOL_BFD_SECTION (sym);
5061 }
5062 else
5063 {
5064 /* It really is worthwhile to have the section, so we'll just
5065 have to look harder. This case can be executed if we have
5066 line numbers but no functions (as can happen in assembly
5067 source). */
5068
5069 struct minimal_symbol *msym;
5070
5071 msym = lookup_minimal_symbol_by_pc (sal->pc);
5072 if (msym)
5073 sal->section = SYMBOL_BFD_SECTION (msym);
5074 }
5075 }
5076 }
5077 }
5078
5079 void
5080 break_command (char *arg, int from_tty)
5081 {
5082 break_command_1 (arg, 0, from_tty);
5083 }
5084
5085 void
5086 break_at_finish_command (char *arg, int from_tty)
5087 {
5088 break_at_finish_command_1 (arg, 0, from_tty);
5089 }
5090
5091 void
5092 break_at_finish_at_depth_command (char *arg, int from_tty)
5093 {
5094 break_at_finish_at_depth_command_1 (arg, 0, from_tty);
5095 }
5096
5097 void
5098 tbreak_command (char *arg, int from_tty)
5099 {
5100 break_command_1 (arg, BP_TEMPFLAG, from_tty);
5101 }
5102
5103 void
5104 tbreak_at_finish_command (char *arg, int from_tty)
5105 {
5106 break_at_finish_command_1 (arg, BP_TEMPFLAG, from_tty);
5107 }
5108
5109 static void
5110 hbreak_command (char *arg, int from_tty)
5111 {
5112 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
5113 }
5114
5115 static void
5116 thbreak_command (char *arg, int from_tty)
5117 {
5118 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
5119 }
5120
5121 static void
5122 stop_command (char *arg, int from_tty)
5123 {
5124 printf_filtered ("Specify the type of breakpoint to set.\n\
5125 Usage: stop in <function | address>\n\
5126 stop at <line>\n");
5127 }
5128
5129 static void
5130 stopin_command (char *arg, int from_tty)
5131 {
5132 int badInput = 0;
5133
5134 if (arg == (char *) NULL)
5135 badInput = 1;
5136 else if (*arg != '*')
5137 {
5138 char *argptr = arg;
5139 int hasColon = 0;
5140
5141 /* look for a ':'. If this is a line number specification, then
5142 say it is bad, otherwise, it should be an address or
5143 function/method name */
5144 while (*argptr && !hasColon)
5145 {
5146 hasColon = (*argptr == ':');
5147 argptr++;
5148 }
5149
5150 if (hasColon)
5151 badInput = (*argptr != ':'); /* Not a class::method */
5152 else
5153 badInput = isdigit (*arg); /* a simple line number */
5154 }
5155
5156 if (badInput)
5157 printf_filtered ("Usage: stop in <function | address>\n");
5158 else
5159 break_command_1 (arg, 0, from_tty);
5160 }
5161
5162 static void
5163 stopat_command (char *arg, int from_tty)
5164 {
5165 int badInput = 0;
5166
5167 if (arg == (char *) NULL || *arg == '*') /* no line number */
5168 badInput = 1;
5169 else
5170 {
5171 char *argptr = arg;
5172 int hasColon = 0;
5173
5174 /* look for a ':'. If there is a '::' then get out, otherwise
5175 it is probably a line number. */
5176 while (*argptr && !hasColon)
5177 {
5178 hasColon = (*argptr == ':');
5179 argptr++;
5180 }
5181
5182 if (hasColon)
5183 badInput = (*argptr == ':'); /* we have class::method */
5184 else
5185 badInput = !isdigit (*arg); /* not a line number */
5186 }
5187
5188 if (badInput)
5189 printf_filtered ("Usage: stop at <line>\n");
5190 else
5191 break_command_1 (arg, 0, from_tty);
5192 }
5193
5194 /* ARGSUSED */
5195 /* accessflag: hw_write: watch write,
5196 hw_read: watch read,
5197 hw_access: watch access (read or write) */
5198 static void
5199 watch_command_1 (char *arg, int accessflag, int from_tty)
5200 {
5201 struct breakpoint *b;
5202 struct symtab_and_line sal;
5203 struct expression *exp;
5204 struct block *exp_valid_block;
5205 struct value *val, *mark;
5206 struct frame_info *frame;
5207 struct frame_info *prev_frame = NULL;
5208 char *exp_start = NULL;
5209 char *exp_end = NULL;
5210 char *tok, *end_tok;
5211 int toklen;
5212 char *cond_start = NULL;
5213 char *cond_end = NULL;
5214 struct expression *cond = NULL;
5215 int i, other_type_used, target_resources_ok = 0;
5216 enum bptype bp_type;
5217 int mem_cnt = 0;
5218
5219 INIT_SAL (&sal); /* initialize to zeroes */
5220
5221 /* Parse arguments. */
5222 innermost_block = NULL;
5223 exp_start = arg;
5224 exp = parse_exp_1 (&arg, 0, 0);
5225 exp_end = arg;
5226 exp_valid_block = innermost_block;
5227 mark = value_mark ();
5228 val = evaluate_expression (exp);
5229 release_value (val);
5230 if (VALUE_LAZY (val))
5231 value_fetch_lazy (val);
5232
5233 tok = arg;
5234 while (*tok == ' ' || *tok == '\t')
5235 tok++;
5236 end_tok = tok;
5237
5238 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
5239 end_tok++;
5240
5241 toklen = end_tok - tok;
5242 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
5243 {
5244 tok = cond_start = end_tok + 1;
5245 cond = parse_exp_1 (&tok, 0, 0);
5246 cond_end = tok;
5247 }
5248 if (*tok)
5249 error ("Junk at end of command.");
5250
5251 if (accessflag == hw_read)
5252 bp_type = bp_read_watchpoint;
5253 else if (accessflag == hw_access)
5254 bp_type = bp_access_watchpoint;
5255 else
5256 bp_type = bp_hardware_watchpoint;
5257
5258 mem_cnt = can_use_hardware_watchpoint (val);
5259 if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
5260 error ("Expression cannot be implemented with read/access watchpoint.");
5261 if (mem_cnt != 0)
5262 {
5263 i = hw_watchpoint_used_count (bp_type, &other_type_used);
5264 target_resources_ok =
5265 TARGET_CAN_USE_HARDWARE_WATCHPOINT (bp_type, i + mem_cnt,
5266 other_type_used);
5267 if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
5268 error ("Target does not support this type of hardware watchpoint.");
5269
5270 if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
5271 error ("Target can only support one kind of HW watchpoint at a time.");
5272 }
5273
5274 #if defined(HPUXHPPA)
5275 /* On HP-UX if you set a h/w
5276 watchpoint before the "run" command, the inferior dies with a e.g.,
5277 SIGILL once you start it. I initially believed this was due to a
5278 bad interaction between page protection traps and the initial
5279 startup sequence by the dynamic linker.
5280
5281 However, I tried avoiding that by having HP-UX's implementation of
5282 TARGET_CAN_USE_HW_WATCHPOINT return FALSE if there was no inferior_ptid
5283 yet, which forced slow watches before a "run" or "attach", and it
5284 still fails somewhere in the startup code.
5285
5286 Until I figure out what's happening, I'm disallowing watches altogether
5287 before the "run" or "attach" command. We'll tell the user they must
5288 set watches after getting the program started. */
5289 if (!target_has_execution)
5290 {
5291 warning ("can't do that without a running program; try \"break main\", \"run\" first");
5292 return;
5293 }
5294 #endif /* HPUXHPPA */
5295
5296 /* Change the type of breakpoint to an ordinary watchpoint if a hardware
5297 watchpoint could not be set. */
5298 if (!mem_cnt || target_resources_ok <= 0)
5299 bp_type = bp_watchpoint;
5300
5301 /* Now set up the breakpoint. */
5302 b = set_raw_breakpoint (sal, bp_type);
5303 set_breakpoint_count (breakpoint_count + 1);
5304 b->number = breakpoint_count;
5305 b->disposition = disp_donttouch;
5306 b->exp = exp;
5307 b->exp_valid_block = exp_valid_block;
5308 b->exp_string = savestring (exp_start, exp_end - exp_start);
5309 b->val = val;
5310 b->cond = cond;
5311 if (cond_start)
5312 b->cond_string = savestring (cond_start, cond_end - cond_start);
5313 else
5314 b->cond_string = 0;
5315
5316 frame = block_innermost_frame (exp_valid_block);
5317 if (frame)
5318 {
5319 prev_frame = get_prev_frame (frame);
5320 get_frame_id (frame, &b->watchpoint_frame);
5321 }
5322 else
5323 {
5324 memset (&b->watchpoint_frame, 0, sizeof (b->watchpoint_frame));
5325 }
5326
5327 /* If the expression is "local", then set up a "watchpoint scope"
5328 breakpoint at the point where we've left the scope of the watchpoint
5329 expression. */
5330 if (innermost_block)
5331 {
5332 if (prev_frame)
5333 {
5334 struct breakpoint *scope_breakpoint;
5335 struct symtab_and_line scope_sal;
5336
5337 INIT_SAL (&scope_sal); /* initialize to zeroes */
5338 scope_sal.pc = get_frame_pc (prev_frame);
5339 scope_sal.section = find_pc_overlay (scope_sal.pc);
5340
5341 scope_breakpoint = set_raw_breakpoint (scope_sal,
5342 bp_watchpoint_scope);
5343 set_breakpoint_count (breakpoint_count + 1);
5344 scope_breakpoint->number = breakpoint_count;
5345
5346 scope_breakpoint->enable_state = bp_enabled;
5347
5348 /* Automatically delete the breakpoint when it hits. */
5349 scope_breakpoint->disposition = disp_del;
5350
5351 /* Only break in the proper frame (help with recursion). */
5352 scope_breakpoint->frame = prev_frame->frame;
5353
5354 /* Set the address at which we will stop. */
5355 scope_breakpoint->address = get_frame_pc (prev_frame);
5356
5357 /* The scope breakpoint is related to the watchpoint. We
5358 will need to act on them together. */
5359 b->related_breakpoint = scope_breakpoint;
5360 }
5361 }
5362 value_free_to_mark (mark);
5363 mention (b);
5364 }
5365
5366 /* Return count of locations need to be watched and can be handled
5367 in hardware. If the watchpoint can not be handled
5368 in hardware return zero. */
5369
5370 #if !defined(TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT)
5371 #define TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(BYTE_SIZE) \
5372 ((BYTE_SIZE) <= (REGISTER_SIZE))
5373 #endif
5374
5375 #if !defined(TARGET_REGION_OK_FOR_HW_WATCHPOINT)
5376 #define TARGET_REGION_OK_FOR_HW_WATCHPOINT(ADDR,LEN) \
5377 (TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(LEN))
5378 #endif
5379
5380 static int
5381 can_use_hardware_watchpoint (struct value *v)
5382 {
5383 int found_memory_cnt = 0;
5384 struct value *head = v;
5385
5386 /* Did the user specifically forbid us to use hardware watchpoints? */
5387 if (!can_use_hw_watchpoints)
5388 return 0;
5389
5390 /* Make sure that the value of the expression depends only upon
5391 memory contents, and values computed from them within GDB. If we
5392 find any register references or function calls, we can't use a
5393 hardware watchpoint.
5394
5395 The idea here is that evaluating an expression generates a series
5396 of values, one holding the value of every subexpression. (The
5397 expression a*b+c has five subexpressions: a, b, a*b, c, and
5398 a*b+c.) GDB's values hold almost enough information to establish
5399 the criteria given above --- they identify memory lvalues,
5400 register lvalues, computed values, etcetera. So we can evaluate
5401 the expression, and then scan the chain of values that leaves
5402 behind to decide whether we can detect any possible change to the
5403 expression's final value using only hardware watchpoints.
5404
5405 However, I don't think that the values returned by inferior
5406 function calls are special in any way. So this function may not
5407 notice that an expression involving an inferior function call
5408 can't be watched with hardware watchpoints. FIXME. */
5409 for (; v; v = v->next)
5410 {
5411 if (VALUE_LVAL (v) == lval_memory)
5412 {
5413 if (VALUE_LAZY (v))
5414 /* A lazy memory lvalue is one that GDB never needed to fetch;
5415 we either just used its address (e.g., `a' in `a.b') or
5416 we never needed it at all (e.g., `a' in `a,b'). */
5417 ;
5418 else
5419 {
5420 /* Ahh, memory we actually used! Check if we can cover
5421 it with hardware watchpoints. */
5422 struct type *vtype = check_typedef (VALUE_TYPE (v));
5423
5424 /* We only watch structs and arrays if user asked for it
5425 explicitly, never if they just happen to appear in a
5426 middle of some value chain. */
5427 if (v == head
5428 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
5429 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
5430 {
5431 CORE_ADDR vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
5432 int len = TYPE_LENGTH (VALUE_TYPE (v));
5433
5434 if (!TARGET_REGION_OK_FOR_HW_WATCHPOINT (vaddr, len))
5435 return 0;
5436 else
5437 found_memory_cnt++;
5438 }
5439 }
5440 }
5441 else if (v->lval != not_lval && v->modifiable == 0)
5442 return 0; /* ??? What does this represent? */
5443 else if (v->lval == lval_register)
5444 return 0; /* cannot watch a register with a HW watchpoint */
5445 }
5446
5447 /* The expression itself looks suitable for using a hardware
5448 watchpoint, but give the target machine a chance to reject it. */
5449 return found_memory_cnt;
5450 }
5451
5452 void
5453 watch_command_wrapper (char *arg, int from_tty)
5454 {
5455 watch_command (arg, from_tty);
5456 }
5457
5458 static void
5459 watch_command (char *arg, int from_tty)
5460 {
5461 watch_command_1 (arg, hw_write, from_tty);
5462 }
5463
5464 void
5465 rwatch_command_wrapper (char *arg, int from_tty)
5466 {
5467 rwatch_command (arg, from_tty);
5468 }
5469
5470 static void
5471 rwatch_command (char *arg, int from_tty)
5472 {
5473 watch_command_1 (arg, hw_read, from_tty);
5474 }
5475
5476 void
5477 awatch_command_wrapper (char *arg, int from_tty)
5478 {
5479 awatch_command (arg, from_tty);
5480 }
5481
5482 static void
5483 awatch_command (char *arg, int from_tty)
5484 {
5485 watch_command_1 (arg, hw_access, from_tty);
5486 }
5487 \f
5488
5489 /* Helper routines for the until_command routine in infcmd.c. Here
5490 because it uses the mechanisms of breakpoints. */
5491
5492 /* This function is called by fetch_inferior_event via the
5493 cmd_continuation pointer, to complete the until command. It takes
5494 care of cleaning up the temporary breakpoints set up by the until
5495 command. */
5496 static void
5497 until_break_command_continuation (struct continuation_arg *arg)
5498 {
5499 struct cleanup *cleanups;
5500
5501 cleanups = (struct cleanup *) arg->data.pointer;
5502 do_exec_cleanups (cleanups);
5503 }
5504
5505 /* ARGSUSED */
5506 void
5507 until_break_command (char *arg, int from_tty)
5508 {
5509 struct symtabs_and_lines sals;
5510 struct symtab_and_line sal;
5511 struct frame_info *prev_frame = get_prev_frame (selected_frame);
5512 struct breakpoint *breakpoint;
5513 struct cleanup *old_chain;
5514 struct continuation_arg *arg1;
5515
5516
5517 clear_proceed_status ();
5518
5519 /* Set a breakpoint where the user wants it and at return from
5520 this function */
5521
5522 if (default_breakpoint_valid)
5523 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
5524 default_breakpoint_line, (char ***) NULL);
5525 else
5526 sals = decode_line_1 (&arg, 1, (struct symtab *) NULL,
5527 0, (char ***) NULL);
5528
5529 if (sals.nelts != 1)
5530 error ("Couldn't get information on specified line.");
5531
5532 sal = sals.sals[0];
5533 xfree (sals.sals); /* malloc'd, so freed */
5534
5535 if (*arg)
5536 error ("Junk at end of arguments.");
5537
5538 resolve_sal_pc (&sal);
5539
5540 breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
5541
5542 if (!event_loop_p || !target_can_async_p ())
5543 old_chain = make_cleanup_delete_breakpoint (breakpoint);
5544 else
5545 old_chain = make_exec_cleanup_delete_breakpoint (breakpoint);
5546
5547 /* If we are running asynchronously, and the target supports async
5548 execution, we are not waiting for the target to stop, in the call
5549 tp proceed, below. This means that we cannot delete the
5550 brekpoints until the target has actually stopped. The only place
5551 where we get a chance to do that is in fetch_inferior_event, so
5552 we must set things up for that. */
5553
5554 if (event_loop_p && target_can_async_p ())
5555 {
5556 /* In this case the arg for the continuation is just the point
5557 in the exec_cleanups chain from where to start doing
5558 cleanups, because all the continuation does is the cleanups in
5559 the exec_cleanup_chain. */
5560 arg1 =
5561 (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
5562 arg1->next = NULL;
5563 arg1->data.pointer = old_chain;
5564
5565 add_continuation (until_break_command_continuation, arg1);
5566 }
5567
5568 /* Keep within the current frame */
5569
5570 if (prev_frame)
5571 {
5572 sal = find_pc_line (prev_frame->pc, 0);
5573 sal.pc = prev_frame->pc;
5574 breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
5575 if (!event_loop_p || !target_can_async_p ())
5576 make_cleanup_delete_breakpoint (breakpoint);
5577 else
5578 make_exec_cleanup_delete_breakpoint (breakpoint);
5579 }
5580
5581 proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
5582 /* Do the cleanups now, anly if we are not running asynchronously,
5583 of if we are, but the target is still synchronous. */
5584 if (!event_loop_p || !target_can_async_p ())
5585 do_cleanups (old_chain);
5586 }
5587 \f
5588 #if 0
5589 /* These aren't used; I don't konw what they were for. */
5590 /* Set a breakpoint at the catch clause for NAME. */
5591 static int
5592 catch_breakpoint (char *name)
5593 {
5594 }
5595
5596 static int
5597 disable_catch_breakpoint (void)
5598 {
5599 }
5600
5601 static int
5602 delete_catch_breakpoint (void)
5603 {
5604 }
5605
5606 static int
5607 enable_catch_breakpoint (void)
5608 {
5609 }
5610 #endif /* 0 */
5611
5612 struct sal_chain
5613 {
5614 struct sal_chain *next;
5615 struct symtab_and_line sal;
5616 };
5617
5618 #if 0
5619 /* Not really used -- invocation in handle_gnu_4_16_catch_command
5620 had been commented out in the v.4.16 sources, and stays
5621 disabled there now because "catch NAME" syntax isn't allowed.
5622 pai/1997-07-11 */
5623 /* This isn't used; I don't know what it was for. */
5624 /* For each catch clause identified in ARGS, run FUNCTION
5625 with that clause as an argument. */
5626 static struct symtabs_and_lines
5627 map_catch_names (char *args, int (*function) ())
5628 {
5629 register char *p = args;
5630 register char *p1;
5631 struct symtabs_and_lines sals;
5632 #if 0
5633 struct sal_chain *sal_chain = 0;
5634 #endif
5635
5636 if (p == 0)
5637 error_no_arg ("one or more catch names");
5638
5639 sals.nelts = 0;
5640 sals.sals = NULL;
5641
5642 while (*p)
5643 {
5644 p1 = p;
5645 /* Don't swallow conditional part. */
5646 if (p1[0] == 'i' && p1[1] == 'f'
5647 && (p1[2] == ' ' || p1[2] == '\t'))
5648 break;
5649
5650 if (isalpha (*p1))
5651 {
5652 p1++;
5653 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
5654 p1++;
5655 }
5656
5657 if (*p1 && *p1 != ' ' && *p1 != '\t')
5658 error ("Arguments must be catch names.");
5659
5660 *p1 = 0;
5661 #if 0
5662 if (function (p))
5663 {
5664 struct sal_chain *next = (struct sal_chain *)
5665 alloca (sizeof (struct sal_chain));
5666 next->next = sal_chain;
5667 next->sal = get_catch_sal (p);
5668 sal_chain = next;
5669 goto win;
5670 }
5671 #endif
5672 printf_unfiltered ("No catch clause for exception %s.\n", p);
5673 #if 0
5674 win:
5675 #endif
5676 p = p1;
5677 while (*p == ' ' || *p == '\t')
5678 p++;
5679 }
5680 }
5681 #endif
5682
5683 /* This shares a lot of code with `print_frame_label_vars' from stack.c. */
5684
5685 static struct symtabs_and_lines
5686 get_catch_sals (int this_level_only)
5687 {
5688 register struct blockvector *bl;
5689 register struct block *block;
5690 int index, have_default = 0;
5691 CORE_ADDR pc;
5692 struct symtabs_and_lines sals;
5693 struct sal_chain *sal_chain = 0;
5694 char *blocks_searched;
5695
5696 /* Not sure whether an error message is always the correct response,
5697 but it's better than a core dump. */
5698 if (selected_frame == NULL)
5699 error ("No selected frame.");
5700 block = get_frame_block (selected_frame, 0);
5701 pc = selected_frame->pc;
5702
5703 sals.nelts = 0;
5704 sals.sals = NULL;
5705
5706 if (block == 0)
5707 error ("No symbol table info available.\n");
5708
5709 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
5710 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
5711 memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
5712
5713 while (block != 0)
5714 {
5715 CORE_ADDR end = BLOCK_END (block) - 4;
5716 int last_index;
5717
5718 if (bl != blockvector_for_pc (end, &index))
5719 error ("blockvector blotch");
5720 if (BLOCKVECTOR_BLOCK (bl, index) != block)
5721 error ("blockvector botch");
5722 last_index = BLOCKVECTOR_NBLOCKS (bl);
5723 index += 1;
5724
5725 /* Don't print out blocks that have gone by. */
5726 while (index < last_index
5727 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
5728 index++;
5729
5730 while (index < last_index
5731 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
5732 {
5733 if (blocks_searched[index] == 0)
5734 {
5735 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
5736 register int i;
5737 register struct symbol *sym;
5738
5739 ALL_BLOCK_SYMBOLS (b, i, sym)
5740 {
5741 if (STREQ (SYMBOL_NAME (sym), "default"))
5742 {
5743 if (have_default)
5744 continue;
5745 have_default = 1;
5746 }
5747 if (SYMBOL_CLASS (sym) == LOC_LABEL)
5748 {
5749 struct sal_chain *next = (struct sal_chain *)
5750 alloca (sizeof (struct sal_chain));
5751 next->next = sal_chain;
5752 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym),
5753 0);
5754 sal_chain = next;
5755 }
5756 }
5757 blocks_searched[index] = 1;
5758 }
5759 index++;
5760 }
5761 if (have_default)
5762 break;
5763 if (sal_chain && this_level_only)
5764 break;
5765
5766 /* After handling the function's top-level block, stop.
5767 Don't continue to its superblock, the block of
5768 per-file symbols. */
5769 if (BLOCK_FUNCTION (block))
5770 break;
5771 block = BLOCK_SUPERBLOCK (block);
5772 }
5773
5774 if (sal_chain)
5775 {
5776 struct sal_chain *tmp_chain;
5777
5778 /* Count the number of entries. */
5779 for (index = 0, tmp_chain = sal_chain; tmp_chain;
5780 tmp_chain = tmp_chain->next)
5781 index++;
5782
5783 sals.nelts = index;
5784 sals.sals = (struct symtab_and_line *)
5785 xmalloc (index * sizeof (struct symtab_and_line));
5786 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
5787 sals.sals[index] = sal_chain->sal;
5788 }
5789
5790 return sals;
5791 }
5792
5793 static void
5794 ep_skip_leading_whitespace (char **s)
5795 {
5796 if ((s == NULL) || (*s == NULL))
5797 return;
5798 while (isspace (**s))
5799 *s += 1;
5800 }
5801
5802 /* This function examines a string, and attempts to find a token
5803 that might be an event name in the leading characters. If a
5804 possible match is found, a pointer to the last character of
5805 the token is returned. Else, NULL is returned. */
5806
5807 static char *
5808 ep_find_event_name_end (char *arg)
5809 {
5810 char *s = arg;
5811 char *event_name_end = NULL;
5812
5813 /* If we could depend upon the presense of strrpbrk, we'd use that... */
5814 if (arg == NULL)
5815 return NULL;
5816
5817 /* We break out of the loop when we find a token delimiter.
5818 Basically, we're looking for alphanumerics and underscores;
5819 anything else delimites the token. */
5820 while (*s != '\0')
5821 {
5822 if (!isalnum (*s) && (*s != '_'))
5823 break;
5824 event_name_end = s;
5825 s++;
5826 }
5827
5828 return event_name_end;
5829 }
5830
5831
5832 /* This function attempts to parse an optional "if <cond>" clause
5833 from the arg string. If one is not found, it returns NULL.
5834
5835 Else, it returns a pointer to the condition string. (It does not
5836 attempt to evaluate the string against a particular block.) And,
5837 it updates arg to point to the first character following the parsed
5838 if clause in the arg string. */
5839
5840 static char *
5841 ep_parse_optional_if_clause (char **arg)
5842 {
5843 char *cond_string;
5844
5845 if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
5846 return NULL;
5847
5848 /* Skip the "if" keyword. */
5849 (*arg) += 2;
5850
5851 /* Skip any extra leading whitespace, and record the start of the
5852 condition string. */
5853 ep_skip_leading_whitespace (arg);
5854 cond_string = *arg;
5855
5856 /* Assume that the condition occupies the remainder of the arg string. */
5857 (*arg) += strlen (cond_string);
5858
5859 return cond_string;
5860 }
5861
5862 /* This function attempts to parse an optional filename from the arg
5863 string. If one is not found, it returns NULL.
5864
5865 Else, it returns a pointer to the parsed filename. (This function
5866 makes no attempt to verify that a file of that name exists, or is
5867 accessible.) And, it updates arg to point to the first character
5868 following the parsed filename in the arg string.
5869
5870 Note that clients needing to preserve the returned filename for
5871 future access should copy it to their own buffers. */
5872 static char *
5873 ep_parse_optional_filename (char **arg)
5874 {
5875 static char filename[1024];
5876 char *arg_p = *arg;
5877 int i;
5878 char c;
5879
5880 if ((*arg_p == '\0') || isspace (*arg_p))
5881 return NULL;
5882
5883 for (i = 0;; i++)
5884 {
5885 c = *arg_p;
5886 if (isspace (c))
5887 c = '\0';
5888 filename[i] = c;
5889 if (c == '\0')
5890 break;
5891 arg_p++;
5892 }
5893 *arg = arg_p;
5894
5895 return filename;
5896 }
5897
5898 /* Commands to deal with catching events, such as signals, exceptions,
5899 process start/exit, etc. */
5900
5901 typedef enum
5902 {
5903 catch_fork, catch_vfork
5904 }
5905 catch_fork_kind;
5906
5907 #if defined(CHILD_INSERT_FORK_CATCHPOINT) || defined(CHILD_INSERT_VFORK_CATCHPOINT)
5908 static void catch_fork_command_1 (catch_fork_kind fork_kind,
5909 char *arg, int tempflag, int from_tty);
5910
5911 static void
5912 catch_fork_command_1 (catch_fork_kind fork_kind, char *arg, int tempflag,
5913 int from_tty)
5914 {
5915 char *cond_string = NULL;
5916
5917 ep_skip_leading_whitespace (&arg);
5918
5919 /* The allowed syntax is:
5920 catch [v]fork
5921 catch [v]fork if <cond>
5922
5923 First, check if there's an if clause. */
5924 cond_string = ep_parse_optional_if_clause (&arg);
5925
5926 if ((*arg != '\0') && !isspace (*arg))
5927 error ("Junk at end of arguments.");
5928
5929 /* If this target supports it, create a fork or vfork catchpoint
5930 and enable reporting of such events. */
5931 switch (fork_kind)
5932 {
5933 case catch_fork:
5934 create_fork_event_catchpoint (tempflag, cond_string);
5935 break;
5936 case catch_vfork:
5937 create_vfork_event_catchpoint (tempflag, cond_string);
5938 break;
5939 default:
5940 error ("unsupported or unknown fork kind; cannot catch it");
5941 break;
5942 }
5943 }
5944 #endif
5945
5946 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
5947 static void
5948 catch_exec_command_1 (char *arg, int tempflag, int from_tty)
5949 {
5950 char *cond_string = NULL;
5951
5952 ep_skip_leading_whitespace (&arg);
5953
5954 /* The allowed syntax is:
5955 catch exec
5956 catch exec if <cond>
5957
5958 First, check if there's an if clause. */
5959 cond_string = ep_parse_optional_if_clause (&arg);
5960
5961 if ((*arg != '\0') && !isspace (*arg))
5962 error ("Junk at end of arguments.");
5963
5964 /* If this target supports it, create an exec catchpoint
5965 and enable reporting of such events. */
5966 create_exec_event_catchpoint (tempflag, cond_string);
5967 }
5968 #endif
5969
5970 #if defined(SOLIB_ADD)
5971 static void
5972 catch_load_command_1 (char *arg, int tempflag, int from_tty)
5973 {
5974 char *dll_pathname = NULL;
5975 char *cond_string = NULL;
5976
5977 ep_skip_leading_whitespace (&arg);
5978
5979 /* The allowed syntax is:
5980 catch load
5981 catch load if <cond>
5982 catch load <filename>
5983 catch load <filename> if <cond>
5984
5985 The user is not allowed to specify the <filename> after an
5986 if clause.
5987
5988 We'll ignore the pathological case of a file named "if".
5989
5990 First, check if there's an if clause. If so, then there
5991 cannot be a filename. */
5992 cond_string = ep_parse_optional_if_clause (&arg);
5993
5994 /* If there was an if clause, then there cannot be a filename.
5995 Else, there might be a filename and an if clause. */
5996 if (cond_string == NULL)
5997 {
5998 dll_pathname = ep_parse_optional_filename (&arg);
5999 ep_skip_leading_whitespace (&arg);
6000 cond_string = ep_parse_optional_if_clause (&arg);
6001 }
6002
6003 if ((*arg != '\0') && !isspace (*arg))
6004 error ("Junk at end of arguments.");
6005
6006 /* Create a load breakpoint that only triggers when a load of
6007 the specified dll (or any dll, if no pathname was specified)
6008 occurs. */
6009 SOLIB_CREATE_CATCH_LOAD_HOOK (PIDGET (inferior_ptid), tempflag,
6010 dll_pathname, cond_string);
6011 }
6012
6013 static void
6014 catch_unload_command_1 (char *arg, int tempflag, int from_tty)
6015 {
6016 char *dll_pathname = NULL;
6017 char *cond_string = NULL;
6018
6019 ep_skip_leading_whitespace (&arg);
6020
6021 /* The allowed syntax is:
6022 catch unload
6023 catch unload if <cond>
6024 catch unload <filename>
6025 catch unload <filename> if <cond>
6026
6027 The user is not allowed to specify the <filename> after an
6028 if clause.
6029
6030 We'll ignore the pathological case of a file named "if".
6031
6032 First, check if there's an if clause. If so, then there
6033 cannot be a filename. */
6034 cond_string = ep_parse_optional_if_clause (&arg);
6035
6036 /* If there was an if clause, then there cannot be a filename.
6037 Else, there might be a filename and an if clause. */
6038 if (cond_string == NULL)
6039 {
6040 dll_pathname = ep_parse_optional_filename (&arg);
6041 ep_skip_leading_whitespace (&arg);
6042 cond_string = ep_parse_optional_if_clause (&arg);
6043 }
6044
6045 if ((*arg != '\0') && !isspace (*arg))
6046 error ("Junk at end of arguments.");
6047
6048 /* Create an unload breakpoint that only triggers when an unload of
6049 the specified dll (or any dll, if no pathname was specified)
6050 occurs. */
6051 SOLIB_CREATE_CATCH_UNLOAD_HOOK (PIDGET (inferior_ptid), tempflag,
6052 dll_pathname, cond_string);
6053 }
6054 #endif /* SOLIB_ADD */
6055
6056 /* Commands to deal with catching exceptions. */
6057
6058 /* Set a breakpoint at the specified callback routine for an
6059 exception event callback */
6060
6061 static void
6062 create_exception_catchpoint (int tempflag, char *cond_string,
6063 enum exception_event_kind ex_event,
6064 struct symtab_and_line *sal)
6065 {
6066 struct breakpoint *b;
6067 int thread = -1; /* All threads. */
6068 enum bptype bptype;
6069
6070 if (!sal) /* no exception support? */
6071 return;
6072
6073 switch (ex_event)
6074 {
6075 case EX_EVENT_THROW:
6076 bptype = bp_catch_throw;
6077 break;
6078 case EX_EVENT_CATCH:
6079 bptype = bp_catch_catch;
6080 break;
6081 default: /* error condition */
6082 error ("Internal error -- invalid catchpoint kind");
6083 }
6084
6085 b = set_raw_breakpoint (*sal, bptype);
6086 set_breakpoint_count (breakpoint_count + 1);
6087 b->number = breakpoint_count;
6088 b->cond = NULL;
6089 b->cond_string = (cond_string == NULL) ?
6090 NULL : savestring (cond_string, strlen (cond_string));
6091 b->thread = thread;
6092 b->addr_string = NULL;
6093 b->enable_state = bp_enabled;
6094 b->disposition = tempflag ? disp_del : disp_donttouch;
6095 mention (b);
6096 }
6097
6098 /* Deal with "catch catch" and "catch throw" commands */
6099
6100 static void
6101 catch_exception_command_1 (enum exception_event_kind ex_event, char *arg,
6102 int tempflag, int from_tty)
6103 {
6104 char *cond_string = NULL;
6105 struct symtab_and_line *sal = NULL;
6106
6107 ep_skip_leading_whitespace (&arg);
6108
6109 cond_string = ep_parse_optional_if_clause (&arg);
6110
6111 if ((*arg != '\0') && !isspace (*arg))
6112 error ("Junk at end of arguments.");
6113
6114 if ((ex_event != EX_EVENT_THROW) &&
6115 (ex_event != EX_EVENT_CATCH))
6116 error ("Unsupported or unknown exception event; cannot catch it");
6117
6118 /* See if we can find a callback routine */
6119 sal = target_enable_exception_callback (ex_event, 1);
6120
6121 if (sal)
6122 {
6123 /* We have callbacks from the runtime system for exceptions.
6124 Set a breakpoint on the sal found, if no errors */
6125 if (sal != (struct symtab_and_line *) -1)
6126 create_exception_catchpoint (tempflag, cond_string, ex_event, sal);
6127 else
6128 return; /* something went wrong with setting up callbacks */
6129 }
6130 else
6131 {
6132 /* No callbacks from runtime system for exceptions.
6133 Try GNU C++ exception breakpoints using labels in debug info. */
6134 if (ex_event == EX_EVENT_CATCH)
6135 {
6136 handle_gnu_4_16_catch_command (arg, tempflag, from_tty);
6137 }
6138 else if (ex_event == EX_EVENT_THROW)
6139 {
6140 /* Set a breakpoint on __raise_exception () */
6141
6142 warning ("Unsupported with this platform/compiler combination.");
6143 warning ("Perhaps you can achieve the effect you want by setting");
6144 warning ("a breakpoint on __raise_exception().");
6145 }
6146 }
6147 }
6148
6149 /* Cover routine to allow wrapping target_enable_exception_catchpoints
6150 inside a catch_errors */
6151
6152 static int
6153 cover_target_enable_exception_callback (PTR arg)
6154 {
6155 args_for_catchpoint_enable *args = arg;
6156 struct symtab_and_line *sal;
6157 sal = target_enable_exception_callback (args->kind, args->enable_p);
6158 if (sal == NULL)
6159 return 0;
6160 else if (sal == (struct symtab_and_line *) -1)
6161 return -1;
6162 else
6163 return 1; /*is valid */
6164 }
6165
6166
6167
6168 /* This is the original v.4.16 and earlier version of the
6169 catch_command_1() function. Now that other flavours of "catch"
6170 have been introduced, and since exception handling can be handled
6171 in other ways (through target ops) also, this is used only for the
6172 GNU C++ exception handling system.
6173 Note: Only the "catch" flavour of GDB 4.16 is handled here. The
6174 "catch NAME" is now no longer allowed in catch_command_1(). Also,
6175 there was no code in GDB 4.16 for "catch throw".
6176
6177 Called from catch_exception_command_1 () */
6178
6179
6180 static void
6181 handle_gnu_4_16_catch_command (char *arg, int tempflag, int from_tty)
6182 {
6183 /* First, translate ARG into something we can deal with in terms
6184 of breakpoints. */
6185
6186 struct symtabs_and_lines sals;
6187 struct symtab_and_line sal;
6188 register struct expression *cond = 0;
6189 register struct breakpoint *b;
6190 char *save_arg;
6191 int i;
6192
6193 INIT_SAL (&sal); /* initialize to zeroes */
6194
6195 /* If no arg given, or if first arg is 'if ', all active catch clauses
6196 are breakpointed. */
6197
6198 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
6199 && (arg[2] == ' ' || arg[2] == '\t')))
6200 {
6201 /* Grab all active catch clauses. */
6202 sals = get_catch_sals (0);
6203 }
6204 else
6205 {
6206 /* Grab selected catch clauses. */
6207 error ("catch NAME not implemented");
6208
6209 #if 0
6210 /* Not sure why this code has been disabled. I'm leaving
6211 it disabled. We can never come here now anyway
6212 since we don't allow the "catch NAME" syntax.
6213 pai/1997-07-11 */
6214
6215 /* This isn't used; I don't know what it was for. */
6216 sals = map_catch_names (arg, catch_breakpoint);
6217 #endif
6218 }
6219
6220 if (!sals.nelts)
6221 return;
6222
6223 save_arg = arg;
6224 for (i = 0; i < sals.nelts; i++)
6225 {
6226 resolve_sal_pc (&sals.sals[i]);
6227
6228 while (arg && *arg)
6229 {
6230 if (arg[0] == 'i' && arg[1] == 'f'
6231 && (arg[2] == ' ' || arg[2] == '\t'))
6232 cond = parse_exp_1 ((arg += 2, &arg),
6233 block_for_pc (sals.sals[i].pc), 0);
6234 else
6235 error ("Junk at end of arguments.");
6236 }
6237 arg = save_arg;
6238 }
6239
6240 for (i = 0; i < sals.nelts; i++)
6241 {
6242 sal = sals.sals[i];
6243
6244 if (from_tty)
6245 describe_other_breakpoints (sal.pc, sal.section);
6246
6247 /* Important -- this is an ordinary breakpoint. For platforms
6248 with callback support for exceptions,
6249 create_exception_catchpoint() will create special bp types
6250 (bp_catch_catch and bp_catch_throw), and there is code in
6251 insert_breakpoints() and elsewhere that depends on that. */
6252 b = set_raw_breakpoint (sal, bp_breakpoint);
6253 set_breakpoint_count (breakpoint_count + 1);
6254 b->number = breakpoint_count;
6255
6256 b->cond = cond;
6257 b->enable_state = bp_enabled;
6258 b->disposition = tempflag ? disp_del : disp_donttouch;
6259
6260 mention (b);
6261 }
6262
6263 if (sals.nelts > 1)
6264 {
6265 warning ("Multiple breakpoints were set.");
6266 warning ("Use the \"delete\" command to delete unwanted breakpoints.");
6267 }
6268 xfree (sals.sals);
6269 }
6270
6271 static void
6272 catch_command_1 (char *arg, int tempflag, int from_tty)
6273 {
6274
6275 /* The first argument may be an event name, such as "start" or "load".
6276 If so, then handle it as such. If it doesn't match an event name,
6277 then attempt to interpret it as an exception name. (This latter is
6278 the v4.16-and-earlier GDB meaning of the "catch" command.)
6279
6280 First, try to find the bounds of what might be an event name. */
6281 char *arg1_start = arg;
6282 char *arg1_end;
6283 int arg1_length;
6284
6285 if (arg1_start == NULL)
6286 {
6287 /* Old behaviour was to use pre-v-4.16 syntax */
6288 /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
6289 /* return; */
6290 /* Now, this is not allowed */
6291 error ("Catch requires an event name.");
6292
6293 }
6294 arg1_end = ep_find_event_name_end (arg1_start);
6295 if (arg1_end == NULL)
6296 error ("catch requires an event");
6297 arg1_length = arg1_end + 1 - arg1_start;
6298
6299 /* Try to match what we found against known event names. */
6300 if (strncmp (arg1_start, "signal", arg1_length) == 0)
6301 {
6302 error ("Catch of signal not yet implemented");
6303 }
6304 else if (strncmp (arg1_start, "catch", arg1_length) == 0)
6305 {
6306 catch_exception_command_1 (EX_EVENT_CATCH, arg1_end + 1,
6307 tempflag, from_tty);
6308 }
6309 else if (strncmp (arg1_start, "throw", arg1_length) == 0)
6310 {
6311 catch_exception_command_1 (EX_EVENT_THROW, arg1_end + 1,
6312 tempflag, from_tty);
6313 }
6314 else if (strncmp (arg1_start, "thread_start", arg1_length) == 0)
6315 {
6316 error ("Catch of thread_start not yet implemented");
6317 }
6318 else if (strncmp (arg1_start, "thread_exit", arg1_length) == 0)
6319 {
6320 error ("Catch of thread_exit not yet implemented");
6321 }
6322 else if (strncmp (arg1_start, "thread_join", arg1_length) == 0)
6323 {
6324 error ("Catch of thread_join not yet implemented");
6325 }
6326 else if (strncmp (arg1_start, "start", arg1_length) == 0)
6327 {
6328 error ("Catch of start not yet implemented");
6329 }
6330 else if (strncmp (arg1_start, "exit", arg1_length) == 0)
6331 {
6332 error ("Catch of exit not yet implemented");
6333 }
6334 else if (strncmp (arg1_start, "fork", arg1_length) == 0)
6335 {
6336 #if defined(CHILD_INSERT_FORK_CATCHPOINT)
6337 catch_fork_command_1 (catch_fork, arg1_end + 1, tempflag, from_tty);
6338 #else
6339 error ("Catch of fork not yet implemented");
6340 #endif
6341 }
6342 else if (strncmp (arg1_start, "vfork", arg1_length) == 0)
6343 {
6344 #if defined(CHILD_INSERT_VFORK_CATCHPOINT)
6345 catch_fork_command_1 (catch_vfork, arg1_end + 1, tempflag, from_tty);
6346 #else
6347 error ("Catch of vfork not yet implemented");
6348 #endif
6349 }
6350 else if (strncmp (arg1_start, "exec", arg1_length) == 0)
6351 {
6352 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
6353 catch_exec_command_1 (arg1_end + 1, tempflag, from_tty);
6354 #else
6355 error ("Catch of exec not yet implemented");
6356 #endif
6357 }
6358 else if (strncmp (arg1_start, "load", arg1_length) == 0)
6359 {
6360 #if defined(SOLIB_ADD)
6361 catch_load_command_1 (arg1_end + 1, tempflag, from_tty);
6362 #else
6363 error ("Catch of load not implemented");
6364 #endif
6365 }
6366 else if (strncmp (arg1_start, "unload", arg1_length) == 0)
6367 {
6368 #if defined(SOLIB_ADD)
6369 catch_unload_command_1 (arg1_end + 1, tempflag, from_tty);
6370 #else
6371 error ("Catch of load not implemented");
6372 #endif
6373 }
6374 else if (strncmp (arg1_start, "stop", arg1_length) == 0)
6375 {
6376 error ("Catch of stop not yet implemented");
6377 }
6378
6379 /* This doesn't appear to be an event name */
6380
6381 else
6382 {
6383 /* Pre-v.4.16 behaviour was to treat the argument
6384 as the name of an exception */
6385 /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
6386 /* Now this is not allowed */
6387 error ("Unknown event kind specified for catch");
6388
6389 }
6390 }
6391
6392 /* Used by the gui, could be made a worker for other things. */
6393
6394 struct breakpoint *
6395 set_breakpoint_sal (struct symtab_and_line sal)
6396 {
6397 struct breakpoint *b;
6398 b = set_raw_breakpoint (sal, bp_breakpoint);
6399 set_breakpoint_count (breakpoint_count + 1);
6400 b->number = breakpoint_count;
6401 b->cond = 0;
6402 b->thread = -1;
6403 return b;
6404 }
6405
6406 #if 0
6407 /* These aren't used; I don't know what they were for. */
6408 /* Disable breakpoints on all catch clauses described in ARGS. */
6409 static void
6410 disable_catch (char *args)
6411 {
6412 /* Map the disable command to catch clauses described in ARGS. */
6413 }
6414
6415 /* Enable breakpoints on all catch clauses described in ARGS. */
6416 static void
6417 enable_catch (char *args)
6418 {
6419 /* Map the disable command to catch clauses described in ARGS. */
6420 }
6421
6422 /* Delete breakpoints on all catch clauses in the active scope. */
6423 static void
6424 delete_catch (char *args)
6425 {
6426 /* Map the delete command to catch clauses described in ARGS. */
6427 }
6428 #endif /* 0 */
6429
6430 static void
6431 catch_command (char *arg, int from_tty)
6432 {
6433 catch_command_1 (arg, 0, from_tty);
6434 }
6435 \f
6436
6437 static void
6438 tcatch_command (char *arg, int from_tty)
6439 {
6440 catch_command_1 (arg, 1, from_tty);
6441 }
6442
6443 /* Delete breakpoints by address or line. */
6444
6445 static void
6446 clear_command (char *arg, int from_tty)
6447 {
6448 struct breakpoint *b, *tmp, *prev, *found;
6449 int default_match;
6450 struct symtabs_and_lines sals;
6451 struct symtab_and_line sal;
6452 int i;
6453
6454 if (arg)
6455 {
6456 sals = decode_line_spec (arg, 1);
6457 default_match = 0;
6458 }
6459 else
6460 {
6461 sals.sals = (struct symtab_and_line *)
6462 xmalloc (sizeof (struct symtab_and_line));
6463 make_cleanup (xfree, sals.sals);
6464 INIT_SAL (&sal); /* initialize to zeroes */
6465 sal.line = default_breakpoint_line;
6466 sal.symtab = default_breakpoint_symtab;
6467 sal.pc = default_breakpoint_address;
6468 if (sal.symtab == 0)
6469 error ("No source file specified.");
6470
6471 sals.sals[0] = sal;
6472 sals.nelts = 1;
6473
6474 default_match = 1;
6475 }
6476
6477 /* For each line spec given, delete bps which correspond
6478 to it. Do it in two passes, solely to preserve the current
6479 behavior that from_tty is forced true if we delete more than
6480 one breakpoint. */
6481
6482 found = NULL;
6483 for (i = 0; i < sals.nelts; i++)
6484 {
6485 /* If exact pc given, clear bpts at that pc.
6486 If line given (pc == 0), clear all bpts on specified line.
6487 If defaulting, clear all bpts on default line
6488 or at default pc.
6489
6490 defaulting sal.pc != 0 tests to do
6491
6492 0 1 pc
6493 1 1 pc _and_ line
6494 0 0 line
6495 1 0 <can't happen> */
6496
6497 sal = sals.sals[i];
6498 prev = NULL;
6499
6500 /* Find all matching breakpoints, remove them from the
6501 breakpoint chain, and add them to the 'found' chain. */
6502 ALL_BREAKPOINTS_SAFE (b, tmp)
6503 {
6504 /* Are we going to delete b? */
6505 if (b->type != bp_none
6506 && b->type != bp_watchpoint
6507 && b->type != bp_hardware_watchpoint
6508 && b->type != bp_read_watchpoint
6509 && b->type != bp_access_watchpoint
6510 /* Not if b is a watchpoint of any sort... */
6511 && (((sal.pc && (b->address == sal.pc))
6512 && (!section_is_overlay (b->section)
6513 || b->section == sal.section))
6514 /* Yes, if sal.pc matches b (modulo overlays). */
6515 || ((default_match || (0 == sal.pc))
6516 && b->source_file != NULL
6517 && sal.symtab != NULL
6518 && STREQ (b->source_file, sal.symtab->filename)
6519 && b->line_number == sal.line)))
6520 /* Yes, if sal source file and line matches b. */
6521 {
6522 /* Remove it from breakpoint_chain... */
6523 if (b == breakpoint_chain)
6524 {
6525 /* b is at the head of the list */
6526 breakpoint_chain = b->next;
6527 }
6528 else
6529 {
6530 prev->next = b->next;
6531 }
6532 /* And add it to 'found' chain. */
6533 b->next = found;
6534 found = b;
6535 }
6536 else
6537 {
6538 /* Keep b, and keep a pointer to it. */
6539 prev = b;
6540 }
6541 }
6542 }
6543 /* Now go thru the 'found' chain and delete them. */
6544 if (found == 0)
6545 {
6546 if (arg)
6547 error ("No breakpoint at %s.", arg);
6548 else
6549 error ("No breakpoint at this line.");
6550 }
6551
6552 if (found->next)
6553 from_tty = 1; /* Always report if deleted more than one */
6554 if (from_tty)
6555 printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
6556 breakpoints_changed ();
6557 while (found)
6558 {
6559 if (from_tty)
6560 printf_unfiltered ("%d ", found->number);
6561 tmp = found->next;
6562 delete_breakpoint (found);
6563 found = tmp;
6564 }
6565 if (from_tty)
6566 putchar_unfiltered ('\n');
6567 }
6568 \f
6569 /* Delete breakpoint in BS if they are `delete' breakpoints and
6570 all breakpoints that are marked for deletion, whether hit or not.
6571 This is called after any breakpoint is hit, or after errors. */
6572
6573 void
6574 breakpoint_auto_delete (bpstat bs)
6575 {
6576 struct breakpoint *b, *temp;
6577
6578 for (; bs; bs = bs->next)
6579 if (bs->breakpoint_at && bs->breakpoint_at->disposition == disp_del
6580 && bs->stop)
6581 delete_breakpoint (bs->breakpoint_at);
6582
6583 ALL_BREAKPOINTS_SAFE (b, temp)
6584 {
6585 if (b->disposition == disp_del_at_next_stop)
6586 delete_breakpoint (b);
6587 }
6588 }
6589
6590 /* Delete a breakpoint and clean up all traces of it in the data
6591 structures. */
6592
6593 void
6594 delete_breakpoint (struct breakpoint *bpt)
6595 {
6596 register struct breakpoint *b;
6597 register bpstat bs;
6598
6599 if (bpt == NULL)
6600 error ("Internal error (attempted to delete a NULL breakpoint)");
6601
6602
6603 /* Has this bp already been deleted? This can happen because multiple
6604 lists can hold pointers to bp's. bpstat lists are especial culprits.
6605
6606 One example of this happening is a watchpoint's scope bp. When the
6607 scope bp triggers, we notice that the watchpoint is out of scope, and
6608 delete it. We also delete its scope bp. But the scope bp is marked
6609 "auto-deleting", and is already on a bpstat. That bpstat is then
6610 checked for auto-deleting bp's, which are deleted.
6611
6612 A real solution to this problem might involve reference counts in bp's,
6613 and/or giving them pointers back to their referencing bpstat's, and
6614 teaching delete_breakpoint to only free a bp's storage when no more
6615 references were extent. A cheaper bandaid was chosen. */
6616 if (bpt->type == bp_none)
6617 return;
6618
6619 if (delete_breakpoint_hook)
6620 delete_breakpoint_hook (bpt);
6621 breakpoint_delete_event (bpt->number);
6622
6623 if (bpt->inserted)
6624 remove_breakpoint (bpt, mark_inserted);
6625
6626 if (breakpoint_chain == bpt)
6627 breakpoint_chain = bpt->next;
6628
6629 /* If we have callback-style exception catchpoints, don't go through
6630 the adjustments to the C++ runtime library etc. if the inferior
6631 isn't actually running. target_enable_exception_callback for a
6632 null target ops vector gives an undesirable error message, so we
6633 check here and avoid it. Since currently (1997-09-17) only HP-UX aCC's
6634 exceptions are supported in this way, it's OK for now. FIXME */
6635 if (ep_is_exception_catchpoint (bpt) && target_has_execution)
6636 {
6637 static char message1[] = "Error in deleting catchpoint %d:\n";
6638 static char message[sizeof (message1) + 30];
6639 args_for_catchpoint_enable args;
6640
6641 /* Format possible error msg */
6642 sprintf (message, message1, bpt->number);
6643 args.kind = bpt->type == bp_catch_catch ?
6644 EX_EVENT_CATCH : EX_EVENT_THROW;
6645 args.enable_p = 0;
6646 catch_errors (cover_target_enable_exception_callback, &args,
6647 message, RETURN_MASK_ALL);
6648 }
6649
6650
6651 ALL_BREAKPOINTS (b)
6652 if (b->next == bpt)
6653 {
6654 b->next = bpt->next;
6655 break;
6656 }
6657
6658 check_duplicates (bpt);
6659 /* If this breakpoint was inserted, and there is another breakpoint
6660 at the same address, we need to insert the other breakpoint. */
6661 if (bpt->inserted
6662 && bpt->type != bp_hardware_watchpoint
6663 && bpt->type != bp_read_watchpoint
6664 && bpt->type != bp_access_watchpoint
6665 && bpt->type != bp_catch_fork
6666 && bpt->type != bp_catch_vfork
6667 && bpt->type != bp_catch_exec)
6668 {
6669 ALL_BREAKPOINTS (b)
6670 if (b->address == bpt->address
6671 && b->section == bpt->section
6672 && !b->duplicate
6673 && b->enable_state != bp_disabled
6674 && b->enable_state != bp_shlib_disabled
6675 && b->enable_state != bp_call_disabled)
6676 {
6677 int val;
6678
6679 /* We should never reach this point if there is a permanent
6680 breakpoint at the same address as the one being deleted.
6681 If there is a permanent breakpoint somewhere, it should
6682 always be the only one inserted. */
6683 if (b->enable_state == bp_permanent)
6684 internal_error (__FILE__, __LINE__,
6685 "another breakpoint was inserted on top of "
6686 "a permanent breakpoint");
6687
6688 if (b->type == bp_hardware_breakpoint)
6689 val = target_insert_hw_breakpoint (b->address, b->shadow_contents);
6690 else
6691 val = target_insert_breakpoint (b->address, b->shadow_contents);
6692
6693 if (val != 0)
6694 {
6695 target_terminal_ours_for_output ();
6696 warning ("Cannot insert breakpoint %d:", b->number);
6697 memory_error (val, b->address); /* which bombs us out */
6698 }
6699 else
6700 b->inserted = 1;
6701 }
6702 }
6703
6704 free_command_lines (&bpt->commands);
6705 if (bpt->cond)
6706 xfree (bpt->cond);
6707 if (bpt->cond_string != NULL)
6708 xfree (bpt->cond_string);
6709 if (bpt->addr_string != NULL)
6710 xfree (bpt->addr_string);
6711 if (bpt->exp != NULL)
6712 xfree (bpt->exp);
6713 if (bpt->exp_string != NULL)
6714 xfree (bpt->exp_string);
6715 if (bpt->val != NULL)
6716 value_free (bpt->val);
6717 if (bpt->source_file != NULL)
6718 xfree (bpt->source_file);
6719 if (bpt->dll_pathname != NULL)
6720 xfree (bpt->dll_pathname);
6721 if (bpt->triggered_dll_pathname != NULL)
6722 xfree (bpt->triggered_dll_pathname);
6723 if (bpt->exec_pathname != NULL)
6724 xfree (bpt->exec_pathname);
6725
6726 /* Be sure no bpstat's are pointing at it after it's been freed. */
6727 /* FIXME, how can we find all bpstat's?
6728 We just check stop_bpstat for now. */
6729 for (bs = stop_bpstat; bs; bs = bs->next)
6730 if (bs->breakpoint_at == bpt)
6731 {
6732 bs->breakpoint_at = NULL;
6733
6734 /* we'd call bpstat_clear_actions, but that free's stuff and due
6735 to the multiple pointers pointing to one item with no
6736 reference counts found anywhere through out the bpstat's (how
6737 do you spell fragile?), we don't want to free things twice --
6738 better a memory leak than a corrupt malloc pool! */
6739 bs->commands = NULL;
6740 bs->old_val = NULL;
6741 }
6742 /* On the chance that someone will soon try again to delete this same
6743 bp, we mark it as deleted before freeing its storage. */
6744 bpt->type = bp_none;
6745
6746 xfree (bpt);
6747 }
6748
6749 static void
6750 do_delete_breakpoint_cleanup (void *b)
6751 {
6752 delete_breakpoint (b);
6753 }
6754
6755 struct cleanup *
6756 make_cleanup_delete_breakpoint (struct breakpoint *b)
6757 {
6758 return make_cleanup (do_delete_breakpoint_cleanup, b);
6759 }
6760
6761 struct cleanup *
6762 make_exec_cleanup_delete_breakpoint (struct breakpoint *b)
6763 {
6764 return make_exec_cleanup (do_delete_breakpoint_cleanup, b);
6765 }
6766
6767 void
6768 delete_command (char *arg, int from_tty)
6769 {
6770 struct breakpoint *b, *temp;
6771
6772 if (arg == 0)
6773 {
6774 int breaks_to_delete = 0;
6775
6776 /* Delete all breakpoints if no argument.
6777 Do not delete internal or call-dummy breakpoints, these
6778 have to be deleted with an explicit breakpoint number argument. */
6779 ALL_BREAKPOINTS (b)
6780 {
6781 if (b->type != bp_call_dummy &&
6782 b->type != bp_shlib_event &&
6783 b->type != bp_thread_event &&
6784 b->type != bp_overlay_event &&
6785 b->number >= 0)
6786 breaks_to_delete = 1;
6787 }
6788
6789 /* Ask user only if there are some breakpoints to delete. */
6790 if (!from_tty
6791 || (breaks_to_delete && query ("Delete all breakpoints? ")))
6792 {
6793 ALL_BREAKPOINTS_SAFE (b, temp)
6794 {
6795 if (b->type != bp_call_dummy &&
6796 b->type != bp_shlib_event &&
6797 b->type != bp_thread_event &&
6798 b->type != bp_overlay_event &&
6799 b->number >= 0)
6800 delete_breakpoint (b);
6801 }
6802 }
6803 }
6804 else
6805 map_breakpoint_numbers (arg, delete_breakpoint);
6806 }
6807
6808 /* Reset a breakpoint given it's struct breakpoint * BINT.
6809 The value we return ends up being the return value from catch_errors.
6810 Unused in this case. */
6811
6812 static int
6813 breakpoint_re_set_one (PTR bint)
6814 {
6815 /* get past catch_errs */
6816 struct breakpoint *b = (struct breakpoint *) bint;
6817 struct value *mark;
6818 int i;
6819 struct symtabs_and_lines sals;
6820 char *s;
6821 enum enable_state save_enable;
6822
6823 switch (b->type)
6824 {
6825 case bp_none:
6826 warning ("attempted to reset apparently deleted breakpoint #%d?",
6827 b->number);
6828 return 0;
6829 case bp_breakpoint:
6830 case bp_hardware_breakpoint:
6831 case bp_catch_load:
6832 case bp_catch_unload:
6833 if (b->addr_string == NULL)
6834 {
6835 /* Anything without a string can't be re-set. */
6836 delete_breakpoint (b);
6837 return 0;
6838 }
6839 /* HACK: cagney/2001-11-11: kettenis/2001-11-11: MarkK wrote:
6840
6841 ``And a hack it is, although Apple's Darwin version of GDB
6842 contains an almost identical hack to implement a "future
6843 break" command. It seems to work in many real world cases,
6844 but it is easy to come up with a test case where the patch
6845 doesn't help at all.''
6846
6847 ``It seems that the way GDB implements breakpoints - in -
6848 shared - libraries was designed for a.out shared library
6849 systems (SunOS 4) where shared libraries were loaded at a
6850 fixed address in memory. Since ELF shared libraries can (and
6851 will) be loaded at any address in memory, things break.
6852 Fixing this is not trivial. Therefore, I'm not sure whether
6853 we should add this hack to the branch only. I cannot
6854 guarantee that things will be fixed on the trunk in the near
6855 future.''
6856
6857 In case we have a problem, disable this breakpoint. We'll
6858 restore its status if we succeed. Don't disable a
6859 shlib_disabled breakpoint though. There's a fair chance we
6860 can't re-set it if the shared library it's in hasn't been
6861 loaded yet. */
6862 save_enable = b->enable_state;
6863 if (b->enable_state != bp_shlib_disabled)
6864 b->enable_state = bp_disabled;
6865
6866 set_language (b->language);
6867 input_radix = b->input_radix;
6868 s = b->addr_string;
6869 sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, (char ***) NULL);
6870 for (i = 0; i < sals.nelts; i++)
6871 {
6872 resolve_sal_pc (&sals.sals[i]);
6873
6874 /* Reparse conditions, they might contain references to the
6875 old symtab. */
6876 if (b->cond_string != NULL)
6877 {
6878 s = b->cond_string;
6879 if (b->cond)
6880 xfree (b->cond);
6881 b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
6882 }
6883
6884 /* We need to re-set the breakpoint if the address changes... */
6885 if (b->address != sals.sals[i].pc
6886 /* ...or new and old breakpoints both have source files, and
6887 the source file name or the line number changes... */
6888 || (b->source_file != NULL
6889 && sals.sals[i].symtab != NULL
6890 && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
6891 || b->line_number != sals.sals[i].line)
6892 )
6893 /* ...or we switch between having a source file and not having
6894 one. */
6895 || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
6896 )
6897 {
6898 if (b->source_file != NULL)
6899 xfree (b->source_file);
6900 if (sals.sals[i].symtab == NULL)
6901 b->source_file = NULL;
6902 else
6903 b->source_file =
6904 savestring (sals.sals[i].symtab->filename,
6905 strlen (sals.sals[i].symtab->filename));
6906 b->line_number = sals.sals[i].line;
6907 b->address = sals.sals[i].pc;
6908
6909 /* Used to check for duplicates here, but that can
6910 cause trouble, as it doesn't check for disabled
6911 breakpoints. */
6912
6913 mention (b);
6914
6915 /* Might be better to do this just once per breakpoint_re_set,
6916 rather than once for every breakpoint. */
6917 breakpoints_changed ();
6918 }
6919 b->section = sals.sals[i].section;
6920 b->enable_state = save_enable; /* Restore it, this worked. */
6921
6922
6923 /* Now that this is re-enabled, check_duplicates
6924 can be used. */
6925 check_duplicates (b);
6926
6927 }
6928 xfree (sals.sals);
6929 break;
6930
6931 case bp_watchpoint:
6932 case bp_hardware_watchpoint:
6933 case bp_read_watchpoint:
6934 case bp_access_watchpoint:
6935 innermost_block = NULL;
6936 /* The issue arises of what context to evaluate this in. The
6937 same one as when it was set, but what does that mean when
6938 symbols have been re-read? We could save the filename and
6939 functionname, but if the context is more local than that, the
6940 best we could do would be something like how many levels deep
6941 and which index at that particular level, but that's going to
6942 be less stable than filenames or function names. */
6943
6944 /* So for now, just use a global context. */
6945 if (b->exp)
6946 xfree (b->exp);
6947 b->exp = parse_expression (b->exp_string);
6948 b->exp_valid_block = innermost_block;
6949 mark = value_mark ();
6950 if (b->val)
6951 value_free (b->val);
6952 b->val = evaluate_expression (b->exp);
6953 release_value (b->val);
6954 if (VALUE_LAZY (b->val))
6955 value_fetch_lazy (b->val);
6956
6957 if (b->cond_string != NULL)
6958 {
6959 s = b->cond_string;
6960 if (b->cond)
6961 xfree (b->cond);
6962 b->cond = parse_exp_1 (&s, (struct block *) 0, 0);
6963 }
6964 if (b->enable_state == bp_enabled)
6965 mention (b);
6966 value_free_to_mark (mark);
6967 break;
6968 case bp_catch_catch:
6969 case bp_catch_throw:
6970 break;
6971 /* We needn't really do anything to reset these, since the mask
6972 that requests them is unaffected by e.g., new libraries being
6973 loaded. */
6974 case bp_catch_fork:
6975 case bp_catch_vfork:
6976 case bp_catch_exec:
6977 break;
6978
6979 default:
6980 printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
6981 /* fall through */
6982 /* Delete longjmp and overlay event breakpoints; they will be
6983 reset later by breakpoint_re_set. */
6984 case bp_longjmp:
6985 case bp_longjmp_resume:
6986 case bp_overlay_event:
6987 delete_breakpoint (b);
6988 break;
6989
6990 /* This breakpoint is special, it's set up when the inferior
6991 starts and we really don't want to touch it. */
6992 case bp_shlib_event:
6993
6994 /* Like bp_shlib_event, this breakpoint type is special.
6995 Once it is set up, we do not want to touch it. */
6996 case bp_thread_event:
6997
6998 /* Keep temporary breakpoints, which can be encountered when we step
6999 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
7000 Otherwise these should have been blown away via the cleanup chain
7001 or by breakpoint_init_inferior when we rerun the executable. */
7002 case bp_until:
7003 case bp_finish:
7004 case bp_watchpoint_scope:
7005 case bp_call_dummy:
7006 case bp_step_resume:
7007 break;
7008 }
7009
7010 return 0;
7011 }
7012
7013 /* Re-set all breakpoints after symbols have been re-loaded. */
7014 void
7015 breakpoint_re_set (void)
7016 {
7017 struct breakpoint *b, *temp;
7018 enum language save_language;
7019 int save_input_radix;
7020 static char message1[] = "Error in re-setting breakpoint %d:\n";
7021 char message[sizeof (message1) + 30 /* slop */ ];
7022
7023 save_language = current_language->la_language;
7024 save_input_radix = input_radix;
7025 ALL_BREAKPOINTS_SAFE (b, temp)
7026 {
7027 /* Format possible error msg */
7028 sprintf (message, message1, b->number);
7029 catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
7030 }
7031 set_language (save_language);
7032 input_radix = save_input_radix;
7033
7034 if (GET_LONGJMP_TARGET_P ())
7035 {
7036 create_longjmp_breakpoint ("longjmp");
7037 create_longjmp_breakpoint ("_longjmp");
7038 create_longjmp_breakpoint ("siglongjmp");
7039 create_longjmp_breakpoint ("_siglongjmp");
7040 create_longjmp_breakpoint (NULL);
7041 }
7042
7043 create_overlay_event_breakpoint ("_ovly_debug_event");
7044 }
7045 \f
7046 /* Reset the thread number of this breakpoint:
7047
7048 - If the breakpoint is for all threads, leave it as-is.
7049 - Else, reset it to the current thread for inferior_ptid. */
7050 void
7051 breakpoint_re_set_thread (struct breakpoint *b)
7052 {
7053 if (b->thread != -1)
7054 {
7055 if (in_thread_list (inferior_ptid))
7056 b->thread = pid_to_thread_id (inferior_ptid);
7057 }
7058 }
7059
7060 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
7061 If from_tty is nonzero, it prints a message to that effect,
7062 which ends with a period (no newline). */
7063
7064 void
7065 set_ignore_count (int bptnum, int count, int from_tty)
7066 {
7067 register struct breakpoint *b;
7068
7069 if (count < 0)
7070 count = 0;
7071
7072 ALL_BREAKPOINTS (b)
7073 if (b->number == bptnum)
7074 {
7075 b->ignore_count = count;
7076 if (from_tty)
7077 {
7078 if (count == 0)
7079 printf_filtered ("Will stop next time breakpoint %d is reached.",
7080 bptnum);
7081 else if (count == 1)
7082 printf_filtered ("Will ignore next crossing of breakpoint %d.",
7083 bptnum);
7084 else
7085 printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
7086 count, bptnum);
7087 }
7088 breakpoints_changed ();
7089 breakpoint_modify_event (b->number);
7090 return;
7091 }
7092
7093 error ("No breakpoint number %d.", bptnum);
7094 }
7095
7096 /* Clear the ignore counts of all breakpoints. */
7097 void
7098 breakpoint_clear_ignore_counts (void)
7099 {
7100 struct breakpoint *b;
7101
7102 ALL_BREAKPOINTS (b)
7103 b->ignore_count = 0;
7104 }
7105
7106 /* Command to set ignore-count of breakpoint N to COUNT. */
7107
7108 static void
7109 ignore_command (char *args, int from_tty)
7110 {
7111 char *p = args;
7112 register int num;
7113
7114 if (p == 0)
7115 error_no_arg ("a breakpoint number");
7116
7117 num = get_number (&p);
7118 if (num == 0)
7119 error ("bad breakpoint number: '%s'", args);
7120 if (*p == 0)
7121 error ("Second argument (specified ignore-count) is missing.");
7122
7123 set_ignore_count (num,
7124 longest_to_int (value_as_long (parse_and_eval (p))),
7125 from_tty);
7126 if (from_tty)
7127 printf_filtered ("\n");
7128 }
7129 \f
7130 /* Call FUNCTION on each of the breakpoints
7131 whose numbers are given in ARGS. */
7132
7133 static void
7134 map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *))
7135 {
7136 register char *p = args;
7137 char *p1;
7138 register int num;
7139 register struct breakpoint *b, *tmp;
7140 int match;
7141
7142 if (p == 0)
7143 error_no_arg ("one or more breakpoint numbers");
7144
7145 while (*p)
7146 {
7147 match = 0;
7148 p1 = p;
7149
7150 num = get_number_or_range (&p1);
7151 if (num == 0)
7152 {
7153 warning ("bad breakpoint number at or near '%s'", p);
7154 }
7155 else
7156 {
7157 ALL_BREAKPOINTS_SAFE (b, tmp)
7158 if (b->number == num)
7159 {
7160 struct breakpoint *related_breakpoint = b->related_breakpoint;
7161 match = 1;
7162 function (b);
7163 if (related_breakpoint)
7164 function (related_breakpoint);
7165 break;
7166 }
7167 if (match == 0)
7168 printf_unfiltered ("No breakpoint number %d.\n", num);
7169 }
7170 p = p1;
7171 }
7172 }
7173
7174 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
7175 If from_tty is nonzero, it prints a message to that effect,
7176 which ends with a period (no newline). */
7177
7178 void
7179 disable_breakpoint (struct breakpoint *bpt)
7180 {
7181 /* Never disable a watchpoint scope breakpoint; we want to
7182 hit them when we leave scope so we can delete both the
7183 watchpoint and its scope breakpoint at that time. */
7184 if (bpt->type == bp_watchpoint_scope)
7185 return;
7186
7187 /* You can't disable permanent breakpoints. */
7188 if (bpt->enable_state == bp_permanent)
7189 return;
7190
7191 bpt->enable_state = bp_disabled;
7192
7193 check_duplicates (bpt);
7194
7195 if (modify_breakpoint_hook)
7196 modify_breakpoint_hook (bpt);
7197 breakpoint_modify_event (bpt->number);
7198 }
7199
7200 /* ARGSUSED */
7201 static void
7202 disable_command (char *args, int from_tty)
7203 {
7204 register struct breakpoint *bpt;
7205 if (args == 0)
7206 ALL_BREAKPOINTS (bpt)
7207 switch (bpt->type)
7208 {
7209 case bp_none:
7210 warning ("attempted to disable apparently deleted breakpoint #%d?",
7211 bpt->number);
7212 continue;
7213 case bp_breakpoint:
7214 case bp_catch_load:
7215 case bp_catch_unload:
7216 case bp_catch_fork:
7217 case bp_catch_vfork:
7218 case bp_catch_exec:
7219 case bp_catch_catch:
7220 case bp_catch_throw:
7221 case bp_hardware_breakpoint:
7222 case bp_watchpoint:
7223 case bp_hardware_watchpoint:
7224 case bp_read_watchpoint:
7225 case bp_access_watchpoint:
7226 disable_breakpoint (bpt);
7227 default:
7228 continue;
7229 }
7230 else
7231 map_breakpoint_numbers (args, disable_breakpoint);
7232 }
7233
7234 static void
7235 do_enable_breakpoint (struct breakpoint *bpt, enum bpdisp disposition)
7236 {
7237 struct frame_info *save_selected_frame = NULL;
7238 int save_selected_frame_level = -1;
7239 int target_resources_ok, other_type_used;
7240 struct value *mark;
7241
7242 if (bpt->type == bp_hardware_breakpoint)
7243 {
7244 int i;
7245 i = hw_breakpoint_used_count ();
7246 target_resources_ok =
7247 TARGET_CAN_USE_HARDWARE_WATCHPOINT (bp_hardware_breakpoint,
7248 i + 1, 0);
7249 if (target_resources_ok == 0)
7250 error ("No hardware breakpoint support in the target.");
7251 else if (target_resources_ok < 0)
7252 error ("Hardware breakpoints used exceeds limit.");
7253 }
7254
7255 if (bpt->enable_state != bp_permanent)
7256 bpt->enable_state = bp_enabled;
7257 bpt->disposition = disposition;
7258 check_duplicates (bpt);
7259 breakpoints_changed ();
7260
7261 if (bpt->type == bp_watchpoint ||
7262 bpt->type == bp_hardware_watchpoint ||
7263 bpt->type == bp_read_watchpoint ||
7264 bpt->type == bp_access_watchpoint)
7265 {
7266 if (bpt->exp_valid_block != NULL)
7267 {
7268 struct frame_info *fr =
7269 fr = frame_find_by_id (bpt->watchpoint_frame);
7270 if (fr == NULL)
7271 {
7272 printf_filtered ("\
7273 Cannot enable watchpoint %d because the block in which its expression\n\
7274 is valid is not currently in scope.\n", bpt->number);
7275 bpt->enable_state = bp_disabled;
7276 return;
7277 }
7278
7279 save_selected_frame = selected_frame;
7280 save_selected_frame_level = frame_relative_level (selected_frame);
7281 select_frame (fr);
7282 }
7283
7284 value_free (bpt->val);
7285 mark = value_mark ();
7286 bpt->val = evaluate_expression (bpt->exp);
7287 release_value (bpt->val);
7288 if (VALUE_LAZY (bpt->val))
7289 value_fetch_lazy (bpt->val);
7290
7291 if (bpt->type == bp_hardware_watchpoint ||
7292 bpt->type == bp_read_watchpoint ||
7293 bpt->type == bp_access_watchpoint)
7294 {
7295 int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
7296 int mem_cnt = can_use_hardware_watchpoint (bpt->val);
7297
7298 /* Hack around 'unused var' error for some targets here */
7299 (void) mem_cnt, i;
7300 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
7301 bpt->type, i + mem_cnt, other_type_used);
7302 /* we can consider of type is bp_hardware_watchpoint, convert to
7303 bp_watchpoint in the following condition */
7304 if (target_resources_ok < 0)
7305 {
7306 printf_filtered ("\
7307 Cannot enable watchpoint %d because target watch resources\n\
7308 have been allocated for other watchpoints.\n", bpt->number);
7309 bpt->enable_state = bp_disabled;
7310 value_free_to_mark (mark);
7311 return;
7312 }
7313 }
7314
7315 if (save_selected_frame_level >= 0)
7316 select_frame (save_selected_frame);
7317 value_free_to_mark (mark);
7318 }
7319 if (modify_breakpoint_hook)
7320 modify_breakpoint_hook (bpt);
7321 breakpoint_modify_event (bpt->number);
7322 }
7323
7324 void
7325 enable_breakpoint (struct breakpoint *bpt)
7326 {
7327 do_enable_breakpoint (bpt, bpt->disposition);
7328 }
7329
7330 /* The enable command enables the specified breakpoints (or all defined
7331 breakpoints) so they once again become (or continue to be) effective
7332 in stopping the inferior. */
7333
7334 /* ARGSUSED */
7335 static void
7336 enable_command (char *args, int from_tty)
7337 {
7338 register struct breakpoint *bpt;
7339 if (args == 0)
7340 ALL_BREAKPOINTS (bpt)
7341 switch (bpt->type)
7342 {
7343 case bp_none:
7344 warning ("attempted to enable apparently deleted breakpoint #%d?",
7345 bpt->number);
7346 continue;
7347 case bp_breakpoint:
7348 case bp_catch_load:
7349 case bp_catch_unload:
7350 case bp_catch_fork:
7351 case bp_catch_vfork:
7352 case bp_catch_exec:
7353 case bp_catch_catch:
7354 case bp_catch_throw:
7355 case bp_hardware_breakpoint:
7356 case bp_watchpoint:
7357 case bp_hardware_watchpoint:
7358 case bp_read_watchpoint:
7359 case bp_access_watchpoint:
7360 enable_breakpoint (bpt);
7361 default:
7362 continue;
7363 }
7364 else
7365 map_breakpoint_numbers (args, enable_breakpoint);
7366 }
7367
7368 static void
7369 enable_once_breakpoint (struct breakpoint *bpt)
7370 {
7371 do_enable_breakpoint (bpt, disp_disable);
7372 }
7373
7374 /* ARGSUSED */
7375 static void
7376 enable_once_command (char *args, int from_tty)
7377 {
7378 map_breakpoint_numbers (args, enable_once_breakpoint);
7379 }
7380
7381 static void
7382 enable_delete_breakpoint (struct breakpoint *bpt)
7383 {
7384 do_enable_breakpoint (bpt, disp_del);
7385 }
7386
7387 /* ARGSUSED */
7388 static void
7389 enable_delete_command (char *args, int from_tty)
7390 {
7391 map_breakpoint_numbers (args, enable_delete_breakpoint);
7392 }
7393 \f
7394 /* Use default_breakpoint_'s, or nothing if they aren't valid. */
7395
7396 struct symtabs_and_lines
7397 decode_line_spec_1 (char *string, int funfirstline)
7398 {
7399 struct symtabs_and_lines sals;
7400 if (string == 0)
7401 error ("Empty line specification.");
7402 if (default_breakpoint_valid)
7403 sals = decode_line_1 (&string, funfirstline,
7404 default_breakpoint_symtab,
7405 default_breakpoint_line,
7406 (char ***) NULL);
7407 else
7408 sals = decode_line_1 (&string, funfirstline,
7409 (struct symtab *) NULL, 0, (char ***) NULL);
7410 if (*string)
7411 error ("Junk at end of line specification: %s", string);
7412 return sals;
7413 }
7414 \f
7415 void
7416 _initialize_breakpoint (void)
7417 {
7418 struct cmd_list_element *c;
7419
7420 breakpoint_chain = 0;
7421 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
7422 before a breakpoint is set. */
7423 breakpoint_count = 0;
7424
7425 add_com ("ignore", class_breakpoint, ignore_command,
7426 "Set ignore-count of breakpoint number N to COUNT.\n\
7427 Usage is `ignore N COUNT'.");
7428 if (xdb_commands)
7429 add_com_alias ("bc", "ignore", class_breakpoint, 1);
7430
7431 add_com ("commands", class_breakpoint, commands_command,
7432 "Set commands to be executed when a breakpoint is hit.\n\
7433 Give breakpoint number as argument after \"commands\".\n\
7434 With no argument, the targeted breakpoint is the last one set.\n\
7435 The commands themselves follow starting on the next line.\n\
7436 Type a line containing \"end\" to indicate the end of them.\n\
7437 Give \"silent\" as the first line to make the breakpoint silent;\n\
7438 then no output is printed when it is hit, except what the commands print.");
7439
7440 add_com ("condition", class_breakpoint, condition_command,
7441 "Specify breakpoint number N to break only if COND is true.\n\
7442 Usage is `condition N COND', where N is an integer and COND is an\n\
7443 expression to be evaluated whenever breakpoint N is reached.");
7444
7445 c = add_com ("tbreak", class_breakpoint, tbreak_command,
7446 "Set a temporary breakpoint. Args like \"break\" command.\n\
7447 Like \"break\" except the breakpoint is only temporary,\n\
7448 so it will be deleted when hit. Equivalent to \"break\" followed\n\
7449 by using \"enable delete\" on the breakpoint number.");
7450 set_cmd_completer (c, location_completer);
7451
7452 c = add_com ("hbreak", class_breakpoint, hbreak_command,
7453 "Set a hardware assisted breakpoint. Args like \"break\" command.\n\
7454 Like \"break\" except the breakpoint requires hardware support,\n\
7455 some target hardware may not have this support.");
7456 set_cmd_completer (c, location_completer);
7457
7458 c = add_com ("thbreak", class_breakpoint, thbreak_command,
7459 "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
7460 Like \"hbreak\" except the breakpoint is only temporary,\n\
7461 so it will be deleted when hit.");
7462 set_cmd_completer (c, location_completer);
7463
7464 add_prefix_cmd ("enable", class_breakpoint, enable_command,
7465 "Enable some breakpoints.\n\
7466 Give breakpoint numbers (separated by spaces) as arguments.\n\
7467 With no subcommand, breakpoints are enabled until you command otherwise.\n\
7468 This is used to cancel the effect of the \"disable\" command.\n\
7469 With a subcommand you can enable temporarily.",
7470 &enablelist, "enable ", 1, &cmdlist);
7471 if (xdb_commands)
7472 add_com ("ab", class_breakpoint, enable_command,
7473 "Enable some breakpoints.\n\
7474 Give breakpoint numbers (separated by spaces) as arguments.\n\
7475 With no subcommand, breakpoints are enabled until you command otherwise.\n\
7476 This is used to cancel the effect of the \"disable\" command.\n\
7477 With a subcommand you can enable temporarily.");
7478
7479 add_com_alias ("en", "enable", class_breakpoint, 1);
7480
7481 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
7482 "Enable some breakpoints.\n\
7483 Give breakpoint numbers (separated by spaces) as arguments.\n\
7484 This is used to cancel the effect of the \"disable\" command.\n\
7485 May be abbreviated to simply \"enable\".\n",
7486 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
7487
7488 add_cmd ("once", no_class, enable_once_command,
7489 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
7490 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
7491 &enablebreaklist);
7492
7493 add_cmd ("delete", no_class, enable_delete_command,
7494 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
7495 If a breakpoint is hit while enabled in this fashion, it is deleted.",
7496 &enablebreaklist);
7497
7498 add_cmd ("delete", no_class, enable_delete_command,
7499 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
7500 If a breakpoint is hit while enabled in this fashion, it is deleted.",
7501 &enablelist);
7502
7503 add_cmd ("once", no_class, enable_once_command,
7504 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
7505 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
7506 &enablelist);
7507
7508 add_prefix_cmd ("disable", class_breakpoint, disable_command,
7509 "Disable some breakpoints.\n\
7510 Arguments are breakpoint numbers with spaces in between.\n\
7511 To disable all breakpoints, give no argument.\n\
7512 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
7513 &disablelist, "disable ", 1, &cmdlist);
7514 add_com_alias ("dis", "disable", class_breakpoint, 1);
7515 add_com_alias ("disa", "disable", class_breakpoint, 1);
7516 if (xdb_commands)
7517 add_com ("sb", class_breakpoint, disable_command,
7518 "Disable some breakpoints.\n\
7519 Arguments are breakpoint numbers with spaces in between.\n\
7520 To disable all breakpoints, give no argument.\n\
7521 A disabled breakpoint is not forgotten, but has no effect until reenabled.");
7522
7523 add_cmd ("breakpoints", class_alias, disable_command,
7524 "Disable some breakpoints.\n\
7525 Arguments are breakpoint numbers with spaces in between.\n\
7526 To disable all breakpoints, give no argument.\n\
7527 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
7528 This command may be abbreviated \"disable\".",
7529 &disablelist);
7530
7531 add_prefix_cmd ("delete", class_breakpoint, delete_command,
7532 "Delete some breakpoints or auto-display expressions.\n\
7533 Arguments are breakpoint numbers with spaces in between.\n\
7534 To delete all breakpoints, give no argument.\n\
7535 \n\
7536 Also a prefix command for deletion of other GDB objects.\n\
7537 The \"unset\" command is also an alias for \"delete\".",
7538 &deletelist, "delete ", 1, &cmdlist);
7539 add_com_alias ("d", "delete", class_breakpoint, 1);
7540 if (xdb_commands)
7541 add_com ("db", class_breakpoint, delete_command,
7542 "Delete some breakpoints.\n\
7543 Arguments are breakpoint numbers with spaces in between.\n\
7544 To delete all breakpoints, give no argument.\n");
7545
7546 add_cmd ("breakpoints", class_alias, delete_command,
7547 "Delete some breakpoints or auto-display expressions.\n\
7548 Arguments are breakpoint numbers with spaces in between.\n\
7549 To delete all breakpoints, give no argument.\n\
7550 This command may be abbreviated \"delete\".",
7551 &deletelist);
7552
7553 add_com ("clear", class_breakpoint, clear_command,
7554 concat ("Clear breakpoint at specified line or function.\n\
7555 Argument may be line number, function name, or \"*\" and an address.\n\
7556 If line number is specified, all breakpoints in that line are cleared.\n\
7557 If function is specified, breakpoints at beginning of function are cleared.\n\
7558 If an address is specified, breakpoints at that address are cleared.\n\n",
7559 "With no argument, clears all breakpoints in the line that the selected frame\n\
7560 is executing in.\n\
7561 \n\
7562 See also the \"delete\" command which clears breakpoints by number.", NULL));
7563
7564 c = add_com ("break", class_breakpoint, break_command,
7565 concat ("Set breakpoint at specified line or function.\n\
7566 Argument may be line number, function name, or \"*\" and an address.\n\
7567 If line number is specified, break at start of code for that line.\n\
7568 If function is specified, break at start of code for that function.\n\
7569 If an address is specified, break at that exact address.\n",
7570 "With no arg, uses current execution address of selected stack frame.\n\
7571 This is useful for breaking on return to a stack frame.\n\
7572 \n\
7573 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
7574 \n\
7575 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
7576 set_cmd_completer (c, location_completer);
7577
7578 add_com_alias ("b", "break", class_run, 1);
7579 add_com_alias ("br", "break", class_run, 1);
7580 add_com_alias ("bre", "break", class_run, 1);
7581 add_com_alias ("brea", "break", class_run, 1);
7582
7583 if (xdb_commands)
7584 {
7585 add_com_alias ("ba", "break", class_breakpoint, 1);
7586 add_com_alias ("bu", "ubreak", class_breakpoint, 1);
7587 }
7588
7589 if (dbx_commands)
7590 {
7591 add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command,
7592 "Break in function/address or break at a line in the current file.",
7593 &stoplist, "stop ", 1, &cmdlist);
7594 add_cmd ("in", class_breakpoint, stopin_command,
7595 "Break in function or address.\n", &stoplist);
7596 add_cmd ("at", class_breakpoint, stopat_command,
7597 "Break at a line in the current file.\n", &stoplist);
7598 add_com ("status", class_info, breakpoints_info,
7599 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7600 The \"Type\" column indicates one of:\n\
7601 \tbreakpoint - normal breakpoint\n\
7602 \twatchpoint - watchpoint\n\
7603 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7604 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
7605 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
7606 address and file/line number respectively.\n\n",
7607 "Convenience variable \"$_\" and default examine address for \"x\"\n\
7608 are set to the address of the last breakpoint listed.\n\n\
7609 Convenience variable \"$bpnum\" contains the number of the last\n\
7610 breakpoint set.", NULL));
7611 }
7612
7613 add_info ("breakpoints", breakpoints_info,
7614 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7615 The \"Type\" column indicates one of:\n\
7616 \tbreakpoint - normal breakpoint\n\
7617 \twatchpoint - watchpoint\n\
7618 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7619 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
7620 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
7621 address and file/line number respectively.\n\n",
7622 "Convenience variable \"$_\" and default examine address for \"x\"\n\
7623 are set to the address of the last breakpoint listed.\n\n\
7624 Convenience variable \"$bpnum\" contains the number of the last\n\
7625 breakpoint set.", NULL));
7626
7627 if (xdb_commands)
7628 add_com ("lb", class_breakpoint, breakpoints_info,
7629 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7630 The \"Type\" column indicates one of:\n\
7631 \tbreakpoint - normal breakpoint\n\
7632 \twatchpoint - watchpoint\n\
7633 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7634 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
7635 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
7636 address and file/line number respectively.\n\n",
7637 "Convenience variable \"$_\" and default examine address for \"x\"\n\
7638 are set to the address of the last breakpoint listed.\n\n\
7639 Convenience variable \"$bpnum\" contains the number of the last\n\
7640 breakpoint set.", NULL));
7641
7642 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
7643 concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
7644 The \"Type\" column indicates one of:\n\
7645 \tbreakpoint - normal breakpoint\n\
7646 \twatchpoint - watchpoint\n\
7647 \tlongjmp - internal breakpoint used to step through longjmp()\n\
7648 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
7649 \tuntil - internal breakpoint used by the \"until\" command\n\
7650 \tfinish - internal breakpoint used by the \"finish\" command\n",
7651 "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7652 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
7653 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
7654 address and file/line number respectively.\n\n",
7655 "Convenience variable \"$_\" and default examine address for \"x\"\n\
7656 are set to the address of the last breakpoint listed.\n\n\
7657 Convenience variable \"$bpnum\" contains the number of the last\n\
7658 breakpoint set.", NULL),
7659 &maintenanceinfolist);
7660
7661 add_com ("catch", class_breakpoint, catch_command,
7662 "Set catchpoints to catch events.\n\
7663 Raised signals may be caught:\n\
7664 \tcatch signal - all signals\n\
7665 \tcatch signal <signame> - a particular signal\n\
7666 Raised exceptions may be caught:\n\
7667 \tcatch throw - all exceptions, when thrown\n\
7668 \tcatch throw <exceptname> - a particular exception, when thrown\n\
7669 \tcatch catch - all exceptions, when caught\n\
7670 \tcatch catch <exceptname> - a particular exception, when caught\n\
7671 Thread or process events may be caught:\n\
7672 \tcatch thread_start - any threads, just after creation\n\
7673 \tcatch thread_exit - any threads, just before expiration\n\
7674 \tcatch thread_join - any threads, just after joins\n\
7675 Process events may be caught:\n\
7676 \tcatch start - any processes, just after creation\n\
7677 \tcatch exit - any processes, just before expiration\n\
7678 \tcatch fork - calls to fork()\n\
7679 \tcatch vfork - calls to vfork()\n\
7680 \tcatch exec - calls to exec()\n\
7681 Dynamically-linked library events may be caught:\n\
7682 \tcatch load - loads of any library\n\
7683 \tcatch load <libname> - loads of a particular library\n\
7684 \tcatch unload - unloads of any library\n\
7685 \tcatch unload <libname> - unloads of a particular library\n\
7686 The act of your program's execution stopping may also be caught:\n\
7687 \tcatch stop\n\n\
7688 C++ exceptions may be caught:\n\
7689 \tcatch throw - all exceptions, when thrown\n\
7690 \tcatch catch - all exceptions, when caught\n\
7691 \n\
7692 Do \"help set follow-fork-mode\" for info on debugging your program\n\
7693 after a fork or vfork is caught.\n\n\
7694 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
7695
7696 add_com ("tcatch", class_breakpoint, tcatch_command,
7697 "Set temporary catchpoints to catch events.\n\
7698 Args like \"catch\" command.\n\
7699 Like \"catch\" except the catchpoint is only temporary,\n\
7700 so it will be deleted when hit. Equivalent to \"catch\" followed\n\
7701 by using \"enable delete\" on the catchpoint number.");
7702
7703 c = add_com ("watch", class_breakpoint, watch_command,
7704 "Set a watchpoint for an expression.\n\
7705 A watchpoint stops execution of your program whenever the value of\n\
7706 an expression changes.");
7707 set_cmd_completer (c, location_completer);
7708
7709 c = add_com ("rwatch", class_breakpoint, rwatch_command,
7710 "Set a read watchpoint for an expression.\n\
7711 A watchpoint stops execution of your program whenever the value of\n\
7712 an expression is read.");
7713 set_cmd_completer (c, location_completer);
7714
7715 c = add_com ("awatch", class_breakpoint, awatch_command,
7716 "Set a watchpoint for an expression.\n\
7717 A watchpoint stops execution of your program whenever the value of\n\
7718 an expression is either read or written.");
7719 set_cmd_completer (c, location_completer);
7720
7721 add_info ("watchpoints", breakpoints_info,
7722 "Synonym for ``info breakpoints''.");
7723
7724
7725 c = add_set_cmd ("can-use-hw-watchpoints", class_support, var_zinteger,
7726 (char *) &can_use_hw_watchpoints,
7727 "Set debugger's willingness to use watchpoint hardware.\n\
7728 If zero, gdb will not use hardware for new watchpoints, even if\n\
7729 such is available. (However, any hardware watchpoints that were\n\
7730 created before setting this to nonzero, will continue to use watchpoint\n\
7731 hardware.)",
7732 &setlist);
7733 add_show_from_set (c, &showlist);
7734
7735 can_use_hw_watchpoints = 1;
7736 }
This page took 0.212657 seconds and 4 git commands to generate.