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