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