]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/breakpoint.c
* symtab.c (decode_line_1): Use end of block to figure out whether
[thirdparty/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 \f
794 /* Return the frame which we can use to evaluate the expression
795 whose valid block is valid_block, or NULL if not in scope.
796
797 This whole concept is probably not the way to do things (it is incredibly
798 slow being the main reason, not to mention fragile (e.g. the sparc
799 frame pointer being fetched as 0 bug causes it to stop)). Instead,
800 introduce a version of "struct frame" which survives over calls to the
801 inferior, but which is better than FRAME_ADDR in the sense that it lets
802 us evaluate expressions relative to that frame (on some machines, it
803 can just be a FRAME_ADDR). Save one of those instead of (or in addition
804 to) the exp_valid_block, and then use it to evaluate the watchpoint
805 expression, with no need to do all this backtracing every time.
806
807 Or better yet, what if it just copied the struct frame and its next
808 frame? Off the top of my head, I would think that would work
809 because things like (a29k) rsize and msize, or (sparc) bottom just
810 depend on the frame, and aren't going to be different just because
811 the inferior has done something. Trying to recalculate them
812 strikes me as a lot of work, possibly even impossible. Saving the
813 next frame is needed at least on a29k, where get_saved_register
814 uses fi->next->saved_msp. For figuring out whether that frame is
815 still on the stack, I guess this needs to be machine-specific (e.g.
816 a29k) but I think
817
818 read_fp () INNER_THAN watchpoint_frame->frame
819
820 would generally work.
821
822 Of course the scope of the expression could be less than a whole
823 function; perhaps if the innermost frame is the one which the
824 watchpoint is relative to (another machine-specific thing, usually
825
826 FRAMELESS_FUNCTION_INVOCATION (get_current_frame(), fromleaf)
827 read_fp () == wp_frame->frame
828 && !fromleaf
829
830 ), *then* it could do a
831
832 contained_in (get_current_block (), wp->exp_valid_block).
833
834 */
835
836 FRAME
837 within_scope (valid_block)
838 struct block *valid_block;
839 {
840 FRAME fr = get_current_frame ();
841 struct frame_info *fi = get_frame_info (fr);
842 CORE_ADDR func_start;
843
844 /* If caller_pc_valid is true, we are stepping through
845 a function prologue, which is bounded by callee_func_start
846 (inclusive) and callee_prologue_end (exclusive).
847 caller_pc is the pc of the caller.
848
849 Yes, this is hairy. */
850 static int caller_pc_valid = 0;
851 static CORE_ADDR caller_pc;
852 static CORE_ADDR callee_func_start;
853 static CORE_ADDR callee_prologue_end;
854
855 find_pc_partial_function (fi->pc, (PTR)NULL, &func_start, (CORE_ADDR *)NULL);
856 func_start += FUNCTION_START_OFFSET;
857 if (fi->pc == func_start)
858 {
859 /* We just called a function. The only other case I
860 can think of where the pc would equal the pc of the
861 start of a function is a frameless function (i.e.
862 no prologue) where we branch back to the start
863 of the function. In that case, SKIP_PROLOGUE won't
864 find one, and we'll clear caller_pc_valid a few lines
865 down. */
866 caller_pc_valid = 1;
867 caller_pc = SAVED_PC_AFTER_CALL (fr);
868 callee_func_start = func_start;
869 SKIP_PROLOGUE (func_start);
870 callee_prologue_end = func_start;
871 }
872 if (caller_pc_valid)
873 {
874 if (fi->pc < callee_func_start
875 || fi->pc >= callee_prologue_end)
876 caller_pc_valid = 0;
877 }
878
879 if (contained_in (block_for_pc (caller_pc_valid
880 ? caller_pc
881 : fi->pc),
882 valid_block))
883 {
884 return fr;
885 }
886 fr = get_prev_frame (fr);
887
888 /* If any active frame is in the exp_valid_block, then it's
889 OK. Note that this might not be the same invocation of
890 the exp_valid_block that we were watching a little while
891 ago, or the same one as when the watchpoint was set (e.g.
892 we are watching a local variable in a recursive function.
893 When we return from a recursive invocation, then we are
894 suddenly watching a different instance of the variable).
895
896 At least for now I am going to consider this a feature. */
897 for (; fr != NULL; fr = get_prev_frame (fr))
898 {
899 fi = get_frame_info (fr);
900 if (contained_in (block_for_pc (fi->pc),
901 valid_block))
902 {
903 return fr;
904 }
905 }
906 return NULL;
907 }
908
909 /* Possible return values for watchpoint_check (this can't be an enum
910 because of check_errors). */
911 /* The watchpoint has been disabled. */
912 #define WP_DISABLED 1
913 /* The value has changed. */
914 #define WP_VALUE_CHANGED 2
915 /* The value has not changed. */
916 #define WP_VALUE_NOT_CHANGED 3
917
918 /* Check watchpoint condition. */
919 static int
920 watchpoint_check (p)
921 char *p;
922 {
923 bpstat bs = (bpstat) p;
924 FRAME fr;
925
926 int within_current_scope;
927 if (bs->breakpoint_at->exp_valid_block == NULL)
928 within_current_scope = 1;
929 else
930 {
931 fr = within_scope (bs->breakpoint_at->exp_valid_block);
932 within_current_scope = fr != NULL;
933 if (within_current_scope)
934 /* If we end up stopping, the current frame will get selected
935 in normal_stop. So this call to select_frame won't affect
936 the user. */
937 select_frame (fr, -1);
938 }
939
940 if (within_current_scope)
941 {
942 /* We use value_{,free_to_}mark because it could be a
943 *long* time before we return to the command level and
944 call free_all_values. */
945 /* But couldn't we just call free_all_values instead? */
946
947 value mark = value_mark ();
948 value new_val = evaluate_expression (bs->breakpoint_at->exp);
949 if (!value_equal (bs->breakpoint_at->val, new_val))
950 {
951 release_value (new_val);
952 value_free_to_mark (mark);
953 bs->old_val = bs->breakpoint_at->val;
954 bs->breakpoint_at->val = new_val;
955 /* We will stop here */
956 return WP_VALUE_CHANGED;
957 }
958 else
959 {
960 /* Nothing changed, don't do anything. */
961 value_free_to_mark (mark);
962 /* We won't stop here */
963 return WP_VALUE_NOT_CHANGED;
964 }
965 }
966 else
967 {
968 /* This seems like the only logical thing to do because
969 if we temporarily ignored the watchpoint, then when
970 we reenter the block in which it is valid it contains
971 garbage (in the case of a function, it may have two
972 garbage values, one before and one after the prologue).
973 So we can't even detect the first assignment to it and
974 watch after that (since the garbage may or may not equal
975 the first value assigned). */
976 bs->breakpoint_at->enable = disabled;
977 printf_filtered ("\
978 Watchpoint %d disabled because the program has left the block in\n\
979 which its expression is valid.\n", bs->breakpoint_at->number);
980 return WP_DISABLED;
981 }
982 }
983
984 /* This is used when everything which needs to be printed has
985 already been printed. But we still want to print the frame. */
986 static int
987 print_it_done (bs)
988 bpstat bs;
989 {
990 return 0;
991 }
992
993 /* This is used when nothing should be printed for this bpstat entry. */
994
995 static int
996 print_it_noop (bs)
997 bpstat bs;
998 {
999 return -1;
1000 }
1001
1002 /* Determine whether we stopped at a breakpoint, etc, or whether we
1003 don't understand this stop. Result is a chain of bpstat's such that:
1004
1005 if we don't understand the stop, the result is a null pointer.
1006
1007 if we understand why we stopped, the result is not null, and
1008 the first element of the chain contains summary "stop" and
1009 "print" flags for the whole chain.
1010
1011 Each element of the chain refers to a particular breakpoint or
1012 watchpoint at which we have stopped. (We may have stopped for
1013 several reasons concurrently.)
1014
1015 Each element of the chain has valid next, breakpoint_at,
1016 commands, FIXME??? fields.
1017
1018 */
1019
1020
1021 bpstat
1022 bpstat_stop_status (pc, frame_address)
1023 CORE_ADDR *pc;
1024 FRAME_ADDR frame_address;
1025 {
1026 register struct breakpoint *b;
1027 CORE_ADDR bp_addr;
1028 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1029 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
1030 int real_breakpoint = 0;
1031 #endif
1032 /* Root of the chain of bpstat's */
1033 struct bpstat root_bs[1];
1034 /* Pointer to the last thing in the chain currently. */
1035 bpstat bs = root_bs;
1036
1037 /* Get the address where the breakpoint would have been. */
1038 bp_addr = *pc - DECR_PC_AFTER_BREAK;
1039
1040 ALL_BREAKPOINTS (b)
1041 {
1042 if (b->enable == disabled)
1043 continue;
1044
1045 if (b->type != bp_watchpoint && b->address != bp_addr)
1046 continue;
1047
1048 /* Come here if it's a watchpoint, or if the break address matches */
1049
1050 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
1051
1052 bs->stop = 1;
1053 bs->print = 1;
1054
1055 if (b->type == bp_watchpoint)
1056 {
1057 static char message1[] =
1058 "Error evaluating expression for watchpoint %d\n";
1059 char message[sizeof (message1) + 30 /* slop */];
1060 sprintf (message, message1, b->number);
1061 switch (catch_errors (watchpoint_check, (char *) bs, message,
1062 RETURN_MASK_ALL))
1063 {
1064 case WP_DISABLED:
1065 /* We've already printed what needs to be printed. */
1066 bs->print_it = print_it_done;
1067 /* Stop. */
1068 break;
1069 case WP_VALUE_CHANGED:
1070 /* Stop. */
1071 break;
1072 case WP_VALUE_NOT_CHANGED:
1073 /* Don't stop. */
1074 bs->print_it = print_it_noop;
1075 bs->stop = 0;
1076 continue;
1077 default:
1078 /* Can't happen. */
1079 /* FALLTHROUGH */
1080 case 0:
1081 /* Error from catch_errors. */
1082 b->enable = disabled;
1083 printf_filtered ("Watchpoint %d disabled.\n", b->number);
1084 /* We've already printed what needs to be printed. */
1085 bs->print_it = print_it_done;
1086 /* Stop. */
1087 break;
1088 }
1089 }
1090 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1091 else
1092 real_breakpoint = 1;
1093 #endif
1094
1095 if (b->frame && b->frame != frame_address)
1096 bs->stop = 0;
1097 else
1098 {
1099 int value_is_zero;
1100
1101 if (b->cond)
1102 {
1103 /* Need to select the frame, with all that implies
1104 so that the conditions will have the right context. */
1105 select_frame (get_current_frame (), 0);
1106 value_is_zero
1107 = catch_errors (breakpoint_cond_eval, (char *)(b->cond),
1108 "Error in testing breakpoint condition:\n",
1109 RETURN_MASK_ALL);
1110 /* FIXME-someday, should give breakpoint # */
1111 free_all_values ();
1112 }
1113 if (b->cond && value_is_zero)
1114 {
1115 bs->stop = 0;
1116 }
1117 else if (b->ignore_count > 0)
1118 {
1119 b->ignore_count--;
1120 bs->stop = 0;
1121 }
1122 else
1123 {
1124 /* We will stop here */
1125 if (b->disposition == disable)
1126 b->enable = disabled;
1127 bs->commands = b->commands;
1128 if (b->silent)
1129 bs->print = 0;
1130 if (bs->commands && STREQ ("silent", bs->commands->line))
1131 {
1132 bs->commands = bs->commands->next;
1133 bs->print = 0;
1134 }
1135 }
1136 }
1137 /* Print nothing for this entry if we dont stop or if we dont print. */
1138 if (bs->stop == 0 || bs->print == 0)
1139 bs->print_it = print_it_noop;
1140 }
1141
1142 bs->next = NULL; /* Terminate the chain */
1143 bs = root_bs->next; /* Re-grab the head of the chain */
1144 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1145 if (bs)
1146 {
1147 if (real_breakpoint)
1148 {
1149 *pc = bp_addr;
1150 #if defined (SHIFT_INST_REGS)
1151 {
1152 CORE_ADDR pc = read_register (PC_REGNUM);
1153 CORE_ADDR npc = read_register (NPC_REGNUM);
1154 if (pc != npc)
1155 {
1156 write_register (NNPC_REGNUM, npc);
1157 write_register (NPC_REGNUM, pc);
1158 }
1159 }
1160 #else /* No SHIFT_INST_REGS. */
1161 write_pc (bp_addr);
1162 #endif /* No SHIFT_INST_REGS. */
1163 }
1164 }
1165 #endif /* DECR_PC_AFTER_BREAK != 0. */
1166 return bs;
1167 }
1168 \f
1169 /* Tell what to do about this bpstat. */
1170 struct bpstat_what
1171 bpstat_what (bs)
1172 bpstat bs;
1173 {
1174 /* Classify each bpstat as one of the following. */
1175 enum class {
1176 /* This bpstat element has no effect on the main_action. */
1177 no_effect = 0,
1178
1179 /* There was a watchpoint, stop but don't print. */
1180 wp_silent,
1181
1182 /* There was a watchpoint, stop and print. */
1183 wp_noisy,
1184
1185 /* There was a breakpoint but we're not stopping. */
1186 bp_nostop,
1187
1188 /* There was a breakpoint, stop but don't print. */
1189 bp_silent,
1190
1191 /* There was a breakpoint, stop and print. */
1192 bp_noisy,
1193
1194 /* We hit the longjmp breakpoint. */
1195 long_jump,
1196
1197 /* We hit the longjmp_resume breakpoint. */
1198 long_resume,
1199
1200 /* This is just used to count how many enums there are. */
1201 class_last
1202 };
1203
1204 /* Here is the table which drives this routine. So that we can
1205 format it pretty, we define some abbreviations for the
1206 enum bpstat_what codes. */
1207 #define keep_c BPSTAT_WHAT_KEEP_CHECKING
1208 #define stop_s BPSTAT_WHAT_STOP_SILENT
1209 #define stop_n BPSTAT_WHAT_STOP_NOISY
1210 #define single BPSTAT_WHAT_SINGLE
1211 #define setlr BPSTAT_WHAT_SET_LONGJMP_RESUME
1212 #define clrlr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
1213 #define clrlrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
1214 /* "Can't happen." Might want to print an error message.
1215 abort() is not out of the question, but chances are GDB is just
1216 a bit confused, not unusable. */
1217 #define err BPSTAT_WHAT_STOP_NOISY
1218
1219 /* Given an old action and a class, come up with a new action. */
1220 static const enum bpstat_what_main_action
1221 table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
1222 {
1223 /* old action */
1224 /* keep_c stop_s stop_n single setlr clrlr clrlrs */
1225
1226 /*no_effect*/ {keep_c, stop_s, stop_n, single, setlr , clrlr , clrlrs},
1227 /*wp_silent*/ {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s},
1228 /*wp_noisy*/ {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n},
1229 /*bp_nostop*/ {single, stop_s, stop_n, single, setlr , clrlrs, clrlrs},
1230 /*bp_silent*/ {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s},
1231 /*bp_noisy*/ {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n},
1232 /*long_jump*/ {setlr , stop_s, stop_n, setlr , err , err , err },
1233 /*long_resume*/ {clrlr , stop_s, stop_n, clrlrs, err , err , err }
1234 };
1235 #undef keep_c
1236 #undef stop_s
1237 #undef stop_n
1238 #undef single
1239 #undef setlr
1240 #undef clrlr
1241 #undef clrlrs
1242 #undef err
1243 enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
1244 int found_step_resume = 0;
1245
1246 for (; bs != NULL; bs = bs->next)
1247 {
1248 enum class bs_class;
1249 if (bs->breakpoint_at == NULL)
1250 /* I suspect this can happen if it was a momentary breakpoint
1251 which has since been deleted. */
1252 continue;
1253 switch (bs->breakpoint_at->type)
1254 {
1255 case bp_breakpoint:
1256 case bp_until:
1257 case bp_finish:
1258 if (bs->stop)
1259 {
1260 if (bs->print)
1261 bs_class = bp_noisy;
1262 else
1263 bs_class = bp_silent;
1264 }
1265 else
1266 bs_class = bp_nostop;
1267 break;
1268 case bp_watchpoint:
1269 if (bs->stop)
1270 {
1271 if (bs->print)
1272 bs_class = wp_noisy;
1273 else
1274 bs_class = wp_silent;
1275 }
1276 else
1277 /* There was a watchpoint, but we're not stopping. This requires
1278 no further action. */
1279 bs_class = no_effect;
1280 break;
1281 case bp_longjmp:
1282 bs_class = long_jump;
1283 break;
1284 case bp_longjmp_resume:
1285 bs_class = long_resume;
1286 break;
1287 case bp_step_resume:
1288 #if 0
1289 /* Need to temporarily disable this until we can fix the bug
1290 with nexting over a breakpoint with ->stop clear causing
1291 an infinite loop. For now, treat the breakpoint as having
1292 been hit even if the frame is wrong. */
1293 if (bs->stop)
1294 {
1295 #endif
1296 found_step_resume = 1;
1297 /* We don't handle this via the main_action. */
1298 bs_class = no_effect;
1299 #if 0
1300 }
1301 else
1302 /* It is for the wrong frame. */
1303 bs_class = bp_nostop;
1304 #endif
1305 break;
1306 }
1307 current_action = table[(int)bs_class][(int)current_action];
1308 }
1309 {
1310 struct bpstat_what retval;
1311 retval.main_action = current_action;
1312 retval.step_resume = found_step_resume;
1313 return retval;
1314 }
1315 }
1316
1317 /* Nonzero if we should step constantly (e.g. watchpoints on machines
1318 without hardware support). This isn't related to a specific bpstat,
1319 just to things like whether watchpoints are set. */
1320
1321 int
1322 bpstat_should_step ()
1323 {
1324 struct breakpoint *b;
1325 ALL_BREAKPOINTS (b)
1326 if (b->enable == enabled && b->type == bp_watchpoint)
1327 return 1;
1328 return 0;
1329 }
1330 \f
1331 /* Print information on breakpoint number BNUM, or -1 if all.
1332 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
1333 is nonzero, process only watchpoints. */
1334
1335 static void
1336 breakpoint_1 (bnum, allflag)
1337 int bnum;
1338 int allflag;
1339 {
1340 register struct breakpoint *b;
1341 register struct command_line *l;
1342 register struct symbol *sym;
1343 CORE_ADDR last_addr = (CORE_ADDR)-1;
1344 int found_a_breakpoint = 0;
1345 static char *bptypes[] = {"breakpoint", "until", "finish", "watchpoint",
1346 "longjmp", "longjmp resume"};
1347 static char *bpdisps[] = {"del", "dis", "keep"};
1348 static char bpenables[] = "ny";
1349 char wrap_indent[80];
1350
1351 if (!breakpoint_chain)
1352 {
1353 printf_filtered ("No breakpoints or watchpoints.\n");
1354 return;
1355 }
1356
1357 ALL_BREAKPOINTS (b)
1358 if (bnum == -1
1359 || bnum == b->number)
1360 {
1361 /* We only print out user settable breakpoints unless the allflag is set. */
1362 if (!allflag
1363 && b->type != bp_breakpoint
1364 && b->type != bp_watchpoint)
1365 continue;
1366
1367 if (!found_a_breakpoint++)
1368 printf_filtered ("Num Type Disp Enb %sWhat\n",
1369 addressprint ? "Address " : "");
1370
1371 printf_filtered ("%-3d %-14s %-4s %-3c ",
1372 b->number,
1373 bptypes[(int)b->type],
1374 bpdisps[(int)b->disposition],
1375 bpenables[(int)b->enable]);
1376 strcpy (wrap_indent, " ");
1377 if (addressprint)
1378 strcat (wrap_indent, " ");
1379 switch (b->type)
1380 {
1381 case bp_watchpoint:
1382 print_expression (b->exp, stdout);
1383 break;
1384 case bp_breakpoint:
1385 case bp_until:
1386 case bp_finish:
1387 case bp_longjmp:
1388 case bp_longjmp_resume:
1389 if (addressprint)
1390 printf_filtered ("%s ", local_hex_string_custom(b->address, "08"));
1391
1392 last_addr = b->address;
1393 if (b->symtab)
1394 {
1395 sym = find_pc_function (b->address);
1396 if (sym)
1397 {
1398 fputs_filtered ("in ", stdout);
1399 fputs_filtered (SYMBOL_SOURCE_NAME (sym), stdout);
1400 wrap_here (wrap_indent);
1401 fputs_filtered (" at ", stdout);
1402 }
1403 fputs_filtered (b->symtab->filename, stdout);
1404 printf_filtered (":%d", b->line_number);
1405 }
1406 else
1407 print_address_symbolic (b->address, stdout, demangle, " ");
1408 }
1409
1410 printf_filtered ("\n");
1411
1412 if (b->frame)
1413 printf_filtered ("\tstop only in stack frame at %s\n",
1414 local_hex_string(b->frame));
1415 if (b->cond)
1416 {
1417 printf_filtered ("\tstop only if ");
1418 print_expression (b->cond, stdout);
1419 printf_filtered ("\n");
1420 }
1421 if (b->ignore_count)
1422 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
1423 if ((l = b->commands))
1424 while (l)
1425 {
1426 fputs_filtered ("\t", stdout);
1427 fputs_filtered (l->line, stdout);
1428 fputs_filtered ("\n", stdout);
1429 l = l->next;
1430 }
1431 }
1432
1433 if (!found_a_breakpoint
1434 && bnum != -1)
1435 printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
1436 else
1437 /* Compare against (CORE_ADDR)-1 in case some compiler decides
1438 that a comparison of an unsigned with -1 is always false. */
1439 if (last_addr != (CORE_ADDR)-1)
1440 set_next_address (last_addr);
1441 }
1442
1443 /* ARGSUSED */
1444 static void
1445 breakpoints_info (bnum_exp, from_tty)
1446 char *bnum_exp;
1447 int from_tty;
1448 {
1449 int bnum = -1;
1450
1451 if (bnum_exp)
1452 bnum = parse_and_eval_address (bnum_exp);
1453
1454 breakpoint_1 (bnum, 0);
1455 }
1456
1457 #if MAINTENANCE_CMDS
1458
1459 /* ARGSUSED */
1460 static void
1461 maintenance_info_breakpoints (bnum_exp, from_tty)
1462 char *bnum_exp;
1463 int from_tty;
1464 {
1465 int bnum = -1;
1466
1467 if (bnum_exp)
1468 bnum = parse_and_eval_address (bnum_exp);
1469
1470 breakpoint_1 (bnum, 1);
1471 }
1472
1473 #endif
1474
1475 /* Print a message describing any breakpoints set at PC. */
1476
1477 static void
1478 describe_other_breakpoints (pc)
1479 register CORE_ADDR pc;
1480 {
1481 register int others = 0;
1482 register struct breakpoint *b;
1483
1484 ALL_BREAKPOINTS (b)
1485 if (b->address == pc)
1486 others++;
1487 if (others > 0)
1488 {
1489 printf ("Note: breakpoint%s ", (others > 1) ? "s" : "");
1490 ALL_BREAKPOINTS (b)
1491 if (b->address == pc)
1492 {
1493 others--;
1494 printf ("%d%s%s ",
1495 b->number,
1496 (b->enable == disabled) ? " (disabled)" : "",
1497 (others > 1) ? "," : ((others == 1) ? " and" : ""));
1498 }
1499 printf ("also set at pc %s.\n", local_hex_string(pc));
1500 }
1501 }
1502 \f
1503 /* Set the default place to put a breakpoint
1504 for the `break' command with no arguments. */
1505
1506 void
1507 set_default_breakpoint (valid, addr, symtab, line)
1508 int valid;
1509 CORE_ADDR addr;
1510 struct symtab *symtab;
1511 int line;
1512 {
1513 default_breakpoint_valid = valid;
1514 default_breakpoint_address = addr;
1515 default_breakpoint_symtab = symtab;
1516 default_breakpoint_line = line;
1517 }
1518
1519 /* Rescan breakpoints at address ADDRESS,
1520 marking the first one as "first" and any others as "duplicates".
1521 This is so that the bpt instruction is only inserted once. */
1522
1523 static void
1524 check_duplicates (address)
1525 CORE_ADDR address;
1526 {
1527 register struct breakpoint *b;
1528 register int count = 0;
1529
1530 if (address == 0) /* Watchpoints are uninteresting */
1531 return;
1532
1533 ALL_BREAKPOINTS (b)
1534 if (b->enable != disabled && b->address == address)
1535 {
1536 count++;
1537 b->duplicate = count > 1;
1538 }
1539 }
1540
1541 /* Low level routine to set a breakpoint.
1542 Takes as args the three things that every breakpoint must have.
1543 Returns the breakpoint object so caller can set other things.
1544 Does not set the breakpoint number!
1545 Does not print anything.
1546
1547 ==> This routine should not be called if there is a chance of later
1548 error(); otherwise it leaves a bogus breakpoint on the chain. Validate
1549 your arguments BEFORE calling this routine! */
1550
1551 static struct breakpoint *
1552 set_raw_breakpoint (sal)
1553 struct symtab_and_line sal;
1554 {
1555 register struct breakpoint *b, *b1;
1556
1557 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
1558 memset (b, 0, sizeof (*b));
1559 b->address = sal.pc;
1560 b->symtab = sal.symtab;
1561 b->line_number = sal.line;
1562 b->enable = enabled;
1563 b->next = 0;
1564 b->silent = 0;
1565 b->ignore_count = 0;
1566 b->commands = NULL;
1567 b->frame = 0;
1568
1569 /* Add this breakpoint to the end of the chain
1570 so that a list of breakpoints will come out in order
1571 of increasing numbers. */
1572
1573 b1 = breakpoint_chain;
1574 if (b1 == 0)
1575 breakpoint_chain = b;
1576 else
1577 {
1578 while (b1->next)
1579 b1 = b1->next;
1580 b1->next = b;
1581 }
1582
1583 check_duplicates (sal.pc);
1584
1585 return b;
1586 }
1587
1588 static void
1589 create_longjmp_breakpoint(func_name)
1590 char *func_name;
1591 {
1592 struct symtab_and_line sal;
1593 struct breakpoint *b;
1594 static int internal_breakpoint_number = -1;
1595
1596 if (func_name != NULL)
1597 {
1598 struct minimal_symbol *m;
1599
1600 m = lookup_minimal_symbol(func_name, (struct objfile *)NULL);
1601 if (m)
1602 sal.pc = SYMBOL_VALUE_ADDRESS (m);
1603 else
1604 return;
1605 }
1606 else
1607 sal.pc = 0;
1608
1609 sal.symtab = NULL;
1610 sal.line = 0;
1611
1612 b = set_raw_breakpoint(sal);
1613 if (!b) return;
1614
1615 b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
1616 b->disposition = donttouch;
1617 b->enable = disabled;
1618 b->silent = 1;
1619 if (func_name)
1620 b->addr_string = strsave(func_name);
1621 b->number = internal_breakpoint_number--;
1622 }
1623
1624 /* Call this routine when stepping and nexting to enable a breakpoint if we do
1625 a longjmp(). When we hit that breakpoint, call
1626 set_longjmp_resume_breakpoint() to figure out where we are going. */
1627
1628 void
1629 enable_longjmp_breakpoint()
1630 {
1631 register struct breakpoint *b;
1632
1633 ALL_BREAKPOINTS (b)
1634 if (b->type == bp_longjmp)
1635 {
1636 b->enable = enabled;
1637 check_duplicates (b->address);
1638 }
1639 }
1640
1641 void
1642 disable_longjmp_breakpoint()
1643 {
1644 register struct breakpoint *b;
1645
1646 ALL_BREAKPOINTS (b)
1647 if ( b->type == bp_longjmp
1648 || b->type == bp_longjmp_resume)
1649 {
1650 b->enable = disabled;
1651 check_duplicates (b->address);
1652 }
1653 }
1654
1655 /* Call this after hitting the longjmp() breakpoint. Use this to set a new
1656 breakpoint at the target of the jmp_buf.
1657
1658 FIXME - This ought to be done by setting a temporary breakpoint that gets
1659 deleted automatically...
1660 */
1661
1662 void
1663 set_longjmp_resume_breakpoint(pc, frame)
1664 CORE_ADDR pc;
1665 FRAME frame;
1666 {
1667 register struct breakpoint *b;
1668
1669 ALL_BREAKPOINTS (b)
1670 if (b->type == bp_longjmp_resume)
1671 {
1672 b->address = pc;
1673 b->enable = enabled;
1674 if (frame != NULL)
1675 b->frame = FRAME_FP(frame);
1676 else
1677 b->frame = 0;
1678 check_duplicates (b->address);
1679 return;
1680 }
1681 }
1682
1683 /* Set a breakpoint that will evaporate an end of command
1684 at address specified by SAL.
1685 Restrict it to frame FRAME if FRAME is nonzero. */
1686
1687 struct breakpoint *
1688 set_momentary_breakpoint (sal, frame, type)
1689 struct symtab_and_line sal;
1690 FRAME frame;
1691 enum bptype type;
1692 {
1693 register struct breakpoint *b;
1694 b = set_raw_breakpoint (sal);
1695 b->type = type;
1696 b->enable = enabled;
1697 b->disposition = donttouch;
1698 b->frame = (frame ? FRAME_FP (frame) : 0);
1699 return b;
1700 }
1701
1702 #if 0
1703 void
1704 clear_momentary_breakpoints ()
1705 {
1706 register struct breakpoint *b;
1707 ALL_BREAKPOINTS (b)
1708 if (b->disposition == delete)
1709 {
1710 delete_breakpoint (b);
1711 break;
1712 }
1713 }
1714 #endif
1715 \f
1716 /* Tell the user we have just set a breakpoint B. */
1717 static void
1718 mention (b)
1719 struct breakpoint *b;
1720 {
1721 switch (b->type)
1722 {
1723 case bp_watchpoint:
1724 printf_filtered ("Watchpoint %d: ", b->number);
1725 print_expression (b->exp, stdout);
1726 break;
1727 case bp_breakpoint:
1728 printf_filtered ("Breakpoint %d at %s", b->number,
1729 local_hex_string(b->address));
1730 if (b->symtab)
1731 printf_filtered (": file %s, line %d.",
1732 b->symtab->filename, b->line_number);
1733 break;
1734 case bp_until:
1735 case bp_finish:
1736 case bp_longjmp:
1737 case bp_longjmp_resume:
1738 break;
1739 }
1740 printf_filtered ("\n");
1741 }
1742
1743 #if 0
1744 /* Nobody calls this currently. */
1745 /* Set a breakpoint from a symtab and line.
1746 If TEMPFLAG is nonzero, it is a temporary breakpoint.
1747 ADDR_STRING is a malloc'd string holding the name of where we are
1748 setting the breakpoint. This is used later to re-set it after the
1749 program is relinked and symbols are reloaded.
1750 Print the same confirmation messages that the breakpoint command prints. */
1751
1752 void
1753 set_breakpoint (s, line, tempflag, addr_string)
1754 struct symtab *s;
1755 int line;
1756 int tempflag;
1757 char *addr_string;
1758 {
1759 register struct breakpoint *b;
1760 struct symtab_and_line sal;
1761
1762 sal.symtab = s;
1763 sal.line = line;
1764 sal.pc = 0;
1765 resolve_sal_pc (&sal); /* Might error out */
1766 describe_other_breakpoints (sal.pc);
1767
1768 b = set_raw_breakpoint (sal);
1769 set_breakpoint_count (breakpoint_count + 1);
1770 b->number = breakpoint_count;
1771 b->type = bp_breakpoint;
1772 b->cond = 0;
1773 b->addr_string = addr_string;
1774 b->enable = enabled;
1775 b->disposition = tempflag ? delete : donttouch;
1776
1777 mention (b);
1778 }
1779 #endif /* 0 */
1780 \f
1781 /* Set a breakpoint according to ARG (function, linenum or *address)
1782 and make it temporary if TEMPFLAG is nonzero. */
1783
1784 static void
1785 break_command_1 (arg, tempflag, from_tty)
1786 char *arg;
1787 int tempflag, from_tty;
1788 {
1789 struct symtabs_and_lines sals;
1790 struct symtab_and_line sal;
1791 register struct expression *cond = 0;
1792 register struct breakpoint *b;
1793
1794 /* Pointers in arg to the start, and one past the end, of the condition. */
1795 char *cond_start = NULL;
1796 char *cond_end;
1797 /* Pointers in arg to the start, and one past the end,
1798 of the address part. */
1799 char *addr_start = NULL;
1800 char *addr_end;
1801
1802 int i;
1803
1804 sals.sals = NULL;
1805 sals.nelts = 0;
1806
1807 sal.line = sal.pc = sal.end = 0;
1808 sal.symtab = 0;
1809
1810 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
1811
1812 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
1813 && (arg[2] == ' ' || arg[2] == '\t')))
1814 {
1815 if (default_breakpoint_valid)
1816 {
1817 sals.sals = (struct symtab_and_line *)
1818 xmalloc (sizeof (struct symtab_and_line));
1819 sal.pc = default_breakpoint_address;
1820 sal.line = default_breakpoint_line;
1821 sal.symtab = default_breakpoint_symtab;
1822 sals.sals[0] = sal;
1823 sals.nelts = 1;
1824 }
1825 else
1826 error ("No default breakpoint address now.");
1827 }
1828 else
1829 {
1830 addr_start = arg;
1831
1832 /* Force almost all breakpoints to be in terms of the
1833 current_source_symtab (which is decode_line_1's default). This
1834 should produce the results we want almost all of the time while
1835 leaving default_breakpoint_* alone. */
1836 if (default_breakpoint_valid
1837 && (!current_source_symtab
1838 || (arg && (*arg == '+' || *arg == '-'))))
1839 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
1840 default_breakpoint_line);
1841 else
1842 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0);
1843
1844 addr_end = arg;
1845 }
1846
1847 if (! sals.nelts)
1848 return;
1849
1850 /* Resolve all line numbers to PC's, and verify that conditions
1851 can be parsed, before setting any breakpoints. */
1852 for (i = 0; i < sals.nelts; i++)
1853 {
1854 resolve_sal_pc (&sals.sals[i]);
1855
1856 while (arg && *arg)
1857 {
1858 if (arg[0] == 'i' && arg[1] == 'f'
1859 && (arg[2] == ' ' || arg[2] == '\t'))
1860 {
1861 arg += 2;
1862 cond_start = arg;
1863 cond = parse_exp_1 (&arg, block_for_pc (sals.sals[i].pc), 0);
1864 cond_end = arg;
1865 }
1866 else
1867 error ("Junk at end of arguments.");
1868 }
1869 }
1870
1871 /* Now set all the breakpoints. */
1872 for (i = 0; i < sals.nelts; i++)
1873 {
1874 sal = sals.sals[i];
1875
1876 if (from_tty)
1877 describe_other_breakpoints (sal.pc);
1878
1879 b = set_raw_breakpoint (sal);
1880 set_breakpoint_count (breakpoint_count + 1);
1881 b->number = breakpoint_count;
1882 b->type = bp_breakpoint;
1883 b->cond = cond;
1884
1885 /* FIXME: We should add the filename if this is a static function
1886 and probably if it is a line number (the line numbers could
1887 have changed when we re-read symbols; possibly better to disable
1888 the breakpoint in that case). */
1889 if (addr_start)
1890 b->addr_string = savestring (addr_start, addr_end - addr_start);
1891 if (cond_start)
1892 b->cond_string = savestring (cond_start, cond_end - cond_start);
1893
1894 b->enable = enabled;
1895 b->disposition = tempflag ? delete : donttouch;
1896
1897 mention (b);
1898 }
1899
1900 if (sals.nelts > 1)
1901 {
1902 printf ("Multiple breakpoints were set.\n");
1903 printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
1904 }
1905 free ((PTR)sals.sals);
1906 }
1907
1908 /* Helper function for break_command_1 and disassemble_command. */
1909
1910 void
1911 resolve_sal_pc (sal)
1912 struct symtab_and_line *sal;
1913 {
1914 CORE_ADDR pc;
1915
1916 if (sal->pc == 0 && sal->symtab != 0)
1917 {
1918 pc = find_line_pc (sal->symtab, sal->line);
1919 if (pc == 0)
1920 error ("No line %d in file \"%s\".",
1921 sal->line, sal->symtab->filename);
1922 sal->pc = pc;
1923 }
1924 }
1925
1926 void
1927 break_command (arg, from_tty)
1928 char *arg;
1929 int from_tty;
1930 {
1931 break_command_1 (arg, 0, from_tty);
1932 }
1933
1934 static void
1935 tbreak_command (arg, from_tty)
1936 char *arg;
1937 int from_tty;
1938 {
1939 break_command_1 (arg, 1, from_tty);
1940 }
1941
1942 /* ARGSUSED */
1943 static void
1944 watch_command (arg, from_tty)
1945 char *arg;
1946 int from_tty;
1947 {
1948 struct breakpoint *b;
1949 struct symtab_and_line sal;
1950 struct expression *exp;
1951 struct block *exp_valid_block;
1952 struct value *val;
1953
1954 sal.pc = 0;
1955 sal.symtab = NULL;
1956 sal.line = 0;
1957
1958 /* Parse arguments. */
1959 innermost_block = NULL;
1960 exp = parse_expression (arg);
1961 exp_valid_block = innermost_block;
1962 val = evaluate_expression (exp);
1963 release_value (val);
1964 if (VALUE_LAZY (val))
1965 value_fetch_lazy (val);
1966
1967 /* Now set up the breakpoint. */
1968 b = set_raw_breakpoint (sal);
1969 set_breakpoint_count (breakpoint_count + 1);
1970 b->number = breakpoint_count;
1971 b->type = bp_watchpoint;
1972 b->disposition = donttouch;
1973 b->exp = exp;
1974 b->exp_valid_block = exp_valid_block;
1975 b->val = val;
1976 b->cond = 0;
1977 b->cond_string = NULL;
1978 b->exp_string = savestring (arg, strlen (arg));
1979 mention (b);
1980 }
1981 \f
1982 /*
1983 * Helper routine for the until_command routine in infcmd.c. Here
1984 * because it uses the mechanisms of breakpoints.
1985 */
1986 /* ARGSUSED */
1987 void
1988 until_break_command (arg, from_tty)
1989 char *arg;
1990 int from_tty;
1991 {
1992 struct symtabs_and_lines sals;
1993 struct symtab_and_line sal;
1994 FRAME prev_frame = get_prev_frame (selected_frame);
1995 struct breakpoint *breakpoint;
1996 struct cleanup *old_chain;
1997
1998 clear_proceed_status ();
1999
2000 /* Set a breakpoint where the user wants it and at return from
2001 this function */
2002
2003 if (default_breakpoint_valid)
2004 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
2005 default_breakpoint_line);
2006 else
2007 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0);
2008
2009 if (sals.nelts != 1)
2010 error ("Couldn't get information on specified line.");
2011
2012 sal = sals.sals[0];
2013 free ((PTR)sals.sals); /* malloc'd, so freed */
2014
2015 if (*arg)
2016 error ("Junk at end of arguments.");
2017
2018 resolve_sal_pc (&sal);
2019
2020 breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
2021
2022 old_chain = make_cleanup(delete_breakpoint, breakpoint);
2023
2024 /* Keep within the current frame */
2025
2026 if (prev_frame)
2027 {
2028 struct frame_info *fi;
2029
2030 fi = get_frame_info (prev_frame);
2031 sal = find_pc_line (fi->pc, 0);
2032 sal.pc = fi->pc;
2033 breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
2034 make_cleanup(delete_breakpoint, breakpoint);
2035 }
2036
2037 proceed (-1, -1, 0);
2038 do_cleanups(old_chain);
2039 }
2040 \f
2041 #if 0
2042 /* These aren't used; I don't konw what they were for. */
2043 /* Set a breakpoint at the catch clause for NAME. */
2044 static int
2045 catch_breakpoint (name)
2046 char *name;
2047 {
2048 }
2049
2050 static int
2051 disable_catch_breakpoint ()
2052 {
2053 }
2054
2055 static int
2056 delete_catch_breakpoint ()
2057 {
2058 }
2059
2060 static int
2061 enable_catch_breakpoint ()
2062 {
2063 }
2064 #endif /* 0 */
2065
2066 struct sal_chain
2067 {
2068 struct sal_chain *next;
2069 struct symtab_and_line sal;
2070 };
2071
2072 #if 0
2073 /* This isn't used; I don't know what it was for. */
2074 /* For each catch clause identified in ARGS, run FUNCTION
2075 with that clause as an argument. */
2076 static struct symtabs_and_lines
2077 map_catch_names (args, function)
2078 char *args;
2079 int (*function)();
2080 {
2081 register char *p = args;
2082 register char *p1;
2083 struct symtabs_and_lines sals;
2084 #if 0
2085 struct sal_chain *sal_chain = 0;
2086 #endif
2087
2088 if (p == 0)
2089 error_no_arg ("one or more catch names");
2090
2091 sals.nelts = 0;
2092 sals.sals = NULL;
2093
2094 while (*p)
2095 {
2096 p1 = p;
2097 /* Don't swallow conditional part. */
2098 if (p1[0] == 'i' && p1[1] == 'f'
2099 && (p1[2] == ' ' || p1[2] == '\t'))
2100 break;
2101
2102 if (isalpha (*p1))
2103 {
2104 p1++;
2105 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
2106 p1++;
2107 }
2108
2109 if (*p1 && *p1 != ' ' && *p1 != '\t')
2110 error ("Arguments must be catch names.");
2111
2112 *p1 = 0;
2113 #if 0
2114 if (function (p))
2115 {
2116 struct sal_chain *next
2117 = (struct sal_chain *)alloca (sizeof (struct sal_chain));
2118 next->next = sal_chain;
2119 next->sal = get_catch_sal (p);
2120 sal_chain = next;
2121 goto win;
2122 }
2123 #endif
2124 printf ("No catch clause for exception %s.\n", p);
2125 #if 0
2126 win:
2127 #endif
2128 p = p1;
2129 while (*p == ' ' || *p == '\t') p++;
2130 }
2131 }
2132 #endif /* 0 */
2133
2134 /* This shares a lot of code with `print_frame_label_vars' from stack.c. */
2135
2136 static struct symtabs_and_lines
2137 get_catch_sals (this_level_only)
2138 int this_level_only;
2139 {
2140 register struct blockvector *bl;
2141 register struct block *block;
2142 int index, have_default = 0;
2143 struct frame_info *fi;
2144 CORE_ADDR pc;
2145 struct symtabs_and_lines sals;
2146 struct sal_chain *sal_chain = 0;
2147 char *blocks_searched;
2148
2149 /* Not sure whether an error message is always the correct response,
2150 but it's better than a core dump. */
2151 if (selected_frame == NULL)
2152 error ("No selected frame.");
2153 block = get_frame_block (selected_frame);
2154 fi = get_frame_info (selected_frame);
2155 pc = fi->pc;
2156
2157 sals.nelts = 0;
2158 sals.sals = NULL;
2159
2160 if (block == 0)
2161 error ("No symbol table info available.\n");
2162
2163 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
2164 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2165 memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2166
2167 while (block != 0)
2168 {
2169 CORE_ADDR end = BLOCK_END (block) - 4;
2170 int last_index;
2171
2172 if (bl != blockvector_for_pc (end, &index))
2173 error ("blockvector blotch");
2174 if (BLOCKVECTOR_BLOCK (bl, index) != block)
2175 error ("blockvector botch");
2176 last_index = BLOCKVECTOR_NBLOCKS (bl);
2177 index += 1;
2178
2179 /* Don't print out blocks that have gone by. */
2180 while (index < last_index
2181 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
2182 index++;
2183
2184 while (index < last_index
2185 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
2186 {
2187 if (blocks_searched[index] == 0)
2188 {
2189 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
2190 int nsyms;
2191 register int i;
2192 register struct symbol *sym;
2193
2194 nsyms = BLOCK_NSYMS (b);
2195
2196 for (i = 0; i < nsyms; i++)
2197 {
2198 sym = BLOCK_SYM (b, i);
2199 if (STREQ (SYMBOL_NAME (sym), "default"))
2200 {
2201 if (have_default)
2202 continue;
2203 have_default = 1;
2204 }
2205 if (SYMBOL_CLASS (sym) == LOC_LABEL)
2206 {
2207 struct sal_chain *next = (struct sal_chain *)
2208 alloca (sizeof (struct sal_chain));
2209 next->next = sal_chain;
2210 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
2211 sal_chain = next;
2212 }
2213 }
2214 blocks_searched[index] = 1;
2215 }
2216 index++;
2217 }
2218 if (have_default)
2219 break;
2220 if (sal_chain && this_level_only)
2221 break;
2222
2223 /* After handling the function's top-level block, stop.
2224 Don't continue to its superblock, the block of
2225 per-file symbols. */
2226 if (BLOCK_FUNCTION (block))
2227 break;
2228 block = BLOCK_SUPERBLOCK (block);
2229 }
2230
2231 if (sal_chain)
2232 {
2233 struct sal_chain *tmp_chain;
2234
2235 /* Count the number of entries. */
2236 for (index = 0, tmp_chain = sal_chain; tmp_chain;
2237 tmp_chain = tmp_chain->next)
2238 index++;
2239
2240 sals.nelts = index;
2241 sals.sals = (struct symtab_and_line *)
2242 xmalloc (index * sizeof (struct symtab_and_line));
2243 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
2244 sals.sals[index] = sal_chain->sal;
2245 }
2246
2247 return sals;
2248 }
2249
2250 /* Commands to deal with catching exceptions. */
2251
2252 static void
2253 catch_command_1 (arg, tempflag, from_tty)
2254 char *arg;
2255 int tempflag;
2256 int from_tty;
2257 {
2258 /* First, translate ARG into something we can deal with in terms
2259 of breakpoints. */
2260
2261 struct symtabs_and_lines sals;
2262 struct symtab_and_line sal;
2263 register struct expression *cond = 0;
2264 register struct breakpoint *b;
2265 char *save_arg;
2266 int i;
2267
2268 sal.line = sal.pc = sal.end = 0;
2269 sal.symtab = 0;
2270
2271 /* If no arg given, or if first arg is 'if ', all active catch clauses
2272 are breakpointed. */
2273
2274 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
2275 && (arg[2] == ' ' || arg[2] == '\t')))
2276 {
2277 /* Grab all active catch clauses. */
2278 sals = get_catch_sals (0);
2279 }
2280 else
2281 {
2282 /* Grab selected catch clauses. */
2283 error ("catch NAME not implemented");
2284 #if 0
2285 /* This isn't used; I don't know what it was for. */
2286 sals = map_catch_names (arg, catch_breakpoint);
2287 #endif
2288 }
2289
2290 if (! sals.nelts)
2291 return;
2292
2293 save_arg = arg;
2294 for (i = 0; i < sals.nelts; i++)
2295 {
2296 resolve_sal_pc (&sals.sals[i]);
2297
2298 while (arg && *arg)
2299 {
2300 if (arg[0] == 'i' && arg[1] == 'f'
2301 && (arg[2] == ' ' || arg[2] == '\t'))
2302 cond = parse_exp_1 ((arg += 2, &arg),
2303 block_for_pc (sals.sals[i].pc), 0);
2304 else
2305 error ("Junk at end of arguments.");
2306 }
2307 arg = save_arg;
2308 }
2309
2310 for (i = 0; i < sals.nelts; i++)
2311 {
2312 sal = sals.sals[i];
2313
2314 if (from_tty)
2315 describe_other_breakpoints (sal.pc);
2316
2317 b = set_raw_breakpoint (sal);
2318 set_breakpoint_count (breakpoint_count + 1);
2319 b->number = breakpoint_count;
2320 b->type = bp_breakpoint;
2321 b->cond = cond;
2322 b->enable = enabled;
2323 b->disposition = tempflag ? delete : donttouch;
2324
2325 printf ("Breakpoint %d at %s", b->number, local_hex_string(b->address));
2326 if (b->symtab)
2327 printf (": file %s, line %d.", b->symtab->filename, b->line_number);
2328 printf ("\n");
2329 }
2330
2331 if (sals.nelts > 1)
2332 {
2333 printf ("Multiple breakpoints were set.\n");
2334 printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
2335 }
2336 free ((PTR)sals.sals);
2337 }
2338
2339 #if 0
2340 /* These aren't used; I don't know what they were for. */
2341 /* Disable breakpoints on all catch clauses described in ARGS. */
2342 static void
2343 disable_catch (args)
2344 char *args;
2345 {
2346 /* Map the disable command to catch clauses described in ARGS. */
2347 }
2348
2349 /* Enable breakpoints on all catch clauses described in ARGS. */
2350 static void
2351 enable_catch (args)
2352 char *args;
2353 {
2354 /* Map the disable command to catch clauses described in ARGS. */
2355 }
2356
2357 /* Delete breakpoints on all catch clauses in the active scope. */
2358 static void
2359 delete_catch (args)
2360 char *args;
2361 {
2362 /* Map the delete command to catch clauses described in ARGS. */
2363 }
2364 #endif /* 0 */
2365
2366 static void
2367 catch_command (arg, from_tty)
2368 char *arg;
2369 int from_tty;
2370 {
2371 catch_command_1 (arg, 0, from_tty);
2372 }
2373 \f
2374 static void
2375 clear_command (arg, from_tty)
2376 char *arg;
2377 int from_tty;
2378 {
2379 register struct breakpoint *b, *b1;
2380 struct symtabs_and_lines sals;
2381 struct symtab_and_line sal;
2382 register struct breakpoint *found;
2383 int i;
2384
2385 if (arg)
2386 {
2387 sals = decode_line_spec (arg, 1);
2388 }
2389 else
2390 {
2391 sals.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
2392 sal.line = default_breakpoint_line;
2393 sal.symtab = default_breakpoint_symtab;
2394 sal.pc = 0;
2395 if (sal.symtab == 0)
2396 error ("No source file specified.");
2397
2398 sals.sals[0] = sal;
2399 sals.nelts = 1;
2400 }
2401
2402 for (i = 0; i < sals.nelts; i++)
2403 {
2404 /* If exact pc given, clear bpts at that pc.
2405 But if sal.pc is zero, clear all bpts on specified line. */
2406 sal = sals.sals[i];
2407 found = (struct breakpoint *) 0;
2408 while (breakpoint_chain
2409 && (sal.pc ? breakpoint_chain->address == sal.pc
2410 : (breakpoint_chain->symtab == sal.symtab
2411 && breakpoint_chain->line_number == sal.line)))
2412 {
2413 b1 = breakpoint_chain;
2414 breakpoint_chain = b1->next;
2415 b1->next = found;
2416 found = b1;
2417 }
2418
2419 ALL_BREAKPOINTS (b)
2420 while (b->next
2421 && b->next->type != bp_watchpoint
2422 && (sal.pc ? b->next->address == sal.pc
2423 : (b->next->symtab == sal.symtab
2424 && b->next->line_number == sal.line)))
2425 {
2426 b1 = b->next;
2427 b->next = b1->next;
2428 b1->next = found;
2429 found = b1;
2430 }
2431
2432 if (found == 0)
2433 {
2434 if (arg)
2435 error ("No breakpoint at %s.", arg);
2436 else
2437 error ("No breakpoint at this line.");
2438 }
2439
2440 if (found->next) from_tty = 1; /* Always report if deleted more than one */
2441 if (from_tty) printf ("Deleted breakpoint%s ", found->next ? "s" : "");
2442 while (found)
2443 {
2444 if (from_tty) printf ("%d ", found->number);
2445 b1 = found->next;
2446 delete_breakpoint (found);
2447 found = b1;
2448 }
2449 if (from_tty) putchar ('\n');
2450 }
2451 free ((PTR)sals.sals);
2452 }
2453 \f
2454 /* Delete breakpoint in BS if they are `delete' breakpoints.
2455 This is called after any breakpoint is hit, or after errors. */
2456
2457 void
2458 breakpoint_auto_delete (bs)
2459 bpstat bs;
2460 {
2461 for (; bs; bs = bs->next)
2462 if (bs->breakpoint_at && bs->breakpoint_at->disposition == delete)
2463 delete_breakpoint (bs->breakpoint_at);
2464 }
2465
2466 /* Delete a breakpoint and clean up all traces of it in the data structures. */
2467
2468 void
2469 delete_breakpoint (bpt)
2470 struct breakpoint *bpt;
2471 {
2472 register struct breakpoint *b;
2473 register bpstat bs;
2474
2475 if (bpt->inserted)
2476 target_remove_breakpoint(bpt->address, bpt->shadow_contents);
2477
2478 if (breakpoint_chain == bpt)
2479 breakpoint_chain = bpt->next;
2480
2481 ALL_BREAKPOINTS (b)
2482 if (b->next == bpt)
2483 {
2484 b->next = bpt->next;
2485 break;
2486 }
2487
2488 check_duplicates (bpt->address);
2489 /* If this breakpoint was inserted, and there is another breakpoint
2490 at the same address, we need to insert the other breakpoint. */
2491 if (bpt->inserted)
2492 {
2493 ALL_BREAKPOINTS (b)
2494 if (b->address == bpt->address && !b->duplicate)
2495 {
2496 int val;
2497 val = target_insert_breakpoint (b->address, b->shadow_contents);
2498 if (val != 0)
2499 {
2500 fprintf (stderr, "Cannot insert breakpoint %d:\n", b->number);
2501 memory_error (val, b->address); /* which bombs us out */
2502 }
2503 else
2504 b->inserted = 1;
2505 }
2506 }
2507
2508 free_command_lines (&bpt->commands);
2509 if (bpt->cond)
2510 free ((PTR)bpt->cond);
2511 if (bpt->cond_string != NULL)
2512 free ((PTR)bpt->cond_string);
2513 if (bpt->addr_string != NULL)
2514 free ((PTR)bpt->addr_string);
2515 if (bpt->exp_string != NULL)
2516 free ((PTR)bpt->exp_string);
2517
2518 if (xgdb_verbose && bpt->type == bp_breakpoint)
2519 printf ("breakpoint #%d deleted\n", bpt->number);
2520
2521 /* Be sure no bpstat's are pointing at it after it's been freed. */
2522 /* FIXME, how can we find all bpstat's? We just check stop_bpstat for now. */
2523 for (bs = stop_bpstat; bs; bs = bs->next)
2524 if (bs->breakpoint_at == bpt)
2525 bs->breakpoint_at = NULL;
2526 free ((PTR)bpt);
2527 }
2528
2529 static void
2530 delete_command (arg, from_tty)
2531 char *arg;
2532 int from_tty;
2533 {
2534
2535 if (arg == 0)
2536 {
2537 /* Ask user only if there are some breakpoints to delete. */
2538 if (!from_tty
2539 || (breakpoint_chain && query ("Delete all breakpoints? ", 0, 0)))
2540 {
2541 /* No arg; clear all breakpoints. */
2542 while (breakpoint_chain)
2543 delete_breakpoint (breakpoint_chain);
2544 }
2545 }
2546 else
2547 map_breakpoint_numbers (arg, delete_breakpoint);
2548 }
2549
2550 /* Reset a breakpoint given it's struct breakpoint * BINT.
2551 The value we return ends up being the return value from catch_errors.
2552 Unused in this case. */
2553
2554 static int
2555 breakpoint_re_set_one (bint)
2556 char *bint;
2557 {
2558 struct breakpoint *b = (struct breakpoint *)bint; /* get past catch_errs */
2559 int i;
2560 struct symtabs_and_lines sals;
2561 char *s;
2562 enum enable save_enable;
2563
2564 switch (b->type)
2565 {
2566 case bp_breakpoint:
2567 if (b->addr_string == NULL)
2568 {
2569 /* Anything without a string can't be re-set. */
2570 delete_breakpoint (b);
2571 return 0;
2572 }
2573 /* In case we have a problem, disable this breakpoint. We'll restore
2574 its status if we succeed. */
2575 save_enable = b->enable;
2576 b->enable = disabled;
2577
2578 s = b->addr_string;
2579 sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0);
2580 for (i = 0; i < sals.nelts; i++)
2581 {
2582 resolve_sal_pc (&sals.sals[i]);
2583 if (b->symtab != sals.sals[i].symtab
2584 || b->line_number != sals.sals[i].line
2585 || b->address != sals.sals[i].pc)
2586 {
2587 b->symtab = sals.sals[i].symtab;
2588 b->line_number = sals.sals[i].line;
2589 b->address = sals.sals[i].pc;
2590
2591 if (b->cond_string != NULL)
2592 {
2593 s = b->cond_string;
2594 if (b->cond)
2595 free ((PTR)b->cond);
2596 b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
2597 }
2598
2599 check_duplicates (b->address);
2600
2601 mention (b);
2602 }
2603 b->enable = save_enable; /* Restore it, this worked. */
2604 }
2605 free ((PTR)sals.sals);
2606 break;
2607
2608 case bp_watchpoint:
2609 innermost_block = NULL;
2610 /* The issue arises of what context to evaluate this in. The same
2611 one as when it was set, but what does that mean when symbols have
2612 been re-read? We could save the filename and functionname, but
2613 if the context is more local than that, the best we could do would
2614 be something like how many levels deep and which index at that
2615 particular level, but that's going to be less stable than filenames
2616 or functionnames. */
2617 /* So for now, just use a global context. */
2618 b->exp = parse_expression (b->exp_string);
2619 b->exp_valid_block = innermost_block;
2620 b->val = evaluate_expression (b->exp);
2621 release_value (b->val);
2622 if (VALUE_LAZY (b->val))
2623 value_fetch_lazy (b->val);
2624
2625 if (b->cond_string != NULL)
2626 {
2627 s = b->cond_string;
2628 b->cond = parse_exp_1 (&s, (struct block *)0, 0);
2629 }
2630 if (b->enable == enabled)
2631 mention (b);
2632 break;
2633
2634 default:
2635 printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
2636 /* fall through */
2637 case bp_until:
2638 case bp_finish:
2639 case bp_longjmp:
2640 case bp_longjmp_resume:
2641 delete_breakpoint (b);
2642 break;
2643 }
2644
2645 return 0;
2646 }
2647
2648 /* Re-set all breakpoints after symbols have been re-loaded. */
2649 void
2650 breakpoint_re_set ()
2651 {
2652 struct breakpoint *b, *temp;
2653 static char message1[] = "Error in re-setting breakpoint %d:\n";
2654 char message[sizeof (message1) + 30 /* slop */];
2655
2656 ALL_BREAKPOINTS_SAFE (b, temp)
2657 {
2658 sprintf (message, message1, b->number); /* Format possible error msg */
2659 catch_errors (breakpoint_re_set_one, (char *) b, message,
2660 RETURN_MASK_ALL);
2661 }
2662
2663 create_longjmp_breakpoint("longjmp");
2664 create_longjmp_breakpoint("_longjmp");
2665 create_longjmp_breakpoint("siglongjmp");
2666 create_longjmp_breakpoint(NULL);
2667
2668 #if 0
2669 /* Took this out (temporaliy at least), since it produces an extra
2670 blank line at startup. This messes up the gdbtests. -PB */
2671 /* Blank line to finish off all those mention() messages we just printed. */
2672 printf_filtered ("\n");
2673 #endif
2674 }
2675 \f
2676 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
2677 If from_tty is nonzero, it prints a message to that effect,
2678 which ends with a period (no newline). */
2679
2680 void
2681 set_ignore_count (bptnum, count, from_tty)
2682 int bptnum, count, from_tty;
2683 {
2684 register struct breakpoint *b;
2685
2686 if (count < 0)
2687 count = 0;
2688
2689 ALL_BREAKPOINTS (b)
2690 if (b->number == bptnum)
2691 {
2692 b->ignore_count = count;
2693 if (!from_tty)
2694 return;
2695 else if (count == 0)
2696 printf_filtered ("Will stop next time breakpoint %d is reached.",
2697 bptnum);
2698 else if (count == 1)
2699 printf_filtered ("Will ignore next crossing of breakpoint %d.",
2700 bptnum);
2701 else
2702 printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
2703 count, bptnum);
2704 return;
2705 }
2706
2707 error ("No breakpoint number %d.", bptnum);
2708 }
2709
2710 /* Clear the ignore counts of all breakpoints. */
2711 void
2712 breakpoint_clear_ignore_counts ()
2713 {
2714 struct breakpoint *b;
2715
2716 ALL_BREAKPOINTS (b)
2717 b->ignore_count = 0;
2718 }
2719
2720 /* Command to set ignore-count of breakpoint N to COUNT. */
2721
2722 static void
2723 ignore_command (args, from_tty)
2724 char *args;
2725 int from_tty;
2726 {
2727 char *p = args;
2728 register int num;
2729
2730 if (p == 0)
2731 error_no_arg ("a breakpoint number");
2732
2733 num = get_number (&p);
2734
2735 if (*p == 0)
2736 error ("Second argument (specified ignore-count) is missing.");
2737
2738 set_ignore_count (num,
2739 longest_to_int (value_as_long (parse_and_eval (p))),
2740 from_tty);
2741 printf_filtered ("\n");
2742 }
2743 \f
2744 /* Call FUNCTION on each of the breakpoints
2745 whose numbers are given in ARGS. */
2746
2747 static void
2748 map_breakpoint_numbers (args, function)
2749 char *args;
2750 void (*function) PARAMS ((struct breakpoint *));
2751 {
2752 register char *p = args;
2753 char *p1;
2754 register int num;
2755 register struct breakpoint *b;
2756
2757 if (p == 0)
2758 error_no_arg ("one or more breakpoint numbers");
2759
2760 while (*p)
2761 {
2762 p1 = p;
2763
2764 num = get_number (&p1);
2765
2766 ALL_BREAKPOINTS (b)
2767 if (b->number == num)
2768 {
2769 function (b);
2770 goto win;
2771 }
2772 printf ("No breakpoint number %d.\n", num);
2773 win:
2774 p = p1;
2775 }
2776 }
2777
2778 static void
2779 enable_breakpoint (bpt)
2780 struct breakpoint *bpt;
2781 {
2782 FRAME save_selected_frame;
2783 int save_selected_frame_level = -1;
2784
2785 bpt->enable = enabled;
2786
2787 if (xgdb_verbose && bpt->type == bp_breakpoint)
2788 printf ("breakpoint #%d enabled\n", bpt->number);
2789
2790 check_duplicates (bpt->address);
2791 if (bpt->type == bp_watchpoint)
2792 {
2793 if (bpt->exp_valid_block != NULL)
2794 {
2795 FRAME fr = within_scope (bpt->exp_valid_block);
2796 if (fr == NULL)
2797 {
2798 printf_filtered ("\
2799 Cannot enable watchpoint %d because the block in which its expression\n\
2800 is valid is not currently in scope.\n", bpt->number);
2801 bpt->enable = disabled;
2802 return;
2803 }
2804 save_selected_frame = selected_frame;
2805 save_selected_frame_level = selected_frame_level;
2806 select_frame (fr, -1);
2807 }
2808
2809 value_free (bpt->val);
2810
2811 bpt->val = evaluate_expression (bpt->exp);
2812 release_value (bpt->val);
2813 if (VALUE_LAZY (bpt->val))
2814 value_fetch_lazy (bpt->val);
2815
2816 if (save_selected_frame_level >= 0)
2817 select_frame (save_selected_frame, save_selected_frame_level);
2818 }
2819 }
2820
2821 /* ARGSUSED */
2822 static void
2823 enable_command (args, from_tty)
2824 char *args;
2825 int from_tty;
2826 {
2827 struct breakpoint *bpt;
2828 if (args == 0)
2829 ALL_BREAKPOINTS (bpt)
2830 switch (bpt->type)
2831 {
2832 case bp_breakpoint:
2833 case bp_watchpoint:
2834 enable_breakpoint (bpt);
2835 default:
2836 continue;
2837 }
2838 else
2839 map_breakpoint_numbers (args, enable_breakpoint);
2840 }
2841
2842 static void
2843 disable_breakpoint (bpt)
2844 struct breakpoint *bpt;
2845 {
2846 bpt->enable = disabled;
2847
2848 if (xgdb_verbose && bpt->type == bp_breakpoint)
2849 printf_filtered ("breakpoint #%d disabled\n", bpt->number);
2850
2851 check_duplicates (bpt->address);
2852 }
2853
2854 /* ARGSUSED */
2855 static void
2856 disable_command (args, from_tty)
2857 char *args;
2858 int from_tty;
2859 {
2860 register struct breakpoint *bpt;
2861 if (args == 0)
2862 ALL_BREAKPOINTS (bpt)
2863 switch (bpt->type)
2864 {
2865 case bp_breakpoint:
2866 case bp_watchpoint:
2867 disable_breakpoint (bpt);
2868 default:
2869 continue;
2870 }
2871 else
2872 map_breakpoint_numbers (args, disable_breakpoint);
2873 }
2874
2875 static void
2876 enable_once_breakpoint (bpt)
2877 struct breakpoint *bpt;
2878 {
2879 bpt->enable = enabled;
2880 bpt->disposition = disable;
2881
2882 check_duplicates (bpt->address);
2883 }
2884
2885 /* ARGSUSED */
2886 static void
2887 enable_once_command (args, from_tty)
2888 char *args;
2889 int from_tty;
2890 {
2891 map_breakpoint_numbers (args, enable_once_breakpoint);
2892 }
2893
2894 static void
2895 enable_delete_breakpoint (bpt)
2896 struct breakpoint *bpt;
2897 {
2898 bpt->enable = enabled;
2899 bpt->disposition = delete;
2900
2901 check_duplicates (bpt->address);
2902 }
2903
2904 /* ARGSUSED */
2905 static void
2906 enable_delete_command (args, from_tty)
2907 char *args;
2908 int from_tty;
2909 {
2910 map_breakpoint_numbers (args, enable_delete_breakpoint);
2911 }
2912 \f
2913 /*
2914 * Use default_breakpoint_'s, or nothing if they aren't valid.
2915 */
2916 struct symtabs_and_lines
2917 decode_line_spec_1 (string, funfirstline)
2918 char *string;
2919 int funfirstline;
2920 {
2921 struct symtabs_and_lines sals;
2922 if (string == 0)
2923 error ("Empty line specification.");
2924 if (default_breakpoint_valid)
2925 sals = decode_line_1 (&string, funfirstline,
2926 default_breakpoint_symtab, default_breakpoint_line);
2927 else
2928 sals = decode_line_1 (&string, funfirstline, (struct symtab *)NULL, 0);
2929 if (*string)
2930 error ("Junk at end of line specification: %s", string);
2931 return sals;
2932 }
2933 \f
2934 void
2935 _initialize_breakpoint ()
2936 {
2937 breakpoint_chain = 0;
2938 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
2939 before a breakpoint is set. */
2940 breakpoint_count = 0;
2941
2942 add_com ("ignore", class_breakpoint, ignore_command,
2943 "Set ignore-count of breakpoint number N to COUNT.");
2944
2945 add_com ("commands", class_breakpoint, commands_command,
2946 "Set commands to be executed when a breakpoint is hit.\n\
2947 Give breakpoint number as argument after \"commands\".\n\
2948 With no argument, the targeted breakpoint is the last one set.\n\
2949 The commands themselves follow starting on the next line.\n\
2950 Type a line containing \"end\" to indicate the end of them.\n\
2951 Give \"silent\" as the first line to make the breakpoint silent;\n\
2952 then no output is printed when it is hit, except what the commands print.");
2953
2954 add_com ("condition", class_breakpoint, condition_command,
2955 "Specify breakpoint number N to break only if COND is true.\n\
2956 N is an integer; COND is an expression to be evaluated whenever\n\
2957 breakpoint N is reached. ");
2958
2959 add_com ("tbreak", class_breakpoint, tbreak_command,
2960 "Set a temporary breakpoint. Args like \"break\" command.\n\
2961 Like \"break\" except the breakpoint is only enabled temporarily,\n\
2962 so it will be disabled when hit. Equivalent to \"break\" followed\n\
2963 by using \"enable once\" on the breakpoint number.");
2964
2965 add_prefix_cmd ("enable", class_breakpoint, enable_command,
2966 "Enable some breakpoints.\n\
2967 Give breakpoint numbers (separated by spaces) as arguments.\n\
2968 With no subcommand, breakpoints are enabled until you command otherwise.\n\
2969 This is used to cancel the effect of the \"disable\" command.\n\
2970 With a subcommand you can enable temporarily.",
2971 &enablelist, "enable ", 1, &cmdlist);
2972
2973 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
2974 "Enable some breakpoints.\n\
2975 Give breakpoint numbers (separated by spaces) as arguments.\n\
2976 This is used to cancel the effect of the \"disable\" command.\n\
2977 May be abbreviated to simply \"enable\".\n",
2978 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
2979
2980 add_cmd ("once", no_class, enable_once_command,
2981 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
2982 If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
2983 See the \"tbreak\" command which sets a breakpoint and enables it once.",
2984 &enablebreaklist);
2985
2986 add_cmd ("delete", no_class, enable_delete_command,
2987 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
2988 If a breakpoint is hit while enabled in this fashion, it is deleted.",
2989 &enablebreaklist);
2990
2991 add_cmd ("delete", no_class, enable_delete_command,
2992 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
2993 If a breakpoint is hit while enabled in this fashion, it is deleted.",
2994 &enablelist);
2995
2996 add_cmd ("once", no_class, enable_once_command,
2997 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
2998 If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
2999 See the \"tbreak\" command which sets a breakpoint and enables it once.",
3000 &enablelist);
3001
3002 add_prefix_cmd ("disable", class_breakpoint, disable_command,
3003 "Disable some breakpoints.\n\
3004 Arguments are breakpoint numbers with spaces in between.\n\
3005 To disable all breakpoints, give no argument.\n\
3006 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
3007 &disablelist, "disable ", 1, &cmdlist);
3008 add_com_alias ("dis", "disable", class_breakpoint, 1);
3009 add_com_alias ("disa", "disable", class_breakpoint, 1);
3010
3011 add_cmd ("breakpoints", class_alias, disable_command,
3012 "Disable some breakpoints.\n\
3013 Arguments are breakpoint numbers with spaces in between.\n\
3014 To disable all breakpoints, give no argument.\n\
3015 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
3016 This command may be abbreviated \"disable\".",
3017 &disablelist);
3018
3019 add_prefix_cmd ("delete", class_breakpoint, delete_command,
3020 "Delete some breakpoints or auto-display expressions.\n\
3021 Arguments are breakpoint numbers with spaces in between.\n\
3022 To delete all breakpoints, give no argument.\n\
3023 \n\
3024 Also a prefix command for deletion of other GDB objects.\n\
3025 The \"unset\" command is also an alias for \"delete\".",
3026 &deletelist, "delete ", 1, &cmdlist);
3027 add_com_alias ("d", "delete", class_breakpoint, 1);
3028
3029 add_cmd ("breakpoints", class_alias, delete_command,
3030 "Delete some breakpoints or auto-display expressions.\n\
3031 Arguments are breakpoint numbers with spaces in between.\n\
3032 To delete all breakpoints, give no argument.\n\
3033 This command may be abbreviated \"delete\".",
3034 &deletelist);
3035
3036 add_com ("clear", class_breakpoint, clear_command,
3037 "Clear breakpoint at specified line or function.\n\
3038 Argument may be line number, function name, or \"*\" and an address.\n\
3039 If line number is specified, all breakpoints in that line are cleared.\n\
3040 If function is specified, breakpoints at beginning of function are cleared.\n\
3041 If an address is specified, breakpoints at that address are cleared.\n\n\
3042 With no argument, clears all breakpoints in the line that the selected frame\n\
3043 is executing in.\n\
3044 \n\
3045 See also the \"delete\" command which clears breakpoints by number.");
3046
3047 add_com ("break", class_breakpoint, break_command,
3048 "Set breakpoint at specified line or function.\n\
3049 Argument may be line number, function name, or \"*\" and an address.\n\
3050 If line number is specified, break at start of code for that line.\n\
3051 If function is specified, break at start of code for that function.\n\
3052 If an address is specified, break at that exact address.\n\
3053 With no arg, uses current execution address of selected stack frame.\n\
3054 This is useful for breaking on return to a stack frame.\n\
3055 \n\
3056 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
3057 \n\
3058 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
3059 add_com_alias ("b", "break", class_run, 1);
3060 add_com_alias ("br", "break", class_run, 1);
3061 add_com_alias ("bre", "break", class_run, 1);
3062 add_com_alias ("brea", "break", class_run, 1);
3063
3064 add_info ("breakpoints", breakpoints_info,
3065 "Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
3066 The \"Type\" column indicates one of:\n\
3067 \tbreakpoint - normal breakpoint\n\
3068 \twatchpoint - watchpoint\n\
3069 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
3070 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
3071 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
3072 address and file/line number respectively.\n\n\
3073 Convenience variable \"$_\" and default examine address for \"x\"\n\
3074 are set to the address of the last breakpoint listed.\n\n\
3075 Convenience variable \"$bpnum\" contains the number of the last\n\
3076 breakpoint set.");
3077
3078 #if MAINTENANCE_CMDS
3079
3080 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
3081 "Status of all breakpoints, or breakpoint number NUMBER.\n\
3082 The \"Type\" column indicates one of:\n\
3083 \tbreakpoint - normal breakpoint\n\
3084 \twatchpoint - watchpoint\n\
3085 \tlongjmp - internal breakpoint used to step through longjmp()\n\
3086 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
3087 \tuntil - internal breakpoint used by the \"until\" command\n\
3088 \tfinish - internal breakpoint used by the \"finish\" command\n\
3089 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
3090 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
3091 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
3092 address and file/line number respectively.\n\n\
3093 Convenience variable \"$_\" and default examine address for \"x\"\n\
3094 are set to the address of the last breakpoint listed.\n\n\
3095 Convenience variable \"$bpnum\" contains the number of the last\n\
3096 breakpoint set.",
3097 &maintenanceinfolist);
3098
3099 #endif /* MAINTENANCE_CMDS */
3100
3101 add_com ("catch", class_breakpoint, catch_command,
3102 "Set breakpoints to catch exceptions that are raised.\n\
3103 Argument may be a single exception to catch, multiple exceptions\n\
3104 to catch, or the default exception \"default\". If no arguments\n\
3105 are given, breakpoints are set at all exception handlers catch clauses\n\
3106 within the current scope.\n\
3107 \n\
3108 A condition specified for the catch applies to all breakpoints set\n\
3109 with this command\n\
3110 \n\
3111 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
3112
3113 add_com ("watch", class_breakpoint, watch_command,
3114 "Set a watchpoint for an expression.\n\
3115 A watchpoint stops execution of your program whenever the value of\n\
3116 an expression changes.");
3117
3118 add_info ("watchpoints", breakpoints_info,
3119 "Synonym for ``info breakpoints''.");
3120 }
3121
3122 /* OK, when we call objfile_relocate, we need to relocate breakpoints
3123 too. breakpoint_re_set is not a good choice--for example, if
3124 addr_string contains just a line number without a file name the
3125 breakpoint might get set in a different file. In general, there is
3126 no need to go all the way back to the user's string (though this might
3127 work if some effort were made to canonicalize it), since symtabs and
3128 everything except addresses are still valid.
3129
3130 Probably the best way to solve this is to have each breakpoint save
3131 the objfile and the section number that was used to set it (if set
3132 by "*addr", probably it is best to use find_pc_line to get a symtab
3133 and use the objfile and block_line_section for that symtab). Then
3134 objfile_relocate can call fixup_breakpoints with the objfile and
3135 the new_offsets, and it can relocate only the appropriate breakpoints. */
3136
3137 #ifdef IBM6000_TARGET
3138 /* But for now, just kludge it based on the concept that before an
3139 objfile is relocated the breakpoint is below 0x10000000, and afterwards
3140 it is higher, so that way we only relocate each breakpoint once. */
3141
3142 void
3143 fixup_breakpoints (low, high, delta)
3144 CORE_ADDR low;
3145 CORE_ADDR high;
3146 CORE_ADDR delta;
3147 {
3148 struct breakpoint *b;
3149
3150 ALL_BREAKPOINTS (b)
3151 {
3152 if (b->address >= low && b->address <= high)
3153 b->address += delta;
3154 }
3155 }
3156 #endif