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