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