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