]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/breakpoint.c
This commit was generated by cvs2svn to track changes on a CVS vendor
[thirdparty/binutils-gdb.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2 Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
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, Boston, MA 02111-1307, USA. */
20
21 #include "defs.h"
22 #include <ctype.h>
23 #include "symtab.h"
24 #include "frame.h"
25 #include "breakpoint.h"
26 #include "gdbtypes.h"
27 #include "expression.h"
28 #include "gdbcore.h"
29 #include "gdbcmd.h"
30 #include "value.h"
31 #include "command.h"
32 #include "inferior.h"
33 #include "gdbthread.h"
34 #include "target.h"
35 #include "language.h"
36 #include "gdb_string.h"
37 #include "demangle.h"
38 #include "annotate.h"
39 #include "symfile.h"
40 #include "objfiles.h"
41
42 /* local function prototypes */
43
44 static void
45 catch_command_1 PARAMS ((char *, int, int));
46
47 static void
48 enable_delete_command PARAMS ((char *, int));
49
50 static void
51 enable_delete_breakpoint PARAMS ((struct breakpoint *));
52
53 static void
54 enable_once_command PARAMS ((char *, int));
55
56 static void
57 enable_once_breakpoint PARAMS ((struct breakpoint *));
58
59 static void
60 disable_command PARAMS ((char *, int));
61
62 static void
63 enable_command PARAMS ((char *, int));
64
65 static void
66 map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
67
68 static void
69 ignore_command PARAMS ((char *, int));
70
71 static int
72 breakpoint_re_set_one PARAMS ((char *));
73
74 static void
75 delete_command PARAMS ((char *, int));
76
77 static void
78 clear_command PARAMS ((char *, int));
79
80 static void
81 catch_command PARAMS ((char *, int));
82
83 static struct symtabs_and_lines
84 get_catch_sals PARAMS ((int));
85
86 static void
87 watch_command PARAMS ((char *, int));
88
89 static int
90 can_use_hardware_watchpoint PARAMS ((struct value *));
91
92 static void
93 tbreak_command PARAMS ((char *, int));
94
95 static void
96 break_command_1 PARAMS ((char *, int, int));
97
98 static void
99 mention PARAMS ((struct breakpoint *));
100
101 static struct breakpoint *
102 set_raw_breakpoint PARAMS ((struct symtab_and_line));
103
104 static void
105 check_duplicates PARAMS ((CORE_ADDR, asection *));
106
107 static void
108 describe_other_breakpoints PARAMS ((CORE_ADDR, asection *));
109
110 static void
111 breakpoints_info PARAMS ((char *, int));
112
113 static void
114 breakpoint_1 PARAMS ((int, int));
115
116 static bpstat
117 bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
118
119 static int
120 breakpoint_cond_eval PARAMS ((char *));
121
122 static void
123 cleanup_executing_breakpoints PARAMS ((PTR));
124
125 static void
126 commands_command PARAMS ((char *, int));
127
128 static void
129 condition_command PARAMS ((char *, int));
130
131 static int
132 get_number PARAMS ((char **));
133
134 static void
135 set_breakpoint_count PARAMS ((int));
136
137 static int
138 remove_breakpoint PARAMS ((struct breakpoint *));
139
140 static int
141 print_it_normal PARAMS ((bpstat));
142
143 static int
144 watchpoint_check PARAMS ((char *));
145
146 static int
147 print_it_done PARAMS ((bpstat));
148
149 static int
150 print_it_noop PARAMS ((bpstat));
151
152 static void
153 maintenance_info_breakpoints PARAMS ((char *, int));
154
155 #ifdef GET_LONGJMP_TARGET
156 static void
157 create_longjmp_breakpoint PARAMS ((char *));
158 #endif
159
160 static int
161 hw_breakpoint_used_count PARAMS ((void));
162
163 static int
164 hw_watchpoint_used_count PARAMS ((enum bptype, int *));
165
166 static void
167 hbreak_command PARAMS ((char *, int));
168
169 static void
170 thbreak_command PARAMS ((char *, int));
171
172 static void
173 watch_command_1 PARAMS ((char *, int, int));
174
175 static void
176 rwatch_command PARAMS ((char *, int));
177
178 static void
179 awatch_command PARAMS ((char *, int));
180
181 static void
182 do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
183
184 extern int addressprint; /* Print machine addresses? */
185
186 #if defined (GET_LONGJMP_TARGET) || defined (SOLIB_ADD)
187 static int internal_breakpoint_number = -1;
188 #endif
189
190 /* Are we executing breakpoint commands? */
191 static int executing_breakpoint_commands;
192
193 /* Walk the following statement or block through all breakpoints.
194 ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
195 breakpoint. */
196
197 #define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
198
199 #define ALL_BREAKPOINTS_SAFE(b,tmp) \
200 for (b = breakpoint_chain; \
201 b? (tmp=b->next, 1): 0; \
202 b = tmp)
203
204 /* True if SHIFT_INST_REGS defined, false otherwise. */
205
206 int must_shift_inst_regs =
207 #if defined(SHIFT_INST_REGS)
208 1
209 #else
210 0
211 #endif
212 ;
213
214 /* True if breakpoint hit counts should be displayed in breakpoint info. */
215
216 int show_breakpoint_hit_counts = 1;
217
218 /* Chain of all breakpoints defined. */
219
220 struct breakpoint *breakpoint_chain;
221
222 /* Number of last breakpoint made. */
223
224 static int breakpoint_count;
225
226 /* Set breakpoint count to NUM. */
227
228 static void
229 set_breakpoint_count (num)
230 int num;
231 {
232 breakpoint_count = num;
233 set_internalvar (lookup_internalvar ("bpnum"),
234 value_from_longest (builtin_type_int, (LONGEST) num));
235 }
236
237 /* Used in run_command to zero the hit count when a new run starts. */
238
239 void
240 clear_breakpoint_hit_counts ()
241 {
242 struct breakpoint *b;
243
244 ALL_BREAKPOINTS (b)
245 b->hit_count = 0;
246 }
247
248 /* Default address, symtab and line to put a breakpoint at
249 for "break" command with no arg.
250 if default_breakpoint_valid is zero, the other three are
251 not valid, and "break" with no arg is an error.
252
253 This set by print_stack_frame, which calls set_default_breakpoint. */
254
255 int default_breakpoint_valid;
256 CORE_ADDR default_breakpoint_address;
257 struct symtab *default_breakpoint_symtab;
258 int default_breakpoint_line;
259 \f
260 /* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
261 Advance *PP after the string and any trailing whitespace.
262
263 Currently the string can either be a number or "$" followed by the name
264 of a convenience variable. Making it an expression wouldn't work well
265 for map_breakpoint_numbers (e.g. "4 + 5 + 6"). */
266 static int
267 get_number (pp)
268 char **pp;
269 {
270 int retval;
271 char *p = *pp;
272
273 if (p == NULL)
274 /* Empty line means refer to the last breakpoint. */
275 return breakpoint_count;
276 else if (*p == '$')
277 {
278 /* Make a copy of the name, so we can null-terminate it
279 to pass to lookup_internalvar(). */
280 char *varname;
281 char *start = ++p;
282 value_ptr val;
283
284 while (isalnum (*p) || *p == '_')
285 p++;
286 varname = (char *) alloca (p - start + 1);
287 strncpy (varname, start, p - start);
288 varname[p - start] = '\0';
289 val = value_of_internalvar (lookup_internalvar (varname));
290 if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
291 error (
292 "Convenience variables used to specify breakpoints must have integer values."
293 );
294 retval = (int) value_as_long (val);
295 }
296 else
297 {
298 if (*p == '-')
299 ++p;
300 while (*p >= '0' && *p <= '9')
301 ++p;
302 if (p == *pp)
303 /* There is no number here. (e.g. "cond a == b"). */
304 error_no_arg ("breakpoint number");
305 retval = atoi (*pp);
306 }
307 if (!(isspace (*p) || *p == '\0'))
308 error ("breakpoint number expected");
309 while (isspace (*p))
310 p++;
311 *pp = p;
312 return retval;
313 }
314 \f
315 /* condition N EXP -- set break condition of breakpoint N to EXP. */
316
317 static void
318 condition_command (arg, from_tty)
319 char *arg;
320 int from_tty;
321 {
322 register struct breakpoint *b;
323 char *p;
324 register int bnum;
325
326 if (arg == 0)
327 error_no_arg ("breakpoint number");
328
329 p = arg;
330 bnum = get_number (&p);
331
332 ALL_BREAKPOINTS (b)
333 if (b->number == bnum)
334 {
335 if (b->cond)
336 {
337 free ((PTR)b->cond);
338 b->cond = 0;
339 }
340 if (b->cond_string != NULL)
341 free ((PTR)b->cond_string);
342
343 if (*p == 0)
344 {
345 b->cond = 0;
346 b->cond_string = NULL;
347 if (from_tty)
348 printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
349 }
350 else
351 {
352 arg = p;
353 /* I don't know if it matters whether this is the string the user
354 typed in or the decompiled expression. */
355 b->cond_string = savestring (arg, strlen (arg));
356 b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
357 if (*arg)
358 error ("Junk at end of expression");
359 }
360 breakpoints_changed ();
361 return;
362 }
363
364 error ("No breakpoint number %d.", bnum);
365 }
366
367 /* ARGSUSED */
368 static void
369 commands_command (arg, from_tty)
370 char *arg;
371 int from_tty;
372 {
373 register struct breakpoint *b;
374 char *p;
375 register int bnum;
376 struct command_line *l;
377
378 /* If we allowed this, we would have problems with when to
379 free the storage, if we change the commands currently
380 being read from. */
381
382 if (executing_breakpoint_commands)
383 error ("Can't use the \"commands\" command among a breakpoint's commands.");
384
385 p = arg;
386 bnum = get_number (&p);
387 if (p && *p)
388 error ("Unexpected extra arguments following breakpoint number.");
389
390 ALL_BREAKPOINTS (b)
391 if (b->number == bnum)
392 {
393 char tmpbuf[128];
394 sprintf (tmpbuf, "Type commands for when breakpoint %d is hit, one per line.", bnum);
395 l = read_command_lines (tmpbuf, from_tty);
396 free_command_lines (&b->commands);
397 b->commands = l;
398 breakpoints_changed ();
399 return;
400 }
401 error ("No breakpoint number %d.", bnum);
402 }
403 \f
404 extern int memory_breakpoint_size; /* from mem-break.c */
405
406 /* Like target_read_memory() but if breakpoints are inserted, return
407 the shadow contents instead of the breakpoints themselves.
408
409 Read "memory data" from whatever target or inferior we have.
410 Returns zero if successful, errno value if not. EIO is used
411 for address out of bounds. If breakpoints are inserted, returns
412 shadow contents, not the breakpoints themselves. From breakpoint.c. */
413
414 int
415 read_memory_nobpt (memaddr, myaddr, len)
416 CORE_ADDR memaddr;
417 char *myaddr;
418 unsigned len;
419 {
420 int status;
421 struct breakpoint *b;
422
423 if (memory_breakpoint_size < 0)
424 /* No breakpoints on this machine. FIXME: This should be
425 dependent on the debugging target. Probably want
426 target_insert_breakpoint to return a size, saying how many
427 bytes of the shadow contents are used, or perhaps have
428 something like target_xfer_shadow. */
429 return target_read_memory (memaddr, myaddr, len);
430
431 ALL_BREAKPOINTS (b)
432 {
433 if (b->type == bp_watchpoint
434 || b->type == bp_hardware_watchpoint
435 || b->type == bp_read_watchpoint
436 || b->type == bp_access_watchpoint
437 || !b->inserted)
438 continue;
439 else if (b->address + memory_breakpoint_size <= memaddr)
440 /* The breakpoint is entirely before the chunk of memory
441 we are reading. */
442 continue;
443 else if (b->address >= memaddr + len)
444 /* The breakpoint is entirely after the chunk of memory we
445 are reading. */
446 continue;
447 else
448 {
449 /* Copy the breakpoint from the shadow contents, and recurse
450 for the things before and after. */
451
452 /* Addresses and length of the part of the breakpoint that
453 we need to copy. */
454 CORE_ADDR membpt = b->address;
455 unsigned int bptlen = memory_breakpoint_size;
456 /* Offset within shadow_contents. */
457 int bptoffset = 0;
458
459 if (membpt < memaddr)
460 {
461 /* Only copy the second part of the breakpoint. */
462 bptlen -= memaddr - membpt;
463 bptoffset = memaddr - membpt;
464 membpt = memaddr;
465 }
466
467 if (membpt + bptlen > memaddr + len)
468 {
469 /* Only copy the first part of the breakpoint. */
470 bptlen -= (membpt + bptlen) - (memaddr + len);
471 }
472
473 memcpy (myaddr + membpt - memaddr,
474 b->shadow_contents + bptoffset, bptlen);
475
476 if (membpt > memaddr)
477 {
478 /* Copy the section of memory before the breakpoint. */
479 status = read_memory_nobpt (memaddr, myaddr, membpt - memaddr);
480 if (status != 0)
481 return status;
482 }
483
484 if (membpt + bptlen < memaddr + len)
485 {
486 /* Copy the section of memory after the breakpoint. */
487 status = read_memory_nobpt
488 (membpt + bptlen,
489 myaddr + membpt + bptlen - memaddr,
490 memaddr + len - (membpt + bptlen));
491 if (status != 0)
492 return status;
493 }
494 return 0;
495 }
496 }
497 /* Nothing overlaps. Just call read_memory_noerr. */
498 return target_read_memory (memaddr, myaddr, len);
499 }
500 \f
501 /* insert_breakpoints is used when starting or continuing the program.
502 remove_breakpoints is used when the program stops.
503 Both return zero if successful,
504 or an `errno' value if could not write the inferior. */
505
506 int
507 insert_breakpoints ()
508 {
509 register struct breakpoint *b, *temp;
510 int val = 0;
511 int disabled_breaks = 0;
512
513 ALL_BREAKPOINTS_SAFE (b, temp)
514 if (b->type != bp_watchpoint
515 && b->type != bp_hardware_watchpoint
516 && b->type != bp_read_watchpoint
517 && b->type != bp_access_watchpoint
518 && b->enable != disabled
519 && b->enable != shlib_disabled
520 && ! b->inserted
521 && ! b->duplicate)
522 {
523 if (b->type == bp_hardware_breakpoint)
524 val = target_insert_hw_breakpoint(b->address, b->shadow_contents);
525 else
526 {
527 /* Check to see if breakpoint is in an overlay section;
528 if so, we should set the breakpoint at the LMA address.
529 Only if the section is currently mapped should we ALSO
530 set a break at the VMA address. */
531 if (overlay_debugging && b->section &&
532 section_is_overlay (b->section))
533 {
534 CORE_ADDR addr;
535
536 addr = overlay_unmapped_address (b->address, b->section);
537 val = target_insert_breakpoint (addr, b->shadow_contents);
538 /* This would be the time to check val, to see if the
539 breakpoint write to the load address succeeded.
540 However, this might be an ordinary occurrance, eg. if
541 the unmapped overlay is in ROM. */
542 val = 0; /* in case unmapped address failed */
543 if (section_is_mapped (b->section))
544 val = target_insert_breakpoint (b->address,
545 b->shadow_contents);
546 }
547 else /* ordinary (non-overlay) address */
548 val = target_insert_breakpoint(b->address, b->shadow_contents);
549 }
550 if (val)
551 {
552 /* Can't set the breakpoint. */
553 #if defined (DISABLE_UNSETTABLE_BREAK)
554 if (DISABLE_UNSETTABLE_BREAK (b->address))
555 {
556 val = 0;
557 b->enable = shlib_disabled;
558 if (!disabled_breaks)
559 {
560 target_terminal_ours_for_output ();
561 fprintf_unfiltered (gdb_stderr,
562 "Cannot insert breakpoint %d:\n", b->number);
563 printf_filtered ("Temporarily disabling shared library breakpoints:\n");
564 }
565 disabled_breaks = 1;
566 printf_filtered ("%d ", b->number);
567 }
568 else
569 #endif
570 {
571 target_terminal_ours_for_output ();
572 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
573 #ifdef ONE_PROCESS_WRITETEXT
574 fprintf_unfiltered (gdb_stderr,
575 "The same program may be running in another process.\n");
576 #endif
577 memory_error (val, b->address); /* which bombs us out */
578 }
579 }
580 else
581 b->inserted = 1;
582 }
583 else if ((b->type == bp_hardware_watchpoint ||
584 b->type == bp_read_watchpoint ||
585 b->type == bp_access_watchpoint)
586 && b->enable == enabled
587 && ! b->inserted
588 && ! b->duplicate)
589 {
590 struct frame_info *saved_frame;
591 int saved_level, within_current_scope;
592 value_ptr mark = value_mark ();
593 value_ptr v;
594
595 /* Save the current frame and level so we can restore it after
596 evaluating the watchpoint expression on its own frame. */
597 saved_frame = selected_frame;
598 saved_level = selected_frame_level;
599
600 /* Determine if the watchpoint is within scope. */
601 if (b->exp_valid_block == NULL)
602 within_current_scope = 1;
603 else
604 {
605 struct frame_info *fi;
606
607 /* There might be no current frame at this moment if we are
608 resuming from a step over a breakpoint.
609 Set up current frame before trying to find the watchpoint
610 frame. */
611 get_current_frame ();
612 fi = find_frame_addr_in_frame_chain (b->watchpoint_frame);
613 within_current_scope = (fi != NULL);
614 if (within_current_scope)
615 select_frame (fi, -1);
616 }
617
618 if (within_current_scope)
619 {
620 /* Evaluate the expression and cut the chain of values
621 produced off from the value chain. */
622 v = evaluate_expression (b->exp);
623 value_release_to_mark (mark);
624
625 b->val_chain = v;
626 b->inserted = 1;
627
628 /* Look at each value on the value chain. */
629 for ( ; v; v=v->next)
630 {
631 /* If it's a memory location, then we must watch it. */
632 if (v->lval == lval_memory)
633 {
634 int addr, len, type;
635
636 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
637 len = TYPE_LENGTH (VALUE_TYPE (v));
638 type = 0;
639 if (b->type == bp_read_watchpoint)
640 type = 1;
641 else if (b->type == bp_access_watchpoint)
642 type = 2;
643
644 val = target_insert_watchpoint (addr, len, type);
645 if (val == -1)
646 {
647 b->inserted = 0;
648 break;
649 }
650 val = 0;
651 }
652 }
653 /* Failure to insert a watchpoint on any memory value in the
654 value chain brings us here. */
655 if (!b->inserted)
656 warning ("Hardware watchpoint %d: Could not insert watchpoint\n",
657 b->number);
658 }
659 else
660 {
661 printf_filtered ("\
662 Hardware watchpoint %d deleted because the program has left the block in\n\
663 which its expression is valid.\n", b->number);
664 if (b->related_breakpoint)
665 b->related_breakpoint->disposition = del_at_next_stop;
666 b->disposition = del_at_next_stop;
667 }
668
669 /* Restore the frame and level. */
670 select_frame (saved_frame, saved_level);
671 }
672 if (disabled_breaks)
673 printf_filtered ("\n");
674 return val;
675 }
676
677
678 int
679 remove_breakpoints ()
680 {
681 register struct breakpoint *b;
682 int val;
683
684 ALL_BREAKPOINTS (b)
685 {
686 if (b->inserted)
687 {
688 val = remove_breakpoint (b);
689 if (val != 0)
690 return val;
691 }
692 }
693 return 0;
694 }
695
696
697 static int
698 remove_breakpoint (b)
699 struct breakpoint *b;
700 {
701 int val;
702
703 if (b->type != bp_watchpoint
704 && b->type != bp_hardware_watchpoint
705 && b->type != bp_read_watchpoint
706 && b->type != bp_access_watchpoint)
707 {
708 if (b->type == bp_hardware_breakpoint)
709 val = target_remove_hw_breakpoint(b->address, b->shadow_contents);
710 else
711 {
712 /* Check to see if breakpoint is in an overlay section;
713 if so, we should remove the breakpoint at the LMA address.
714 If that is not equal to the raw address, then we should
715 presumable remove the breakpoint there as well. */
716 if (overlay_debugging && b->section &&
717 section_is_overlay (b->section))
718 {
719 CORE_ADDR addr;
720
721 addr = overlay_unmapped_address (b->address, b->section);
722 val = target_remove_breakpoint (addr, b->shadow_contents);
723 /* This would be the time to check val, to see if the
724 shadow breakpoint write to the load address succeeded.
725 However, this might be an ordinary occurrance, eg. if
726 the unmapped overlay is in ROM. */
727 val = 0; /* in case unmapped address failed */
728 if (section_is_mapped (b->section))
729 val = target_remove_breakpoint (b->address,
730 b->shadow_contents);
731 }
732 else /* ordinary (non-overlay) address */
733 val = target_remove_breakpoint(b->address, b->shadow_contents);
734 }
735 if (val)
736 return val;
737 b->inserted = 0;
738 }
739 else if ((b->type == bp_hardware_watchpoint ||
740 b->type == bp_read_watchpoint ||
741 b->type == bp_access_watchpoint)
742 && b->enable == enabled
743 && ! b->duplicate)
744 {
745 value_ptr v, n;
746
747 b->inserted = 0;
748 /* Walk down the saved value chain. */
749 for (v = b->val_chain; v; v = v->next)
750 {
751 /* For each memory reference remove the watchpoint
752 at that address. */
753 if (v->lval == lval_memory)
754 {
755 int addr, len, type;
756
757 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
758 len = TYPE_LENGTH (VALUE_TYPE (v));
759 type = 0;
760 if (b->type == bp_read_watchpoint)
761 type = 1;
762 else if (b->type == bp_access_watchpoint)
763 type = 2;
764
765 val = target_remove_watchpoint (addr, len, type);
766 if (val == -1)
767 b->inserted = 1;
768 val = 0;
769 }
770 }
771 /* Failure to remove any of the hardware watchpoints comes here. */
772 if (b->inserted)
773 warning ("Hardware watchpoint %d: Could not remove watchpoint\n",
774 b->number);
775
776 /* Free the saved value chain. We will construct a new one
777 the next time the watchpoint is inserted. */
778 for (v = b->val_chain; v; v = n)
779 {
780 n = v->next;
781 value_free (v);
782 }
783 b->val_chain = NULL;
784 }
785 return 0;
786 }
787
788 /* Clear the "inserted" flag in all breakpoints. */
789
790 void
791 mark_breakpoints_out ()
792 {
793 register struct breakpoint *b;
794
795 ALL_BREAKPOINTS (b)
796 b->inserted = 0;
797 }
798
799 /* Clear the "inserted" flag in all breakpoints and delete any breakpoints
800 which should go away between runs of the program. */
801
802 void
803 breakpoint_init_inferior ()
804 {
805 register struct breakpoint *b, *temp;
806
807 ALL_BREAKPOINTS_SAFE (b, temp)
808 {
809 b->inserted = 0;
810
811 switch (b->type)
812 {
813 case bp_call_dummy:
814 case bp_watchpoint_scope:
815
816 /* If the call dummy breakpoint is at the entry point it will
817 cause problems when the inferior is rerun, so we better
818 get rid of it.
819
820 Also get rid of scope breakpoints. */
821 delete_breakpoint (b);
822 break;
823
824 case bp_watchpoint:
825 case bp_hardware_watchpoint:
826 case bp_read_watchpoint:
827 case bp_access_watchpoint:
828
829 /* Likewise for watchpoints on local expressions. */
830 if (b->exp_valid_block != NULL)
831 delete_breakpoint (b);
832 break;
833
834 default:
835 break;
836 }
837 }
838 }
839
840 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
841 When continuing from a location with a breakpoint,
842 we actually single step once before calling insert_breakpoints. */
843
844 int
845 breakpoint_here_p (pc)
846 CORE_ADDR pc;
847 {
848 register struct breakpoint *b;
849
850 ALL_BREAKPOINTS (b)
851 if (b->enable == enabled
852 && b->address == pc) /* bp is enabled and matches pc */
853 if (overlay_debugging &&
854 section_is_overlay (b->section) &&
855 !section_is_mapped (b->section))
856 continue; /* unmapped overlay -- can't be a match */
857 else
858 return 1;
859
860 return 0;
861 }
862
863 /* breakpoint_inserted_here_p (PC) is just like breakpoint_here_p(), but it
864 only returns true if there is actually a breakpoint inserted at PC. */
865
866 int
867 breakpoint_inserted_here_p (pc)
868 CORE_ADDR pc;
869 {
870 register struct breakpoint *b;
871
872 ALL_BREAKPOINTS (b)
873 if (b->inserted
874 && b->address == pc) /* bp is inserted and matches pc */
875 if (overlay_debugging &&
876 section_is_overlay (b->section) &&
877 !section_is_mapped (b->section))
878 continue; /* unmapped overlay -- can't be a match */
879 else
880 return 1;
881
882 return 0;
883 }
884
885 /* Return nonzero if FRAME is a dummy frame. We can't use PC_IN_CALL_DUMMY
886 because figuring out the saved SP would take too much time, at least using
887 get_saved_register on the 68k. This means that for this function to
888 work right a port must use the bp_call_dummy breakpoint. */
889
890 int
891 frame_in_dummy (frame)
892 struct frame_info *frame;
893 {
894 #ifdef CALL_DUMMY
895 #ifdef USE_GENERIC_DUMMY_FRAMES
896 return generic_pc_in_call_dummy (frame->pc, frame->frame);
897 #else
898 struct breakpoint *b;
899
900 ALL_BREAKPOINTS (b)
901 {
902 static ULONGEST dummy[] = CALL_DUMMY;
903
904 if (b->type == bp_call_dummy
905 && b->frame == frame->frame
906
907 /* We need to check the PC as well as the frame on the sparc,
908 for signals.exp in the testsuite. */
909 && (frame->pc
910 >= (b->address
911 - sizeof (dummy) / sizeof (LONGEST) * REGISTER_SIZE))
912 && frame->pc <= b->address)
913 return 1;
914 }
915 #endif /* GENERIC_DUMMY_FRAMES */
916 #endif /* CALL_DUMMY */
917 return 0;
918 }
919
920 /* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
921 is valid for process/thread PID. */
922
923 int
924 breakpoint_thread_match (pc, pid)
925 CORE_ADDR pc;
926 int pid;
927 {
928 struct breakpoint *b;
929 int thread;
930
931 thread = pid_to_thread_id (pid);
932
933 ALL_BREAKPOINTS (b)
934 if (b->enable != disabled
935 && b->enable != shlib_disabled
936 && b->address == pc
937 && (b->thread == -1 || b->thread == thread))
938 if (overlay_debugging &&
939 section_is_overlay (b->section) &&
940 !section_is_mapped (b->section))
941 continue; /* unmapped overlay -- can't be a match */
942 else
943 return 1;
944
945 return 0;
946 }
947
948 \f
949 /* bpstat stuff. External routines' interfaces are documented
950 in breakpoint.h. */
951
952 /* Clear a bpstat so that it says we are not at any breakpoint.
953 Also free any storage that is part of a bpstat. */
954
955 void
956 bpstat_clear (bsp)
957 bpstat *bsp;
958 {
959 bpstat p;
960 bpstat q;
961
962 if (bsp == 0)
963 return;
964 p = *bsp;
965 while (p != NULL)
966 {
967 q = p->next;
968 if (p->old_val != NULL)
969 value_free (p->old_val);
970 free ((PTR)p);
971 p = q;
972 }
973 *bsp = NULL;
974 }
975
976 /* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
977 is part of the bpstat is copied as well. */
978
979 bpstat
980 bpstat_copy (bs)
981 bpstat bs;
982 {
983 bpstat p = NULL;
984 bpstat tmp;
985 bpstat retval = NULL;
986
987 if (bs == NULL)
988 return bs;
989
990 for (; bs != NULL; bs = bs->next)
991 {
992 tmp = (bpstat) xmalloc (sizeof (*tmp));
993 memcpy (tmp, bs, sizeof (*tmp));
994 if (p == NULL)
995 /* This is the first thing in the chain. */
996 retval = tmp;
997 else
998 p->next = tmp;
999 p = tmp;
1000 }
1001 p->next = NULL;
1002 return retval;
1003 }
1004
1005 /* Find the bpstat associated with this breakpoint */
1006
1007 bpstat
1008 bpstat_find_breakpoint(bsp, breakpoint)
1009 bpstat bsp;
1010 struct breakpoint *breakpoint;
1011 {
1012 if (bsp == NULL) return NULL;
1013
1014 for (;bsp != NULL; bsp = bsp->next) {
1015 if (bsp->breakpoint_at == breakpoint) return bsp;
1016 }
1017 return NULL;
1018 }
1019
1020 /* Return the breakpoint number of the first breakpoint we are stopped
1021 at. *BSP upon return is a bpstat which points to the remaining
1022 breakpoints stopped at (but which is not guaranteed to be good for
1023 anything but further calls to bpstat_num).
1024 Return 0 if passed a bpstat which does not indicate any breakpoints. */
1025
1026 int
1027 bpstat_num (bsp)
1028 bpstat *bsp;
1029 {
1030 struct breakpoint *b;
1031
1032 if ((*bsp) == NULL)
1033 return 0; /* No more breakpoint values */
1034 else
1035 {
1036 b = (*bsp)->breakpoint_at;
1037 *bsp = (*bsp)->next;
1038 if (b == NULL)
1039 return -1; /* breakpoint that's been deleted since */
1040 else
1041 return b->number; /* We have its number */
1042 }
1043 }
1044
1045 /* Modify BS so that the actions will not be performed. */
1046
1047 void
1048 bpstat_clear_actions (bs)
1049 bpstat bs;
1050 {
1051 for (; bs != NULL; bs = bs->next)
1052 {
1053 bs->commands = NULL;
1054 if (bs->old_val != NULL)
1055 {
1056 value_free (bs->old_val);
1057 bs->old_val = NULL;
1058 }
1059 }
1060 }
1061
1062 /* Stub for cleaning up our state if we error-out of a breakpoint command */
1063 /* ARGSUSED */
1064 static void
1065 cleanup_executing_breakpoints (ignore)
1066 PTR ignore;
1067 {
1068 executing_breakpoint_commands = 0;
1069 }
1070
1071 /* Execute all the commands associated with all the breakpoints at this
1072 location. Any of these commands could cause the process to proceed
1073 beyond this point, etc. We look out for such changes by checking
1074 the global "breakpoint_proceeded" after each command. */
1075
1076 void
1077 bpstat_do_actions (bsp)
1078 bpstat *bsp;
1079 {
1080 bpstat bs;
1081 struct cleanup *old_chain;
1082 struct command_line *cmd;
1083
1084 /* Avoid endless recursion if a `source' command is contained
1085 in bs->commands. */
1086 if (executing_breakpoint_commands)
1087 return;
1088
1089 executing_breakpoint_commands = 1;
1090 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
1091
1092 top:
1093 bs = *bsp;
1094
1095 breakpoint_proceeded = 0;
1096 for (; bs != NULL; bs = bs->next)
1097 {
1098 cmd = bs->commands;
1099 while (cmd != NULL)
1100 {
1101 execute_control_command (cmd);
1102 cmd = cmd->next;
1103 }
1104 if (breakpoint_proceeded)
1105 /* The inferior is proceeded by the command; bomb out now.
1106 The bpstat chain has been blown away by wait_for_inferior.
1107 But since execution has stopped again, there is a new bpstat
1108 to look at, so start over. */
1109 goto top;
1110 else
1111 bs->commands = NULL;
1112 }
1113
1114 executing_breakpoint_commands = 0;
1115 discard_cleanups (old_chain);
1116 }
1117
1118 /* This is the normal print_it function for a bpstat. In the future,
1119 much of this logic could (should?) be moved to bpstat_stop_status,
1120 by having it set different print_it functions. */
1121
1122 static int
1123 print_it_normal (bs)
1124 bpstat bs;
1125 {
1126 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
1127 which has since been deleted. */
1128 if (bs->breakpoint_at == NULL
1129 || (bs->breakpoint_at->type != bp_breakpoint
1130 && bs->breakpoint_at->type != bp_hardware_breakpoint
1131 && bs->breakpoint_at->type != bp_watchpoint
1132 && bs->breakpoint_at->type != bp_read_watchpoint
1133 && bs->breakpoint_at->type != bp_access_watchpoint
1134 && bs->breakpoint_at->type != bp_hardware_watchpoint))
1135 return 0;
1136
1137 if (bs->breakpoint_at->type == bp_breakpoint ||
1138 bs->breakpoint_at->type == bp_hardware_breakpoint)
1139 {
1140 /* I think the user probably only wants to see one breakpoint
1141 number, not all of them. */
1142 annotate_breakpoint (bs->breakpoint_at->number);
1143 printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
1144 return 0;
1145 }
1146 else if ((bs->old_val != NULL) &&
1147 (bs->breakpoint_at->type == bp_watchpoint ||
1148 bs->breakpoint_at->type == bp_access_watchpoint ||
1149 bs->breakpoint_at->type == bp_hardware_watchpoint))
1150 {
1151 annotate_watchpoint (bs->breakpoint_at->number);
1152 mention (bs->breakpoint_at);
1153 printf_filtered ("\nOld value = ");
1154 value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
1155 printf_filtered ("\nNew value = ");
1156 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1157 Val_pretty_default);
1158 printf_filtered ("\n");
1159 value_free (bs->old_val);
1160 bs->old_val = NULL;
1161 /* More than one watchpoint may have been triggered. */
1162 return -1;
1163 }
1164 else if (bs->breakpoint_at->type == bp_access_watchpoint ||
1165 bs->breakpoint_at->type == bp_read_watchpoint)
1166 {
1167 mention (bs->breakpoint_at);
1168 printf_filtered ("\nValue = ");
1169 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1170 Val_pretty_default);
1171 printf_filtered ("\n");
1172 return -1;
1173 }
1174 /* We can't deal with it. Maybe another member of the bpstat chain can. */
1175 return -1;
1176 }
1177
1178 /* Print a message indicating what happened. Returns nonzero to
1179 say that only the source line should be printed after this (zero
1180 return means print the frame as well as the source line). */
1181 /* Currently we always return zero. */
1182 int
1183 bpstat_print (bs)
1184 bpstat bs;
1185 {
1186 int val;
1187
1188 if (bs == NULL)
1189 return 0;
1190
1191 val = (*bs->print_it) (bs);
1192 if (val >= 0)
1193 return val;
1194
1195 /* Maybe another breakpoint in the chain caused us to stop.
1196 (Currently all watchpoints go on the bpstat whether hit or
1197 not. That probably could (should) be changed, provided care is taken
1198 with respect to bpstat_explains_signal). */
1199 if (bs->next)
1200 return bpstat_print (bs->next);
1201
1202 /* We reached the end of the chain without printing anything. */
1203 return 0;
1204 }
1205
1206 /* Evaluate the expression EXP and return 1 if value is zero.
1207 This is used inside a catch_errors to evaluate the breakpoint condition.
1208 The argument is a "struct expression *" that has been cast to char * to
1209 make it pass through catch_errors. */
1210
1211 static int
1212 breakpoint_cond_eval (exp)
1213 char *exp;
1214 {
1215 value_ptr mark = value_mark ();
1216 int i = !value_true (evaluate_expression ((struct expression *)exp));
1217 value_free_to_mark (mark);
1218 return i;
1219 }
1220
1221 /* Allocate a new bpstat and chain it to the current one. */
1222
1223 static bpstat
1224 bpstat_alloc (b, cbs)
1225 register struct breakpoint *b;
1226 bpstat cbs; /* Current "bs" value */
1227 {
1228 bpstat bs;
1229
1230 bs = (bpstat) xmalloc (sizeof (*bs));
1231 cbs->next = bs;
1232 bs->breakpoint_at = b;
1233 /* If the condition is false, etc., don't do the commands. */
1234 bs->commands = NULL;
1235 bs->old_val = NULL;
1236 bs->print_it = print_it_normal;
1237 return bs;
1238 }
1239 \f
1240 /* Possible return values for watchpoint_check (this can't be an enum
1241 because of check_errors). */
1242 /* The watchpoint has been deleted. */
1243 #define WP_DELETED 1
1244 /* The value has changed. */
1245 #define WP_VALUE_CHANGED 2
1246 /* The value has not changed. */
1247 #define WP_VALUE_NOT_CHANGED 3
1248
1249 #define BP_TEMPFLAG 1
1250 #define BP_HARDWAREFLAG 2
1251
1252 /* Check watchpoint condition. */
1253
1254 static int
1255 watchpoint_check (p)
1256 char *p;
1257 {
1258 bpstat bs = (bpstat) p;
1259 struct breakpoint *b;
1260 struct frame_info *fr;
1261 int within_current_scope;
1262
1263 b = bs->breakpoint_at;
1264
1265 if (b->exp_valid_block == NULL)
1266 within_current_scope = 1;
1267 else
1268 {
1269 /* There is no current frame at this moment. If we're going to have
1270 any chance of handling watchpoints on local variables, we'll need
1271 the frame chain (so we can determine if we're in scope). */
1272 reinit_frame_cache();
1273 fr = find_frame_addr_in_frame_chain (b->watchpoint_frame);
1274 within_current_scope = (fr != NULL);
1275 if (within_current_scope)
1276 /* If we end up stopping, the current frame will get selected
1277 in normal_stop. So this call to select_frame won't affect
1278 the user. */
1279 select_frame (fr, -1);
1280 }
1281
1282 if (within_current_scope)
1283 {
1284 /* We use value_{,free_to_}mark because it could be a
1285 *long* time before we return to the command level and
1286 call free_all_values. We can't call free_all_values because
1287 we might be in the middle of evaluating a function call. */
1288
1289 value_ptr mark = value_mark ();
1290 value_ptr new_val = evaluate_expression (bs->breakpoint_at->exp);
1291 if (!value_equal (b->val, new_val))
1292 {
1293 release_value (new_val);
1294 value_free_to_mark (mark);
1295 bs->old_val = b->val;
1296 b->val = new_val;
1297 /* We will stop here */
1298 return WP_VALUE_CHANGED;
1299 }
1300 else
1301 {
1302 /* Nothing changed, don't do anything. */
1303 value_free_to_mark (mark);
1304 /* We won't stop here */
1305 return WP_VALUE_NOT_CHANGED;
1306 }
1307 }
1308 else
1309 {
1310 /* This seems like the only logical thing to do because
1311 if we temporarily ignored the watchpoint, then when
1312 we reenter the block in which it is valid it contains
1313 garbage (in the case of a function, it may have two
1314 garbage values, one before and one after the prologue).
1315 So we can't even detect the first assignment to it and
1316 watch after that (since the garbage may or may not equal
1317 the first value assigned). */
1318 printf_filtered ("\
1319 Watchpoint %d deleted because the program has left the block in\n\
1320 which its expression is valid.\n", bs->breakpoint_at->number);
1321 if (b->related_breakpoint)
1322 b->related_breakpoint->disposition = del_at_next_stop;
1323 b->disposition = del_at_next_stop;
1324
1325 return WP_DELETED;
1326 }
1327 }
1328
1329 /* This is used when everything which needs to be printed has
1330 already been printed. But we still want to print the frame. */
1331 static int
1332 print_it_done (bs)
1333 bpstat bs;
1334 {
1335 return 0;
1336 }
1337
1338 /* This is used when nothing should be printed for this bpstat entry. */
1339
1340 static int
1341 print_it_noop (bs)
1342 bpstat bs;
1343 {
1344 return -1;
1345 }
1346
1347 /* Get a bpstat associated with having just stopped at address *PC
1348 and frame address CORE_ADDRESS. Update *PC to point at the
1349 breakpoint (if we hit a breakpoint). NOT_A_BREAKPOINT is nonzero
1350 if this is known to not be a real breakpoint (it could still be a
1351 watchpoint, though). */
1352
1353 /* Determine whether we stopped at a breakpoint, etc, or whether we
1354 don't understand this stop. Result is a chain of bpstat's such that:
1355
1356 if we don't understand the stop, the result is a null pointer.
1357
1358 if we understand why we stopped, the result is not null.
1359
1360 Each element of the chain refers to a particular breakpoint or
1361 watchpoint at which we have stopped. (We may have stopped for
1362 several reasons concurrently.)
1363
1364 Each element of the chain has valid next, breakpoint_at,
1365 commands, FIXME??? fields.
1366
1367 */
1368
1369 bpstat
1370 bpstat_stop_status (pc, not_a_breakpoint)
1371 CORE_ADDR *pc;
1372 int not_a_breakpoint;
1373 {
1374 register struct breakpoint *b, *temp;
1375 CORE_ADDR bp_addr;
1376 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
1377 int real_breakpoint = 0;
1378 /* Root of the chain of bpstat's */
1379 struct bpstats root_bs[1];
1380 /* Pointer to the last thing in the chain currently. */
1381 bpstat bs = root_bs;
1382 static char message1[] =
1383 "Error evaluating expression for watchpoint %d\n";
1384 char message[sizeof (message1) + 30 /* slop */];
1385
1386 /* Get the address where the breakpoint would have been. */
1387 bp_addr = *pc - DECR_PC_AFTER_BREAK;
1388
1389 ALL_BREAKPOINTS_SAFE (b, temp)
1390 {
1391 if (b->enable == disabled
1392 || b->enable == shlib_disabled)
1393 continue;
1394
1395 if (b->type != bp_watchpoint
1396 && b->type != bp_hardware_watchpoint
1397 && b->type != bp_read_watchpoint
1398 && b->type != bp_access_watchpoint
1399 && b->type != bp_hardware_breakpoint) /* a non-watchpoint bp */
1400 if (b->address != bp_addr || /* address doesn't match or */
1401 (overlay_debugging && /* overlay doesn't match */
1402 section_is_overlay (b->section) &&
1403 !section_is_mapped (b->section)))
1404 continue;
1405
1406 if (b->type == bp_hardware_breakpoint
1407 && b->address != (bp_addr - DECR_PC_AFTER_HW_BREAK))
1408 continue;
1409
1410 if (b->type != bp_watchpoint
1411 && b->type != bp_hardware_watchpoint
1412 && b->type != bp_read_watchpoint
1413 && b->type != bp_access_watchpoint
1414 && not_a_breakpoint)
1415 continue;
1416
1417 /* Come here if it's a watchpoint, or if the break address matches */
1418
1419 ++(b->hit_count);
1420
1421 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
1422
1423 bs->stop = 1;
1424 bs->print = 1;
1425
1426 sprintf (message, message1, b->number);
1427 if (b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
1428 {
1429 switch (catch_errors (watchpoint_check, (char *) bs, message,
1430 RETURN_MASK_ALL))
1431 {
1432 case WP_DELETED:
1433 /* We've already printed what needs to be printed. */
1434 bs->print_it = print_it_done;
1435 /* Stop. */
1436 break;
1437 case WP_VALUE_CHANGED:
1438 /* Stop. */
1439 break;
1440 case WP_VALUE_NOT_CHANGED:
1441 /* Don't stop. */
1442 bs->print_it = print_it_noop;
1443 bs->stop = 0;
1444 continue;
1445 default:
1446 /* Can't happen. */
1447 /* FALLTHROUGH */
1448 case 0:
1449 /* Error from catch_errors. */
1450 printf_filtered ("Watchpoint %d deleted.\n", b->number);
1451 if (b->related_breakpoint)
1452 b->related_breakpoint->disposition = del_at_next_stop;
1453 b->disposition = del_at_next_stop;
1454 /* We've already printed what needs to be printed. */
1455 bs->print_it = print_it_done;
1456
1457 /* Stop. */
1458 break;
1459 }
1460 }
1461 else if (b->type == bp_read_watchpoint || b->type == bp_access_watchpoint)
1462 {
1463 CORE_ADDR addr;
1464 value_ptr v;
1465 int found = 0;
1466
1467 addr = target_stopped_data_address();
1468 if (addr == 0) continue;
1469 for (v = b->val_chain; v; v = v->next)
1470 {
1471 if (v->lval == lval_memory)
1472 {
1473 CORE_ADDR vaddr;
1474
1475 vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1476 if (addr == vaddr)
1477 found = 1;
1478 }
1479 }
1480 if (found)
1481 switch (catch_errors (watchpoint_check, (char *) bs, message,
1482 RETURN_MASK_ALL))
1483 {
1484 case WP_DELETED:
1485 /* We've already printed what needs to be printed. */
1486 bs->print_it = print_it_done;
1487 /* Stop. */
1488 break;
1489 case WP_VALUE_CHANGED:
1490 case WP_VALUE_NOT_CHANGED:
1491 /* Stop. */
1492 break;
1493 default:
1494 /* Can't happen. */
1495 case 0:
1496 /* Error from catch_errors. */
1497 printf_filtered ("Watchpoint %d deleted.\n", b->number);
1498 if (b->related_breakpoint)
1499 b->related_breakpoint->disposition = del_at_next_stop;
1500 b->disposition = del_at_next_stop;
1501 /* We've already printed what needs to be printed. */
1502 bs->print_it = print_it_done;
1503 break;
1504 }
1505 }
1506 else if (DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs)
1507 real_breakpoint = 1;
1508
1509 if (b->frame && b->frame != (get_current_frame ())->frame)
1510 bs->stop = 0;
1511 else
1512 {
1513 int value_is_zero = 0;
1514
1515 if (b->cond)
1516 {
1517 /* Need to select the frame, with all that implies
1518 so that the conditions will have the right context. */
1519 select_frame (get_current_frame (), 0);
1520 value_is_zero
1521 = catch_errors (breakpoint_cond_eval, (char *)(b->cond),
1522 "Error in testing breakpoint condition:\n",
1523 RETURN_MASK_ALL);
1524 /* FIXME-someday, should give breakpoint # */
1525 free_all_values ();
1526 }
1527 if (b->cond && value_is_zero)
1528 {
1529 bs->stop = 0;
1530 }
1531 else if (b->ignore_count > 0)
1532 {
1533 b->ignore_count--;
1534 bs->stop = 0;
1535 }
1536 else
1537 {
1538 /* We will stop here */
1539 if (b->disposition == disable)
1540 b->enable = disabled;
1541 bs->commands = b->commands;
1542 if (b->silent)
1543 bs->print = 0;
1544 if (bs->commands && STREQ ("silent", bs->commands->line))
1545 {
1546 bs->commands = bs->commands->next;
1547 bs->print = 0;
1548 }
1549 }
1550 }
1551 /* Print nothing for this entry if we dont stop or if we dont print. */
1552 if (bs->stop == 0 || bs->print == 0)
1553 bs->print_it = print_it_noop;
1554 }
1555
1556 bs->next = NULL; /* Terminate the chain */
1557 bs = root_bs->next; /* Re-grab the head of the chain */
1558
1559 if ((DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs) && bs)
1560 {
1561 if (real_breakpoint)
1562 {
1563 *pc = bp_addr;
1564 #if defined (SHIFT_INST_REGS)
1565 SHIFT_INST_REGS();
1566 #else /* No SHIFT_INST_REGS. */
1567 write_pc (bp_addr);
1568 #endif /* No SHIFT_INST_REGS. */
1569 }
1570 }
1571
1572 /* The value of a hardware watchpoint hasn't changed, but the
1573 intermediate memory locations we are watching may have. */
1574 if (bs && ! bs->stop &&
1575 (bs->breakpoint_at->type == bp_hardware_watchpoint ||
1576 bs->breakpoint_at->type == bp_read_watchpoint ||
1577 bs->breakpoint_at->type == bp_access_watchpoint))
1578 {
1579 remove_breakpoints ();
1580 insert_breakpoints ();
1581 }
1582 return bs;
1583 }
1584 \f
1585 /* Tell what to do about this bpstat. */
1586 struct bpstat_what
1587 bpstat_what (bs)
1588 bpstat bs;
1589 {
1590 /* Classify each bpstat as one of the following. */
1591 enum class {
1592 /* This bpstat element has no effect on the main_action. */
1593 no_effect = 0,
1594
1595 /* There was a watchpoint, stop but don't print. */
1596 wp_silent,
1597
1598 /* There was a watchpoint, stop and print. */
1599 wp_noisy,
1600
1601 /* There was a breakpoint but we're not stopping. */
1602 bp_nostop,
1603
1604 /* There was a breakpoint, stop but don't print. */
1605 bp_silent,
1606
1607 /* There was a breakpoint, stop and print. */
1608 bp_noisy,
1609
1610 /* We hit the longjmp breakpoint. */
1611 long_jump,
1612
1613 /* We hit the longjmp_resume breakpoint. */
1614 long_resume,
1615
1616 /* We hit the step_resume breakpoint. */
1617 step_resume,
1618
1619 /* We hit the through_sigtramp breakpoint. */
1620 through_sig,
1621
1622 /* We hit the shared library event breakpoint. */
1623 shlib_event,
1624
1625 /* This is just used to count how many enums there are. */
1626 class_last
1627 };
1628
1629 /* Here is the table which drives this routine. So that we can
1630 format it pretty, we define some abbreviations for the
1631 enum bpstat_what codes. */
1632 #define kc BPSTAT_WHAT_KEEP_CHECKING
1633 #define ss BPSTAT_WHAT_STOP_SILENT
1634 #define sn BPSTAT_WHAT_STOP_NOISY
1635 #define sgl BPSTAT_WHAT_SINGLE
1636 #define slr BPSTAT_WHAT_SET_LONGJMP_RESUME
1637 #define clr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
1638 #define clrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
1639 #define sr BPSTAT_WHAT_STEP_RESUME
1640 #define ts BPSTAT_WHAT_THROUGH_SIGTRAMP
1641 #define shl BPSTAT_WHAT_CHECK_SHLIBS
1642
1643 /* "Can't happen." Might want to print an error message.
1644 abort() is not out of the question, but chances are GDB is just
1645 a bit confused, not unusable. */
1646 #define err BPSTAT_WHAT_STOP_NOISY
1647
1648 /* Given an old action and a class, come up with a new action. */
1649 /* One interesting property of this table is that wp_silent is the same
1650 as bp_silent and wp_noisy is the same as bp_noisy. That is because
1651 after stopping, the check for whether to step over a breakpoint
1652 (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
1653 reference to how we stopped. We retain separate wp_silent and bp_silent
1654 codes in case we want to change that someday. */
1655
1656 /* step_resume entries: a step resume breakpoint overrides another
1657 breakpoint of signal handling (see comment in wait_for_inferior
1658 at first IN_SIGTRAMP where we set the step_resume breakpoint). */
1659 /* We handle the through_sigtramp_breakpoint the same way; having both
1660 one of those and a step_resume_breakpoint is probably very rare (?). */
1661
1662 static const enum bpstat_what_main_action
1663 table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
1664 {
1665 /* old action */
1666 /* kc ss sn sgl slr clr clrs sr ts shl
1667 */
1668 /*no_effect*/ {kc, ss, sn, sgl, slr, clr, clrs, sr, ts, shl},
1669 /*wp_silent*/ {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl},
1670 /*wp_noisy*/ {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl},
1671 /*bp_nostop*/ {sgl, ss, sn, sgl, slr, clrs, clrs, sr, ts, shl},
1672 /*bp_silent*/ {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl},
1673 /*bp_noisy*/ {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl},
1674 /*long_jump*/ {slr, ss, sn, slr, err, err, err, sr, ts, shl},
1675 /*long_resume*/ {clr, ss, sn, clrs, err, err, err, sr, ts, shl},
1676 /*step_resume*/ {sr, sr, sr, sr, sr, sr, sr, sr, ts, shl},
1677 /*through_sig*/ {ts, ts, ts, ts, ts, ts, ts, ts, ts, shl},
1678 /*shlib*/ {shl, shl, shl, shl, shl, shl, shl, shl, ts, shl}
1679 };
1680 #undef kc
1681 #undef ss
1682 #undef sn
1683 #undef sgl
1684 #undef slr
1685 #undef clr
1686 #undef clrs
1687 #undef err
1688 #undef sr
1689 #undef ts
1690 #undef shl
1691 enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
1692 struct bpstat_what retval;
1693
1694 retval.call_dummy = 0;
1695 for (; bs != NULL; bs = bs->next)
1696 {
1697 enum class bs_class = no_effect;
1698 if (bs->breakpoint_at == NULL)
1699 /* I suspect this can happen if it was a momentary breakpoint
1700 which has since been deleted. */
1701 continue;
1702 switch (bs->breakpoint_at->type)
1703 {
1704 case bp_breakpoint:
1705 case bp_hardware_breakpoint:
1706 case bp_until:
1707 case bp_finish:
1708 if (bs->stop)
1709 {
1710 if (bs->print)
1711 bs_class = bp_noisy;
1712 else
1713 bs_class = bp_silent;
1714 }
1715 else
1716 bs_class = bp_nostop;
1717 break;
1718 case bp_watchpoint:
1719 case bp_hardware_watchpoint:
1720 case bp_read_watchpoint:
1721 case bp_access_watchpoint:
1722 if (bs->stop)
1723 {
1724 if (bs->print)
1725 bs_class = wp_noisy;
1726 else
1727 bs_class = wp_silent;
1728 }
1729 else
1730 /* There was a watchpoint, but we're not stopping. This requires
1731 no further action. */
1732 bs_class = no_effect;
1733 break;
1734 case bp_longjmp:
1735 bs_class = long_jump;
1736 break;
1737 case bp_longjmp_resume:
1738 bs_class = long_resume;
1739 break;
1740 case bp_step_resume:
1741 if (bs->stop)
1742 {
1743 bs_class = step_resume;
1744 }
1745 else
1746 /* It is for the wrong frame. */
1747 bs_class = bp_nostop;
1748 break;
1749 case bp_through_sigtramp:
1750 bs_class = through_sig;
1751 break;
1752 case bp_watchpoint_scope:
1753 bs_class = bp_nostop;
1754 break;
1755 case bp_shlib_event:
1756 bs_class = shlib_event;
1757 break;
1758 case bp_call_dummy:
1759 /* Make sure the action is stop (silent or noisy), so infrun.c
1760 pops the dummy frame. */
1761 bs_class = bp_silent;
1762 retval.call_dummy = 1;
1763 break;
1764 }
1765 current_action = table[(int)bs_class][(int)current_action];
1766 }
1767 retval.main_action = current_action;
1768 return retval;
1769 }
1770
1771 /* Nonzero if we should step constantly (e.g. watchpoints on machines
1772 without hardware support). This isn't related to a specific bpstat,
1773 just to things like whether watchpoints are set. */
1774
1775 int
1776 bpstat_should_step ()
1777 {
1778 struct breakpoint *b;
1779 ALL_BREAKPOINTS (b)
1780 if (b->enable == enabled && b->type == bp_watchpoint)
1781 return 1;
1782 return 0;
1783 }
1784 \f
1785 /* Print information on breakpoint number BNUM, or -1 if all.
1786 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
1787 is nonzero, process only watchpoints. */
1788
1789 static void
1790 breakpoint_1 (bnum, allflag)
1791 int bnum;
1792 int allflag;
1793 {
1794 register struct breakpoint *b;
1795 register struct command_line *l;
1796 register struct symbol *sym;
1797 CORE_ADDR last_addr = (CORE_ADDR)-1;
1798 int found_a_breakpoint = 0;
1799 static char *bptypes[] = {"breakpoint", "hw breakpoint",
1800 "until", "finish", "watchpoint",
1801 "hw watchpoint", "read watchpoint",
1802 "acc watchpoint", "longjmp",
1803 "longjmp resume", "step resume",
1804 "sigtramp",
1805 "watchpoint scope", "call dummy",
1806 "shlib events" };
1807 static char *bpdisps[] = {"del", "dstp", "dis", "keep"};
1808 static char bpenables[] = "nyn";
1809 char wrap_indent[80];
1810
1811 ALL_BREAKPOINTS (b)
1812 if (bnum == -1
1813 || bnum == b->number)
1814 {
1815 /* We only print out user settable breakpoints unless the allflag is set. */
1816 if (!allflag
1817 && b->type != bp_breakpoint
1818 && b->type != bp_hardware_breakpoint
1819 && b->type != bp_watchpoint
1820 && b->type != bp_read_watchpoint
1821 && b->type != bp_access_watchpoint
1822 && b->type != bp_hardware_watchpoint)
1823 continue;
1824
1825 if (!found_a_breakpoint++)
1826 {
1827 annotate_breakpoints_headers ();
1828
1829 annotate_field (0);
1830 printf_filtered ("Num ");
1831 annotate_field (1);
1832 printf_filtered ("Type ");
1833 annotate_field (2);
1834 printf_filtered ("Disp ");
1835 annotate_field (3);
1836 printf_filtered ("Enb ");
1837 if (addressprint)
1838 {
1839 annotate_field (4);
1840 printf_filtered ("Address ");
1841 }
1842 annotate_field (5);
1843 printf_filtered ("What\n");
1844
1845 annotate_breakpoints_table ();
1846 }
1847
1848 annotate_record ();
1849 annotate_field (0);
1850 printf_filtered ("%-3d ", b->number);
1851 annotate_field (1);
1852 printf_filtered ("%-14s ", bptypes[(int)b->type]);
1853 annotate_field (2);
1854 printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
1855 annotate_field (3);
1856 printf_filtered ("%-3c ", bpenables[(int)b->enable]);
1857
1858 strcpy (wrap_indent, " ");
1859 if (addressprint)
1860 strcat (wrap_indent, " ");
1861 switch (b->type)
1862 {
1863 case bp_watchpoint:
1864 case bp_hardware_watchpoint:
1865 case bp_read_watchpoint:
1866 case bp_access_watchpoint:
1867 /* Field 4, the address, is omitted (which makes the columns
1868 not line up too nicely with the headers, but the effect
1869 is relatively readable). */
1870 annotate_field (5);
1871 print_expression (b->exp, gdb_stdout);
1872 break;
1873
1874 case bp_breakpoint:
1875 case bp_hardware_breakpoint:
1876 case bp_until:
1877 case bp_finish:
1878 case bp_longjmp:
1879 case bp_longjmp_resume:
1880 case bp_step_resume:
1881 case bp_through_sigtramp:
1882 case bp_watchpoint_scope:
1883 case bp_call_dummy:
1884 case bp_shlib_event:
1885 if (addressprint)
1886 {
1887 annotate_field (4);
1888 /* FIXME-32x64: need a print_address_numeric with
1889 field width */
1890 printf_filtered
1891 ("%s ",
1892 local_hex_string_custom
1893 ((unsigned long) b->address, "08l"));
1894 }
1895
1896 annotate_field (5);
1897
1898 last_addr = b->address;
1899 if (b->source_file)
1900 {
1901 sym = find_pc_sect_function (b->address, b->section);
1902 if (sym)
1903 {
1904 fputs_filtered ("in ", gdb_stdout);
1905 fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
1906 wrap_here (wrap_indent);
1907 fputs_filtered (" at ", gdb_stdout);
1908 }
1909 fputs_filtered (b->source_file, gdb_stdout);
1910 printf_filtered (":%d", b->line_number);
1911 }
1912 else
1913 print_address_symbolic (b->address, gdb_stdout, demangle, " ");
1914 break;
1915 }
1916
1917 printf_filtered ("\n");
1918
1919 if (b->frame)
1920 {
1921 annotate_field (6);
1922
1923 printf_filtered ("\tstop only in stack frame at ");
1924 print_address_numeric (b->frame, 1, gdb_stdout);
1925 printf_filtered ("\n");
1926 }
1927
1928 if (b->cond)
1929 {
1930 annotate_field (7);
1931
1932 printf_filtered ("\tstop only if ");
1933 print_expression (b->cond, gdb_stdout);
1934 printf_filtered ("\n");
1935 }
1936
1937 if (b->thread != -1)
1938 {
1939 /* FIXME should make an annotation for this */
1940 printf_filtered ("\tstop only in thread %d\n", b->thread);
1941 }
1942
1943 if (show_breakpoint_hit_counts && b->hit_count)
1944 {
1945 /* FIXME should make an annotation for this */
1946
1947 printf_filtered ("\tbreakpoint already hit %d time%s\n",
1948 b->hit_count, (b->hit_count == 1 ? "" : "s"));
1949 }
1950
1951 if (b->ignore_count)
1952 {
1953 annotate_field (8);
1954
1955 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
1956 }
1957
1958 if ((l = b->commands))
1959 {
1960 annotate_field (9);
1961
1962 while (l)
1963 {
1964 print_command_line (l, 4);
1965 l = l->next;
1966 }
1967 }
1968 }
1969
1970 if (!found_a_breakpoint)
1971 {
1972 if (bnum == -1)
1973 printf_filtered ("No breakpoints or watchpoints.\n");
1974 else
1975 printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
1976 }
1977 else
1978 /* Compare against (CORE_ADDR)-1 in case some compiler decides
1979 that a comparison of an unsigned with -1 is always false. */
1980 if (last_addr != (CORE_ADDR)-1)
1981 set_next_address (last_addr);
1982
1983 annotate_breakpoints_table_end ();
1984 }
1985
1986 /* ARGSUSED */
1987 static void
1988 breakpoints_info (bnum_exp, from_tty)
1989 char *bnum_exp;
1990 int from_tty;
1991 {
1992 int bnum = -1;
1993
1994 if (bnum_exp)
1995 bnum = parse_and_eval_address (bnum_exp);
1996
1997 breakpoint_1 (bnum, 0);
1998 }
1999
2000 #if MAINTENANCE_CMDS
2001
2002 /* ARGSUSED */
2003 static void
2004 maintenance_info_breakpoints (bnum_exp, from_tty)
2005 char *bnum_exp;
2006 int from_tty;
2007 {
2008 int bnum = -1;
2009
2010 if (bnum_exp)
2011 bnum = parse_and_eval_address (bnum_exp);
2012
2013 breakpoint_1 (bnum, 1);
2014 }
2015
2016 #endif
2017
2018 /* Print a message describing any breakpoints set at PC. */
2019
2020 static void
2021 describe_other_breakpoints (pc, section)
2022 CORE_ADDR pc;
2023 asection *section;
2024 {
2025 register int others = 0;
2026 register struct breakpoint *b;
2027
2028 ALL_BREAKPOINTS (b)
2029 if (b->address == pc)
2030 if (overlay_debugging == 0 ||
2031 b->section == section)
2032 others++;
2033 if (others > 0)
2034 {
2035 printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
2036 ALL_BREAKPOINTS (b)
2037 if (b->address == pc)
2038 if (overlay_debugging == 0 ||
2039 b->section == section)
2040 {
2041 others--;
2042 printf_filtered
2043 ("%d%s%s ",
2044 b->number,
2045 ((b->enable == disabled || b->enable == shlib_disabled)
2046 ? " (disabled)" : ""),
2047 (others > 1) ? "," : ((others == 1) ? " and" : ""));
2048 }
2049 printf_filtered ("also set at pc ");
2050 print_address_numeric (pc, 1, gdb_stdout);
2051 printf_filtered (".\n");
2052 }
2053 }
2054 \f
2055 /* Set the default place to put a breakpoint
2056 for the `break' command with no arguments. */
2057
2058 void
2059 set_default_breakpoint (valid, addr, symtab, line)
2060 int valid;
2061 CORE_ADDR addr;
2062 struct symtab *symtab;
2063 int line;
2064 {
2065 default_breakpoint_valid = valid;
2066 default_breakpoint_address = addr;
2067 default_breakpoint_symtab = symtab;
2068 default_breakpoint_line = line;
2069 }
2070
2071 /* Rescan breakpoints at address ADDRESS,
2072 marking the first one as "first" and any others as "duplicates".
2073 This is so that the bpt instruction is only inserted once. */
2074
2075 static void
2076 check_duplicates (address, section)
2077 CORE_ADDR address;
2078 asection *section;
2079 {
2080 register struct breakpoint *b;
2081 register int count = 0;
2082
2083 if (address == 0) /* Watchpoints are uninteresting */
2084 return;
2085
2086 ALL_BREAKPOINTS (b)
2087 if (b->enable != disabled
2088 && b->enable != shlib_disabled
2089 && b->address == address
2090 && (overlay_debugging == 0 || b->section == section))
2091 {
2092 count++;
2093 b->duplicate = count > 1;
2094 }
2095 }
2096
2097 /* Low level routine to set a breakpoint.
2098 Takes as args the three things that every breakpoint must have.
2099 Returns the breakpoint object so caller can set other things.
2100 Does not set the breakpoint number!
2101 Does not print anything.
2102
2103 ==> This routine should not be called if there is a chance of later
2104 error(); otherwise it leaves a bogus breakpoint on the chain. Validate
2105 your arguments BEFORE calling this routine! */
2106
2107 static struct breakpoint *
2108 set_raw_breakpoint (sal)
2109 struct symtab_and_line sal;
2110 {
2111 register struct breakpoint *b, *b1;
2112
2113 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
2114 memset (b, 0, sizeof (*b));
2115 b->address = sal.pc;
2116 if (sal.symtab == NULL)
2117 b->source_file = NULL;
2118 else
2119 b->source_file = savestring (sal.symtab->filename,
2120 strlen (sal.symtab->filename));
2121 b->section = sal.section;
2122 b->language = current_language->la_language;
2123 b->input_radix = input_radix;
2124 b->thread = -1;
2125 b->line_number = sal.line;
2126 b->enable = enabled;
2127 b->next = 0;
2128 b->silent = 0;
2129 b->ignore_count = 0;
2130 b->commands = NULL;
2131 b->frame = 0;
2132
2133 /* Add this breakpoint to the end of the chain
2134 so that a list of breakpoints will come out in order
2135 of increasing numbers. */
2136
2137 b1 = breakpoint_chain;
2138 if (b1 == 0)
2139 breakpoint_chain = b;
2140 else
2141 {
2142 while (b1->next)
2143 b1 = b1->next;
2144 b1->next = b;
2145 }
2146
2147 check_duplicates (sal.pc, sal.section);
2148 breakpoints_changed ();
2149
2150 return b;
2151 }
2152
2153 #ifdef GET_LONGJMP_TARGET
2154
2155 static void
2156 create_longjmp_breakpoint (func_name)
2157 char *func_name;
2158 {
2159 struct symtab_and_line sal;
2160 struct breakpoint *b;
2161
2162 INIT_SAL (&sal); /* initialize to zeroes */
2163 if (func_name != NULL)
2164 {
2165 struct minimal_symbol *m;
2166
2167 m = lookup_minimal_symbol_text (func_name, NULL, (struct objfile *)NULL);
2168 if (m)
2169 sal.pc = SYMBOL_VALUE_ADDRESS (m);
2170 else
2171 return;
2172 }
2173 sal.section = find_pc_overlay (sal.pc);
2174 b = set_raw_breakpoint (sal);
2175 if (!b) return;
2176
2177 b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
2178 b->disposition = donttouch;
2179 b->enable = disabled;
2180 b->silent = 1;
2181 if (func_name)
2182 b->addr_string = strsave(func_name);
2183 b->number = internal_breakpoint_number--;
2184 }
2185
2186 #endif /* #ifdef GET_LONGJMP_TARGET */
2187
2188 /* Call this routine when stepping and nexting to enable a breakpoint if we do
2189 a longjmp(). When we hit that breakpoint, call
2190 set_longjmp_resume_breakpoint() to figure out where we are going. */
2191
2192 void
2193 enable_longjmp_breakpoint()
2194 {
2195 register struct breakpoint *b;
2196
2197 ALL_BREAKPOINTS (b)
2198 if (b->type == bp_longjmp)
2199 {
2200 b->enable = enabled;
2201 check_duplicates (b->address, b->section);
2202 }
2203 }
2204
2205 void
2206 disable_longjmp_breakpoint()
2207 {
2208 register struct breakpoint *b;
2209
2210 ALL_BREAKPOINTS (b)
2211 if ( b->type == bp_longjmp
2212 || b->type == bp_longjmp_resume)
2213 {
2214 b->enable = disabled;
2215 check_duplicates (b->address, b->section);
2216 }
2217 }
2218
2219 #ifdef SOLIB_ADD
2220 void
2221 remove_solib_event_breakpoints ()
2222 {
2223 register struct breakpoint *b, *temp;
2224
2225 ALL_BREAKPOINTS_SAFE (b, temp)
2226 if (b->type == bp_shlib_event)
2227 delete_breakpoint (b);
2228 }
2229
2230 void
2231 create_solib_event_breakpoint (address)
2232 CORE_ADDR address;
2233 {
2234 struct breakpoint *b;
2235 struct symtab_and_line sal;
2236
2237 INIT_SAL (&sal); /* initialize to zeroes */
2238 sal.pc = address;
2239 sal.section = find_pc_overlay (sal.pc);
2240 b = set_raw_breakpoint (sal);
2241 b->number = internal_breakpoint_number--;
2242 b->disposition = donttouch;
2243 b->type = bp_shlib_event;
2244 }
2245
2246 /* Try to reenable any breakpoints in shared libraries. */
2247 void
2248 re_enable_breakpoints_in_shlibs ()
2249 {
2250 struct breakpoint *b;
2251
2252 ALL_BREAKPOINTS (b)
2253 if (b->enable == shlib_disabled)
2254 {
2255 char buf[1];
2256
2257 /* Do not reenable the breakpoint if the shared library
2258 is still not mapped in. */
2259 if (target_read_memory (b->address, buf, 1) == 0)
2260 b->enable = enabled;
2261 }
2262 }
2263
2264 #endif
2265
2266 static int
2267 hw_breakpoint_used_count()
2268 {
2269 register struct breakpoint *b;
2270 int i = 0;
2271
2272 ALL_BREAKPOINTS (b)
2273 {
2274 if (b->type == bp_hardware_breakpoint && b->enable == enabled)
2275 i++;
2276 }
2277
2278 return i;
2279 }
2280
2281 static int
2282 hw_watchpoint_used_count(type, other_type_used)
2283 enum bptype type;
2284 int *other_type_used;
2285 {
2286 register struct breakpoint *b;
2287 int i = 0;
2288
2289 *other_type_used = 0;
2290 ALL_BREAKPOINTS (b)
2291 {
2292 if (b->enable == enabled)
2293 {
2294 if (b->type == type) i++;
2295 else if ((b->type == bp_hardware_watchpoint ||
2296 b->type == bp_read_watchpoint ||
2297 b->type == bp_access_watchpoint)
2298 && b->enable == enabled)
2299 *other_type_used = 1;
2300 }
2301 }
2302 return i;
2303 }
2304
2305 /* Call this after hitting the longjmp() breakpoint. Use this to set a new
2306 breakpoint at the target of the jmp_buf.
2307
2308 FIXME - This ought to be done by setting a temporary breakpoint that gets
2309 deleted automatically...
2310 */
2311
2312 void
2313 set_longjmp_resume_breakpoint(pc, frame)
2314 CORE_ADDR pc;
2315 struct frame_info *frame;
2316 {
2317 register struct breakpoint *b;
2318
2319 ALL_BREAKPOINTS (b)
2320 if (b->type == bp_longjmp_resume)
2321 {
2322 b->address = pc;
2323 b->enable = enabled;
2324 if (frame != NULL)
2325 b->frame = frame->frame;
2326 else
2327 b->frame = 0;
2328 check_duplicates (b->address, b->section);
2329 return;
2330 }
2331 }
2332
2333 /* Set a breakpoint that will evaporate an end of command
2334 at address specified by SAL.
2335 Restrict it to frame FRAME if FRAME is nonzero. */
2336
2337 struct breakpoint *
2338 set_momentary_breakpoint (sal, frame, type)
2339 struct symtab_and_line sal;
2340 struct frame_info *frame;
2341 enum bptype type;
2342 {
2343 register struct breakpoint *b;
2344 b = set_raw_breakpoint (sal);
2345 b->type = type;
2346 b->enable = enabled;
2347 b->disposition = donttouch;
2348 b->frame = (frame ? frame->frame : 0);
2349
2350 /* If we're debugging a multi-threaded program, then we
2351 want momentary breakpoints to be active in only a
2352 single thread of control. */
2353 if (in_thread_list (inferior_pid))
2354 b->thread = pid_to_thread_id (inferior_pid);
2355
2356 return b;
2357 }
2358
2359 \f
2360 /* Tell the user we have just set a breakpoint B. */
2361
2362 static void
2363 mention (b)
2364 struct breakpoint *b;
2365 {
2366 int say_where = 0;
2367
2368 /* FIXME: This is misplaced; mention() is called by things (like hitting a
2369 watchpoint) other than breakpoint creation. It should be possible to
2370 clean this up and at the same time replace the random calls to
2371 breakpoint_changed with this hook, as has already been done for
2372 delete_breakpoint_hook and so on. */
2373 if (create_breakpoint_hook)
2374 create_breakpoint_hook (b);
2375
2376 switch (b->type)
2377 {
2378 case bp_watchpoint:
2379 printf_filtered ("Watchpoint %d: ", b->number);
2380 print_expression (b->exp, gdb_stdout);
2381 break;
2382 case bp_hardware_watchpoint:
2383 printf_filtered ("Hardware watchpoint %d: ", b->number);
2384 print_expression (b->exp, gdb_stdout);
2385 break;
2386 case bp_read_watchpoint:
2387 printf_filtered ("Hardware read watchpoint %d: ", b->number);
2388 print_expression (b->exp, gdb_stdout);
2389 break;
2390 case bp_access_watchpoint:
2391 printf_filtered ("Hardware access(read/write) watchpoint %d: ",b->number);
2392 print_expression (b->exp, gdb_stdout);
2393 break;
2394 case bp_breakpoint:
2395 printf_filtered ("Breakpoint %d", b->number);
2396 say_where = 1;
2397 break;
2398 case bp_hardware_breakpoint:
2399 printf_filtered ("Hardware assisted breakpoint %d", b->number);
2400 say_where = 1;
2401 break;
2402 case bp_until:
2403 case bp_finish:
2404 case bp_longjmp:
2405 case bp_longjmp_resume:
2406 case bp_step_resume:
2407 case bp_through_sigtramp:
2408 case bp_call_dummy:
2409 case bp_watchpoint_scope:
2410 case bp_shlib_event:
2411 break;
2412 }
2413 if (say_where)
2414 {
2415 if (addressprint || b->source_file == NULL)
2416 {
2417 printf_filtered (" at ");
2418 print_address_numeric (b->address, 1, gdb_stdout);
2419 }
2420 if (b->source_file)
2421 printf_filtered (": file %s, line %d.",
2422 b->source_file, b->line_number);
2423 }
2424 printf_filtered ("\n");
2425 }
2426
2427 \f
2428 /* Set a breakpoint according to ARG (function, linenum or *address)
2429 flag: first bit : 0 non-temporary, 1 temporary.
2430 second bit : 0 normal breakpoint, 1 hardware breakpoint. */
2431
2432 static void
2433 break_command_1 (arg, flag, from_tty)
2434 char *arg;
2435 int flag, from_tty;
2436 {
2437 int tempflag, hardwareflag;
2438 struct symtabs_and_lines sals;
2439 struct symtab_and_line sal;
2440 register struct expression *cond = 0;
2441 register struct breakpoint *b;
2442
2443 /* Pointers in arg to the start, and one past the end, of the condition. */
2444 char *cond_start = NULL;
2445 char *cond_end = NULL;
2446 /* Pointers in arg to the start, and one past the end,
2447 of the address part. */
2448 char *addr_start = NULL;
2449 char *addr_end = NULL;
2450 struct cleanup *old_chain;
2451 struct cleanup *canonical_strings_chain = NULL;
2452 char **canonical = (char **)NULL;
2453 int i;
2454 int thread;
2455
2456 hardwareflag = flag & BP_HARDWAREFLAG;
2457 tempflag = flag & BP_TEMPFLAG;
2458
2459 sals.sals = NULL;
2460 sals.nelts = 0;
2461
2462 INIT_SAL (&sal); /* initialize to zeroes */
2463
2464 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
2465
2466 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
2467 && (arg[2] == ' ' || arg[2] == '\t')))
2468 {
2469 if (default_breakpoint_valid)
2470 {
2471 sals.sals = (struct symtab_and_line *)
2472 xmalloc (sizeof (struct symtab_and_line));
2473 sal.pc = default_breakpoint_address;
2474 sal.line = default_breakpoint_line;
2475 sal.symtab = default_breakpoint_symtab;
2476 sal.section = find_pc_overlay (sal.pc);
2477 sals.sals[0] = sal;
2478 sals.nelts = 1;
2479 }
2480 else
2481 error ("No default breakpoint address now.");
2482 }
2483 else
2484 {
2485 addr_start = arg;
2486
2487 /* Force almost all breakpoints to be in terms of the
2488 current_source_symtab (which is decode_line_1's default). This
2489 should produce the results we want almost all of the time while
2490 leaving default_breakpoint_* alone. */
2491 if (default_breakpoint_valid
2492 && (!current_source_symtab
2493 || (arg && (*arg == '+' || *arg == '-'))))
2494 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
2495 default_breakpoint_line, &canonical);
2496 else
2497 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, &canonical);
2498
2499 addr_end = arg;
2500 }
2501
2502 if (! sals.nelts)
2503 return;
2504
2505 /* Make sure that all storage allocated in decode_line_1 gets freed in case
2506 the following `for' loop errors out. */
2507 old_chain = make_cleanup (free, sals.sals);
2508 if (canonical != (char **)NULL)
2509 {
2510 make_cleanup (free, canonical);
2511 canonical_strings_chain = make_cleanup (null_cleanup, 0);
2512 for (i = 0; i < sals.nelts; i++)
2513 {
2514 if (canonical[i] != NULL)
2515 make_cleanup (free, canonical[i]);
2516 }
2517 }
2518
2519 thread = -1; /* No specific thread yet */
2520
2521 /* Resolve all line numbers to PC's, and verify that conditions
2522 can be parsed, before setting any breakpoints. */
2523 for (i = 0; i < sals.nelts; i++)
2524 {
2525 char *tok, *end_tok;
2526 int toklen;
2527
2528 resolve_sal_pc (&sals.sals[i]);
2529
2530 tok = arg;
2531
2532 while (tok && *tok)
2533 {
2534 while (*tok == ' ' || *tok == '\t')
2535 tok++;
2536
2537 end_tok = tok;
2538
2539 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
2540 end_tok++;
2541
2542 toklen = end_tok - tok;
2543
2544 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
2545 {
2546 tok = cond_start = end_tok + 1;
2547 cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
2548 cond_end = tok;
2549 }
2550 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
2551 {
2552 char *tmptok;
2553
2554 tok = end_tok + 1;
2555 tmptok = tok;
2556 thread = strtol (tok, &tok, 0);
2557 if (tok == tmptok)
2558 error ("Junk after thread keyword.");
2559 if (!valid_thread_id (thread))
2560 error ("Unknown thread %d\n", thread);
2561 }
2562 else
2563 error ("Junk at end of arguments.");
2564 }
2565 }
2566 if (hardwareflag)
2567 {
2568 int i, target_resources_ok;
2569
2570 i = hw_breakpoint_used_count ();
2571 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
2572 bp_hardware_breakpoint, i + sals.nelts, 0);
2573 if (target_resources_ok == 0)
2574 error ("No hardware breakpoint support in the target.");
2575 else if (target_resources_ok < 0)
2576 error ("Hardware breakpoints used exceeds limit.");
2577 }
2578
2579 /* Remove the canonical strings from the cleanup, they are needed below. */
2580 if (canonical != (char **)NULL)
2581 discard_cleanups (canonical_strings_chain);
2582
2583 /* Now set all the breakpoints. */
2584 for (i = 0; i < sals.nelts; i++)
2585 {
2586 sal = sals.sals[i];
2587
2588 if (from_tty)
2589 describe_other_breakpoints (sal.pc, sal.section);
2590
2591 b = set_raw_breakpoint (sal);
2592 set_breakpoint_count (breakpoint_count + 1);
2593 b->number = breakpoint_count;
2594 b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
2595 b->cond = cond;
2596 b->thread = thread;
2597
2598 /* If a canonical line spec is needed use that instead of the
2599 command string. */
2600 if (canonical != (char **)NULL && canonical[i] != NULL)
2601 b->addr_string = canonical[i];
2602 else if (addr_start)
2603 b->addr_string = savestring (addr_start, addr_end - addr_start);
2604 if (cond_start)
2605 b->cond_string = savestring (cond_start, cond_end - cond_start);
2606
2607 b->enable = enabled;
2608 b->disposition = tempflag ? del : donttouch;
2609 mention (b);
2610 }
2611
2612 if (sals.nelts > 1)
2613 {
2614 printf_filtered ("Multiple breakpoints were set.\n");
2615 printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
2616 }
2617 do_cleanups (old_chain);
2618 }
2619
2620 /* Helper function for break_command_1 and disassemble_command. */
2621
2622 void
2623 resolve_sal_pc (sal)
2624 struct symtab_and_line *sal;
2625 {
2626 CORE_ADDR pc;
2627
2628 if (sal->pc == 0 && sal->symtab != NULL)
2629 {
2630 pc = find_line_pc (sal->symtab, sal->line);
2631 if (pc == 0)
2632 error ("No line %d in file \"%s\".",
2633 sal->line, sal->symtab->filename);
2634 sal->pc = pc;
2635 }
2636
2637 if (sal->section == 0 && sal->symtab != NULL)
2638 {
2639 struct blockvector *bv;
2640 struct block *b;
2641 struct symbol *sym;
2642 int index;
2643
2644 bv = blockvector_for_pc_sect (sal->pc, 0, &index, sal->symtab);
2645 b = BLOCKVECTOR_BLOCK (bv, index);
2646 sym = block_function (b);
2647 if (sym != NULL)
2648 {
2649 fixup_symbol_section (sym, sal->symtab->objfile);
2650 sal->section = SYMBOL_BFD_SECTION (block_function (b));
2651 }
2652 }
2653 }
2654
2655 void
2656 break_command (arg, from_tty)
2657 char *arg;
2658 int from_tty;
2659 {
2660 break_command_1 (arg, 0, from_tty);
2661 }
2662
2663 static void
2664 tbreak_command (arg, from_tty)
2665 char *arg;
2666 int from_tty;
2667 {
2668 break_command_1 (arg, BP_TEMPFLAG, from_tty);
2669 }
2670
2671 static void
2672 hbreak_command (arg, from_tty)
2673 char *arg;
2674 int from_tty;
2675 {
2676 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
2677 }
2678
2679 static void
2680 thbreak_command (arg, from_tty)
2681 char *arg;
2682 int from_tty;
2683 {
2684 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
2685 }
2686
2687 /* ARGSUSED */
2688 /* accessflag: 0: watch write, 1: watch read, 2: watch access(read or write)
2689 */
2690 static void
2691 watch_command_1 (arg, accessflag, from_tty)
2692 char *arg;
2693 int accessflag;
2694 int from_tty;
2695 {
2696 struct breakpoint *b;
2697 struct symtab_and_line sal;
2698 struct expression *exp;
2699 struct block *exp_valid_block;
2700 struct value *val, *mark;
2701 struct frame_info *frame;
2702 struct frame_info *prev_frame = NULL;
2703 char *exp_start = NULL;
2704 char *exp_end = NULL;
2705 char *tok, *end_tok;
2706 int toklen;
2707 char *cond_start = NULL;
2708 char *cond_end = NULL;
2709 struct expression *cond = NULL;
2710 int i, other_type_used, target_resources_ok = 0;
2711 enum bptype bp_type;
2712 int mem_cnt = 0;
2713
2714 INIT_SAL (&sal); /* initialize to zeroes */
2715
2716 /* Parse arguments. */
2717 innermost_block = NULL;
2718 exp_start = arg;
2719 exp = parse_exp_1 (&arg, 0, 0);
2720 exp_end = arg;
2721 exp_valid_block = innermost_block;
2722 mark = value_mark ();
2723 val = evaluate_expression (exp);
2724 release_value (val);
2725 if (VALUE_LAZY (val))
2726 value_fetch_lazy (val);
2727
2728 tok = arg;
2729 while (*tok == ' ' || *tok == '\t')
2730 tok++;
2731 end_tok = tok;
2732
2733 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
2734 end_tok++;
2735
2736 toklen = end_tok - tok;
2737 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
2738 {
2739 tok = cond_start = end_tok + 1;
2740 cond = parse_exp_1 (&tok, 0, 0);
2741 cond_end = tok;
2742 }
2743 if (*tok)
2744 error("Junk at end of command.");
2745
2746 if (accessflag == 1) bp_type = bp_read_watchpoint;
2747 else if (accessflag == 2) bp_type = bp_access_watchpoint;
2748 else bp_type = bp_hardware_watchpoint;
2749
2750 mem_cnt = can_use_hardware_watchpoint (val);
2751 if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
2752 error ("Expression cannot be implemented with read/access watchpoint.");
2753 if (mem_cnt != 0) {
2754 i = hw_watchpoint_used_count (bp_type, &other_type_used);
2755 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
2756 bp_type, i + mem_cnt, other_type_used);
2757 if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
2758 error ("Target does not have this type of hardware watchpoint support.");
2759 if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
2760 error ("Target resources have been allocated for other types of watchpoints.");
2761 }
2762
2763 /* Now set up the breakpoint. */
2764 b = set_raw_breakpoint (sal);
2765 set_breakpoint_count (breakpoint_count + 1);
2766 b->number = breakpoint_count;
2767 b->disposition = donttouch;
2768 b->exp = exp;
2769 b->exp_valid_block = exp_valid_block;
2770 b->exp_string = savestring (exp_start, exp_end - exp_start);
2771 b->val = val;
2772 b->cond = cond;
2773 if (cond_start)
2774 b->cond_string = savestring (cond_start, cond_end - cond_start);
2775 else
2776 b->cond_string = 0;
2777
2778 frame = block_innermost_frame (exp_valid_block);
2779 if (frame)
2780 {
2781 prev_frame = get_prev_frame (frame);
2782 b->watchpoint_frame = frame->frame;
2783 }
2784 else
2785 b->watchpoint_frame = (CORE_ADDR)0;
2786
2787 if (mem_cnt && target_resources_ok > 0)
2788 b->type = bp_type;
2789 else
2790 b->type = bp_watchpoint;
2791
2792 /* If the expression is "local", then set up a "watchpoint scope"
2793 breakpoint at the point where we've left the scope of the watchpoint
2794 expression. */
2795 if (innermost_block)
2796 {
2797 if (prev_frame)
2798 {
2799 struct breakpoint *scope_breakpoint;
2800 struct symtab_and_line scope_sal;
2801
2802 INIT_SAL (&scope_sal); /* initialize to zeroes */
2803 scope_sal.pc = get_frame_pc (prev_frame);
2804 scope_sal.section = find_pc_overlay (scope_sal.pc);
2805
2806 scope_breakpoint = set_raw_breakpoint (scope_sal);
2807 set_breakpoint_count (breakpoint_count + 1);
2808 scope_breakpoint->number = breakpoint_count;
2809
2810 scope_breakpoint->type = bp_watchpoint_scope;
2811 scope_breakpoint->enable = enabled;
2812
2813 /* Automatically delete the breakpoint when it hits. */
2814 scope_breakpoint->disposition = del;
2815
2816 /* Only break in the proper frame (help with recursion). */
2817 scope_breakpoint->frame = prev_frame->frame;
2818
2819 /* Set the address at which we will stop. */
2820 scope_breakpoint->address = get_frame_pc (prev_frame);
2821
2822 /* The scope breakpoint is related to the watchpoint. We
2823 will need to act on them together. */
2824 b->related_breakpoint = scope_breakpoint;
2825 }
2826 }
2827 value_free_to_mark (mark);
2828 mention (b);
2829 }
2830
2831 /* Return count of locations need to be watched and can be handled
2832 in hardware. If the watchpoint can not be handled
2833 in hardware return zero. */
2834
2835 static int
2836 can_use_hardware_watchpoint (v)
2837 struct value *v;
2838 {
2839 int found_memory_cnt = 0;
2840
2841 /* Make sure all the intermediate values are in memory. Also make sure
2842 we found at least one memory expression. Guards against watch 0x12345,
2843 which is meaningless, but could cause errors if one tries to insert a
2844 hardware watchpoint for the constant expression. */
2845 for ( ; v; v = v->next)
2846 {
2847 if (v->lval == lval_memory)
2848 {
2849 if (TYPE_LENGTH (VALUE_TYPE (v)) <= REGISTER_SIZE)
2850 found_memory_cnt++;
2851 }
2852 else if (v->lval != not_lval && v->modifiable == 0)
2853 return 0;
2854 }
2855
2856 /* The expression itself looks suitable for using a hardware
2857 watchpoint, but give the target machine a chance to reject it. */
2858 return found_memory_cnt;
2859 }
2860
2861 static void watch_command (arg, from_tty)
2862 char *arg;
2863 int from_tty;
2864 {
2865 watch_command_1 (arg, 0, from_tty);
2866 }
2867
2868 static void rwatch_command (arg, from_tty)
2869 char *arg;
2870 int from_tty;
2871 {
2872 watch_command_1 (arg, 1, from_tty);
2873 }
2874
2875 static void awatch_command (arg, from_tty)
2876 char *arg;
2877 int from_tty;
2878 {
2879 watch_command_1 (arg, 2, from_tty);
2880 }
2881
2882 \f
2883 /* Helper routine for the until_command routine in infcmd.c. Here
2884 because it uses the mechanisms of breakpoints. */
2885
2886 /* ARGSUSED */
2887 void
2888 until_break_command (arg, from_tty)
2889 char *arg;
2890 int from_tty;
2891 {
2892 struct symtabs_and_lines sals;
2893 struct symtab_and_line sal;
2894 struct frame_info *prev_frame = get_prev_frame (selected_frame);
2895 struct breakpoint *breakpoint;
2896 struct cleanup *old_chain;
2897
2898 clear_proceed_status ();
2899
2900 /* Set a breakpoint where the user wants it and at return from
2901 this function */
2902
2903 if (default_breakpoint_valid)
2904 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
2905 default_breakpoint_line, (char ***)NULL);
2906 else
2907 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, (char ***)NULL);
2908
2909 if (sals.nelts != 1)
2910 error ("Couldn't get information on specified line.");
2911
2912 sal = sals.sals[0];
2913 free ((PTR)sals.sals); /* malloc'd, so freed */
2914
2915 if (*arg)
2916 error ("Junk at end of arguments.");
2917
2918 resolve_sal_pc (&sal);
2919
2920 breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
2921
2922 old_chain = make_cleanup(delete_breakpoint, breakpoint);
2923
2924 /* Keep within the current frame */
2925
2926 if (prev_frame)
2927 {
2928 sal = find_pc_line (prev_frame->pc, 0);
2929 sal.pc = prev_frame->pc;
2930 breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
2931 make_cleanup(delete_breakpoint, breakpoint);
2932 }
2933
2934 proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
2935 do_cleanups(old_chain);
2936 }
2937 \f
2938 #if 0
2939 /* These aren't used; I don't konw what they were for. */
2940 /* Set a breakpoint at the catch clause for NAME. */
2941 static int
2942 catch_breakpoint (name)
2943 char *name;
2944 {
2945 }
2946
2947 static int
2948 disable_catch_breakpoint ()
2949 {
2950 }
2951
2952 static int
2953 delete_catch_breakpoint ()
2954 {
2955 }
2956
2957 static int
2958 enable_catch_breakpoint ()
2959 {
2960 }
2961 #endif /* 0 */
2962
2963 struct sal_chain
2964 {
2965 struct sal_chain *next;
2966 struct symtab_and_line sal;
2967 };
2968
2969 #if 0
2970 /* This isn't used; I don't know what it was for. */
2971 /* For each catch clause identified in ARGS, run FUNCTION
2972 with that clause as an argument. */
2973 static struct symtabs_and_lines
2974 map_catch_names (args, function)
2975 char *args;
2976 int (*function)();
2977 {
2978 register char *p = args;
2979 register char *p1;
2980 struct symtabs_and_lines sals;
2981 #if 0
2982 struct sal_chain *sal_chain = 0;
2983 #endif
2984
2985 if (p == 0)
2986 error_no_arg ("one or more catch names");
2987
2988 sals.nelts = 0;
2989 sals.sals = NULL;
2990
2991 while (*p)
2992 {
2993 p1 = p;
2994 /* Don't swallow conditional part. */
2995 if (p1[0] == 'i' && p1[1] == 'f'
2996 && (p1[2] == ' ' || p1[2] == '\t'))
2997 break;
2998
2999 if (isalpha (*p1))
3000 {
3001 p1++;
3002 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
3003 p1++;
3004 }
3005
3006 if (*p1 && *p1 != ' ' && *p1 != '\t')
3007 error ("Arguments must be catch names.");
3008
3009 *p1 = 0;
3010 #if 0
3011 if (function (p))
3012 {
3013 struct sal_chain *next = (struct sal_chain *)
3014 alloca (sizeof (struct sal_chain));
3015 next->next = sal_chain;
3016 next->sal = get_catch_sal (p);
3017 sal_chain = next;
3018 goto win;
3019 }
3020 #endif
3021 printf_unfiltered ("No catch clause for exception %s.\n", p);
3022 #if 0
3023 win:
3024 #endif
3025 p = p1;
3026 while (*p == ' ' || *p == '\t') p++;
3027 }
3028 }
3029 #endif /* 0 */
3030
3031 /* This shares a lot of code with `print_frame_label_vars' from stack.c. */
3032
3033 static struct symtabs_and_lines
3034 get_catch_sals (this_level_only)
3035 int this_level_only;
3036 {
3037 register struct blockvector *bl;
3038 register struct block *block;
3039 int index, have_default = 0;
3040 CORE_ADDR pc;
3041 struct symtabs_and_lines sals;
3042 struct sal_chain *sal_chain = 0;
3043 char *blocks_searched;
3044
3045 /* Not sure whether an error message is always the correct response,
3046 but it's better than a core dump. */
3047 if (selected_frame == NULL)
3048 error ("No selected frame.");
3049 block = get_frame_block (selected_frame);
3050 pc = selected_frame->pc;
3051
3052 sals.nelts = 0;
3053 sals.sals = NULL;
3054
3055 if (block == 0)
3056 error ("No symbol table info available.\n");
3057
3058 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
3059 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
3060 memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
3061
3062 while (block != 0)
3063 {
3064 CORE_ADDR end = BLOCK_END (block) - 4;
3065 int last_index;
3066
3067 if (bl != blockvector_for_pc (end, &index))
3068 error ("blockvector blotch");
3069 if (BLOCKVECTOR_BLOCK (bl, index) != block)
3070 error ("blockvector botch");
3071 last_index = BLOCKVECTOR_NBLOCKS (bl);
3072 index += 1;
3073
3074 /* Don't print out blocks that have gone by. */
3075 while (index < last_index
3076 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
3077 index++;
3078
3079 while (index < last_index
3080 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
3081 {
3082 if (blocks_searched[index] == 0)
3083 {
3084 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
3085 int nsyms;
3086 register int i;
3087 register struct symbol *sym;
3088
3089 nsyms = BLOCK_NSYMS (b);
3090
3091 for (i = 0; i < nsyms; i++)
3092 {
3093 sym = BLOCK_SYM (b, i);
3094 if (STREQ (SYMBOL_NAME (sym), "default"))
3095 {
3096 if (have_default)
3097 continue;
3098 have_default = 1;
3099 }
3100 if (SYMBOL_CLASS (sym) == LOC_LABEL)
3101 {
3102 struct sal_chain *next = (struct sal_chain *)
3103 alloca (sizeof (struct sal_chain));
3104 next->next = sal_chain;
3105 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
3106 sal_chain = next;
3107 }
3108 }
3109 blocks_searched[index] = 1;
3110 }
3111 index++;
3112 }
3113 if (have_default)
3114 break;
3115 if (sal_chain && this_level_only)
3116 break;
3117
3118 /* After handling the function's top-level block, stop.
3119 Don't continue to its superblock, the block of
3120 per-file symbols. */
3121 if (BLOCK_FUNCTION (block))
3122 break;
3123 block = BLOCK_SUPERBLOCK (block);
3124 }
3125
3126 if (sal_chain)
3127 {
3128 struct sal_chain *tmp_chain;
3129
3130 /* Count the number of entries. */
3131 for (index = 0, tmp_chain = sal_chain; tmp_chain;
3132 tmp_chain = tmp_chain->next)
3133 index++;
3134
3135 sals.nelts = index;
3136 sals.sals = (struct symtab_and_line *)
3137 xmalloc (index * sizeof (struct symtab_and_line));
3138 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
3139 sals.sals[index] = sal_chain->sal;
3140 }
3141
3142 return sals;
3143 }
3144
3145 /* Commands to deal with catching exceptions. */
3146
3147 static void
3148 catch_command_1 (arg, tempflag, from_tty)
3149 char *arg;
3150 int tempflag;
3151 int from_tty;
3152 {
3153 /* First, translate ARG into something we can deal with in terms
3154 of breakpoints. */
3155
3156 struct symtabs_and_lines sals;
3157 struct symtab_and_line sal;
3158 register struct expression *cond = 0;
3159 register struct breakpoint *b;
3160 char *save_arg;
3161 int i;
3162
3163 INIT_SAL (&sal); /* initialize to zeroes */
3164
3165 /* If no arg given, or if first arg is 'if ', all active catch clauses
3166 are breakpointed. */
3167
3168 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
3169 && (arg[2] == ' ' || arg[2] == '\t')))
3170 {
3171 /* Grab all active catch clauses. */
3172 sals = get_catch_sals (0);
3173 }
3174 else
3175 {
3176 /* Grab selected catch clauses. */
3177 error ("catch NAME not implemented");
3178 #if 0
3179 /* This isn't used; I don't know what it was for. */
3180 sals = map_catch_names (arg, catch_breakpoint);
3181 #endif
3182 }
3183
3184 if (! sals.nelts)
3185 return;
3186
3187 save_arg = arg;
3188 for (i = 0; i < sals.nelts; i++)
3189 {
3190 resolve_sal_pc (&sals.sals[i]);
3191
3192 while (arg && *arg)
3193 {
3194 if (arg[0] == 'i' && arg[1] == 'f'
3195 && (arg[2] == ' ' || arg[2] == '\t'))
3196 cond = parse_exp_1 ((arg += 2, &arg),
3197 block_for_pc (sals.sals[i].pc), 0);
3198 else
3199 error ("Junk at end of arguments.");
3200 }
3201 arg = save_arg;
3202 }
3203
3204 for (i = 0; i < sals.nelts; i++)
3205 {
3206 sal = sals.sals[i];
3207
3208 if (from_tty)
3209 describe_other_breakpoints (sal.pc, sal.section);
3210
3211 b = set_raw_breakpoint (sal);
3212 set_breakpoint_count (breakpoint_count + 1);
3213 b->number = breakpoint_count;
3214 b->type = bp_breakpoint;
3215 b->cond = cond;
3216 b->enable = enabled;
3217 b->disposition = tempflag ? del : donttouch;
3218
3219 mention (b);
3220 }
3221
3222 if (sals.nelts > 1)
3223 {
3224 printf_unfiltered ("Multiple breakpoints were set.\n");
3225 printf_unfiltered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
3226 }
3227 free ((PTR)sals.sals);
3228 }
3229
3230 /* Used by the gui, could be made a worker for other things. */
3231
3232 struct breakpoint *
3233 set_breakpoint_sal (sal)
3234 struct symtab_and_line sal;
3235 {
3236 struct breakpoint *b;
3237 b = set_raw_breakpoint (sal);
3238 set_breakpoint_count (breakpoint_count + 1);
3239 b->number = breakpoint_count;
3240 b->type = bp_breakpoint;
3241 b->cond = 0;
3242 b->thread = -1;
3243 return b;
3244 }
3245
3246 #if 0
3247 /* These aren't used; I don't know what they were for. */
3248 /* Disable breakpoints on all catch clauses described in ARGS. */
3249 static void
3250 disable_catch (args)
3251 char *args;
3252 {
3253 /* Map the disable command to catch clauses described in ARGS. */
3254 }
3255
3256 /* Enable breakpoints on all catch clauses described in ARGS. */
3257 static void
3258 enable_catch (args)
3259 char *args;
3260 {
3261 /* Map the disable command to catch clauses described in ARGS. */
3262 }
3263
3264 /* Delete breakpoints on all catch clauses in the active scope. */
3265 static void
3266 delete_catch (args)
3267 char *args;
3268 {
3269 /* Map the delete command to catch clauses described in ARGS. */
3270 }
3271 #endif /* 0 */
3272
3273 static void
3274 catch_command (arg, from_tty)
3275 char *arg;
3276 int from_tty;
3277 {
3278 catch_command_1 (arg, 0, from_tty);
3279 }
3280 \f
3281 static void
3282 clear_command (arg, from_tty)
3283 char *arg;
3284 int from_tty;
3285 {
3286 register struct breakpoint *b, *b1;
3287 struct symtabs_and_lines sals;
3288 struct symtab_and_line sal;
3289 register struct breakpoint *found;
3290 int i;
3291
3292 if (arg)
3293 {
3294 sals = decode_line_spec (arg, 1);
3295 }
3296 else
3297 {
3298 sals.sals = (struct symtab_and_line *)
3299 xmalloc (sizeof (struct symtab_and_line));
3300 INIT_SAL (&sal); /* initialize to zeroes */
3301 sal.line = default_breakpoint_line;
3302 sal.symtab = default_breakpoint_symtab;
3303 if (sal.symtab == 0)
3304 error ("No source file specified.");
3305
3306 sals.sals[0] = sal;
3307 sals.nelts = 1;
3308 }
3309
3310 for (i = 0; i < sals.nelts; i++)
3311 {
3312 /* If exact pc given, clear bpts at that pc.
3313 But if sal.pc is zero, clear all bpts on specified line. */
3314 sal = sals.sals[i];
3315 found = (struct breakpoint *) 0;
3316
3317 while (breakpoint_chain
3318 && (sal.pc
3319 ? (breakpoint_chain->address == sal.pc &&
3320 (overlay_debugging == 0 ||
3321 breakpoint_chain->section == sal.section))
3322 : (breakpoint_chain->source_file != NULL
3323 && sal.symtab != NULL
3324 && STREQ (breakpoint_chain->source_file,
3325 sal.symtab->filename)
3326 && breakpoint_chain->line_number == sal.line)))
3327 {
3328 b1 = breakpoint_chain;
3329 breakpoint_chain = b1->next;
3330 b1->next = found;
3331 found = b1;
3332 }
3333
3334 ALL_BREAKPOINTS (b)
3335 while (b->next
3336 && b->next->type != bp_watchpoint
3337 && b->next->type != bp_hardware_watchpoint
3338 && b->next->type != bp_read_watchpoint
3339 && b->next->type != bp_access_watchpoint
3340 && (sal.pc
3341 ? (b->next->address == sal.pc &&
3342 (overlay_debugging == 0 ||
3343 b->next->section == sal.section))
3344 : (b->next->source_file != NULL
3345 && sal.symtab != NULL
3346 && STREQ (b->next->source_file, sal.symtab->filename)
3347 && b->next->line_number == sal.line)))
3348 {
3349 b1 = b->next;
3350 b->next = b1->next;
3351 b1->next = found;
3352 found = b1;
3353 }
3354
3355 if (found == 0)
3356 {
3357 if (arg)
3358 error ("No breakpoint at %s.", arg);
3359 else
3360 error ("No breakpoint at this line.");
3361 }
3362
3363 if (found->next) from_tty = 1; /* Always report if deleted more than one */
3364 if (from_tty) printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
3365 breakpoints_changed ();
3366 while (found)
3367 {
3368 if (from_tty) printf_unfiltered ("%d ", found->number);
3369 b1 = found->next;
3370 delete_breakpoint (found);
3371 found = b1;
3372 }
3373 if (from_tty) putchar_unfiltered ('\n');
3374 }
3375 free ((PTR)sals.sals);
3376 }
3377 \f
3378 /* Delete breakpoint in BS if they are `delete' breakpoints and
3379 all breakpoints that are marked for deletion, whether hit or not.
3380 This is called after any breakpoint is hit, or after errors. */
3381
3382 void
3383 breakpoint_auto_delete (bs)
3384 bpstat bs;
3385 {
3386 struct breakpoint *b, *temp;
3387
3388 for (; bs; bs = bs->next)
3389 if (bs->breakpoint_at && bs->breakpoint_at->disposition == del
3390 && bs->stop)
3391 delete_breakpoint (bs->breakpoint_at);
3392
3393 ALL_BREAKPOINTS_SAFE (b, temp)
3394 {
3395 if (b->disposition == del_at_next_stop)
3396 delete_breakpoint (b);
3397 }
3398 }
3399
3400 /* Delete a breakpoint and clean up all traces of it in the data structures. */
3401
3402 void
3403 delete_breakpoint (bpt)
3404 struct breakpoint *bpt;
3405 {
3406 register struct breakpoint *b;
3407 register bpstat bs;
3408
3409 if (delete_breakpoint_hook)
3410 delete_breakpoint_hook (bpt);
3411
3412 if (bpt->inserted)
3413 remove_breakpoint (bpt);
3414
3415 if (breakpoint_chain == bpt)
3416 breakpoint_chain = bpt->next;
3417
3418 ALL_BREAKPOINTS (b)
3419 if (b->next == bpt)
3420 {
3421 b->next = bpt->next;
3422 break;
3423 }
3424
3425 check_duplicates (bpt->address, bpt->section);
3426 /* If this breakpoint was inserted, and there is another breakpoint
3427 at the same address, we need to insert the other breakpoint. */
3428 if (bpt->inserted
3429 && bpt->type != bp_hardware_watchpoint
3430 && bpt->type != bp_read_watchpoint
3431 && bpt->type != bp_access_watchpoint)
3432 {
3433 ALL_BREAKPOINTS (b)
3434 if (b->address == bpt->address
3435 && b->section == bpt->section
3436 && !b->duplicate
3437 && b->enable != disabled
3438 && b->enable != shlib_disabled)
3439 {
3440 int val;
3441 val = target_insert_breakpoint (b->address, b->shadow_contents);
3442 if (val != 0)
3443 {
3444 target_terminal_ours_for_output ();
3445 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
3446 memory_error (val, b->address); /* which bombs us out */
3447 }
3448 else
3449 b->inserted = 1;
3450 }
3451 }
3452
3453 free_command_lines (&bpt->commands);
3454 if (bpt->cond)
3455 free (bpt->cond);
3456 if (bpt->cond_string != NULL)
3457 free (bpt->cond_string);
3458 if (bpt->addr_string != NULL)
3459 free (bpt->addr_string);
3460 if (bpt->exp != NULL)
3461 free (bpt->exp);
3462 if (bpt->exp_string != NULL)
3463 free (bpt->exp_string);
3464 if (bpt->val != NULL)
3465 value_free (bpt->val);
3466 if (bpt->source_file != NULL)
3467 free (bpt->source_file);
3468
3469 /* Be sure no bpstat's are pointing at it after it's been freed. */
3470 /* FIXME, how can we find all bpstat's?
3471 We just check stop_bpstat for now. */
3472 for (bs = stop_bpstat; bs; bs = bs->next)
3473 if (bs->breakpoint_at == bpt)
3474 bs->breakpoint_at = NULL;
3475 free ((PTR)bpt);
3476 }
3477
3478 static void
3479 delete_command (arg, from_tty)
3480 char *arg;
3481 int from_tty;
3482 {
3483 struct breakpoint *b, *temp;
3484
3485 if (arg == 0)
3486 {
3487 /* Ask user only if there are some breakpoints to delete. */
3488 if (!from_tty
3489 || (breakpoint_chain && query ("Delete all breakpoints? ")))
3490 {
3491 /* No arg; clear all breakpoints. */
3492 ALL_BREAKPOINTS_SAFE(b, temp)
3493 /* do not delete call-dummy breakpoint unles explicitly named! */
3494 if (b->type != bp_call_dummy)
3495 delete_breakpoint (b);
3496 }
3497 }
3498 else
3499 map_breakpoint_numbers (arg, delete_breakpoint);
3500 }
3501
3502 /* Reset a breakpoint given it's struct breakpoint * BINT.
3503 The value we return ends up being the return value from catch_errors.
3504 Unused in this case. */
3505
3506 static int
3507 breakpoint_re_set_one (bint)
3508 char *bint;
3509 {
3510 struct breakpoint *b = (struct breakpoint *)bint; /* get past catch_errs */
3511 struct value *mark;
3512 int i;
3513 struct symtabs_and_lines sals;
3514 char *s;
3515 enum enable save_enable;
3516
3517 switch (b->type)
3518 {
3519 case bp_breakpoint:
3520 case bp_hardware_breakpoint:
3521 if (b->addr_string == NULL)
3522 {
3523 /* Anything without a string can't be re-set. */
3524 delete_breakpoint (b);
3525 return 0;
3526 }
3527 /* In case we have a problem, disable this breakpoint. We'll restore
3528 its status if we succeed. */
3529 save_enable = b->enable;
3530 b->enable = disabled;
3531
3532 set_language (b->language);
3533 input_radix = b->input_radix;
3534 s = b->addr_string;
3535 sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0, (char ***)NULL);
3536 for (i = 0; i < sals.nelts; i++)
3537 {
3538 resolve_sal_pc (&sals.sals[i]);
3539
3540 /* Reparse conditions, they might contain references to the
3541 old symtab. */
3542 if (b->cond_string != NULL)
3543 {
3544 s = b->cond_string;
3545 if (b->cond)
3546 free ((PTR)b->cond);
3547 b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
3548 }
3549
3550 /* We need to re-set the breakpoint if the address changes...*/
3551 if (b->address != sals.sals[i].pc
3552 /* ...or new and old breakpoints both have source files, and
3553 the source file name or the line number changes... */
3554 || (b->source_file != NULL
3555 && sals.sals[i].symtab != NULL
3556 && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
3557 || b->line_number != sals.sals[i].line)
3558 )
3559 /* ...or we switch between having a source file and not having
3560 one. */
3561 || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
3562 )
3563 {
3564 if (b->source_file != NULL)
3565 free (b->source_file);
3566 if (sals.sals[i].symtab == NULL)
3567 b->source_file = NULL;
3568 else
3569 b->source_file =
3570 savestring (sals.sals[i].symtab->filename,
3571 strlen (sals.sals[i].symtab->filename));
3572 b->line_number = sals.sals[i].line;
3573 b->address = sals.sals[i].pc;
3574 check_duplicates (b->address, b->section);
3575
3576 mention (b);
3577
3578 /* Might be better to do this just once per breakpoint_re_set,
3579 rather than once for every breakpoint. */
3580 breakpoints_changed ();
3581 }
3582 b->section = sals.sals[i].section;
3583 b->enable = save_enable; /* Restore it, this worked. */
3584 }
3585 free ((PTR)sals.sals);
3586 break;
3587
3588 case bp_watchpoint:
3589 case bp_hardware_watchpoint:
3590 case bp_read_watchpoint:
3591 case bp_access_watchpoint:
3592 innermost_block = NULL;
3593 /* The issue arises of what context to evaluate this in. The same
3594 one as when it was set, but what does that mean when symbols have
3595 been re-read? We could save the filename and functionname, but
3596 if the context is more local than that, the best we could do would
3597 be something like how many levels deep and which index at that
3598 particular level, but that's going to be less stable than filenames
3599 or functionnames. */
3600 /* So for now, just use a global context. */
3601 if (b->exp)
3602 free ((PTR)b->exp);
3603 b->exp = parse_expression (b->exp_string);
3604 b->exp_valid_block = innermost_block;
3605 mark = value_mark ();
3606 if (b->val)
3607 value_free (b->val);
3608 b->val = evaluate_expression (b->exp);
3609 release_value (b->val);
3610 if (VALUE_LAZY (b->val))
3611 value_fetch_lazy (b->val);
3612
3613 if (b->cond_string != NULL)
3614 {
3615 s = b->cond_string;
3616 if (b->cond)
3617 free ((PTR)b->cond);
3618 b->cond = parse_exp_1 (&s, (struct block *)0, 0);
3619 }
3620 if (b->enable == enabled)
3621 mention (b);
3622 value_free_to_mark (mark);
3623 break;
3624
3625 default:
3626 printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
3627 /* fall through */
3628 /* Delete longjmp breakpoints, they will be reset later by
3629 breakpoint_re_set. */
3630 case bp_longjmp:
3631 case bp_longjmp_resume:
3632 delete_breakpoint (b);
3633 break;
3634
3635 /* This breakpoint is special, it's set up when the inferior
3636 starts and we really don't want to touch it. */
3637 case bp_shlib_event:
3638
3639 /* Keep temporary breakpoints, which can be encountered when we step
3640 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
3641 Otherwise these should have been blown away via the cleanup chain
3642 or by breakpoint_init_inferior when we rerun the executable. */
3643 case bp_until:
3644 case bp_finish:
3645 case bp_watchpoint_scope:
3646 case bp_call_dummy:
3647 case bp_step_resume:
3648 break;
3649 }
3650
3651 return 0;
3652 }
3653
3654 /* Re-set all breakpoints after symbols have been re-loaded. */
3655 void
3656 breakpoint_re_set ()
3657 {
3658 struct breakpoint *b, *temp;
3659 enum language save_language;
3660 int save_input_radix;
3661 static char message1[] = "Error in re-setting breakpoint %d:\n";
3662 char message[sizeof (message1) + 30 /* slop */];
3663
3664 save_language = current_language->la_language;
3665 save_input_radix = input_radix;
3666 ALL_BREAKPOINTS_SAFE (b, temp)
3667 {
3668 sprintf (message, message1, b->number); /* Format possible error msg */
3669 catch_errors (breakpoint_re_set_one, (char *) b, message,
3670 RETURN_MASK_ALL);
3671 }
3672 set_language (save_language);
3673 input_radix = save_input_radix;
3674
3675 #ifdef GET_LONGJMP_TARGET
3676 create_longjmp_breakpoint ("longjmp");
3677 create_longjmp_breakpoint ("_longjmp");
3678 create_longjmp_breakpoint ("siglongjmp");
3679 create_longjmp_breakpoint ("_siglongjmp");
3680 create_longjmp_breakpoint (NULL);
3681 #endif
3682
3683 #if 0
3684 /* Took this out (temporarily at least), since it produces an extra
3685 blank line at startup. This messes up the gdbtests. -PB */
3686 /* Blank line to finish off all those mention() messages we just printed. */
3687 printf_filtered ("\n");
3688 #endif
3689 }
3690 \f
3691 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
3692 If from_tty is nonzero, it prints a message to that effect,
3693 which ends with a period (no newline). */
3694
3695 void
3696 set_ignore_count (bptnum, count, from_tty)
3697 int bptnum, count, from_tty;
3698 {
3699 register struct breakpoint *b;
3700
3701 if (count < 0)
3702 count = 0;
3703
3704 ALL_BREAKPOINTS (b)
3705 if (b->number == bptnum)
3706 {
3707 b->ignore_count = count;
3708 if (!from_tty)
3709 return;
3710 else if (count == 0)
3711 printf_filtered ("Will stop next time breakpoint %d is reached.",
3712 bptnum);
3713 else if (count == 1)
3714 printf_filtered ("Will ignore next crossing of breakpoint %d.",
3715 bptnum);
3716 else
3717 printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
3718 count, bptnum);
3719 breakpoints_changed ();
3720 return;
3721 }
3722
3723 error ("No breakpoint number %d.", bptnum);
3724 }
3725
3726 /* Clear the ignore counts of all breakpoints. */
3727 void
3728 breakpoint_clear_ignore_counts ()
3729 {
3730 struct breakpoint *b;
3731
3732 ALL_BREAKPOINTS (b)
3733 b->ignore_count = 0;
3734 }
3735
3736 /* Command to set ignore-count of breakpoint N to COUNT. */
3737
3738 static void
3739 ignore_command (args, from_tty)
3740 char *args;
3741 int from_tty;
3742 {
3743 char *p = args;
3744 register int num;
3745
3746 if (p == 0)
3747 error_no_arg ("a breakpoint number");
3748
3749 num = get_number (&p);
3750
3751 if (*p == 0)
3752 error ("Second argument (specified ignore-count) is missing.");
3753
3754 set_ignore_count (num,
3755 longest_to_int (value_as_long (parse_and_eval (p))),
3756 from_tty);
3757 printf_filtered ("\n");
3758 breakpoints_changed ();
3759 }
3760 \f
3761 /* Call FUNCTION on each of the breakpoints
3762 whose numbers are given in ARGS. */
3763
3764 static void
3765 map_breakpoint_numbers (args, function)
3766 char *args;
3767 void (*function) PARAMS ((struct breakpoint *));
3768 {
3769 register char *p = args;
3770 char *p1;
3771 register int num;
3772 register struct breakpoint *b;
3773
3774 if (p == 0)
3775 error_no_arg ("one or more breakpoint numbers");
3776
3777 while (*p)
3778 {
3779 p1 = p;
3780
3781 num = get_number (&p1);
3782
3783 ALL_BREAKPOINTS (b)
3784 if (b->number == num)
3785 {
3786 struct breakpoint *related_breakpoint = b->related_breakpoint;
3787 function (b);
3788 if (related_breakpoint)
3789 function (related_breakpoint);
3790 goto win;
3791 }
3792 printf_unfiltered ("No breakpoint number %d.\n", num);
3793 win:
3794 p = p1;
3795 }
3796 }
3797
3798 void
3799 disable_breakpoint (bpt)
3800 struct breakpoint *bpt;
3801 {
3802 /* Never disable a watchpoint scope breakpoint; we want to
3803 hit them when we leave scope so we can delete both the
3804 watchpoint and its scope breakpoint at that time. */
3805 if (bpt->type == bp_watchpoint_scope)
3806 return;
3807
3808 bpt->enable = disabled;
3809
3810 check_duplicates (bpt->address, bpt->section);
3811
3812 if (modify_breakpoint_hook)
3813 modify_breakpoint_hook (bpt);
3814 }
3815
3816 /* ARGSUSED */
3817 static void
3818 disable_command (args, from_tty)
3819 char *args;
3820 int from_tty;
3821 {
3822 register struct breakpoint *bpt;
3823 if (args == 0)
3824 ALL_BREAKPOINTS (bpt)
3825 switch (bpt->type)
3826 {
3827 case bp_breakpoint:
3828 case bp_hardware_breakpoint:
3829 case bp_watchpoint:
3830 case bp_hardware_watchpoint:
3831 case bp_read_watchpoint:
3832 case bp_access_watchpoint:
3833 disable_breakpoint (bpt);
3834 default:
3835 continue;
3836 }
3837 else
3838 map_breakpoint_numbers (args, disable_breakpoint);
3839 }
3840
3841 static void
3842 do_enable_breakpoint (bpt, disposition)
3843 struct breakpoint *bpt;
3844 enum bpdisp disposition;
3845 {
3846 struct frame_info *save_selected_frame = NULL;
3847 int save_selected_frame_level = -1;
3848 int target_resources_ok, other_type_used;
3849 struct value *mark;
3850
3851 if (bpt->type == bp_hardware_breakpoint)
3852 {
3853 int i;
3854 i = hw_breakpoint_used_count();
3855 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
3856 bp_hardware_breakpoint, i+1, 0);
3857 if (target_resources_ok == 0)
3858 error ("No hardware breakpoint support in the target.");
3859 else if (target_resources_ok < 0)
3860 error ("Hardware breakpoints used exceeds limit.");
3861 }
3862
3863 bpt->enable = enabled;
3864 bpt->disposition = disposition;
3865 check_duplicates (bpt->address, bpt->section);
3866 breakpoints_changed ();
3867
3868 if (bpt->type == bp_watchpoint || bpt->type == bp_hardware_watchpoint ||
3869 bpt->type == bp_read_watchpoint || bpt->type == bp_access_watchpoint)
3870 {
3871 if (bpt->exp_valid_block != NULL)
3872 {
3873 struct frame_info *fr =
3874 find_frame_addr_in_frame_chain (bpt->watchpoint_frame);
3875 if (fr == NULL)
3876 {
3877 printf_filtered ("\
3878 Cannot enable watchpoint %d because the block in which its expression\n\
3879 is valid is not currently in scope.\n", bpt->number);
3880 bpt->enable = disabled;
3881 return;
3882 }
3883
3884 save_selected_frame = selected_frame;
3885 save_selected_frame_level = selected_frame_level;
3886 select_frame (fr, -1);
3887 }
3888
3889 value_free (bpt->val);
3890 mark = value_mark ();
3891 bpt->val = evaluate_expression (bpt->exp);
3892 release_value (bpt->val);
3893 if (VALUE_LAZY (bpt->val))
3894 value_fetch_lazy (bpt->val);
3895
3896 if (bpt->type == bp_hardware_watchpoint ||
3897 bpt->type == bp_read_watchpoint ||
3898 bpt->type == bp_access_watchpoint)
3899 {
3900 int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
3901 int mem_cnt = can_use_hardware_watchpoint (bpt->val);
3902
3903 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
3904 bpt->type, i + mem_cnt, other_type_used);
3905 /* we can consider of type is bp_hardware_watchpoint, convert to
3906 bp_watchpoint in the following condition */
3907 if (target_resources_ok < 0)
3908 {
3909 printf_filtered("\
3910 Cannot enable watchpoint %d because target watch resources\n\
3911 have been allocated for other watchpoints.\n", bpt->number);
3912 bpt->enable = disabled;
3913 value_free_to_mark (mark);
3914 return;
3915 }
3916 }
3917
3918 if (save_selected_frame_level >= 0)
3919 select_frame (save_selected_frame, save_selected_frame_level);
3920 value_free_to_mark (mark);
3921 }
3922 if (modify_breakpoint_hook)
3923 modify_breakpoint_hook (bpt);
3924 }
3925
3926 void
3927 enable_breakpoint (bpt)
3928 struct breakpoint *bpt;
3929 {
3930 do_enable_breakpoint (bpt, donttouch);
3931 }
3932
3933 /* The enable command enables the specified breakpoints (or all defined
3934 breakpoints) so they once again become (or continue to be) effective
3935 in stopping the inferior. */
3936
3937 /* ARGSUSED */
3938 static void
3939 enable_command (args, from_tty)
3940 char *args;
3941 int from_tty;
3942 {
3943 register struct breakpoint *bpt;
3944 if (args == 0)
3945 ALL_BREAKPOINTS (bpt)
3946 switch (bpt->type)
3947 {
3948 case bp_breakpoint:
3949 case bp_hardware_breakpoint:
3950 case bp_watchpoint:
3951 case bp_hardware_watchpoint:
3952 case bp_read_watchpoint:
3953 case bp_access_watchpoint:
3954 enable_breakpoint (bpt);
3955 default:
3956 continue;
3957 }
3958 else
3959 map_breakpoint_numbers (args, enable_breakpoint);
3960 }
3961
3962 static void
3963 enable_once_breakpoint (bpt)
3964 struct breakpoint *bpt;
3965 {
3966 do_enable_breakpoint (bpt, disable);
3967 }
3968
3969 /* ARGSUSED */
3970 static void
3971 enable_once_command (args, from_tty)
3972 char *args;
3973 int from_tty;
3974 {
3975 map_breakpoint_numbers (args, enable_once_breakpoint);
3976 }
3977
3978 static void
3979 enable_delete_breakpoint (bpt)
3980 struct breakpoint *bpt;
3981 {
3982 do_enable_breakpoint (bpt, del);
3983 }
3984
3985 /* ARGSUSED */
3986 static void
3987 enable_delete_command (args, from_tty)
3988 char *args;
3989 int from_tty;
3990 {
3991 map_breakpoint_numbers (args, enable_delete_breakpoint);
3992 }
3993 \f
3994 /* Use default_breakpoint_'s, or nothing if they aren't valid. */
3995
3996 struct symtabs_and_lines
3997 decode_line_spec_1 (string, funfirstline)
3998 char *string;
3999 int funfirstline;
4000 {
4001 struct symtabs_and_lines sals;
4002 if (string == 0)
4003 error ("Empty line specification.");
4004 if (default_breakpoint_valid)
4005 sals = decode_line_1 (&string, funfirstline,
4006 default_breakpoint_symtab, default_breakpoint_line,
4007 (char ***)NULL);
4008 else
4009 sals = decode_line_1 (&string, funfirstline,
4010 (struct symtab *)NULL, 0, (char ***)NULL);
4011 if (*string)
4012 error ("Junk at end of line specification: %s", string);
4013 return sals;
4014 }
4015 \f
4016 void
4017 _initialize_breakpoint ()
4018 {
4019 breakpoint_chain = 0;
4020 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
4021 before a breakpoint is set. */
4022 breakpoint_count = 0;
4023
4024 add_com ("ignore", class_breakpoint, ignore_command,
4025 "Set ignore-count of breakpoint number N to COUNT.\n\
4026 Usage is `ignore N COUNT'.");
4027
4028 add_com ("commands", class_breakpoint, commands_command,
4029 "Set commands to be executed when a breakpoint is hit.\n\
4030 Give breakpoint number as argument after \"commands\".\n\
4031 With no argument, the targeted breakpoint is the last one set.\n\
4032 The commands themselves follow starting on the next line.\n\
4033 Type a line containing \"end\" to indicate the end of them.\n\
4034 Give \"silent\" as the first line to make the breakpoint silent;\n\
4035 then no output is printed when it is hit, except what the commands print.");
4036
4037 add_com ("condition", class_breakpoint, condition_command,
4038 "Specify breakpoint number N to break only if COND is true.\n\
4039 Usage is `condition N COND', where N is an integer and COND is an\n\
4040 expression to be evaluated whenever breakpoint N is reached. ");
4041
4042 add_com ("tbreak", class_breakpoint, tbreak_command,
4043 "Set a temporary breakpoint. Args like \"break\" command.\n\
4044 Like \"break\" except the breakpoint is only temporary,\n\
4045 so it will be deleted when hit. Equivalent to \"break\" followed\n\
4046 by using \"enable delete\" on the breakpoint number.");
4047
4048 add_com ("hbreak", class_breakpoint, hbreak_command,
4049 "Set a hardware assisted breakpoint. Args like \"break\" command.\n\
4050 Like \"break\" except the breakpoint requires hardware support,\n\
4051 some target hardware may not have this support.");
4052
4053 add_com ("thbreak", class_breakpoint, thbreak_command,
4054 "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
4055 Like \"hbreak\" except the breakpoint is only temporary,\n\
4056 so it will be deleted when hit.");
4057
4058 add_prefix_cmd ("enable", class_breakpoint, enable_command,
4059 "Enable some breakpoints.\n\
4060 Give breakpoint numbers (separated by spaces) as arguments.\n\
4061 With no subcommand, breakpoints are enabled until you command otherwise.\n\
4062 This is used to cancel the effect of the \"disable\" command.\n\
4063 With a subcommand you can enable temporarily.",
4064 &enablelist, "enable ", 1, &cmdlist);
4065
4066 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
4067 "Enable some breakpoints.\n\
4068 Give breakpoint numbers (separated by spaces) as arguments.\n\
4069 This is used to cancel the effect of the \"disable\" command.\n\
4070 May be abbreviated to simply \"enable\".\n",
4071 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
4072
4073 add_cmd ("once", no_class, enable_once_command,
4074 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
4075 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
4076 &enablebreaklist);
4077
4078 add_cmd ("delete", no_class, enable_delete_command,
4079 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
4080 If a breakpoint is hit while enabled in this fashion, it is deleted.",
4081 &enablebreaklist);
4082
4083 add_cmd ("delete", no_class, enable_delete_command,
4084 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
4085 If a breakpoint is hit while enabled in this fashion, it is deleted.",
4086 &enablelist);
4087
4088 add_cmd ("once", no_class, enable_once_command,
4089 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
4090 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
4091 &enablelist);
4092
4093 add_prefix_cmd ("disable", class_breakpoint, disable_command,
4094 "Disable some breakpoints.\n\
4095 Arguments are breakpoint numbers with spaces in between.\n\
4096 To disable all breakpoints, give no argument.\n\
4097 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
4098 &disablelist, "disable ", 1, &cmdlist);
4099 add_com_alias ("dis", "disable", class_breakpoint, 1);
4100 add_com_alias ("disa", "disable", class_breakpoint, 1);
4101
4102 add_cmd ("breakpoints", class_alias, disable_command,
4103 "Disable some breakpoints.\n\
4104 Arguments are breakpoint numbers with spaces in between.\n\
4105 To disable all breakpoints, give no argument.\n\
4106 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
4107 This command may be abbreviated \"disable\".",
4108 &disablelist);
4109
4110 add_prefix_cmd ("delete", class_breakpoint, delete_command,
4111 "Delete some breakpoints or auto-display expressions.\n\
4112 Arguments are breakpoint numbers with spaces in between.\n\
4113 To delete all breakpoints, give no argument.\n\
4114 \n\
4115 Also a prefix command for deletion of other GDB objects.\n\
4116 The \"unset\" command is also an alias for \"delete\".",
4117 &deletelist, "delete ", 1, &cmdlist);
4118 add_com_alias ("d", "delete", class_breakpoint, 1);
4119
4120 add_cmd ("breakpoints", class_alias, delete_command,
4121 "Delete some breakpoints or auto-display expressions.\n\
4122 Arguments are breakpoint numbers with spaces in between.\n\
4123 To delete all breakpoints, give no argument.\n\
4124 This command may be abbreviated \"delete\".",
4125 &deletelist);
4126
4127 add_com ("clear", class_breakpoint, clear_command,
4128 concat ("Clear breakpoint at specified line or function.\n\
4129 Argument may be line number, function name, or \"*\" and an address.\n\
4130 If line number is specified, all breakpoints in that line are cleared.\n\
4131 If function is specified, breakpoints at beginning of function are cleared.\n\
4132 If an address is specified, breakpoints at that address are cleared.\n\n",
4133 "With no argument, clears all breakpoints in the line that the selected frame\n\
4134 is executing in.\n\
4135 \n\
4136 See also the \"delete\" command which clears breakpoints by number.", NULL));
4137
4138 add_com ("break", class_breakpoint, break_command,
4139 concat ("Set breakpoint at specified line or function.\n\
4140 Argument may be line number, function name, or \"*\" and an address.\n\
4141 If line number is specified, break at start of code for that line.\n\
4142 If function is specified, break at start of code for that function.\n\
4143 If an address is specified, break at that exact address.\n",
4144 "With no arg, uses current execution address of selected stack frame.\n\
4145 This is useful for breaking on return to a stack frame.\n\
4146 \n\
4147 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
4148 \n\
4149 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
4150 add_com_alias ("b", "break", class_run, 1);
4151 add_com_alias ("br", "break", class_run, 1);
4152 add_com_alias ("bre", "break", class_run, 1);
4153 add_com_alias ("brea", "break", class_run, 1);
4154
4155 add_info ("breakpoints", breakpoints_info,
4156 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
4157 The \"Type\" column indicates one of:\n\
4158 \tbreakpoint - normal breakpoint\n\
4159 \twatchpoint - watchpoint\n\
4160 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
4161 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
4162 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
4163 address and file/line number respectively.\n\n",
4164 "Convenience variable \"$_\" and default examine address for \"x\"\n\
4165 are set to the address of the last breakpoint listed.\n\n\
4166 Convenience variable \"$bpnum\" contains the number of the last\n\
4167 breakpoint set.", NULL));
4168
4169 #if MAINTENANCE_CMDS
4170
4171 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
4172 concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
4173 The \"Type\" column indicates one of:\n\
4174 \tbreakpoint - normal breakpoint\n\
4175 \twatchpoint - watchpoint\n\
4176 \tlongjmp - internal breakpoint used to step through longjmp()\n\
4177 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
4178 \tuntil - internal breakpoint used by the \"until\" command\n\
4179 \tfinish - internal breakpoint used by the \"finish\" command\n",
4180 "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
4181 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
4182 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
4183 address and file/line number respectively.\n\n",
4184 "Convenience variable \"$_\" and default examine address for \"x\"\n\
4185 are set to the address of the last breakpoint listed.\n\n\
4186 Convenience variable \"$bpnum\" contains the number of the last\n\
4187 breakpoint set.", NULL),
4188 &maintenanceinfolist);
4189
4190 #endif /* MAINTENANCE_CMDS */
4191
4192 add_com ("catch", class_breakpoint, catch_command,
4193 "Set breakpoints to catch exceptions that are raised.\n\
4194 Argument may be a single exception to catch, multiple exceptions\n\
4195 to catch, or the default exception \"default\". If no arguments\n\
4196 are given, breakpoints are set at all exception handlers catch clauses\n\
4197 within the current scope.\n\
4198 \n\
4199 A condition specified for the catch applies to all breakpoints set\n\
4200 with this command\n\
4201 \n\
4202 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
4203
4204 add_com ("watch", class_breakpoint, watch_command,
4205 "Set a watchpoint for an expression.\n\
4206 A watchpoint stops execution of your program whenever the value of\n\
4207 an expression changes.");
4208
4209 add_com ("rwatch", class_breakpoint, rwatch_command,
4210 "Set a read watchpoint for an expression.\n\
4211 A watchpoint stops execution of your program whenever the value of\n\
4212 an expression is read.");
4213
4214 add_com ("awatch", class_breakpoint, awatch_command,
4215 "Set a watchpoint for an expression.\n\
4216 A watchpoint stops execution of your program whenever the value of\n\
4217 an expression is either read or written.");
4218
4219 add_info ("watchpoints", breakpoints_info,
4220 "Synonym for ``info breakpoints''.");
4221
4222 }