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