f3961bccc7815721df6a4523f6a01bbf440d60d1
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2 Copyright 1986, 1987, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20 #include "defs.h"
21 #include <ctype.h>
22 #include "symtab.h"
23 #include "frame.h"
24 #include "breakpoint.h"
25 #include "gdbtypes.h"
26 #include "expression.h"
27 #include "gdbcore.h"
28 #include "gdbcmd.h"
29 #include "value.h"
30 #include "ctype.h"
31 #include "command.h"
32 #include "inferior.h"
33 #include "target.h"
34 #include "language.h"
35 #include <string.h>
36 #include "demangle.h"
37
38 /* local function prototypes */
39
40 static void
41 catch_command_1 PARAMS ((char *, int, int));
42
43 static void
44 enable_delete_command PARAMS ((char *, int));
45
46 static void
47 enable_delete_breakpoint PARAMS ((struct breakpoint *));
48
49 static void
50 enable_once_command PARAMS ((char *, int));
51
52 static void
53 enable_once_breakpoint PARAMS ((struct breakpoint *));
54
55 static void
56 disable_command PARAMS ((char *, int));
57
58 static void
59 disable_breakpoint PARAMS ((struct breakpoint *));
60
61 static void
62 enable_command PARAMS ((char *, int));
63
64 static void
65 enable_breakpoint PARAMS ((struct breakpoint *));
66
67 static void
68 map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
69
70 static void
71 ignore_command PARAMS ((char *, int));
72
73 static int
74 breakpoint_re_set_one PARAMS ((char *));
75
76 static void
77 delete_command PARAMS ((char *, int));
78
79 static void
80 clear_command PARAMS ((char *, int));
81
82 static void
83 catch_command PARAMS ((char *, int));
84
85 static struct symtabs_and_lines
86 get_catch_sals PARAMS ((int));
87
88 static void
89 watch_command PARAMS ((char *, int));
90
91 static void
92 tbreak_command PARAMS ((char *, int));
93
94 static void
95 break_command_1 PARAMS ((char *, int, int));
96
97 static void
98 mention PARAMS ((struct breakpoint *));
99
100 static struct breakpoint *
101 set_raw_breakpoint PARAMS ((struct symtab_and_line));
102
103 static void
104 check_duplicates PARAMS ((CORE_ADDR));
105
106 static void
107 describe_other_breakpoints PARAMS ((CORE_ADDR));
108
109 static void
110 breakpoints_info PARAMS ((char *, int));
111
112 static void
113 breakpoint_1 PARAMS ((int, int));
114
115 static bpstat
116 bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
117
118 static int
119 breakpoint_cond_eval PARAMS ((char *));
120
121 static void
122 cleanup_executing_breakpoints PARAMS ((int));
123
124 static void
125 commands_command PARAMS ((char *, int));
126
127 static void
128 condition_command PARAMS ((char *, int));
129
130 static int
131 get_number PARAMS ((char **));
132
133 static void
134 set_breakpoint_count PARAMS ((int));
135
136
137 extern int addressprint; /* Print machine addresses? */
138 extern int demangle; /* Print de-mangled symbol names? */
139
140 /* Are we executing breakpoint commands? */
141 static int executing_breakpoint_commands;
142
143 /* Walk the following statement or block through all breakpoints.
144 ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
145 breakpoint. */
146
147 #define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
148
149 #define ALL_BREAKPOINTS_SAFE(b,tmp) \
150 for (b = breakpoint_chain; \
151 b? (tmp=b->next, 1): 0; \
152 b = tmp)
153
154 /* Chain of all breakpoints defined. */
155
156 struct breakpoint *breakpoint_chain;
157
158 /* Number of last breakpoint made. */
159
160 static int breakpoint_count;
161
162 /* Set breakpoint count to NUM. */
163 static void
164 set_breakpoint_count (num)
165 int num;
166 {
167 breakpoint_count = num;
168 set_internalvar (lookup_internalvar ("bpnum"),
169 value_from_longest (builtin_type_int, (LONGEST) num));
170 }
171
172 /* Default address, symtab and line to put a breakpoint at
173 for "break" command with no arg.
174 if default_breakpoint_valid is zero, the other three are
175 not valid, and "break" with no arg is an error.
176
177 This set by print_stack_frame, which calls set_default_breakpoint. */
178
179 int default_breakpoint_valid;
180 CORE_ADDR default_breakpoint_address;
181 struct symtab *default_breakpoint_symtab;
182 int default_breakpoint_line;
183
184 /* Flag indicating extra verbosity for xgdb. */
185 extern int xgdb_verbose;
186 \f
187 /* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
188 Advance *PP after the string and any trailing whitespace.
189
190 Currently the string can either be a number or "$" followed by the name
191 of a convenience variable. Making it an expression wouldn't work well
192 for map_breakpoint_numbers (e.g. "4 + 5 + 6"). */
193 static int
194 get_number (pp)
195 char **pp;
196 {
197 int retval;
198 char *p = *pp;
199
200 if (p == NULL)
201 /* Empty line means refer to the last breakpoint. */
202 return breakpoint_count;
203 else if (*p == '$')
204 {
205 /* Make a copy of the name, so we can null-terminate it
206 to pass to lookup_internalvar(). */
207 char *varname;
208 char *start = ++p;
209 value val;
210
211 while (isalnum (*p) || *p == '_')
212 p++;
213 varname = (char *) alloca (p - start + 1);
214 strncpy (varname, start, p - start);
215 varname[p - start] = '\0';
216 val = value_of_internalvar (lookup_internalvar (varname));
217 if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
218 error (
219 "Convenience variables used to specify breakpoints must have integer values."
220 );
221 retval = (int) value_as_long (val);
222 }
223 else
224 {
225 if (*p == '-')
226 ++p;
227 while (*p >= '0' && *p <= '9')
228 ++p;
229 if (p == *pp)
230 /* There is no number here. (e.g. "cond a == b"). */
231 error_no_arg ("breakpoint number");
232 retval = atoi (*pp);
233 }
234 if (!(isspace (*p) || *p == '\0'))
235 error ("breakpoint number expected");
236 while (isspace (*p))
237 p++;
238 *pp = p;
239 return retval;
240 }
241 \f
242 /* condition N EXP -- set break condition of breakpoint N to EXP. */
243
244 static void
245 condition_command (arg, from_tty)
246 char *arg;
247 int from_tty;
248 {
249 register struct breakpoint *b;
250 char *p;
251 register int bnum;
252
253 if (arg == 0)
254 error_no_arg ("breakpoint number");
255
256 p = arg;
257 bnum = get_number (&p);
258
259 ALL_BREAKPOINTS (b)
260 if (b->number == bnum)
261 {
262 if (b->cond)
263 {
264 free ((PTR)b->cond);
265 b->cond = 0;
266 }
267 if (b->cond_string != NULL)
268 free ((PTR)b->cond_string);
269
270 if (*p == 0)
271 {
272 b->cond = 0;
273 b->cond_string = NULL;
274 if (from_tty)
275 printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
276 }
277 else
278 {
279 arg = p;
280 /* I don't know if it matters whether this is the string the user
281 typed in or the decompiled expression. */
282 b->cond_string = savestring (arg, strlen (arg));
283 b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
284 if (*arg)
285 error ("Junk at end of expression");
286 }
287 return;
288 }
289
290 error ("No breakpoint number %d.", bnum);
291 }
292
293 /* ARGSUSED */
294 static void
295 commands_command (arg, from_tty)
296 char *arg;
297 int from_tty;
298 {
299 register struct breakpoint *b;
300 char *p;
301 register int bnum;
302 struct command_line *l;
303
304 /* If we allowed this, we would have problems with when to
305 free the storage, if we change the commands currently
306 being read from. */
307
308 if (executing_breakpoint_commands)
309 error ("Can't use the \"commands\" command among a breakpoint's commands.");
310
311 p = arg;
312 bnum = get_number (&p);
313 if (p && *p)
314 error ("Unexpected extra arguments following breakpoint number.");
315
316 ALL_BREAKPOINTS (b)
317 if (b->number == bnum)
318 {
319 if (from_tty && input_from_terminal_p ())
320 printf_filtered ("Type commands for when breakpoint %d is hit, one per line.\n\
321 End with a line saying just \"end\".\n", bnum);
322 l = read_command_lines ();
323 free_command_lines (&b->commands);
324 b->commands = l;
325 return;
326 }
327 error ("No breakpoint number %d.", bnum);
328 }
329 \f
330 extern int memory_breakpoint_size; /* from mem-break.c */
331
332 /* Like target_read_memory() but if breakpoints are inserted, return
333 the shadow contents instead of the breakpoints themselves.
334
335 Read "memory data" from whatever target or inferior we have.
336 Returns zero if successful, errno value if not. EIO is used
337 for address out of bounds. If breakpoints are inserted, returns
338 shadow contents, not the breakpoints themselves. From breakpoint.c. */
339
340 int
341 read_memory_nobpt (memaddr, myaddr, len)
342 CORE_ADDR memaddr;
343 char *myaddr;
344 unsigned len;
345 {
346 int status;
347 struct breakpoint *b;
348
349 if (memory_breakpoint_size < 0)
350 /* No breakpoints on this machine. */
351 return target_read_memory (memaddr, myaddr, len);
352
353 ALL_BREAKPOINTS (b)
354 {
355 if (b->type == bp_watchpoint || !b->inserted)
356 continue;
357 else if (b->address + memory_breakpoint_size <= memaddr)
358 /* The breakpoint is entirely before the chunk of memory
359 we are reading. */
360 continue;
361 else if (b->address >= memaddr + len)
362 /* The breakpoint is entirely after the chunk of memory we
363 are reading. */
364 continue;
365 else
366 {
367 /* Copy the breakpoint from the shadow contents, and recurse
368 for the things before and after. */
369
370 /* Addresses and length of the part of the breakpoint that
371 we need to copy. */
372 CORE_ADDR membpt = b->address;
373 unsigned int bptlen = memory_breakpoint_size;
374 /* Offset within shadow_contents. */
375 int bptoffset = 0;
376
377 if (membpt < memaddr)
378 {
379 /* Only copy the second part of the breakpoint. */
380 bptlen -= memaddr - membpt;
381 bptoffset = memaddr - membpt;
382 membpt = memaddr;
383 }
384
385 if (membpt + bptlen > memaddr + len)
386 {
387 /* Only copy the first part of the breakpoint. */
388 bptlen -= (membpt + bptlen) - (memaddr + len);
389 }
390
391 memcpy (myaddr + membpt - memaddr,
392 b->shadow_contents + bptoffset, bptlen);
393
394 if (membpt > memaddr)
395 {
396 /* Copy the section of memory before the breakpoint. */
397 status = read_memory_nobpt (memaddr, myaddr, membpt - memaddr);
398 if (status != 0)
399 return status;
400 }
401
402 if (membpt + bptlen < memaddr + len)
403 {
404 /* Copy the section of memory after the breakpoint. */
405 status = read_memory_nobpt
406 (membpt + bptlen,
407 myaddr + membpt + bptlen - memaddr,
408 memaddr + len - (membpt + bptlen));
409 if (status != 0)
410 return status;
411 }
412 return 0;
413 }
414 }
415 /* Nothing overlaps. Just call read_memory_noerr. */
416 return target_read_memory (memaddr, myaddr, len);
417 }
418 \f
419 /* insert_breakpoints is used when starting or continuing the program.
420 remove_breakpoints is used when the program stops.
421 Both return zero if successful,
422 or an `errno' value if could not write the inferior. */
423
424 int
425 insert_breakpoints ()
426 {
427 register struct breakpoint *b;
428 int val = 0;
429 int disabled_breaks = 0;
430
431 ALL_BREAKPOINTS (b)
432 if (b->type != bp_watchpoint
433 && b->enable != disabled
434 && ! b->inserted
435 && ! b->duplicate)
436 {
437 val = target_insert_breakpoint(b->address, b->shadow_contents);
438 if (val)
439 {
440 /* Can't set the breakpoint. */
441 #if defined (DISABLE_UNSETTABLE_BREAK)
442 if (DISABLE_UNSETTABLE_BREAK (b->address))
443 {
444 val = 0;
445 b->enable = disabled;
446 if (!disabled_breaks)
447 {
448 fprintf (stderr,
449 "Cannot insert breakpoint %d:\n", b->number);
450 printf_filtered ("Disabling shared library breakpoints:\n");
451 }
452 disabled_breaks = 1;
453 printf_filtered ("%d ", b->number);
454 }
455 else
456 #endif
457 {
458 fprintf (stderr, "Cannot insert breakpoint %d:\n", b->number);
459 #ifdef ONE_PROCESS_WRITETEXT
460 fprintf (stderr,
461 "The same program may be running in another process.\n");
462 #endif
463 memory_error (val, b->address); /* which bombs us out */
464 }
465 }
466 else
467 b->inserted = 1;
468 }
469 if (disabled_breaks)
470 printf_filtered ("\n");
471 return val;
472 }
473
474 int
475 remove_breakpoints ()
476 {
477 register struct breakpoint *b;
478 int val;
479
480 #ifdef BREAKPOINT_DEBUG
481 printf ("Removing breakpoints.\n");
482 #endif /* BREAKPOINT_DEBUG */
483
484 ALL_BREAKPOINTS (b)
485 if (b->type != bp_watchpoint && b->inserted)
486 {
487 val = target_remove_breakpoint(b->address, b->shadow_contents);
488 if (val)
489 return val;
490 b->inserted = 0;
491 #ifdef BREAKPOINT_DEBUG
492 printf ("Removed breakpoint at %s",
493 local_hex_string(b->address));
494 printf (", shadow %s",
495 local_hex_string(b->shadow_contents[0]));
496 printf (", %s.\n",
497 local_hex_string(b->shadow_contents[1]));
498 #endif /* BREAKPOINT_DEBUG */
499 }
500
501 return 0;
502 }
503
504 /* Clear the "inserted" flag in all breakpoints.
505 This is done when the inferior is loaded. */
506
507 void
508 mark_breakpoints_out ()
509 {
510 register struct breakpoint *b;
511
512 ALL_BREAKPOINTS (b)
513 b->inserted = 0;
514 }
515
516 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
517 When continuing from a location with a breakpoint,
518 we actually single step once before calling insert_breakpoints. */
519
520 int
521 breakpoint_here_p (pc)
522 CORE_ADDR pc;
523 {
524 register struct breakpoint *b;
525
526 ALL_BREAKPOINTS (b)
527 if (b->enable != disabled && b->address == pc)
528 return 1;
529
530 return 0;
531 }
532 \f
533 /* bpstat stuff. External routines' interfaces are documented
534 in breakpoint.h. */
535
536 /* Clear a bpstat so that it says we are not at any breakpoint.
537 Also free any storage that is part of a bpstat. */
538
539 void
540 bpstat_clear (bsp)
541 bpstat *bsp;
542 {
543 bpstat p;
544 bpstat q;
545
546 if (bsp == 0)
547 return;
548 p = *bsp;
549 while (p != NULL)
550 {
551 q = p->next;
552 if (p->old_val != NULL)
553 value_free (p->old_val);
554 free ((PTR)p);
555 p = q;
556 }
557 *bsp = NULL;
558 }
559
560 /* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
561 is part of the bpstat is copied as well. */
562
563 bpstat
564 bpstat_copy (bs)
565 bpstat bs;
566 {
567 bpstat p = NULL;
568 bpstat tmp;
569 bpstat retval;
570
571 if (bs == NULL)
572 return bs;
573
574 for (; bs != NULL; bs = bs->next)
575 {
576 tmp = (bpstat) xmalloc (sizeof (*tmp));
577 memcpy (tmp, bs, sizeof (*tmp));
578 if (p == NULL)
579 /* This is the first thing in the chain. */
580 retval = tmp;
581 else
582 p->next = tmp;
583 p = tmp;
584 }
585 p->next = NULL;
586 return retval;
587 }
588
589 /* Find the bpstat associated with this breakpoint */
590
591 bpstat
592 bpstat_find_breakpoint(bsp, breakpoint)
593 bpstat bsp;
594 struct breakpoint *breakpoint;
595 {
596 if (bsp == NULL) return NULL;
597
598 for (;bsp != NULL; bsp = bsp->next) {
599 if (bsp->breakpoint_at == breakpoint) return bsp;
600 }
601 return NULL;
602 }
603
604 /* Return the breakpoint number of the first breakpoint we are stopped
605 at. *BSP upon return is a bpstat which points to the remaining
606 breakpoints stopped at (but which is not guaranteed to be good for
607 anything but further calls to bpstat_num).
608 Return 0 if passed a bpstat which does not indicate any breakpoints. */
609
610 int
611 bpstat_num (bsp)
612 bpstat *bsp;
613 {
614 struct breakpoint *b;
615
616 if ((*bsp) == NULL)
617 return 0; /* No more breakpoint values */
618 else
619 {
620 b = (*bsp)->breakpoint_at;
621 *bsp = (*bsp)->next;
622 if (b == NULL)
623 return -1; /* breakpoint that's been deleted since */
624 else
625 return b->number; /* We have its number */
626 }
627 }
628
629 /* Modify BS so that the actions will not be performed. */
630
631 void
632 bpstat_clear_actions (bs)
633 bpstat bs;
634 {
635 for (; bs != NULL; bs = bs->next)
636 {
637 bs->commands = NULL;
638 if (bs->old_val != NULL)
639 {
640 value_free (bs->old_val);
641 bs->old_val = NULL;
642 }
643 }
644 }
645
646 /* Stub for cleaning up our state if we error-out of a breakpoint command */
647 /* ARGSUSED */
648 static void
649 cleanup_executing_breakpoints (ignore)
650 int ignore;
651 {
652 executing_breakpoint_commands = 0;
653 }
654
655 /* Execute all the commands associated with all the breakpoints at this
656 location. Any of these commands could cause the process to proceed
657 beyond this point, etc. We look out for such changes by checking
658 the global "breakpoint_proceeded" after each command. */
659
660 void
661 bpstat_do_actions (bsp)
662 bpstat *bsp;
663 {
664 bpstat bs;
665 struct cleanup *old_chain;
666
667 executing_breakpoint_commands = 1;
668 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
669
670 top:
671 bs = *bsp;
672
673 breakpoint_proceeded = 0;
674 for (; bs != NULL; bs = bs->next)
675 {
676 while (bs->commands)
677 {
678 char *line = bs->commands->line;
679 bs->commands = bs->commands->next;
680 execute_command (line, 0);
681 /* If the inferior is proceeded by the command, bomb out now.
682 The bpstat chain has been blown away by wait_for_inferior.
683 But since execution has stopped again, there is a new bpstat
684 to look at, so start over. */
685 if (breakpoint_proceeded)
686 goto top;
687 }
688 }
689
690 executing_breakpoint_commands = 0;
691 discard_cleanups (old_chain);
692 }
693
694 /* This is the normal print_it function for a bpstat. In the future,
695 much of this logic could (should?) be moved to bpstat_stop_status,
696 by having it set different print_it functions. */
697
698 static int
699 print_it_normal (bs)
700 bpstat bs;
701 {
702 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
703 which has since been deleted. */
704 if (bs->breakpoint_at == NULL
705 || (bs->breakpoint_at->type != bp_breakpoint
706 && bs->breakpoint_at->type != bp_watchpoint))
707 return 0;
708
709 if (bs->breakpoint_at->type == bp_breakpoint)
710 {
711 /* I think the user probably only wants to see one breakpoint
712 number, not all of them. */
713 printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
714 return 0;
715 }
716
717 if (bs->old_val != NULL)
718 {
719 printf_filtered ("\nWatchpoint %d, ", bs->breakpoint_at->number);
720 print_expression (bs->breakpoint_at->exp, stdout);
721 printf_filtered ("\nOld value = ");
722 value_print (bs->old_val, stdout, 0, Val_pretty_default);
723 printf_filtered ("\nNew value = ");
724 value_print (bs->breakpoint_at->val, stdout, 0,
725 Val_pretty_default);
726 printf_filtered ("\n");
727 value_free (bs->old_val);
728 bs->old_val = NULL;
729 return 0;
730 }
731 /* We can't deal with it. Maybe another member of the bpstat chain can. */
732 return -1;
733 }
734
735 /* Print a message indicating what happened. Returns nonzero to
736 say that only the source line should be printed after this (zero
737 return means print the frame as well as the source line). */
738 /* Currently we always return zero. */
739 int
740 bpstat_print (bs)
741 bpstat bs;
742 {
743 int val;
744
745 if (bs == NULL)
746 return 0;
747
748 val = (*bs->print_it) (bs);
749 if (val >= 0)
750 return val;
751
752 /* Maybe another breakpoint in the chain caused us to stop.
753 (Currently all watchpoints go on the bpstat whether hit or
754 not. That probably could (should) be changed, provided care is taken
755 with respect to bpstat_explains_signal). */
756 if (bs->next)
757 return bpstat_print (bs->next);
758
759 /* We reached the end of the chain without printing anything. */
760 return 0;
761 }
762
763 /* Evaluate the expression EXP and return 1 if value is zero.
764 This is used inside a catch_errors to evaluate the breakpoint condition.
765 The argument is a "struct expression *" that has been cast to char * to
766 make it pass through catch_errors. */
767
768 static int
769 breakpoint_cond_eval (exp)
770 char *exp;
771 {
772 return !value_true (evaluate_expression ((struct expression *)exp));
773 }
774
775 /* Allocate a new bpstat and chain it to the current one. */
776
777 static bpstat
778 bpstat_alloc (b, cbs)
779 register struct breakpoint *b;
780 bpstat cbs; /* Current "bs" value */
781 {
782 bpstat bs;
783
784 bs = (bpstat) xmalloc (sizeof (*bs));
785 cbs->next = bs;
786 bs->breakpoint_at = b;
787 /* If the condition is false, etc., don't do the commands. */
788 bs->commands = NULL;
789 bs->old_val = NULL;
790 bs->print_it = print_it_normal;
791 return bs;
792 }
793
794 /* Possible return values for watchpoint_check (this can't be an enum
795 because of check_errors). */
796 /* The watchpoint has been disabled. */
797 #define WP_DISABLED 1
798 /* The value has changed. */
799 #define WP_VALUE_CHANGED 2
800 /* The value has not changed. */
801 #define WP_VALUE_NOT_CHANGED 3
802
803 /* Check watchpoint condition. */
804 static int
805 watchpoint_check (p)
806 PTR p;
807 {
808 bpstat bs = (bpstat) p;
809
810 int within_current_scope;
811 if (bs->breakpoint_at->exp_valid_block != NULL)
812 within_current_scope =
813 contained_in (get_selected_block (), bs->breakpoint_at->exp_valid_block);
814 else
815 within_current_scope = 1;
816
817 if (within_current_scope)
818 {
819 /* We use value_{,free_to_}mark because it could be a
820 *long* time before we return to the command level and
821 call free_all_values. */
822 /* But couldn't we just call free_all_values instead? */
823
824 value mark = value_mark ();
825 value new_val = evaluate_expression (bs->breakpoint_at->exp);
826 if (!value_equal (bs->breakpoint_at->val, new_val))
827 {
828 release_value (new_val);
829 value_free_to_mark (mark);
830 bs->old_val = bs->breakpoint_at->val;
831 bs->breakpoint_at->val = new_val;
832 /* We will stop here */
833 return WP_VALUE_CHANGED;
834 }
835 else
836 {
837 /* Nothing changed, don't do anything. */
838 value_free_to_mark (mark);
839 /* We won't stop here */
840 return WP_VALUE_NOT_CHANGED;
841 }
842 }
843 else
844 {
845 /* This seems like the only logical thing to do because
846 if we temporarily ignored the watchpoint, then when
847 we reenter the block in which it is valid it contains
848 garbage (in the case of a function, it may have two
849 garbage values, one before and one after the prologue).
850 So we can't even detect the first assignment to it and
851 watch after that (since the garbage may or may not equal
852 the first value assigned). */
853 bs->breakpoint_at->enable = disabled;
854 printf_filtered ("\
855 Watchpoint %d disabled because the program has left the block in\n\
856 which its expression is valid.\n", bs->breakpoint_at->number);
857 return WP_DISABLED;
858 }
859 }
860
861 /* This is used when everything which needs to be printed has
862 already been printed. But we still want to print the frame. */
863 static int
864 print_it_done (bs)
865 bpstat bs;
866 {
867 return 0;
868 }
869
870 /* This is used when nothing should be printed for this bpstat entry. */
871
872 static int
873 print_it_noop (bs)
874 bpstat bs;
875 {
876 return -1;
877 }
878
879 /* Determine whether we stopped at a breakpoint, etc, or whether we
880 don't understand this stop. Result is a chain of bpstat's such that:
881
882 if we don't understand the stop, the result is a null pointer.
883
884 if we understand why we stopped, the result is not null, and
885 the first element of the chain contains summary "stop" and
886 "print" flags for the whole chain.
887
888 Each element of the chain refers to a particular breakpoint or
889 watchpoint at which we have stopped. (We may have stopped for
890 several reasons concurrently.)
891
892 Each element of the chain has valid next, breakpoint_at,
893 commands, FIXME??? fields.
894
895 */
896
897
898 bpstat
899 bpstat_stop_status (pc, frame_address)
900 CORE_ADDR *pc;
901 FRAME_ADDR frame_address;
902 {
903 register struct breakpoint *b;
904 CORE_ADDR bp_addr;
905 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
906 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
907 int real_breakpoint = 0;
908 #endif
909 /* Root of the chain of bpstat's */
910 struct bpstat root_bs[1];
911 /* Pointer to the last thing in the chain currently. */
912 bpstat bs = root_bs;
913
914 /* Get the address where the breakpoint would have been. */
915 bp_addr = *pc - DECR_PC_AFTER_BREAK;
916
917 ALL_BREAKPOINTS (b)
918 {
919 if (b->enable == disabled)
920 continue;
921
922 if (b->type != bp_watchpoint && b->address != bp_addr)
923 continue;
924
925 /* Come here if it's a watchpoint, or if the break address matches */
926
927 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
928
929 bs->stop = 1;
930 bs->print = 1;
931
932 if (b->type == bp_watchpoint)
933 {
934 static char message1[] =
935 "Error evaluating expression for watchpoint %d\n";
936 char message[sizeof (message1) + 30 /* slop */];
937 sprintf (message, message1, b->number);
938 switch (catch_errors (watchpoint_check, (char *) bs, message))
939 {
940 case WP_DISABLED:
941 /* We've already printed what needs to be printed. */
942 bs->print_it = print_it_done;
943 /* Stop. */
944 break;
945 case WP_VALUE_CHANGED:
946 /* Stop. */
947 break;
948 case WP_VALUE_NOT_CHANGED:
949 /* Don't stop. */
950 bs->print_it = print_it_noop;
951 bs->stop = 0;
952 continue;
953 default:
954 /* Can't happen. */
955 /* FALLTHROUGH */
956 case 0:
957 /* Error from catch_errors. */
958 b->enable = disabled;
959 printf_filtered ("Watchpoint %d disabled.\n", b->number);
960 /* We've already printed what needs to be printed. */
961 bs->print_it = print_it_done;
962 /* Stop. */
963 break;
964 }
965 }
966 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
967 else
968 real_breakpoint = 1;
969 #endif
970
971 if (b->frame && b->frame != frame_address)
972 bs->stop = 0;
973 else
974 {
975 int value_is_zero;
976
977 if (b->cond)
978 {
979 /* Need to select the frame, with all that implies
980 so that the conditions will have the right context. */
981 select_frame (get_current_frame (), 0);
982 value_is_zero
983 = catch_errors (breakpoint_cond_eval, (char *)(b->cond),
984 "Error in testing breakpoint condition:\n");
985 /* FIXME-someday, should give breakpoint # */
986 free_all_values ();
987 }
988 if (b->cond && value_is_zero)
989 {
990 bs->stop = 0;
991 }
992 else if (b->ignore_count > 0)
993 {
994 b->ignore_count--;
995 bs->stop = 0;
996 }
997 else
998 {
999 /* We will stop here */
1000 if (b->disposition == disable)
1001 b->enable = disabled;
1002 bs->commands = b->commands;
1003 if (b->silent)
1004 bs->print = 0;
1005 if (bs->commands && STREQ ("silent", bs->commands->line))
1006 {
1007 bs->commands = bs->commands->next;
1008 bs->print = 0;
1009 }
1010 }
1011 }
1012 /* Print nothing for this entry if we dont stop or if we dont print. */
1013 if (bs->stop == 0 || bs->print == 0)
1014 bs->print_it = print_it_noop;
1015 }
1016
1017 bs->next = NULL; /* Terminate the chain */
1018 bs = root_bs->next; /* Re-grab the head of the chain */
1019 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1020 if (bs)
1021 {
1022 if (real_breakpoint)
1023 {
1024 *pc = bp_addr;
1025 #if defined (SHIFT_INST_REGS)
1026 {
1027 CORE_ADDR pc = read_register (PC_REGNUM);
1028 CORE_ADDR npc = read_register (NPC_REGNUM);
1029 if (pc != npc)
1030 {
1031 write_register (NNPC_REGNUM, npc);
1032 write_register (NPC_REGNUM, pc);
1033 }
1034 }
1035 #else /* No SHIFT_INST_REGS. */
1036 write_pc (bp_addr);
1037 #endif /* No SHIFT_INST_REGS. */
1038 }
1039 }
1040 #endif /* DECR_PC_AFTER_BREAK != 0. */
1041 return bs;
1042 }
1043 \f
1044 /* Tell what to do about this bpstat. */
1045 enum bpstat_what
1046 bpstat_what (bs)
1047 bpstat bs;
1048 {
1049 /* Classify each bpstat as one of the following. */
1050 enum class {
1051 /* There was a watchpoint, but we're not stopping. */
1052 wp_nostop = 0,
1053
1054 /* There was a watchpoint, stop but don't print. */
1055 wp_silent,
1056
1057 /* There was a watchpoint, stop and print. */
1058 wp_noisy,
1059
1060 /* There was a breakpoint but we're not stopping. */
1061 bp_nostop,
1062
1063 /* There was a breakpoint, stop but don't print. */
1064 bp_silent,
1065
1066 /* There was a breakpoint, stop and print. */
1067 bp_noisy,
1068
1069 /* We hit the longjmp breakpoint. */
1070 long_jump,
1071
1072 /* We hit the longjmp_resume breakpoint. */
1073 long_resume,
1074
1075 /* This is just used to count how many enums there are. */
1076 class_last
1077 };
1078
1079 /* Here is the table which drives this routine. So that we can
1080 format it pretty, we define some abbreviations for the
1081 enum bpstat_what codes. */
1082 #define keep_c BPSTAT_WHAT_KEEP_CHECKING
1083 #define stop_s BPSTAT_WHAT_STOP_SILENT
1084 #define stop_n BPSTAT_WHAT_STOP_NOISY
1085 #define single BPSTAT_WHAT_SINGLE
1086 #define setlr BPSTAT_WHAT_SET_LONGJMP_RESUME
1087 #define clrlr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
1088 #define clrlrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
1089 /* "Can't happen." Might want to print an error message.
1090 abort() is not out of the question, but chances are GDB is just
1091 a bit confused, not unusable. */
1092 #define err BPSTAT_WHAT_STOP_NOISY
1093
1094 /* Given an old action and a class, come up with a new action. */
1095 static const enum bpstat_what
1096 table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
1097 {
1098 /* old action */
1099 /* keep_c stop_s stop_n single setlr clrlr clrlrs */
1100
1101 /*wp_nostop*/ {keep_c, stop_s, stop_n, single, setlr , clrlr , clrlrs},
1102 /*wp_silent*/ {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s},
1103 /*wp_noisy*/ {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n},
1104 /*bp_nostop*/ {single, stop_s, stop_n, single, setlr , clrlrs, clrlrs},
1105 /*bp_silent*/ {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s},
1106 /*bp_noisy*/ {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n},
1107 /*long_jump*/ {setlr , stop_s, stop_n, setlr , err , err , err },
1108 /*long_resume*/ {clrlr , stop_s, stop_n, clrlrs, err , err , err }
1109 };
1110 #undef keep_c
1111 #undef stop_s
1112 #undef stop_n
1113 #undef single
1114 #undef setlr
1115 #undef clrlr
1116 #undef clrlrs
1117 #undef err
1118 enum bpstat_what current_action = BPSTAT_WHAT_KEEP_CHECKING;
1119
1120 for (; bs != NULL; bs = bs->next)
1121 {
1122 enum class bs_class;
1123 if (bs->breakpoint_at == NULL)
1124 /* I suspect this can happen if it was a momentary breakpoint
1125 which has since been deleted. */
1126 continue;
1127 switch (bs->breakpoint_at->type)
1128 {
1129 case bp_breakpoint:
1130 case bp_until:
1131 case bp_finish:
1132 if (bs->stop)
1133 {
1134 if (bs->print)
1135 bs_class = bp_noisy;
1136 else
1137 bs_class = bp_silent;
1138 }
1139 else
1140 bs_class = bp_nostop;
1141 break;
1142 case bp_watchpoint:
1143 if (bs->stop)
1144 {
1145 if (bs->print)
1146 bs_class = wp_noisy;
1147 else
1148 bs_class = wp_silent;
1149 }
1150 else
1151 bs_class = wp_nostop;
1152 break;
1153 case bp_longjmp:
1154 bs_class = long_jump;
1155 break;
1156 case bp_longjmp_resume:
1157 bs_class = long_resume;
1158 break;
1159 }
1160 current_action = table[(int)bs_class][(int)current_action];
1161 }
1162 return current_action;
1163 }
1164
1165 /* Nonzero if we should step constantly (e.g. watchpoints on machines
1166 without hardware support). This isn't related to a specific bpstat,
1167 just to things like whether watchpoints are set. */
1168
1169 int
1170 bpstat_should_step ()
1171 {
1172 struct breakpoint *b;
1173 ALL_BREAKPOINTS (b)
1174 if (b->enable == enabled && b->type == bp_watchpoint)
1175 return 1;
1176 return 0;
1177 }
1178 \f
1179 /* Print information on breakpoint number BNUM, or -1 if all.
1180 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
1181 is nonzero, process only watchpoints. */
1182
1183 static void
1184 breakpoint_1 (bnum, allflag)
1185 int bnum;
1186 int allflag;
1187 {
1188 register struct breakpoint *b;
1189 register struct command_line *l;
1190 register struct symbol *sym;
1191 CORE_ADDR last_addr = (CORE_ADDR)-1;
1192 int found_a_breakpoint = 0;
1193 static char *bptypes[] = {"breakpoint", "until", "finish", "watchpoint",
1194 "longjmp", "longjmp resume"};
1195 static char *bpdisps[] = {"del", "dis", "keep"};
1196 static char bpenables[] = "ny";
1197 char wrap_indent[80];
1198
1199 if (!breakpoint_chain)
1200 {
1201 printf_filtered ("No breakpoints or watchpoints.\n");
1202 return;
1203 }
1204
1205 ALL_BREAKPOINTS (b)
1206 if (bnum == -1
1207 || bnum == b->number)
1208 {
1209 /* We only print out user settable breakpoints unless the allflag is set. */
1210 if (!allflag
1211 && b->type != bp_breakpoint
1212 && b->type != bp_watchpoint)
1213 continue;
1214
1215 if (!found_a_breakpoint++)
1216 printf_filtered ("Num Type Disp Enb %sWhat\n",
1217 addressprint ? "Address " : "");
1218
1219 printf_filtered ("%-3d %-14s %-4s %-3c ",
1220 b->number,
1221 bptypes[(int)b->type],
1222 bpdisps[(int)b->disposition],
1223 bpenables[(int)b->enable]);
1224 strcpy (wrap_indent, " ");
1225 if (addressprint)
1226 strcat (wrap_indent, " ");
1227 switch (b->type)
1228 {
1229 case bp_watchpoint:
1230 print_expression (b->exp, stdout);
1231 break;
1232 case bp_breakpoint:
1233 case bp_until:
1234 case bp_finish:
1235 case bp_longjmp:
1236 case bp_longjmp_resume:
1237 if (addressprint)
1238 printf_filtered ("%s ", local_hex_string_custom(b->address, "08"));
1239
1240 last_addr = b->address;
1241 if (b->symtab)
1242 {
1243 sym = find_pc_function (b->address);
1244 if (sym)
1245 {
1246 fputs_filtered ("in ", stdout);
1247 fputs_filtered (SYMBOL_SOURCE_NAME (sym), stdout);
1248 wrap_here (wrap_indent);
1249 fputs_filtered (" at ", stdout);
1250 }
1251 fputs_filtered (b->symtab->filename, stdout);
1252 printf_filtered (":%d", b->line_number);
1253 }
1254 else
1255 print_address_symbolic (b->address, stdout, demangle, " ");
1256 }
1257
1258 printf_filtered ("\n");
1259
1260 if (b->frame)
1261 printf_filtered ("\tstop only in stack frame at %s\n",
1262 local_hex_string(b->frame));
1263 if (b->cond)
1264 {
1265 printf_filtered ("\tstop only if ");
1266 print_expression (b->cond, stdout);
1267 printf_filtered ("\n");
1268 }
1269 if (b->ignore_count)
1270 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
1271 if ((l = b->commands))
1272 while (l)
1273 {
1274 fputs_filtered ("\t", stdout);
1275 fputs_filtered (l->line, stdout);
1276 fputs_filtered ("\n", stdout);
1277 l = l->next;
1278 }
1279 }
1280
1281 if (!found_a_breakpoint
1282 && bnum != -1)
1283 printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
1284 else
1285 /* Compare against (CORE_ADDR)-1 in case some compiler decides
1286 that a comparison of an unsigned with -1 is always false. */
1287 if (last_addr != (CORE_ADDR)-1)
1288 set_next_address (last_addr);
1289 }
1290
1291 /* ARGSUSED */
1292 static void
1293 breakpoints_info (bnum_exp, from_tty)
1294 char *bnum_exp;
1295 int from_tty;
1296 {
1297 int bnum = -1;
1298
1299 if (bnum_exp)
1300 bnum = parse_and_eval_address (bnum_exp);
1301
1302 breakpoint_1 (bnum, 0);
1303 }
1304
1305 #if MAINTENANCE_CMDS
1306
1307 /* ARGSUSED */
1308 static void
1309 maintenance_info_breakpoints (bnum_exp, from_tty)
1310 char *bnum_exp;
1311 int from_tty;
1312 {
1313 int bnum = -1;
1314
1315 if (bnum_exp)
1316 bnum = parse_and_eval_address (bnum_exp);
1317
1318 breakpoint_1 (bnum, 1);
1319 }
1320
1321 #endif
1322
1323 /* Print a message describing any breakpoints set at PC. */
1324
1325 static void
1326 describe_other_breakpoints (pc)
1327 register CORE_ADDR pc;
1328 {
1329 register int others = 0;
1330 register struct breakpoint *b;
1331
1332 ALL_BREAKPOINTS (b)
1333 if (b->address == pc)
1334 others++;
1335 if (others > 0)
1336 {
1337 printf ("Note: breakpoint%s ", (others > 1) ? "s" : "");
1338 ALL_BREAKPOINTS (b)
1339 if (b->address == pc)
1340 {
1341 others--;
1342 printf ("%d%s%s ",
1343 b->number,
1344 (b->enable == disabled) ? " (disabled)" : "",
1345 (others > 1) ? "," : ((others == 1) ? " and" : ""));
1346 }
1347 printf ("also set at pc %s.\n", local_hex_string(pc));
1348 }
1349 }
1350 \f
1351 /* Set the default place to put a breakpoint
1352 for the `break' command with no arguments. */
1353
1354 void
1355 set_default_breakpoint (valid, addr, symtab, line)
1356 int valid;
1357 CORE_ADDR addr;
1358 struct symtab *symtab;
1359 int line;
1360 {
1361 default_breakpoint_valid = valid;
1362 default_breakpoint_address = addr;
1363 default_breakpoint_symtab = symtab;
1364 default_breakpoint_line = line;
1365 }
1366
1367 /* Rescan breakpoints at address ADDRESS,
1368 marking the first one as "first" and any others as "duplicates".
1369 This is so that the bpt instruction is only inserted once. */
1370
1371 static void
1372 check_duplicates (address)
1373 CORE_ADDR address;
1374 {
1375 register struct breakpoint *b;
1376 register int count = 0;
1377
1378 if (address == 0) /* Watchpoints are uninteresting */
1379 return;
1380
1381 ALL_BREAKPOINTS (b)
1382 if (b->enable != disabled && b->address == address)
1383 {
1384 count++;
1385 b->duplicate = count > 1;
1386 }
1387 }
1388
1389 /* Low level routine to set a breakpoint.
1390 Takes as args the three things that every breakpoint must have.
1391 Returns the breakpoint object so caller can set other things.
1392 Does not set the breakpoint number!
1393 Does not print anything.
1394
1395 ==> This routine should not be called if there is a chance of later
1396 error(); otherwise it leaves a bogus breakpoint on the chain. Validate
1397 your arguments BEFORE calling this routine! */
1398
1399 static struct breakpoint *
1400 set_raw_breakpoint (sal)
1401 struct symtab_and_line sal;
1402 {
1403 register struct breakpoint *b, *b1;
1404
1405 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
1406 memset (b, 0, sizeof (*b));
1407 b->address = sal.pc;
1408 b->symtab = sal.symtab;
1409 b->line_number = sal.line;
1410 b->enable = enabled;
1411 b->next = 0;
1412 b->silent = 0;
1413 b->ignore_count = 0;
1414 b->commands = NULL;
1415 b->frame = 0;
1416
1417 /* Add this breakpoint to the end of the chain
1418 so that a list of breakpoints will come out in order
1419 of increasing numbers. */
1420
1421 b1 = breakpoint_chain;
1422 if (b1 == 0)
1423 breakpoint_chain = b;
1424 else
1425 {
1426 while (b1->next)
1427 b1 = b1->next;
1428 b1->next = b;
1429 }
1430
1431 check_duplicates (sal.pc);
1432
1433 return b;
1434 }
1435
1436 static void
1437 create_longjmp_breakpoint(func_name)
1438 char *func_name;
1439 {
1440 struct symtab_and_line sal;
1441 struct breakpoint *b;
1442 static int internal_breakpoint_number = -1;
1443
1444 if (func_name != NULL)
1445 {
1446 struct minimal_symbol *m;
1447
1448 m = lookup_minimal_symbol(func_name, (struct objfile *)NULL);
1449 if (m)
1450 sal.pc = SYMBOL_VALUE_ADDRESS (m);
1451 else
1452 return;
1453 }
1454 else
1455 sal.pc = 0;
1456
1457 sal.symtab = NULL;
1458 sal.line = 0;
1459
1460 b = set_raw_breakpoint(sal);
1461 if (!b) return;
1462
1463 b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
1464 b->disposition = donttouch;
1465 b->enable = disabled;
1466 b->silent = 1;
1467 if (func_name)
1468 b->addr_string = strsave(func_name);
1469 b->number = internal_breakpoint_number--;
1470 }
1471
1472 /* Call this routine when stepping and nexting to enable a breakpoint if we do
1473 a longjmp(). When we hit that breakpoint, call
1474 set_longjmp_resume_breakpoint() to figure out where we are going. */
1475
1476 void
1477 enable_longjmp_breakpoint()
1478 {
1479 register struct breakpoint *b;
1480
1481 ALL_BREAKPOINTS (b)
1482 if (b->type == bp_longjmp)
1483 {
1484 b->enable = enabled;
1485 check_duplicates (b->address);
1486 }
1487 }
1488
1489 void
1490 disable_longjmp_breakpoint()
1491 {
1492 register struct breakpoint *b;
1493
1494 ALL_BREAKPOINTS (b)
1495 if ( b->type == bp_longjmp
1496 || b->type == bp_longjmp_resume)
1497 {
1498 b->enable = disabled;
1499 check_duplicates (b->address);
1500 }
1501 }
1502
1503 /* Call this after hitting the longjmp() breakpoint. Use this to set a new
1504 breakpoint at the target of the jmp_buf.
1505
1506 FIXME - This ought to be done by setting a temporary breakpoint that gets
1507 deleted automatically...
1508 */
1509
1510 void
1511 set_longjmp_resume_breakpoint(pc, frame)
1512 CORE_ADDR pc;
1513 FRAME frame;
1514 {
1515 register struct breakpoint *b;
1516
1517 ALL_BREAKPOINTS (b)
1518 if (b->type == bp_longjmp_resume)
1519 {
1520 b->address = pc;
1521 b->enable = enabled;
1522 if (frame != NULL)
1523 b->frame = FRAME_FP(frame);
1524 else
1525 b->frame = 0;
1526 check_duplicates (b->address);
1527 return;
1528 }
1529 }
1530
1531 /* Set a breakpoint that will evaporate an end of command
1532 at address specified by SAL.
1533 Restrict it to frame FRAME if FRAME is nonzero. */
1534
1535 struct breakpoint *
1536 set_momentary_breakpoint (sal, frame, type)
1537 struct symtab_and_line sal;
1538 FRAME frame;
1539 enum bptype type;
1540 {
1541 register struct breakpoint *b;
1542 b = set_raw_breakpoint (sal);
1543 b->type = type;
1544 b->enable = enabled;
1545 b->disposition = donttouch;
1546 b->frame = (frame ? FRAME_FP (frame) : 0);
1547 return b;
1548 }
1549
1550 #if 0
1551 void
1552 clear_momentary_breakpoints ()
1553 {
1554 register struct breakpoint *b;
1555 ALL_BREAKPOINTS (b)
1556 if (b->disposition == delete)
1557 {
1558 delete_breakpoint (b);
1559 break;
1560 }
1561 }
1562 #endif
1563 \f
1564 /* Tell the user we have just set a breakpoint B. */
1565 static void
1566 mention (b)
1567 struct breakpoint *b;
1568 {
1569 switch (b->type)
1570 {
1571 case bp_watchpoint:
1572 printf_filtered ("Watchpoint %d: ", b->number);
1573 print_expression (b->exp, stdout);
1574 break;
1575 case bp_breakpoint:
1576 printf_filtered ("Breakpoint %d at %s", b->number,
1577 local_hex_string(b->address));
1578 if (b->symtab)
1579 printf_filtered (": file %s, line %d.",
1580 b->symtab->filename, b->line_number);
1581 break;
1582 case bp_until:
1583 case bp_finish:
1584 case bp_longjmp:
1585 case bp_longjmp_resume:
1586 break;
1587 }
1588 printf_filtered ("\n");
1589 }
1590
1591 #if 0
1592 /* Nobody calls this currently. */
1593 /* Set a breakpoint from a symtab and line.
1594 If TEMPFLAG is nonzero, it is a temporary breakpoint.
1595 ADDR_STRING is a malloc'd string holding the name of where we are
1596 setting the breakpoint. This is used later to re-set it after the
1597 program is relinked and symbols are reloaded.
1598 Print the same confirmation messages that the breakpoint command prints. */
1599
1600 void
1601 set_breakpoint (s, line, tempflag, addr_string)
1602 struct symtab *s;
1603 int line;
1604 int tempflag;
1605 char *addr_string;
1606 {
1607 register struct breakpoint *b;
1608 struct symtab_and_line sal;
1609
1610 sal.symtab = s;
1611 sal.line = line;
1612 sal.pc = 0;
1613 resolve_sal_pc (&sal); /* Might error out */
1614 describe_other_breakpoints (sal.pc);
1615
1616 b = set_raw_breakpoint (sal);
1617 set_breakpoint_count (breakpoint_count + 1);
1618 b->number = breakpoint_count;
1619 b->type = bp_breakpoint;
1620 b->cond = 0;
1621 b->addr_string = addr_string;
1622 b->enable = enabled;
1623 b->disposition = tempflag ? delete : donttouch;
1624
1625 mention (b);
1626 }
1627 #endif /* 0 */
1628 \f
1629 /* Set a breakpoint according to ARG (function, linenum or *address)
1630 and make it temporary if TEMPFLAG is nonzero. */
1631
1632 static void
1633 break_command_1 (arg, tempflag, from_tty)
1634 char *arg;
1635 int tempflag, from_tty;
1636 {
1637 struct symtabs_and_lines sals;
1638 struct symtab_and_line sal;
1639 register struct expression *cond = 0;
1640 register struct breakpoint *b;
1641
1642 /* Pointers in arg to the start, and one past the end, of the condition. */
1643 char *cond_start = NULL;
1644 char *cond_end;
1645 /* Pointers in arg to the start, and one past the end,
1646 of the address part. */
1647 char *addr_start = NULL;
1648 char *addr_end;
1649
1650 int i;
1651
1652 sals.sals = NULL;
1653 sals.nelts = 0;
1654
1655 sal.line = sal.pc = sal.end = 0;
1656 sal.symtab = 0;
1657
1658 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
1659
1660 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
1661 && (arg[2] == ' ' || arg[2] == '\t')))
1662 {
1663 if (default_breakpoint_valid)
1664 {
1665 sals.sals = (struct symtab_and_line *)
1666 xmalloc (sizeof (struct symtab_and_line));
1667 sal.pc = default_breakpoint_address;
1668 sal.line = default_breakpoint_line;
1669 sal.symtab = default_breakpoint_symtab;
1670 sals.sals[0] = sal;
1671 sals.nelts = 1;
1672 }
1673 else
1674 error ("No default breakpoint address now.");
1675 }
1676 else
1677 {
1678 addr_start = arg;
1679
1680 /* Force almost all breakpoints to be in terms of the
1681 current_source_symtab (which is decode_line_1's default). This
1682 should produce the results we want almost all of the time while
1683 leaving default_breakpoint_* alone. */
1684 if (default_breakpoint_valid
1685 && (!current_source_symtab
1686 || (arg && (*arg == '+' || *arg == '-'))))
1687 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
1688 default_breakpoint_line);
1689 else
1690 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0);
1691
1692 addr_end = arg;
1693 }
1694
1695 if (! sals.nelts)
1696 return;
1697
1698 /* Resolve all line numbers to PC's, and verify that conditions
1699 can be parsed, before setting any breakpoints. */
1700 for (i = 0; i < sals.nelts; i++)
1701 {
1702 resolve_sal_pc (&sals.sals[i]);
1703
1704 while (arg && *arg)
1705 {
1706 if (arg[0] == 'i' && arg[1] == 'f'
1707 && (arg[2] == ' ' || arg[2] == '\t'))
1708 {
1709 arg += 2;
1710 cond_start = arg;
1711 cond = parse_exp_1 (&arg, block_for_pc (sals.sals[i].pc), 0);
1712 cond_end = arg;
1713 }
1714 else
1715 error ("Junk at end of arguments.");
1716 }
1717 }
1718
1719 /* Now set all the breakpoints. */
1720 for (i = 0; i < sals.nelts; i++)
1721 {
1722 sal = sals.sals[i];
1723
1724 if (from_tty)
1725 describe_other_breakpoints (sal.pc);
1726
1727 b = set_raw_breakpoint (sal);
1728 set_breakpoint_count (breakpoint_count + 1);
1729 b->number = breakpoint_count;
1730 b->type = bp_breakpoint;
1731 b->cond = cond;
1732
1733 /* FIXME: We should add the filename if this is a static function
1734 and probably if it is a line number (the line numbers could
1735 have changed when we re-read symbols; possibly better to disable
1736 the breakpoint in that case). */
1737 if (addr_start)
1738 b->addr_string = savestring (addr_start, addr_end - addr_start);
1739 if (cond_start)
1740 b->cond_string = savestring (cond_start, cond_end - cond_start);
1741
1742 b->enable = enabled;
1743 b->disposition = tempflag ? delete : donttouch;
1744
1745 mention (b);
1746 }
1747
1748 if (sals.nelts > 1)
1749 {
1750 printf ("Multiple breakpoints were set.\n");
1751 printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
1752 }
1753 free ((PTR)sals.sals);
1754 }
1755
1756 /* Helper function for break_command_1 and disassemble_command. */
1757
1758 void
1759 resolve_sal_pc (sal)
1760 struct symtab_and_line *sal;
1761 {
1762 CORE_ADDR pc;
1763
1764 if (sal->pc == 0 && sal->symtab != 0)
1765 {
1766 pc = find_line_pc (sal->symtab, sal->line);
1767 if (pc == 0)
1768 error ("No line %d in file \"%s\".",
1769 sal->line, sal->symtab->filename);
1770 sal->pc = pc;
1771 }
1772 }
1773
1774 void
1775 break_command (arg, from_tty)
1776 char *arg;
1777 int from_tty;
1778 {
1779 break_command_1 (arg, 0, from_tty);
1780 }
1781
1782 static void
1783 tbreak_command (arg, from_tty)
1784 char *arg;
1785 int from_tty;
1786 {
1787 break_command_1 (arg, 1, from_tty);
1788 }
1789
1790 /* ARGSUSED */
1791 static void
1792 watch_command (arg, from_tty)
1793 char *arg;
1794 int from_tty;
1795 {
1796 struct breakpoint *b;
1797 struct symtab_and_line sal;
1798 struct expression *exp;
1799 struct block *exp_valid_block;
1800 struct value *val;
1801
1802 sal.pc = 0;
1803 sal.symtab = NULL;
1804 sal.line = 0;
1805
1806 /* Parse arguments. */
1807 innermost_block = NULL;
1808 exp = parse_expression (arg);
1809 exp_valid_block = innermost_block;
1810 val = evaluate_expression (exp);
1811 release_value (val);
1812 if (VALUE_LAZY (val))
1813 value_fetch_lazy (val);
1814
1815 /* Now set up the breakpoint. */
1816 b = set_raw_breakpoint (sal);
1817 set_breakpoint_count (breakpoint_count + 1);
1818 b->number = breakpoint_count;
1819 b->type = bp_watchpoint;
1820 b->disposition = donttouch;
1821 b->exp = exp;
1822 b->exp_valid_block = exp_valid_block;
1823 b->val = val;
1824 b->cond = 0;
1825 b->cond_string = NULL;
1826 b->exp_string = savestring (arg, strlen (arg));
1827 mention (b);
1828 }
1829 \f
1830 /*
1831 * Helper routine for the until_command routine in infcmd.c. Here
1832 * because it uses the mechanisms of breakpoints.
1833 */
1834 /* ARGSUSED */
1835 void
1836 until_break_command (arg, from_tty)
1837 char *arg;
1838 int from_tty;
1839 {
1840 struct symtabs_and_lines sals;
1841 struct symtab_and_line sal;
1842 FRAME prev_frame = get_prev_frame (selected_frame);
1843 struct breakpoint *breakpoint;
1844 struct cleanup *old_chain;
1845
1846 clear_proceed_status ();
1847
1848 /* Set a breakpoint where the user wants it and at return from
1849 this function */
1850
1851 if (default_breakpoint_valid)
1852 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
1853 default_breakpoint_line);
1854 else
1855 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0);
1856
1857 if (sals.nelts != 1)
1858 error ("Couldn't get information on specified line.");
1859
1860 sal = sals.sals[0];
1861 free ((PTR)sals.sals); /* malloc'd, so freed */
1862
1863 if (*arg)
1864 error ("Junk at end of arguments.");
1865
1866 resolve_sal_pc (&sal);
1867
1868 breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
1869
1870 old_chain = make_cleanup(delete_breakpoint, breakpoint);
1871
1872 /* Keep within the current frame */
1873
1874 if (prev_frame)
1875 {
1876 struct frame_info *fi;
1877
1878 fi = get_frame_info (prev_frame);
1879 sal = find_pc_line (fi->pc, 0);
1880 sal.pc = fi->pc;
1881 breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
1882 make_cleanup(delete_breakpoint, breakpoint);
1883 }
1884
1885 proceed (-1, -1, 0);
1886 do_cleanups(old_chain);
1887 }
1888 \f
1889 #if 0
1890 /* These aren't used; I don't konw what they were for. */
1891 /* Set a breakpoint at the catch clause for NAME. */
1892 static int
1893 catch_breakpoint (name)
1894 char *name;
1895 {
1896 }
1897
1898 static int
1899 disable_catch_breakpoint ()
1900 {
1901 }
1902
1903 static int
1904 delete_catch_breakpoint ()
1905 {
1906 }
1907
1908 static int
1909 enable_catch_breakpoint ()
1910 {
1911 }
1912 #endif /* 0 */
1913
1914 struct sal_chain
1915 {
1916 struct sal_chain *next;
1917 struct symtab_and_line sal;
1918 };
1919
1920 #if 0
1921 /* This isn't used; I don't know what it was for. */
1922 /* For each catch clause identified in ARGS, run FUNCTION
1923 with that clause as an argument. */
1924 static struct symtabs_and_lines
1925 map_catch_names (args, function)
1926 char *args;
1927 int (*function)();
1928 {
1929 register char *p = args;
1930 register char *p1;
1931 struct symtabs_and_lines sals;
1932 #if 0
1933 struct sal_chain *sal_chain = 0;
1934 #endif
1935
1936 if (p == 0)
1937 error_no_arg ("one or more catch names");
1938
1939 sals.nelts = 0;
1940 sals.sals = NULL;
1941
1942 while (*p)
1943 {
1944 p1 = p;
1945 /* Don't swallow conditional part. */
1946 if (p1[0] == 'i' && p1[1] == 'f'
1947 && (p1[2] == ' ' || p1[2] == '\t'))
1948 break;
1949
1950 if (isalpha (*p1))
1951 {
1952 p1++;
1953 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
1954 p1++;
1955 }
1956
1957 if (*p1 && *p1 != ' ' && *p1 != '\t')
1958 error ("Arguments must be catch names.");
1959
1960 *p1 = 0;
1961 #if 0
1962 if (function (p))
1963 {
1964 struct sal_chain *next
1965 = (struct sal_chain *)alloca (sizeof (struct sal_chain));
1966 next->next = sal_chain;
1967 next->sal = get_catch_sal (p);
1968 sal_chain = next;
1969 goto win;
1970 }
1971 #endif
1972 printf ("No catch clause for exception %s.\n", p);
1973 #if 0
1974 win:
1975 #endif
1976 p = p1;
1977 while (*p == ' ' || *p == '\t') p++;
1978 }
1979 }
1980 #endif /* 0 */
1981
1982 /* This shares a lot of code with `print_frame_label_vars' from stack.c. */
1983
1984 static struct symtabs_and_lines
1985 get_catch_sals (this_level_only)
1986 int this_level_only;
1987 {
1988 register struct blockvector *bl;
1989 register struct block *block;
1990 int index, have_default = 0;
1991 struct frame_info *fi;
1992 CORE_ADDR pc;
1993 struct symtabs_and_lines sals;
1994 struct sal_chain *sal_chain = 0;
1995 char *blocks_searched;
1996
1997 /* Not sure whether an error message is always the correct response,
1998 but it's better than a core dump. */
1999 if (selected_frame == NULL)
2000 error ("No selected frame.");
2001 block = get_frame_block (selected_frame);
2002 fi = get_frame_info (selected_frame);
2003 pc = fi->pc;
2004
2005 sals.nelts = 0;
2006 sals.sals = NULL;
2007
2008 if (block == 0)
2009 error ("No symbol table info available.\n");
2010
2011 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
2012 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2013 memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2014
2015 while (block != 0)
2016 {
2017 CORE_ADDR end = BLOCK_END (block) - 4;
2018 int last_index;
2019
2020 if (bl != blockvector_for_pc (end, &index))
2021 error ("blockvector blotch");
2022 if (BLOCKVECTOR_BLOCK (bl, index) != block)
2023 error ("blockvector botch");
2024 last_index = BLOCKVECTOR_NBLOCKS (bl);
2025 index += 1;
2026
2027 /* Don't print out blocks that have gone by. */
2028 while (index < last_index
2029 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
2030 index++;
2031
2032 while (index < last_index
2033 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
2034 {
2035 if (blocks_searched[index] == 0)
2036 {
2037 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
2038 int nsyms;
2039 register int i;
2040 register struct symbol *sym;
2041
2042 nsyms = BLOCK_NSYMS (b);
2043
2044 for (i = 0; i < nsyms; i++)
2045 {
2046 sym = BLOCK_SYM (b, i);
2047 if (STREQ (SYMBOL_NAME (sym), "default"))
2048 {
2049 if (have_default)
2050 continue;
2051 have_default = 1;
2052 }
2053 if (SYMBOL_CLASS (sym) == LOC_LABEL)
2054 {
2055 struct sal_chain *next = (struct sal_chain *)
2056 alloca (sizeof (struct sal_chain));
2057 next->next = sal_chain;
2058 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
2059 sal_chain = next;
2060 }
2061 }
2062 blocks_searched[index] = 1;
2063 }
2064 index++;
2065 }
2066 if (have_default)
2067 break;
2068 if (sal_chain && this_level_only)
2069 break;
2070
2071 /* After handling the function's top-level block, stop.
2072 Don't continue to its superblock, the block of
2073 per-file symbols. */
2074 if (BLOCK_FUNCTION (block))
2075 break;
2076 block = BLOCK_SUPERBLOCK (block);
2077 }
2078
2079 if (sal_chain)
2080 {
2081 struct sal_chain *tmp_chain;
2082
2083 /* Count the number of entries. */
2084 for (index = 0, tmp_chain = sal_chain; tmp_chain;
2085 tmp_chain = tmp_chain->next)
2086 index++;
2087
2088 sals.nelts = index;
2089 sals.sals = (struct symtab_and_line *)
2090 xmalloc (index * sizeof (struct symtab_and_line));
2091 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
2092 sals.sals[index] = sal_chain->sal;
2093 }
2094
2095 return sals;
2096 }
2097
2098 /* Commands to deal with catching exceptions. */
2099
2100 static void
2101 catch_command_1 (arg, tempflag, from_tty)
2102 char *arg;
2103 int tempflag;
2104 int from_tty;
2105 {
2106 /* First, translate ARG into something we can deal with in terms
2107 of breakpoints. */
2108
2109 struct symtabs_and_lines sals;
2110 struct symtab_and_line sal;
2111 register struct expression *cond = 0;
2112 register struct breakpoint *b;
2113 char *save_arg;
2114 int i;
2115
2116 sal.line = sal.pc = sal.end = 0;
2117 sal.symtab = 0;
2118
2119 /* If no arg given, or if first arg is 'if ', all active catch clauses
2120 are breakpointed. */
2121
2122 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
2123 && (arg[2] == ' ' || arg[2] == '\t')))
2124 {
2125 /* Grab all active catch clauses. */
2126 sals = get_catch_sals (0);
2127 }
2128 else
2129 {
2130 /* Grab selected catch clauses. */
2131 error ("catch NAME not implemeneted");
2132 #if 0
2133 /* This isn't used; I don't know what it was for. */
2134 sals = map_catch_names (arg, catch_breakpoint);
2135 #endif
2136 }
2137
2138 if (! sals.nelts)
2139 return;
2140
2141 save_arg = arg;
2142 for (i = 0; i < sals.nelts; i++)
2143 {
2144 resolve_sal_pc (&sals.sals[i]);
2145
2146 while (arg && *arg)
2147 {
2148 if (arg[0] == 'i' && arg[1] == 'f'
2149 && (arg[2] == ' ' || arg[2] == '\t'))
2150 cond = parse_exp_1 ((arg += 2, &arg),
2151 block_for_pc (sals.sals[i].pc), 0);
2152 else
2153 error ("Junk at end of arguments.");
2154 }
2155 arg = save_arg;
2156 }
2157
2158 for (i = 0; i < sals.nelts; i++)
2159 {
2160 sal = sals.sals[i];
2161
2162 if (from_tty)
2163 describe_other_breakpoints (sal.pc);
2164
2165 b = set_raw_breakpoint (sal);
2166 set_breakpoint_count (breakpoint_count + 1);
2167 b->number = breakpoint_count;
2168 b->type = bp_breakpoint;
2169 b->cond = cond;
2170 b->enable = enabled;
2171 b->disposition = tempflag ? delete : donttouch;
2172
2173 printf ("Breakpoint %d at %s", b->number, local_hex_string(b->address));
2174 if (b->symtab)
2175 printf (": file %s, line %d.", b->symtab->filename, b->line_number);
2176 printf ("\n");
2177 }
2178
2179 if (sals.nelts > 1)
2180 {
2181 printf ("Multiple breakpoints were set.\n");
2182 printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
2183 }
2184 free ((PTR)sals.sals);
2185 }
2186
2187 #if 0
2188 /* These aren't used; I don't know what they were for. */
2189 /* Disable breakpoints on all catch clauses described in ARGS. */
2190 static void
2191 disable_catch (args)
2192 char *args;
2193 {
2194 /* Map the disable command to catch clauses described in ARGS. */
2195 }
2196
2197 /* Enable breakpoints on all catch clauses described in ARGS. */
2198 static void
2199 enable_catch (args)
2200 char *args;
2201 {
2202 /* Map the disable command to catch clauses described in ARGS. */
2203 }
2204
2205 /* Delete breakpoints on all catch clauses in the active scope. */
2206 static void
2207 delete_catch (args)
2208 char *args;
2209 {
2210 /* Map the delete command to catch clauses described in ARGS. */
2211 }
2212 #endif /* 0 */
2213
2214 static void
2215 catch_command (arg, from_tty)
2216 char *arg;
2217 int from_tty;
2218 {
2219 catch_command_1 (arg, 0, from_tty);
2220 }
2221 \f
2222 static void
2223 clear_command (arg, from_tty)
2224 char *arg;
2225 int from_tty;
2226 {
2227 register struct breakpoint *b, *b1;
2228 struct symtabs_and_lines sals;
2229 struct symtab_and_line sal;
2230 register struct breakpoint *found;
2231 int i;
2232
2233 if (arg)
2234 {
2235 sals = decode_line_spec (arg, 1);
2236 }
2237 else
2238 {
2239 sals.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
2240 sal.line = default_breakpoint_line;
2241 sal.symtab = default_breakpoint_symtab;
2242 sal.pc = 0;
2243 if (sal.symtab == 0)
2244 error ("No source file specified.");
2245
2246 sals.sals[0] = sal;
2247 sals.nelts = 1;
2248 }
2249
2250 for (i = 0; i < sals.nelts; i++)
2251 {
2252 /* If exact pc given, clear bpts at that pc.
2253 But if sal.pc is zero, clear all bpts on specified line. */
2254 sal = sals.sals[i];
2255 found = (struct breakpoint *) 0;
2256 while (breakpoint_chain
2257 && (sal.pc ? breakpoint_chain->address == sal.pc
2258 : (breakpoint_chain->symtab == sal.symtab
2259 && breakpoint_chain->line_number == sal.line)))
2260 {
2261 b1 = breakpoint_chain;
2262 breakpoint_chain = b1->next;
2263 b1->next = found;
2264 found = b1;
2265 }
2266
2267 ALL_BREAKPOINTS (b)
2268 while (b->next
2269 && b->next->type != bp_watchpoint
2270 && (sal.pc ? b->next->address == sal.pc
2271 : (b->next->symtab == sal.symtab
2272 && b->next->line_number == sal.line)))
2273 {
2274 b1 = b->next;
2275 b->next = b1->next;
2276 b1->next = found;
2277 found = b1;
2278 }
2279
2280 if (found == 0)
2281 {
2282 if (arg)
2283 error ("No breakpoint at %s.", arg);
2284 else
2285 error ("No breakpoint at this line.");
2286 }
2287
2288 if (found->next) from_tty = 1; /* Always report if deleted more than one */
2289 if (from_tty) printf ("Deleted breakpoint%s ", found->next ? "s" : "");
2290 while (found)
2291 {
2292 if (from_tty) printf ("%d ", found->number);
2293 b1 = found->next;
2294 delete_breakpoint (found);
2295 found = b1;
2296 }
2297 if (from_tty) putchar ('\n');
2298 }
2299 free ((PTR)sals.sals);
2300 }
2301 \f
2302 /* Delete breakpoint in BS if they are `delete' breakpoints.
2303 This is called after any breakpoint is hit, or after errors. */
2304
2305 void
2306 breakpoint_auto_delete (bs)
2307 bpstat bs;
2308 {
2309 for (; bs; bs = bs->next)
2310 if (bs->breakpoint_at && bs->breakpoint_at->disposition == delete)
2311 delete_breakpoint (bs->breakpoint_at);
2312 }
2313
2314 /* Delete a breakpoint and clean up all traces of it in the data structures. */
2315
2316 void
2317 delete_breakpoint (bpt)
2318 struct breakpoint *bpt;
2319 {
2320 register struct breakpoint *b;
2321 register bpstat bs;
2322
2323 if (bpt->inserted)
2324 target_remove_breakpoint(bpt->address, bpt->shadow_contents);
2325
2326 if (breakpoint_chain == bpt)
2327 breakpoint_chain = bpt->next;
2328
2329 ALL_BREAKPOINTS (b)
2330 if (b->next == bpt)
2331 {
2332 b->next = bpt->next;
2333 break;
2334 }
2335
2336 check_duplicates (bpt->address);
2337
2338 free_command_lines (&bpt->commands);
2339 if (bpt->cond)
2340 free ((PTR)bpt->cond);
2341 if (bpt->cond_string != NULL)
2342 free ((PTR)bpt->cond_string);
2343 if (bpt->addr_string != NULL)
2344 free ((PTR)bpt->addr_string);
2345 if (bpt->exp_string != NULL)
2346 free ((PTR)bpt->exp_string);
2347
2348 if (xgdb_verbose && bpt->type == bp_breakpoint)
2349 printf ("breakpoint #%d deleted\n", bpt->number);
2350
2351 /* Be sure no bpstat's are pointing at it after it's been freed. */
2352 /* FIXME, how can we find all bpstat's? We just check stop_bpstat for now. */
2353 for (bs = stop_bpstat; bs; bs = bs->next)
2354 if (bs->breakpoint_at == bpt)
2355 bs->breakpoint_at = NULL;
2356 free ((PTR)bpt);
2357 }
2358
2359 static void
2360 delete_command (arg, from_tty)
2361 char *arg;
2362 int from_tty;
2363 {
2364
2365 if (arg == 0)
2366 {
2367 /* Ask user only if there are some breakpoints to delete. */
2368 if (!from_tty
2369 || (breakpoint_chain && query ("Delete all breakpoints? ", 0, 0)))
2370 {
2371 /* No arg; clear all breakpoints. */
2372 while (breakpoint_chain)
2373 delete_breakpoint (breakpoint_chain);
2374 }
2375 }
2376 else
2377 map_breakpoint_numbers (arg, delete_breakpoint);
2378 }
2379
2380 /* Reset a breakpoint given it's struct breakpoint * BINT.
2381 The value we return ends up being the return value from catch_errors.
2382 Unused in this case. */
2383
2384 static int
2385 breakpoint_re_set_one (bint)
2386 char *bint;
2387 {
2388 struct breakpoint *b = (struct breakpoint *)bint; /* get past catch_errs */
2389 int i;
2390 struct symtabs_and_lines sals;
2391 char *s;
2392 enum enable save_enable;
2393
2394 switch (b->type)
2395 {
2396 case bp_breakpoint:
2397 if (b->addr_string == NULL)
2398 {
2399 /* Anything without a string can't be re-set. */
2400 delete_breakpoint (b);
2401 return 0;
2402 }
2403 /* In case we have a problem, disable this breakpoint. We'll restore
2404 its status if we succeed. */
2405 save_enable = b->enable;
2406 b->enable = disabled;
2407
2408 s = b->addr_string;
2409 sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0);
2410 for (i = 0; i < sals.nelts; i++)
2411 {
2412 resolve_sal_pc (&sals.sals[i]);
2413 if (b->symtab != sals.sals[i].symtab
2414 || b->line_number != sals.sals[i].line
2415 || b->address != sals.sals[i].pc)
2416 {
2417 b->symtab = sals.sals[i].symtab;
2418 b->line_number = sals.sals[i].line;
2419 b->address = sals.sals[i].pc;
2420
2421 if (b->cond_string != NULL)
2422 {
2423 s = b->cond_string;
2424 if (b->cond)
2425 free ((PTR)b->cond);
2426 b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
2427 }
2428
2429 check_duplicates (b->address);
2430
2431 mention (b);
2432 }
2433 b->enable = save_enable; /* Restore it, this worked. */
2434 }
2435 free ((PTR)sals.sals);
2436 break;
2437
2438 case bp_watchpoint:
2439 innermost_block = NULL;
2440 /* The issue arises of what context to evaluate this in. The same
2441 one as when it was set, but what does that mean when symbols have
2442 been re-read? We could save the filename and functionname, but
2443 if the context is more local than that, the best we could do would
2444 be something like how many levels deep and which index at that
2445 particular level, but that's going to be less stable than filenames
2446 or functionnames. */
2447 /* So for now, just use a global context. */
2448 b->exp = parse_expression (b->exp_string);
2449 b->exp_valid_block = innermost_block;
2450 b->val = evaluate_expression (b->exp);
2451 release_value (b->val);
2452 if (VALUE_LAZY (b->val))
2453 value_fetch_lazy (b->val);
2454
2455 if (b->cond_string != NULL)
2456 {
2457 s = b->cond_string;
2458 b->cond = parse_exp_1 (&s, (struct block *)0, 0);
2459 }
2460 if (b->enable == enabled)
2461 mention (b);
2462 break;
2463
2464 default:
2465 printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
2466 /* fall through */
2467 case bp_until:
2468 case bp_finish:
2469 case bp_longjmp:
2470 case bp_longjmp_resume:
2471 delete_breakpoint (b);
2472 break;
2473 }
2474
2475 return 0;
2476 }
2477
2478 /* Re-set all breakpoints after symbols have been re-loaded. */
2479 void
2480 breakpoint_re_set ()
2481 {
2482 struct breakpoint *b, *temp;
2483 static char message1[] = "Error in re-setting breakpoint %d:\n";
2484 char message[sizeof (message1) + 30 /* slop */];
2485
2486 /* If we have no current source symtab, and we have any breakpoints,
2487 go through the work of making a source context. */
2488 if (current_source_symtab == NULL && breakpoint_chain != 0)
2489 {
2490 select_source_symtab (NULL);
2491 }
2492
2493 ALL_BREAKPOINTS_SAFE (b, temp)
2494 {
2495 sprintf (message, message1, b->number); /* Format possible error msg */
2496 catch_errors (breakpoint_re_set_one, (char *) b, message);
2497 }
2498
2499 create_longjmp_breakpoint("longjmp");
2500 create_longjmp_breakpoint("_longjmp");
2501 create_longjmp_breakpoint("siglongjmp");
2502 create_longjmp_breakpoint(NULL);
2503
2504 #if 0
2505 /* Took this out (temporaliy at least), since it produces an extra
2506 blank line at startup. This messes up the gdbtests. -PB */
2507 /* Blank line to finish off all those mention() messages we just printed. */
2508 printf_filtered ("\n");
2509 #endif
2510 }
2511 \f
2512 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
2513 If from_tty is nonzero, it prints a message to that effect,
2514 which ends with a period (no newline). */
2515
2516 void
2517 set_ignore_count (bptnum, count, from_tty)
2518 int bptnum, count, from_tty;
2519 {
2520 register struct breakpoint *b;
2521
2522 if (count < 0)
2523 count = 0;
2524
2525 ALL_BREAKPOINTS (b)
2526 if (b->number == bptnum)
2527 {
2528 b->ignore_count = count;
2529 if (!from_tty)
2530 return;
2531 else if (count == 0)
2532 printf_filtered ("Will stop next time breakpoint %d is reached.",
2533 bptnum);
2534 else if (count == 1)
2535 printf_filtered ("Will ignore next crossing of breakpoint %d.",
2536 bptnum);
2537 else
2538 printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
2539 count, bptnum);
2540 return;
2541 }
2542
2543 error ("No breakpoint number %d.", bptnum);
2544 }
2545
2546 /* Clear the ignore counts of all breakpoints. */
2547 void
2548 breakpoint_clear_ignore_counts ()
2549 {
2550 struct breakpoint *b;
2551
2552 ALL_BREAKPOINTS (b)
2553 b->ignore_count = 0;
2554 }
2555
2556 /* Command to set ignore-count of breakpoint N to COUNT. */
2557
2558 static void
2559 ignore_command (args, from_tty)
2560 char *args;
2561 int from_tty;
2562 {
2563 char *p = args;
2564 register int num;
2565
2566 if (p == 0)
2567 error_no_arg ("a breakpoint number");
2568
2569 num = get_number (&p);
2570
2571 if (*p == 0)
2572 error ("Second argument (specified ignore-count) is missing.");
2573
2574 set_ignore_count (num,
2575 longest_to_int (value_as_long (parse_and_eval (p))),
2576 from_tty);
2577 printf_filtered ("\n");
2578 }
2579 \f
2580 /* Call FUNCTION on each of the breakpoints
2581 whose numbers are given in ARGS. */
2582
2583 static void
2584 map_breakpoint_numbers (args, function)
2585 char *args;
2586 void (*function) PARAMS ((struct breakpoint *));
2587 {
2588 register char *p = args;
2589 char *p1;
2590 register int num;
2591 register struct breakpoint *b;
2592
2593 if (p == 0)
2594 error_no_arg ("one or more breakpoint numbers");
2595
2596 while (*p)
2597 {
2598 p1 = p;
2599
2600 num = get_number (&p1);
2601
2602 ALL_BREAKPOINTS (b)
2603 if (b->number == num)
2604 {
2605 function (b);
2606 goto win;
2607 }
2608 printf ("No breakpoint number %d.\n", num);
2609 win:
2610 p = p1;
2611 }
2612 }
2613
2614 static void
2615 enable_breakpoint (bpt)
2616 struct breakpoint *bpt;
2617 {
2618 bpt->enable = enabled;
2619
2620 if (xgdb_verbose && bpt->type == bp_breakpoint)
2621 printf ("breakpoint #%d enabled\n", bpt->number);
2622
2623 check_duplicates (bpt->address);
2624 if (bpt->type == bp_watchpoint)
2625 {
2626 if (bpt->exp_valid_block != NULL
2627 && !contained_in (get_selected_block (), bpt->exp_valid_block))
2628 {
2629 printf_filtered ("\
2630 Cannot enable watchpoint %d because the block in which its expression\n\
2631 is valid is not currently in scope.\n", bpt->number);
2632 bpt->enable = disabled;
2633 return;
2634 }
2635
2636 value_free (bpt->val);
2637
2638 bpt->val = evaluate_expression (bpt->exp);
2639 release_value (bpt->val);
2640 if (VALUE_LAZY (bpt->val))
2641 value_fetch_lazy (bpt->val);
2642 }
2643 }
2644
2645 /* ARGSUSED */
2646 static void
2647 enable_command (args, from_tty)
2648 char *args;
2649 int from_tty;
2650 {
2651 struct breakpoint *bpt;
2652 if (args == 0)
2653 ALL_BREAKPOINTS (bpt)
2654 switch (bpt->type)
2655 {
2656 case bp_breakpoint:
2657 case bp_watchpoint:
2658 enable_breakpoint (bpt);
2659 default:
2660 continue;
2661 }
2662 else
2663 map_breakpoint_numbers (args, enable_breakpoint);
2664 }
2665
2666 static void
2667 disable_breakpoint (bpt)
2668 struct breakpoint *bpt;
2669 {
2670 bpt->enable = disabled;
2671
2672 if (xgdb_verbose && bpt->type == bp_breakpoint)
2673 printf_filtered ("breakpoint #%d disabled\n", bpt->number);
2674
2675 check_duplicates (bpt->address);
2676 }
2677
2678 /* ARGSUSED */
2679 static void
2680 disable_command (args, from_tty)
2681 char *args;
2682 int from_tty;
2683 {
2684 register struct breakpoint *bpt;
2685 if (args == 0)
2686 ALL_BREAKPOINTS (bpt)
2687 switch (bpt->type)
2688 {
2689 case bp_breakpoint:
2690 case bp_watchpoint:
2691 disable_breakpoint (bpt);
2692 default:
2693 continue;
2694 }
2695 else
2696 map_breakpoint_numbers (args, disable_breakpoint);
2697 }
2698
2699 static void
2700 enable_once_breakpoint (bpt)
2701 struct breakpoint *bpt;
2702 {
2703 bpt->enable = enabled;
2704 bpt->disposition = disable;
2705
2706 check_duplicates (bpt->address);
2707 }
2708
2709 /* ARGSUSED */
2710 static void
2711 enable_once_command (args, from_tty)
2712 char *args;
2713 int from_tty;
2714 {
2715 map_breakpoint_numbers (args, enable_once_breakpoint);
2716 }
2717
2718 static void
2719 enable_delete_breakpoint (bpt)
2720 struct breakpoint *bpt;
2721 {
2722 bpt->enable = enabled;
2723 bpt->disposition = delete;
2724
2725 check_duplicates (bpt->address);
2726 }
2727
2728 /* ARGSUSED */
2729 static void
2730 enable_delete_command (args, from_tty)
2731 char *args;
2732 int from_tty;
2733 {
2734 map_breakpoint_numbers (args, enable_delete_breakpoint);
2735 }
2736 \f
2737 /*
2738 * Use default_breakpoint_'s, or nothing if they aren't valid.
2739 */
2740 struct symtabs_and_lines
2741 decode_line_spec_1 (string, funfirstline)
2742 char *string;
2743 int funfirstline;
2744 {
2745 struct symtabs_and_lines sals;
2746 if (string == 0)
2747 error ("Empty line specification.");
2748 if (default_breakpoint_valid)
2749 sals = decode_line_1 (&string, funfirstline,
2750 default_breakpoint_symtab, default_breakpoint_line);
2751 else
2752 sals = decode_line_1 (&string, funfirstline, (struct symtab *)NULL, 0);
2753 if (*string)
2754 error ("Junk at end of line specification: %s", string);
2755 return sals;
2756 }
2757 \f
2758 void
2759 _initialize_breakpoint ()
2760 {
2761 breakpoint_chain = 0;
2762 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
2763 before a breakpoint is set. */
2764 breakpoint_count = 0;
2765
2766 add_com ("ignore", class_breakpoint, ignore_command,
2767 "Set ignore-count of breakpoint number N to COUNT.");
2768
2769 add_com ("commands", class_breakpoint, commands_command,
2770 "Set commands to be executed when a breakpoint is hit.\n\
2771 Give breakpoint number as argument after \"commands\".\n\
2772 With no argument, the targeted breakpoint is the last one set.\n\
2773 The commands themselves follow starting on the next line.\n\
2774 Type a line containing \"end\" to indicate the end of them.\n\
2775 Give \"silent\" as the first line to make the breakpoint silent;\n\
2776 then no output is printed when it is hit, except what the commands print.");
2777
2778 add_com ("condition", class_breakpoint, condition_command,
2779 "Specify breakpoint number N to break only if COND is true.\n\
2780 N is an integer; COND is an expression to be evaluated whenever\n\
2781 breakpoint N is reached. ");
2782
2783 add_com ("tbreak", class_breakpoint, tbreak_command,
2784 "Set a temporary breakpoint. Args like \"break\" command.\n\
2785 Like \"break\" except the breakpoint is only enabled temporarily,\n\
2786 so it will be disabled when hit. Equivalent to \"break\" followed\n\
2787 by using \"enable once\" on the breakpoint number.");
2788
2789 add_prefix_cmd ("enable", class_breakpoint, enable_command,
2790 "Enable some breakpoints.\n\
2791 Give breakpoint numbers (separated by spaces) as arguments.\n\
2792 With no subcommand, breakpoints are enabled until you command otherwise.\n\
2793 This is used to cancel the effect of the \"disable\" command.\n\
2794 With a subcommand you can enable temporarily.",
2795 &enablelist, "enable ", 1, &cmdlist);
2796
2797 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
2798 "Enable some breakpoints.\n\
2799 Give breakpoint numbers (separated by spaces) as arguments.\n\
2800 This is used to cancel the effect of the \"disable\" command.\n\
2801 May be abbreviated to simply \"enable\".\n",
2802 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
2803
2804 add_cmd ("once", no_class, enable_once_command,
2805 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
2806 If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
2807 See the \"tbreak\" command which sets a breakpoint and enables it once.",
2808 &enablebreaklist);
2809
2810 add_cmd ("delete", no_class, enable_delete_command,
2811 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
2812 If a breakpoint is hit while enabled in this fashion, it is deleted.",
2813 &enablebreaklist);
2814
2815 add_cmd ("delete", no_class, enable_delete_command,
2816 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
2817 If a breakpoint is hit while enabled in this fashion, it is deleted.",
2818 &enablelist);
2819
2820 add_cmd ("once", no_class, enable_once_command,
2821 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
2822 If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
2823 See the \"tbreak\" command which sets a breakpoint and enables it once.",
2824 &enablelist);
2825
2826 add_prefix_cmd ("disable", class_breakpoint, disable_command,
2827 "Disable some breakpoints.\n\
2828 Arguments are breakpoint numbers with spaces in between.\n\
2829 To disable all breakpoints, give no argument.\n\
2830 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
2831 &disablelist, "disable ", 1, &cmdlist);
2832 add_com_alias ("dis", "disable", class_breakpoint, 1);
2833 add_com_alias ("disa", "disable", class_breakpoint, 1);
2834
2835 add_cmd ("breakpoints", class_alias, disable_command,
2836 "Disable some breakpoints.\n\
2837 Arguments are breakpoint numbers with spaces in between.\n\
2838 To disable all breakpoints, give no argument.\n\
2839 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
2840 This command may be abbreviated \"disable\".",
2841 &disablelist);
2842
2843 add_prefix_cmd ("delete", class_breakpoint, delete_command,
2844 "Delete some breakpoints or auto-display expressions.\n\
2845 Arguments are breakpoint numbers with spaces in between.\n\
2846 To delete all breakpoints, give no argument.\n\
2847 \n\
2848 Also a prefix command for deletion of other GDB objects.\n\
2849 The \"unset\" command is also an alias for \"delete\".",
2850 &deletelist, "delete ", 1, &cmdlist);
2851 add_com_alias ("d", "delete", class_breakpoint, 1);
2852
2853 add_cmd ("breakpoints", class_alias, delete_command,
2854 "Delete some breakpoints or auto-display expressions.\n\
2855 Arguments are breakpoint numbers with spaces in between.\n\
2856 To delete all breakpoints, give no argument.\n\
2857 This command may be abbreviated \"delete\".",
2858 &deletelist);
2859
2860 add_com ("clear", class_breakpoint, clear_command,
2861 "Clear breakpoint at specified line or function.\n\
2862 Argument may be line number, function name, or \"*\" and an address.\n\
2863 If line number is specified, all breakpoints in that line are cleared.\n\
2864 If function is specified, breakpoints at beginning of function are cleared.\n\
2865 If an address is specified, breakpoints at that address are cleared.\n\n\
2866 With no argument, clears all breakpoints in the line that the selected frame\n\
2867 is executing in.\n\
2868 \n\
2869 See also the \"delete\" command which clears breakpoints by number.");
2870
2871 add_com ("break", class_breakpoint, break_command,
2872 "Set breakpoint at specified line or function.\n\
2873 Argument may be line number, function name, or \"*\" and an address.\n\
2874 If line number is specified, break at start of code for that line.\n\
2875 If function is specified, break at start of code for that function.\n\
2876 If an address is specified, break at that exact address.\n\
2877 With no arg, uses current execution address of selected stack frame.\n\
2878 This is useful for breaking on return to a stack frame.\n\
2879 \n\
2880 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
2881 \n\
2882 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
2883 add_com_alias ("b", "break", class_run, 1);
2884 add_com_alias ("br", "break", class_run, 1);
2885 add_com_alias ("bre", "break", class_run, 1);
2886 add_com_alias ("brea", "break", class_run, 1);
2887
2888 add_info ("breakpoints", breakpoints_info,
2889 "Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
2890 The \"Type\" column indicates one of:\n\
2891 \tbreakpoint - normal breakpoint\n\
2892 \twatchpoint - watchpoint\n\
2893 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
2894 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
2895 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
2896 address and file/line number respectively.\n\n\
2897 Convenience variable \"$_\" and default examine address for \"x\"\n\
2898 are set to the address of the last breakpoint listed.\n\n\
2899 Convenience variable \"$bpnum\" contains the number of the last\n\
2900 breakpoint set.");
2901
2902 #if MAINTENANCE_CMDS
2903
2904 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
2905 "Status of all breakpoints, or breakpoint number NUMBER.\n\
2906 The \"Type\" column indicates one of:\n\
2907 \tbreakpoint - normal breakpoint\n\
2908 \twatchpoint - watchpoint\n\
2909 \tlongjmp - internal breakpoint used to step through longjmp()\n\
2910 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
2911 \tuntil - internal breakpoint used by the \"until\" command\n\
2912 \tfinish - internal breakpoint used by the \"finish\" command\n\
2913 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
2914 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
2915 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
2916 address and file/line number respectively.\n\n\
2917 Convenience variable \"$_\" and default examine address for \"x\"\n\
2918 are set to the address of the last breakpoint listed.\n\n\
2919 Convenience variable \"$bpnum\" contains the number of the last\n\
2920 breakpoint set.",
2921 &maintenanceinfolist);
2922
2923 #endif /* MAINTENANCE_CMDS */
2924
2925 add_com ("catch", class_breakpoint, catch_command,
2926 "Set breakpoints to catch exceptions that are raised.\n\
2927 Argument may be a single exception to catch, multiple exceptions\n\
2928 to catch, or the default exception \"default\". If no arguments\n\
2929 are given, breakpoints are set at all exception handlers catch clauses\n\
2930 within the current scope.\n\
2931 \n\
2932 A condition specified for the catch applies to all breakpoints set\n\
2933 with this command\n\
2934 \n\
2935 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
2936
2937 add_com ("watch", class_breakpoint, watch_command,
2938 "Set a watchpoint for an expression.\n\
2939 A watchpoint stops execution of your program whenever the value of\n\
2940 an expression changes.");
2941
2942 add_info ("watchpoints", breakpoints_info,
2943 "Synonym for ``info breakpoints''.");
2944 }
2945
2946 /* OK, when we call objfile_relocate, we need to relocate breakpoints
2947 too. breakpoint_re_set is not a good choice--for example, if
2948 addr_string contains just a line number without a file name the
2949 breakpoint might get set in a different file. In general, there is
2950 no need to go all the way back to the user's string (though this might
2951 work if some effort were made to canonicalize it), since symtabs and
2952 everything except addresses are still valid.
2953
2954 Probably the best way to solve this is to have each breakpoint save
2955 the objfile and the section number that was used to set it (if set
2956 by "*addr", probably it is best to use find_pc_line to get a symtab
2957 and use the objfile and block_line_section for that symtab). Then
2958 objfile_relocate can call fixup_breakpoints with the objfile and
2959 the new_offsets, and it can relocate only the appropriate breakpoints. */
2960
2961 #ifdef IBM6000_TARGET
2962 /* But for now, just kludge it based on the concept that before an
2963 objfile is relocated the breakpoint is below 0x10000000, and afterwards
2964 it is higher, so that way we only relocate each breakpoint once. */
2965
2966 void
2967 fixup_breakpoints (low, high, delta)
2968 CORE_ADDR low;
2969 CORE_ADDR high;
2970 CORE_ADDR delta;
2971 {
2972 struct breakpoint *b;
2973
2974 ALL_BREAKPOINTS (b)
2975 {
2976 if (b->address >= low && b->address <= high)
2977 b->address += delta;
2978 }
2979 }
2980 #endif
This page took 0.090503 seconds and 4 git commands to generate.