* defs.h (read_command_lines, query_hook): Update prototypes.
[platform/upstream/binutils.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2    Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
3              Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #include "defs.h"
22 #include <ctype.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 "command.h"
32 #include "inferior.h"
33 #include "gdbthread.h"
34 #include "target.h"
35 #include "language.h"
36 #include "gdb_string.h"
37 #include "demangle.h"
38 #include "annotate.h"
39
40 /* local function prototypes */
41
42 static void
43 catch_command_1 PARAMS ((char *, int, int));
44
45 static void
46 enable_delete_command PARAMS ((char *, int));
47
48 static void
49 enable_delete_breakpoint PARAMS ((struct breakpoint *));
50
51 static void
52 enable_once_command PARAMS ((char *, int));
53
54 static void
55 enable_once_breakpoint PARAMS ((struct breakpoint *));
56
57 static void
58 disable_command PARAMS ((char *, int));
59
60 static void
61 enable_command PARAMS ((char *, int));
62
63 static void
64 map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
65
66 static void
67 ignore_command PARAMS ((char *, int));
68
69 static int
70 breakpoint_re_set_one PARAMS ((char *));
71
72 static void
73 delete_command PARAMS ((char *, int));
74
75 static void
76 clear_command PARAMS ((char *, int));
77
78 static void
79 catch_command PARAMS ((char *, int));
80
81 static struct symtabs_and_lines
82 get_catch_sals PARAMS ((int));
83
84 static void
85 watch_command PARAMS ((char *, int));
86
87 static int
88 can_use_hardware_watchpoint PARAMS ((struct value *));
89
90 static void
91 tbreak_command PARAMS ((char *, int));
92
93 static void
94 break_command_1 PARAMS ((char *, int, int));
95
96 static void
97 mention PARAMS ((struct breakpoint *));
98
99 static struct breakpoint *
100 set_raw_breakpoint PARAMS ((struct symtab_and_line));
101
102 static void
103 check_duplicates PARAMS ((CORE_ADDR));
104
105 static void
106 describe_other_breakpoints PARAMS ((CORE_ADDR));
107
108 static void
109 breakpoints_info PARAMS ((char *, int));
110
111 static void
112 breakpoint_1 PARAMS ((int, int));
113
114 static bpstat
115 bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
116
117 static int
118 breakpoint_cond_eval PARAMS ((char *));
119
120 static void
121 cleanup_executing_breakpoints PARAMS ((int));
122
123 static void
124 commands_command PARAMS ((char *, int));
125
126 static void
127 condition_command PARAMS ((char *, int));
128
129 static int
130 get_number PARAMS ((char **));
131
132 static void
133 set_breakpoint_count PARAMS ((int));
134
135 static int
136 remove_breakpoint PARAMS ((struct breakpoint *));
137
138 extern int addressprint;                /* Print machine addresses? */
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 /* True if breakpoint hit counts should be displayed in breakpoint info.  */
155
156 int show_breakpoint_hit_counts = 1;
157
158 /* Chain of all breakpoints defined.  */
159
160 struct breakpoint *breakpoint_chain;
161
162 /* Number of last breakpoint made.  */
163
164 static int breakpoint_count;
165
166 /* Set breakpoint count to NUM.  */
167
168 static void
169 set_breakpoint_count (num)
170      int num;
171 {
172   breakpoint_count = num;
173   set_internalvar (lookup_internalvar ("bpnum"),
174                    value_from_longest (builtin_type_int, (LONGEST) num));
175 }
176
177 /* Used in run_command to zero the hit count when a new run starts. */
178
179 void
180 clear_breakpoint_hit_counts ()
181 {
182   struct breakpoint *b;
183
184   ALL_BREAKPOINTS (b)
185     b->hit_count = 0;
186 }
187
188 /* Default address, symtab and line to put a breakpoint at
189    for "break" command with no arg.
190    if default_breakpoint_valid is zero, the other three are
191    not valid, and "break" with no arg is an error.
192
193    This set by print_stack_frame, which calls set_default_breakpoint.  */
194
195 int default_breakpoint_valid;
196 CORE_ADDR default_breakpoint_address;
197 struct symtab *default_breakpoint_symtab;
198 int default_breakpoint_line;
199 \f
200 /* *PP is a string denoting a breakpoint.  Get the number of the breakpoint.
201    Advance *PP after the string and any trailing whitespace.
202
203    Currently the string can either be a number or "$" followed by the name
204    of a convenience variable.  Making it an expression wouldn't work well
205    for map_breakpoint_numbers (e.g. "4 + 5 + 6").  */
206 static int
207 get_number (pp)
208      char **pp;
209 {
210   int retval;
211   char *p = *pp;
212
213   if (p == NULL)
214     /* Empty line means refer to the last breakpoint.  */
215     return breakpoint_count;
216   else if (*p == '$')
217     {
218       /* Make a copy of the name, so we can null-terminate it
219          to pass to lookup_internalvar().  */
220       char *varname;
221       char *start = ++p;
222       value_ptr val;
223
224       while (isalnum (*p) || *p == '_')
225         p++;
226       varname = (char *) alloca (p - start + 1);
227       strncpy (varname, start, p - start);
228       varname[p - start] = '\0';
229       val = value_of_internalvar (lookup_internalvar (varname));
230       if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
231         error (
232 "Convenience variables used to specify breakpoints must have integer values."
233                );
234       retval = (int) value_as_long (val);
235     }
236   else
237     {
238       if (*p == '-')
239         ++p;
240       while (*p >= '0' && *p <= '9')
241         ++p;
242       if (p == *pp)
243         /* There is no number here.  (e.g. "cond a == b").  */
244         error_no_arg ("breakpoint number");
245       retval = atoi (*pp);
246     }
247   if (!(isspace (*p) || *p == '\0'))
248     error ("breakpoint number expected");
249   while (isspace (*p))
250     p++;
251   *pp = p;
252   return retval;
253 }
254 \f
255 /* condition N EXP -- set break condition of breakpoint N to EXP.  */
256
257 static void
258 condition_command (arg, from_tty)
259      char *arg;
260      int from_tty;
261 {
262   register struct breakpoint *b;
263   char *p;
264   register int bnum;
265
266   if (arg == 0)
267     error_no_arg ("breakpoint number");
268
269   p = arg;
270   bnum = get_number (&p);
271
272   ALL_BREAKPOINTS (b)
273     if (b->number == bnum)
274       {
275         if (b->cond)
276           {
277             free ((PTR)b->cond);
278             b->cond = 0;
279           }
280         if (b->cond_string != NULL)
281           free ((PTR)b->cond_string);
282
283         if (*p == 0)
284           {
285             b->cond = 0;
286             b->cond_string = NULL;
287             if (from_tty)
288               printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
289           }
290         else
291           {
292             arg = p;
293             /* I don't know if it matters whether this is the string the user
294                typed in or the decompiled expression.  */
295             b->cond_string = savestring (arg, strlen (arg));
296             b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
297             if (*arg)
298               error ("Junk at end of expression");
299           }
300         breakpoints_changed ();
301         return;
302       }
303
304   error ("No breakpoint number %d.", bnum);
305 }
306
307 /* ARGSUSED */
308 static void
309 commands_command (arg, from_tty)
310      char *arg;
311      int from_tty;
312 {
313   register struct breakpoint *b;
314   char *p;
315   register int bnum;
316   struct command_line *l;
317
318   /* If we allowed this, we would have problems with when to
319      free the storage, if we change the commands currently
320      being read from.  */
321
322   if (executing_breakpoint_commands)
323     error ("Can't use the \"commands\" command among a breakpoint's commands.");
324
325   p = arg;
326   bnum = get_number (&p);
327   if (p && *p)
328     error ("Unexpected extra arguments following breakpoint number.");
329       
330   ALL_BREAKPOINTS (b)
331     if (b->number == bnum)
332       {
333         char tmpbuf[128];
334         sprintf (tmpbuf, "Type commands for when breakpoint %d is hit, one per line.", bnum);
335         l = read_command_lines (tmpbuf, from_tty);
336         free_command_lines (&b->commands);
337         b->commands = l;
338         breakpoints_changed ();
339         return;
340       }
341   error ("No breakpoint number %d.", bnum);
342 }
343 \f
344 extern int memory_breakpoint_size; /* from mem-break.c */
345
346 /* Like target_read_memory() but if breakpoints are inserted, return
347    the shadow contents instead of the breakpoints themselves.
348
349    Read "memory data" from whatever target or inferior we have. 
350    Returns zero if successful, errno value if not.  EIO is used
351    for address out of bounds.  If breakpoints are inserted, returns
352    shadow contents, not the breakpoints themselves.  From breakpoint.c.  */
353
354 int
355 read_memory_nobpt (memaddr, myaddr, len)
356      CORE_ADDR memaddr;
357      char *myaddr;
358      unsigned len;
359 {
360   int status;
361   struct breakpoint *b;
362
363   if (memory_breakpoint_size < 0)
364     /* No breakpoints on this machine.  FIXME: This should be
365        dependent on the debugging target.  Probably want
366        target_insert_breakpoint to return a size, saying how many
367        bytes of the shadow contents are used, or perhaps have
368        something like target_xfer_shadow.  */
369     return target_read_memory (memaddr, myaddr, len);
370   
371   ALL_BREAKPOINTS (b)
372     {
373       if (b->type == bp_watchpoint
374           || b->type == bp_hardware_watchpoint
375           || b->type == bp_read_watchpoint
376           || b->type == bp_access_watchpoint
377           || !b->inserted)
378         continue;
379       else if (b->address + memory_breakpoint_size <= memaddr)
380         /* The breakpoint is entirely before the chunk of memory
381            we are reading.  */
382         continue;
383       else if (b->address >= memaddr + len)
384         /* The breakpoint is entirely after the chunk of memory we
385            are reading.  */
386         continue;
387       else
388         {
389           /* Copy the breakpoint from the shadow contents, and recurse
390              for the things before and after.  */
391           
392           /* Addresses and length of the part of the breakpoint that
393              we need to copy.  */
394           CORE_ADDR membpt = b->address;
395           unsigned int bptlen = memory_breakpoint_size;
396           /* Offset within shadow_contents.  */
397           int bptoffset = 0;
398           
399           if (membpt < memaddr)
400             {
401               /* Only copy the second part of the breakpoint.  */
402               bptlen -= memaddr - membpt;
403               bptoffset = memaddr - membpt;
404               membpt = memaddr;
405             }
406
407           if (membpt + bptlen > memaddr + len)
408             {
409               /* Only copy the first part of the breakpoint.  */
410               bptlen -= (membpt + bptlen) - (memaddr + len);
411             }
412
413           memcpy (myaddr + membpt - memaddr, 
414                   b->shadow_contents + bptoffset, bptlen);
415
416           if (membpt > memaddr)
417             {
418               /* Copy the section of memory before the breakpoint.  */
419               status = read_memory_nobpt (memaddr, myaddr, membpt - memaddr);
420               if (status != 0)
421                 return status;
422             }
423
424           if (membpt + bptlen < memaddr + len)
425             {
426               /* Copy the section of memory after the breakpoint.  */
427               status = read_memory_nobpt
428                 (membpt + bptlen,
429                  myaddr + membpt + bptlen - memaddr,
430                  memaddr + len - (membpt + bptlen));
431               if (status != 0)
432                 return status;
433             }
434           return 0;
435         }
436     }
437   /* Nothing overlaps.  Just call read_memory_noerr.  */
438   return target_read_memory (memaddr, myaddr, len);
439 }
440 \f
441 /* insert_breakpoints is used when starting or continuing the program.
442    remove_breakpoints is used when the program stops.
443    Both return zero if successful,
444    or an `errno' value if could not write the inferior.  */
445
446 int
447 insert_breakpoints ()
448 {
449   register struct breakpoint *b, *temp;
450   int val = 0;
451   int disabled_breaks = 0;
452
453   ALL_BREAKPOINTS_SAFE (b, temp)
454     if (b->type != bp_watchpoint
455         && b->type != bp_hardware_watchpoint
456         && b->type != bp_read_watchpoint
457         && b->type != bp_access_watchpoint
458         && b->enable != disabled
459         && b->enable != shlib_disabled
460         && ! b->inserted
461         && ! b->duplicate)
462       {
463         if (b->type == bp_hardware_breakpoint)
464           val = target_insert_hw_breakpoint(b->address, b->shadow_contents);
465         else
466           val = target_insert_breakpoint(b->address, b->shadow_contents);
467         if (val)
468           {
469             /* Can't set the breakpoint.  */
470 #if defined (DISABLE_UNSETTABLE_BREAK)
471             if (DISABLE_UNSETTABLE_BREAK (b->address))
472               {
473                 val = 0;
474                 b->enable = shlib_disabled;
475                 if (!disabled_breaks)
476                   {
477                     target_terminal_ours_for_output ();
478                     fprintf_unfiltered (gdb_stderr,
479                          "Cannot insert breakpoint %d:\n", b->number);
480                     printf_filtered ("Temporarily disabling shared library breakpoints:\n");
481                   }
482                 disabled_breaks = 1;
483                 printf_filtered ("%d ", b->number);
484               }
485             else
486 #endif
487               {
488                 target_terminal_ours_for_output ();
489                 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
490 #ifdef ONE_PROCESS_WRITETEXT
491                 fprintf_unfiltered (gdb_stderr,
492                   "The same program may be running in another process.\n");
493 #endif
494                 memory_error (val, b->address); /* which bombs us out */
495               }
496           }
497         else
498           b->inserted = 1;
499       }
500     else if ((b->type == bp_hardware_watchpoint ||
501               b->type == bp_read_watchpoint ||
502               b->type == bp_access_watchpoint)
503              && b->enable == enabled
504              && ! b->inserted
505              && ! b->duplicate)
506       {
507         struct frame_info *saved_frame;
508         int saved_level, within_current_scope;
509         value_ptr mark = value_mark ();
510         value_ptr v;
511
512         /* Save the current frame and level so we can restore it after
513            evaluating the watchpoint expression on its own frame.  */
514         saved_frame = selected_frame;
515         saved_level = selected_frame_level;
516
517         /* Determine if the watchpoint is within scope.  */
518         if (b->exp_valid_block == NULL)
519           within_current_scope = 1;
520         else
521           {
522             struct frame_info *fi =
523               find_frame_addr_in_frame_chain (b->watchpoint_frame);
524             within_current_scope = (fi != NULL);
525             if (within_current_scope)
526               select_frame (fi, -1);
527           }
528         
529         if (within_current_scope)
530           {
531             /* Evaluate the expression and cut the chain of values
532                produced off from the value chain.  */
533             v = evaluate_expression (b->exp);
534             value_release_to_mark (mark);
535             
536             b->val_chain = v;
537             b->inserted = 1;
538
539             /* Look at each value on the value chain.  */
540             for ( ; v; v=v->next)
541               {
542                 /* If it's a memory location, then we must watch it.  */
543                 if (v->lval == lval_memory)
544                   {
545                     int addr, len, type;
546                     
547                     addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
548                     len = TYPE_LENGTH (VALUE_TYPE (v));
549                     type = 0;
550                     if (b->type == bp_read_watchpoint)
551                       type = 1;
552                     else if (b->type == bp_access_watchpoint)
553                       type = 2;
554
555                     val = target_insert_watchpoint (addr, len, type);
556                     if (val == -1)
557                       {
558                         b->inserted = 0;
559                         break;
560                       }
561                     val = 0;
562                   }
563               }
564             /* Failure to insert a watchpoint on any memory value in the
565                value chain brings us here.  */
566             if (!b->inserted)
567               warning ("Hardware watchpoint %d: Could not insert watchpoint\n",
568                        b->number);
569           }
570         else
571           {
572             printf_filtered ("\
573 Hardware watchpoint %d deleted because the program has left the block in\n\
574 which its expression is valid.\n", b->number);
575             if (b->related_breakpoint)
576               {
577                 b->related_breakpoint->enable = disable;
578                 b->related_breakpoint->disposition = del_at_next_stop;
579               }
580             b->enable = disable;
581             b->disposition = del_at_next_stop;
582           }
583
584         /* Restore the frame and level.  */
585         select_frame (saved_frame, saved_level);
586       }
587   if (disabled_breaks)
588     printf_filtered ("\n");
589   return val;
590 }
591
592
593 int
594 remove_breakpoints ()
595 {
596   register struct breakpoint *b;
597   int val;
598
599   ALL_BREAKPOINTS (b)
600     {
601       if (b->inserted)
602         {
603           val = remove_breakpoint (b);
604           if (val != 0)
605             return val;
606         }
607     }
608   return 0;
609 }
610
611
612 static int
613 remove_breakpoint (b)
614      struct breakpoint *b;
615 {
616   int val;
617   
618   if (b->type != bp_watchpoint
619       && b->type != bp_hardware_watchpoint
620       && b->type != bp_read_watchpoint
621       && b->type != bp_access_watchpoint)
622     {
623       if (b->type == bp_hardware_breakpoint)
624         val = target_remove_hw_breakpoint(b->address, b->shadow_contents);
625       else
626         val = target_remove_breakpoint(b->address, b->shadow_contents);
627       if (val)
628         return val;
629       b->inserted = 0;
630     }
631   else if ((b->type == bp_hardware_watchpoint ||
632             b->type == bp_read_watchpoint ||
633             b->type == bp_access_watchpoint)
634            && b->enable == enabled
635            && ! b->duplicate)
636     {
637       value_ptr v, n;
638       
639       b->inserted = 0;
640       /* Walk down the saved value chain.  */
641       for (v = b->val_chain; v; v = v->next)
642         {
643           /* For each memory reference remove the watchpoint
644              at that address.  */
645           if (v->lval == lval_memory)
646             {
647               int addr, len;
648               
649               addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
650               len = TYPE_LENGTH (VALUE_TYPE (v));
651               val = target_remove_watchpoint (addr, len, b->type);
652               if (val == -1)
653                 b->inserted = 1;
654               val = 0;
655             }
656         }
657       /* Failure to remove any of the hardware watchpoints comes here.  */
658       if (b->inserted)
659         warning ("Hardware watchpoint %d: Could not remove watchpoint\n",
660                  b->number);
661       
662       /* Free the saved value chain.  We will construct a new one
663          the next time the watchpoint is inserted.  */
664       for (v = b->val_chain; v; v = n)
665         {
666           n = v->next;
667           value_free (v);
668         }
669       b->val_chain = NULL;
670     }
671   return 0;
672 }
673
674 /* Clear the "inserted" flag in all breakpoints.  */
675
676 void
677 mark_breakpoints_out ()
678 {
679   register struct breakpoint *b;
680
681   ALL_BREAKPOINTS (b)
682     b->inserted = 0;
683 }
684
685 /* Clear the "inserted" flag in all breakpoints and delete any breakpoints
686    which should go away between runs of the program.  */
687
688 void
689 breakpoint_init_inferior ()
690 {
691   register struct breakpoint *b, *temp;
692
693   ALL_BREAKPOINTS_SAFE (b, temp)
694     {
695       b->inserted = 0;
696
697       switch (b->type)
698         {
699         case bp_call_dummy:
700         case bp_watchpoint_scope:
701
702           /* If the call dummy breakpoint is at the entry point it will
703              cause problems when the inferior is rerun, so we better
704              get rid of it. 
705
706              Also get rid of scope breakpoints.  */
707           delete_breakpoint (b);
708           break;
709
710         case bp_watchpoint:
711         case bp_hardware_watchpoint:
712         case bp_read_watchpoint:
713         case bp_access_watchpoint:
714
715           /* Likewise for watchpoints on local expressions.  */
716           if (b->exp_valid_block != NULL)
717             delete_breakpoint (b);
718           break;
719
720         default:
721           break;
722         }
723     }
724 }
725
726 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
727    When continuing from a location with a breakpoint,
728    we actually single step once before calling insert_breakpoints.  */
729
730 int
731 breakpoint_here_p (pc)
732      CORE_ADDR pc;
733 {
734   register struct breakpoint *b;
735
736   ALL_BREAKPOINTS (b)
737     if (b->enable != disabled
738         && b->enable != shlib_disabled
739         && b->address == pc)
740       return 1;
741
742   return 0;
743 }
744
745 /* Return nonzero if FRAME is a dummy frame.  We can't use PC_IN_CALL_DUMMY
746    because figuring out the saved SP would take too much time, at least using
747    get_saved_register on the 68k.  This means that for this function to
748    work right a port must use the bp_call_dummy breakpoint.  */
749
750 int
751 frame_in_dummy (frame)
752      struct frame_info *frame;
753 {
754   struct breakpoint *b;
755
756 #ifdef CALL_DUMMY
757   ALL_BREAKPOINTS (b)
758     {
759       static unsigned LONGEST dummy[] = CALL_DUMMY;
760
761       if (b->type == bp_call_dummy
762           && b->frame == frame->frame
763
764           /* We need to check the PC as well as the frame on the sparc,
765              for signals.exp in the testsuite.  */
766           && (frame->pc
767               >= (b->address
768                   - sizeof (dummy) / sizeof (LONGEST) * REGISTER_SIZE))
769           && frame->pc <= b->address)
770         return 1;
771     }
772 #endif /* CALL_DUMMY */
773   return 0;
774 }
775
776 /* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
777    is valid for process/thread PID.  */
778
779 int
780 breakpoint_thread_match (pc, pid)
781      CORE_ADDR pc;
782      int pid;
783 {
784   struct breakpoint *b;
785   int thread;
786
787   thread = pid_to_thread_id (pid);
788
789   ALL_BREAKPOINTS (b)
790     if (b->enable != disabled
791         && b->enable != shlib_disabled
792         && b->address == pc
793         && (b->thread == -1 || b->thread == thread))
794       return 1;
795
796   return 0;
797 }
798
799 \f
800 /* bpstat stuff.  External routines' interfaces are documented
801    in breakpoint.h.  */
802
803 /* Clear a bpstat so that it says we are not at any breakpoint.
804    Also free any storage that is part of a bpstat.  */
805
806 void
807 bpstat_clear (bsp)
808      bpstat *bsp;
809 {
810   bpstat p;
811   bpstat q;
812
813   if (bsp == 0)
814     return;
815   p = *bsp;
816   while (p != NULL)
817     {
818       q = p->next;
819       if (p->old_val != NULL)
820         value_free (p->old_val);
821       free ((PTR)p);
822       p = q;
823     }
824   *bsp = NULL;
825 }
826
827 /* Return a copy of a bpstat.  Like "bs1 = bs2" but all storage that
828    is part of the bpstat is copied as well.  */
829
830 bpstat
831 bpstat_copy (bs)
832      bpstat bs;
833 {
834   bpstat p = NULL;
835   bpstat tmp;
836   bpstat retval = NULL;
837
838   if (bs == NULL)
839     return bs;
840
841   for (; bs != NULL; bs = bs->next)
842     {
843       tmp = (bpstat) xmalloc (sizeof (*tmp));
844       memcpy (tmp, bs, sizeof (*tmp));
845       if (p == NULL)
846         /* This is the first thing in the chain.  */
847         retval = tmp;
848       else
849         p->next = tmp;
850       p = tmp;
851     }
852   p->next = NULL;
853   return retval;
854 }
855
856 /* Find the bpstat associated with this breakpoint */
857
858 bpstat
859 bpstat_find_breakpoint(bsp, breakpoint)
860      bpstat bsp;
861      struct breakpoint *breakpoint;
862 {
863   if (bsp == NULL) return NULL;
864
865   for (;bsp != NULL; bsp = bsp->next) {
866     if (bsp->breakpoint_at == breakpoint) return bsp;
867   }
868   return NULL;
869 }
870
871 /* Return the breakpoint number of the first breakpoint we are stopped
872    at.  *BSP upon return is a bpstat which points to the remaining
873    breakpoints stopped at (but which is not guaranteed to be good for
874    anything but further calls to bpstat_num).
875    Return 0 if passed a bpstat which does not indicate any breakpoints.  */
876
877 int
878 bpstat_num (bsp)
879      bpstat *bsp;
880 {
881   struct breakpoint *b;
882
883   if ((*bsp) == NULL)
884     return 0;                   /* No more breakpoint values */
885   else
886     {
887       b = (*bsp)->breakpoint_at;
888       *bsp = (*bsp)->next;
889       if (b == NULL)
890         return -1;              /* breakpoint that's been deleted since */
891       else
892         return b->number;       /* We have its number */
893     }
894 }
895
896 /* Modify BS so that the actions will not be performed.  */
897
898 void
899 bpstat_clear_actions (bs)
900      bpstat bs;
901 {
902   for (; bs != NULL; bs = bs->next)
903     {
904       bs->commands = NULL;
905       if (bs->old_val != NULL)
906         {
907           value_free (bs->old_val);
908           bs->old_val = NULL;
909         }
910     }
911 }
912
913 /* Stub for cleaning up our state if we error-out of a breakpoint command */
914 /* ARGSUSED */
915 static void
916 cleanup_executing_breakpoints (ignore)
917      int ignore;
918 {
919   executing_breakpoint_commands = 0;
920 }
921
922 /* Execute all the commands associated with all the breakpoints at this
923    location.  Any of these commands could cause the process to proceed
924    beyond this point, etc.  We look out for such changes by checking
925    the global "breakpoint_proceeded" after each command.  */
926
927 void
928 bpstat_do_actions (bsp)
929      bpstat *bsp;
930 {
931   bpstat bs;
932   struct cleanup *old_chain;
933   struct command_line *cmd;
934
935   executing_breakpoint_commands = 1;
936   old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
937
938 top:
939   bs = *bsp;
940
941   breakpoint_proceeded = 0;
942   for (; bs != NULL; bs = bs->next)
943     {
944       cmd = bs->commands;
945       while (cmd != NULL)
946         {
947           execute_control_command (cmd);
948           cmd = cmd->next;
949         }
950       if (breakpoint_proceeded)
951         /* The inferior is proceeded by the command; bomb out now.
952            The bpstat chain has been blown away by wait_for_inferior.
953            But since execution has stopped again, there is a new bpstat
954            to look at, so start over.  */
955         goto top;
956       else
957         bs->commands = NULL;
958     }
959
960   executing_breakpoint_commands = 0;
961   discard_cleanups (old_chain);
962 }
963
964 /* This is the normal print_it function for a bpstat.  In the future,
965    much of this logic could (should?) be moved to bpstat_stop_status,
966    by having it set different print_it functions.  */
967
968 static int
969 print_it_normal (bs)
970      bpstat bs;
971 {
972   /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
973      which has since been deleted.  */
974   if (bs->breakpoint_at == NULL
975       || (bs->breakpoint_at->type != bp_breakpoint
976           && bs->breakpoint_at->type != bp_hardware_breakpoint
977           && bs->breakpoint_at->type != bp_watchpoint
978           && bs->breakpoint_at->type != bp_read_watchpoint
979           && bs->breakpoint_at->type != bp_access_watchpoint
980           && bs->breakpoint_at->type != bp_hardware_watchpoint))
981     return 0;
982
983   if (bs->breakpoint_at->type == bp_breakpoint ||
984       bs->breakpoint_at->type == bp_hardware_breakpoint)
985     {
986       /* I think the user probably only wants to see one breakpoint
987          number, not all of them.  */
988       annotate_breakpoint (bs->breakpoint_at->number);
989       printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
990       return 0;
991     }
992   else if ((bs->old_val != NULL) &&
993         (bs->breakpoint_at->type == bp_watchpoint ||
994          bs->breakpoint_at->type == bp_access_watchpoint ||
995          bs->breakpoint_at->type == bp_hardware_watchpoint))
996     {
997       annotate_watchpoint (bs->breakpoint_at->number);
998       mention (bs->breakpoint_at);
999       printf_filtered ("\nOld value = ");
1000       value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
1001       printf_filtered ("\nNew value = ");
1002       value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1003                    Val_pretty_default);
1004       printf_filtered ("\n");
1005       value_free (bs->old_val);
1006       bs->old_val = NULL;
1007       /* More than one watchpoint may have been triggered.  */
1008       return -1;
1009     }
1010   else if (bs->breakpoint_at->type == bp_access_watchpoint ||
1011            bs->breakpoint_at->type == bp_read_watchpoint)
1012     {
1013       mention (bs->breakpoint_at);
1014       printf_filtered ("\nValue = ");
1015       value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1016                    Val_pretty_default);
1017       printf_filtered ("\n");
1018       return -1;
1019     }
1020   /* We can't deal with it.  Maybe another member of the bpstat chain can.  */
1021   return -1;
1022 }
1023
1024 /* Print a message indicating what happened.  Returns nonzero to
1025    say that only the source line should be printed after this (zero
1026    return means print the frame as well as the source line).  */
1027 /* Currently we always return zero.  */
1028 int
1029 bpstat_print (bs)
1030      bpstat bs;
1031 {
1032   int val;
1033   
1034   if (bs == NULL)
1035     return 0;
1036
1037   val = (*bs->print_it) (bs);
1038   if (val >= 0)
1039     return val;
1040   
1041   /* Maybe another breakpoint in the chain caused us to stop.
1042      (Currently all watchpoints go on the bpstat whether hit or
1043      not.  That probably could (should) be changed, provided care is taken
1044      with respect to bpstat_explains_signal).  */
1045   if (bs->next)
1046     return bpstat_print (bs->next);
1047
1048   /* We reached the end of the chain without printing anything.  */
1049   return 0;
1050 }
1051
1052 /* Evaluate the expression EXP and return 1 if value is zero.
1053    This is used inside a catch_errors to evaluate the breakpoint condition. 
1054    The argument is a "struct expression *" that has been cast to char * to 
1055    make it pass through catch_errors.  */
1056
1057 static int
1058 breakpoint_cond_eval (exp)
1059      char *exp;
1060 {
1061   value_ptr mark = value_mark ();
1062   int i = !value_true (evaluate_expression ((struct expression *)exp));
1063   value_free_to_mark (mark);
1064   return i;
1065 }
1066
1067 /* Allocate a new bpstat and chain it to the current one.  */
1068
1069 static bpstat
1070 bpstat_alloc (b, cbs)
1071      register struct breakpoint *b;
1072      bpstat cbs;                        /* Current "bs" value */
1073 {
1074   bpstat bs;
1075
1076   bs = (bpstat) xmalloc (sizeof (*bs));
1077   cbs->next = bs;
1078   bs->breakpoint_at = b;
1079   /* If the condition is false, etc., don't do the commands.  */
1080   bs->commands = NULL;
1081   bs->old_val = NULL;
1082   bs->print_it = print_it_normal;
1083   return bs;
1084 }
1085 \f
1086 /* Possible return values for watchpoint_check (this can't be an enum
1087    because of check_errors).  */
1088 /* The watchpoint has been deleted.  */
1089 #define WP_DELETED 1
1090 /* The value has changed.  */
1091 #define WP_VALUE_CHANGED 2
1092 /* The value has not changed.  */
1093 #define WP_VALUE_NOT_CHANGED 3
1094
1095 #define BP_TEMPFLAG 1
1096 #define BP_HARDWAREFLAG 2
1097
1098 /* Check watchpoint condition.  */
1099
1100 static int
1101 watchpoint_check (p)
1102      char *p;
1103 {
1104   bpstat bs = (bpstat) p;
1105   struct breakpoint *b;
1106   struct frame_info *fr;
1107   int within_current_scope;
1108
1109   b = bs->breakpoint_at;
1110
1111   if (b->exp_valid_block == NULL)
1112     within_current_scope = 1;
1113   else
1114     {
1115       /* There is no current frame at this moment.  If we're going to have
1116          any chance of handling watchpoints on local variables, we'll need
1117          the frame chain (so we can determine if we're in scope).  */
1118       reinit_frame_cache();
1119       fr = find_frame_addr_in_frame_chain (b->watchpoint_frame);
1120       within_current_scope = (fr != NULL);
1121       if (within_current_scope)
1122         /* If we end up stopping, the current frame will get selected
1123            in normal_stop.  So this call to select_frame won't affect
1124            the user.  */
1125         select_frame (fr, -1);
1126     }
1127       
1128   if (within_current_scope)
1129     {
1130       /* We use value_{,free_to_}mark because it could be a
1131          *long* time before we return to the command level and
1132          call free_all_values.  We can't call free_all_values because
1133          we might be in the middle of evaluating a function call.  */
1134
1135       value_ptr mark = value_mark ();
1136       value_ptr new_val = evaluate_expression (bs->breakpoint_at->exp);
1137       if (!value_equal (b->val, new_val))
1138         {
1139           release_value (new_val);
1140           value_free_to_mark (mark);
1141           bs->old_val = b->val;
1142           b->val = new_val;
1143           /* We will stop here */
1144           return WP_VALUE_CHANGED;
1145         }
1146       else
1147         {
1148           /* Nothing changed, don't do anything.  */
1149           value_free_to_mark (mark);
1150           /* We won't stop here */
1151           return WP_VALUE_NOT_CHANGED;
1152         }
1153     }
1154   else
1155     {
1156       /* This seems like the only logical thing to do because
1157          if we temporarily ignored the watchpoint, then when
1158          we reenter the block in which it is valid it contains
1159          garbage (in the case of a function, it may have two
1160          garbage values, one before and one after the prologue).
1161          So we can't even detect the first assignment to it and
1162          watch after that (since the garbage may or may not equal
1163          the first value assigned).  */
1164       printf_filtered ("\
1165 Watchpoint %d deleted because the program has left the block in\n\
1166 which its expression is valid.\n", bs->breakpoint_at->number);
1167       if (b->related_breakpoint)
1168         {
1169           b->related_breakpoint->enable = disable;
1170           b->related_breakpoint->disposition = del_at_next_stop;
1171         }
1172       b->enable = disable;
1173       b->disposition = del_at_next_stop;
1174
1175       return WP_DELETED;
1176     }
1177 }
1178
1179 /* This is used when everything which needs to be printed has
1180    already been printed.  But we still want to print the frame.  */
1181 static int
1182 print_it_done (bs)
1183      bpstat bs;
1184 {
1185   return 0;
1186 }
1187
1188 /* This is used when nothing should be printed for this bpstat entry.  */
1189
1190 static int
1191 print_it_noop (bs)
1192      bpstat bs;
1193 {
1194   return -1;
1195 }
1196
1197 /* Get a bpstat associated with having just stopped at address *PC
1198    and frame address CORE_ADDRESS.  Update *PC to point at the
1199    breakpoint (if we hit a breakpoint).  NOT_A_BREAKPOINT is nonzero
1200    if this is known to not be a real breakpoint (it could still be a
1201    watchpoint, though).  */
1202
1203 /* Determine whether we stopped at a breakpoint, etc, or whether we
1204    don't understand this stop.  Result is a chain of bpstat's such that:
1205
1206         if we don't understand the stop, the result is a null pointer.
1207
1208         if we understand why we stopped, the result is not null.
1209
1210         Each element of the chain refers to a particular breakpoint or
1211         watchpoint at which we have stopped.  (We may have stopped for
1212         several reasons concurrently.)
1213
1214         Each element of the chain has valid next, breakpoint_at,
1215         commands, FIXME??? fields.
1216
1217  */
1218
1219 bpstat
1220 bpstat_stop_status (pc, not_a_breakpoint)
1221      CORE_ADDR *pc;
1222      int not_a_breakpoint;
1223 {
1224   register struct breakpoint *b, *temp;
1225   CORE_ADDR bp_addr;
1226 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1227   /* True if we've hit a breakpoint (as opposed to a watchpoint).  */
1228   int real_breakpoint = 0;
1229 #endif
1230   /* Root of the chain of bpstat's */
1231   struct bpstats root_bs[1];
1232   /* Pointer to the last thing in the chain currently.  */
1233   bpstat bs = root_bs;
1234   static char message1[] =
1235             "Error evaluating expression for watchpoint %d\n";
1236   char message[sizeof (message1) + 30 /* slop */];
1237
1238   /* Get the address where the breakpoint would have been.  */
1239   bp_addr = *pc - DECR_PC_AFTER_BREAK;
1240
1241   ALL_BREAKPOINTS_SAFE (b, temp)
1242     {
1243       if (b->enable == disabled
1244           || b->enable == shlib_disabled)
1245         continue;
1246
1247       if (b->type != bp_watchpoint
1248           && b->type != bp_hardware_watchpoint
1249           && b->type != bp_read_watchpoint
1250           && b->type != bp_access_watchpoint
1251           && b->type != bp_hardware_breakpoint
1252           && b->address != bp_addr)
1253         continue;
1254
1255       if (b->type == bp_hardware_breakpoint
1256           && b->address != (bp_addr - DECR_PC_AFTER_HW_BREAK))
1257         continue;
1258
1259       if (b->type != bp_watchpoint
1260           && b->type != bp_hardware_watchpoint
1261           && b->type != bp_read_watchpoint
1262           && b->type != bp_access_watchpoint
1263           && not_a_breakpoint)
1264         continue;
1265
1266       /* Come here if it's a watchpoint, or if the break address matches */
1267
1268       ++(b->hit_count);
1269
1270       bs = bpstat_alloc (b, bs);        /* Alloc a bpstat to explain stop */
1271
1272       bs->stop = 1;
1273       bs->print = 1;
1274
1275       sprintf (message, message1, b->number);
1276       if (b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
1277         {
1278           switch (catch_errors (watchpoint_check, (char *) bs, message,
1279                                 RETURN_MASK_ALL))
1280             {
1281             case WP_DELETED:
1282               /* We've already printed what needs to be printed.  */
1283               bs->print_it = print_it_done;
1284               /* Stop.  */
1285               break;
1286             case WP_VALUE_CHANGED:
1287               /* Stop.  */
1288               break;
1289             case WP_VALUE_NOT_CHANGED:
1290               /* Don't stop.  */
1291               bs->print_it = print_it_noop;
1292               bs->stop = 0;
1293               continue;
1294             default:
1295               /* Can't happen.  */
1296               /* FALLTHROUGH */
1297             case 0:
1298               /* Error from catch_errors.  */
1299               printf_filtered ("Watchpoint %d deleted.\n", b->number);
1300               if (b->related_breakpoint)
1301                 {
1302                   b->related_breakpoint->enable = disable;
1303                   b->related_breakpoint->disposition = del_at_next_stop;
1304                 }
1305               b->enable = disable;
1306               b->disposition = del_at_next_stop;
1307               /* We've already printed what needs to be printed.  */
1308               bs->print_it = print_it_done;
1309
1310               /* Stop.  */
1311               break;
1312             }
1313         }
1314       else if (b->type == bp_read_watchpoint || b->type == bp_access_watchpoint)
1315         {
1316           CORE_ADDR addr;
1317           value_ptr v;
1318           int found = 0;
1319
1320           addr = target_stopped_data_address();
1321           if (addr == 0) continue;
1322           for (v = b->val_chain; v; v = v->next)
1323             {
1324               if (v->lval == lval_memory)
1325                 {
1326                   CORE_ADDR vaddr;
1327
1328                   vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1329                   if (addr == vaddr)
1330                     found = 1;
1331                 }
1332             }
1333           if (found) 
1334             switch (catch_errors (watchpoint_check, (char *) bs, message,
1335                          RETURN_MASK_ALL))
1336               {
1337                 case WP_DELETED:
1338                   /* We've already printed what needs to be printed.  */
1339                   bs->print_it = print_it_done;
1340                   /* Stop.  */
1341                   break;
1342                 case WP_VALUE_CHANGED:
1343                 case WP_VALUE_NOT_CHANGED:
1344                   /* Stop.  */
1345                   break;
1346                 default:
1347                   /* Can't happen.  */
1348                 case 0:
1349                   /* Error from catch_errors.  */
1350                   printf_filtered ("Watchpoint %d deleted.\n", b->number);
1351                   if (b->related_breakpoint)
1352                     {
1353                       b->related_breakpoint->enable = disable;
1354                       b->related_breakpoint->disposition = del_at_next_stop;
1355                     }
1356                   b->enable = disable;
1357                   b->disposition = del_at_next_stop;
1358                   /* We've already printed what needs to be printed.  */
1359                   bs->print_it = print_it_done;
1360                   break;
1361               }
1362         }
1363 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1364       else
1365         real_breakpoint = 1;
1366 #endif
1367
1368       if (b->frame && b->frame != (get_current_frame ())->frame)
1369         bs->stop = 0;
1370       else
1371         {
1372           int value_is_zero = 0;
1373
1374           if (b->cond)
1375             {
1376               /* Need to select the frame, with all that implies
1377                  so that the conditions will have the right context.  */
1378               select_frame (get_current_frame (), 0);
1379               value_is_zero
1380                 = catch_errors (breakpoint_cond_eval, (char *)(b->cond),
1381                                 "Error in testing breakpoint condition:\n",
1382                                 RETURN_MASK_ALL);
1383                                 /* FIXME-someday, should give breakpoint # */
1384               free_all_values ();
1385             }
1386           if (b->cond && value_is_zero)
1387             {
1388               bs->stop = 0;
1389             }
1390           else if (b->ignore_count > 0)
1391             {
1392               b->ignore_count--;
1393               bs->stop = 0;
1394             }
1395           else
1396             {
1397               /* We will stop here */
1398               if (b->disposition == disable)
1399                 b->enable = disabled;
1400               bs->commands = b->commands;
1401               if (b->silent)
1402                 bs->print = 0;
1403               if (bs->commands && STREQ ("silent", bs->commands->line))
1404                 {
1405                   bs->commands = bs->commands->next;
1406                   bs->print = 0;
1407                 }
1408             }
1409         }
1410       /* Print nothing for this entry if we dont stop or if we dont print.  */
1411       if (bs->stop == 0 || bs->print == 0)
1412         bs->print_it = print_it_noop;
1413     }
1414
1415   bs->next = NULL;              /* Terminate the chain */
1416   bs = root_bs->next;           /* Re-grab the head of the chain */
1417 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1418   if (bs)
1419     {
1420       if (real_breakpoint)
1421         {
1422           *pc = bp_addr;
1423 #if defined (SHIFT_INST_REGS)
1424           SHIFT_INST_REGS();
1425 #else /* No SHIFT_INST_REGS.  */
1426           write_pc (bp_addr);
1427 #endif /* No SHIFT_INST_REGS.  */
1428         }
1429     }
1430 #endif /* DECR_PC_AFTER_BREAK != 0.  */
1431
1432   /* The value of a hardware watchpoint hasn't changed, but the
1433      intermediate memory locations we are watching may have.  */
1434   if (bs && ! bs->stop &&
1435       (bs->breakpoint_at->type == bp_hardware_watchpoint ||
1436        bs->breakpoint_at->type == bp_read_watchpoint ||
1437        bs->breakpoint_at->type == bp_access_watchpoint))
1438     {
1439       remove_breakpoints ();
1440       insert_breakpoints ();
1441     }
1442   return bs;
1443 }
1444 \f
1445 /* Tell what to do about this bpstat.  */
1446 struct bpstat_what
1447 bpstat_what (bs)
1448      bpstat bs;
1449 {
1450   /* Classify each bpstat as one of the following.  */
1451   enum class {
1452     /* This bpstat element has no effect on the main_action.  */
1453     no_effect = 0,
1454
1455     /* There was a watchpoint, stop but don't print.  */
1456     wp_silent,
1457
1458     /* There was a watchpoint, stop and print.  */
1459     wp_noisy,
1460
1461     /* There was a breakpoint but we're not stopping.  */
1462     bp_nostop,
1463
1464     /* There was a breakpoint, stop but don't print.  */
1465     bp_silent,
1466
1467     /* There was a breakpoint, stop and print.  */
1468     bp_noisy,
1469
1470     /* We hit the longjmp breakpoint.  */
1471     long_jump,
1472
1473     /* We hit the longjmp_resume breakpoint.  */
1474     long_resume,
1475
1476     /* We hit the step_resume breakpoint.  */
1477     step_resume,
1478
1479     /* We hit the through_sigtramp breakpoint.  */
1480     through_sig,
1481
1482     /* We hit the shared library event breakpoint.  */
1483     shlib_event,
1484
1485     /* This is just used to count how many enums there are.  */
1486     class_last
1487     };
1488
1489   /* Here is the table which drives this routine.  So that we can
1490      format it pretty, we define some abbreviations for the
1491      enum bpstat_what codes.  */
1492 #define kc BPSTAT_WHAT_KEEP_CHECKING
1493 #define ss BPSTAT_WHAT_STOP_SILENT
1494 #define sn BPSTAT_WHAT_STOP_NOISY
1495 #define sgl BPSTAT_WHAT_SINGLE
1496 #define slr BPSTAT_WHAT_SET_LONGJMP_RESUME
1497 #define clr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
1498 #define clrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
1499 #define sr BPSTAT_WHAT_STEP_RESUME
1500 #define ts BPSTAT_WHAT_THROUGH_SIGTRAMP
1501 #define shl BPSTAT_WHAT_CHECK_SHLIBS
1502
1503 /* "Can't happen."  Might want to print an error message.
1504    abort() is not out of the question, but chances are GDB is just
1505    a bit confused, not unusable.  */
1506 #define err BPSTAT_WHAT_STOP_NOISY
1507
1508   /* Given an old action and a class, come up with a new action.  */
1509   /* One interesting property of this table is that wp_silent is the same
1510      as bp_silent and wp_noisy is the same as bp_noisy.  That is because
1511      after stopping, the check for whether to step over a breakpoint
1512      (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
1513      reference to how we stopped.  We retain separate wp_silent and bp_silent
1514      codes in case we want to change that someday.  */
1515
1516   /* step_resume entries: a step resume breakpoint overrides another
1517      breakpoint of signal handling (see comment in wait_for_inferior
1518      at first IN_SIGTRAMP where we set the step_resume breakpoint).  */
1519   /* We handle the through_sigtramp_breakpoint the same way; having both
1520      one of those and a step_resume_breakpoint is probably very rare (?).  */
1521
1522   static const enum bpstat_what_main_action
1523     table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
1524       {
1525         /*                              old action */
1526         /*       kc   ss   sn   sgl   slr  clr   clrs  sr   ts  shl
1527          */
1528 /*no_effect*/   {kc,  ss,  sn,  sgl,  slr, clr,  clrs, sr,  ts, shl},
1529 /*wp_silent*/   {ss,  ss,  sn,  ss,   ss,  ss,   ss,   sr,  ts, shl},
1530 /*wp_noisy*/    {sn,  sn,  sn,  sn,   sn,  sn,   sn,   sr,  ts, shl},
1531 /*bp_nostop*/   {sgl, ss,  sn,  sgl,  slr, clrs, clrs, sr,  ts, shl},
1532 /*bp_silent*/   {ss,  ss,  sn,  ss,   ss,  ss,   ss,   sr,  ts, shl},
1533 /*bp_noisy*/    {sn,  sn,  sn,  sn,   sn,  sn,   sn,   sr,  ts, shl},
1534 /*long_jump*/   {slr, ss,  sn,  slr,  err, err,  err,  sr,  ts, shl},
1535 /*long_resume*/ {clr, ss,  sn,  clrs, err, err,  err,  sr,  ts, shl},
1536 /*step_resume*/ {sr,  sr,  sr,  sr,   sr,  sr,   sr,   sr,  ts, shl},
1537 /*through_sig*/ {ts,  ts,  ts,  ts,   ts,  ts,   ts,   ts,  ts, shl},
1538 /*shlib*/       {shl, shl, shl, shl,  shl, shl,  shl,  shl, ts, shl}
1539               };
1540 #undef kc
1541 #undef ss
1542 #undef sn
1543 #undef sgl
1544 #undef slr
1545 #undef clr
1546 #undef clrs
1547 #undef err
1548 #undef sr
1549 #undef ts
1550 #undef shl
1551   enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
1552   struct bpstat_what retval;
1553
1554   retval.call_dummy = 0;
1555   for (; bs != NULL; bs = bs->next)
1556     {
1557       enum class bs_class = no_effect;
1558       if (bs->breakpoint_at == NULL)
1559         /* I suspect this can happen if it was a momentary breakpoint
1560            which has since been deleted.  */
1561         continue;
1562       switch (bs->breakpoint_at->type)
1563         {
1564         case bp_breakpoint:
1565         case bp_hardware_breakpoint:
1566         case bp_until:
1567         case bp_finish:
1568           if (bs->stop)
1569             {
1570               if (bs->print)
1571                 bs_class = bp_noisy;
1572               else
1573                 bs_class = bp_silent;
1574             }
1575           else
1576             bs_class = bp_nostop;
1577           break;
1578         case bp_watchpoint:
1579         case bp_hardware_watchpoint:
1580         case bp_read_watchpoint:
1581         case bp_access_watchpoint:
1582           if (bs->stop)
1583             {
1584               if (bs->print)
1585                 bs_class = wp_noisy;
1586               else
1587                 bs_class = wp_silent;
1588             }
1589           else
1590             /* There was a watchpoint, but we're not stopping.  This requires
1591                no further action.  */
1592             bs_class = no_effect;
1593           break;
1594         case bp_longjmp:
1595           bs_class = long_jump;
1596           break;
1597         case bp_longjmp_resume:
1598           bs_class = long_resume;
1599           break;
1600         case bp_step_resume:
1601           if (bs->stop)
1602             {
1603               bs_class = step_resume;
1604             }
1605           else
1606             /* It is for the wrong frame.  */
1607             bs_class = bp_nostop;
1608           break;
1609         case bp_through_sigtramp:
1610           bs_class = through_sig;
1611           break;
1612         case bp_watchpoint_scope:
1613           bs_class = bp_nostop;
1614           break;
1615         case bp_shlib_event:
1616           bs_class = shlib_event;
1617           break;
1618         case bp_call_dummy:
1619           /* Make sure the action is stop (silent or noisy), so infrun.c
1620              pops the dummy frame.  */
1621           bs_class = bp_silent;
1622           retval.call_dummy = 1;
1623           break;
1624         }
1625       current_action = table[(int)bs_class][(int)current_action];
1626     }
1627   retval.main_action = current_action;
1628   return retval;
1629 }
1630
1631 /* Nonzero if we should step constantly (e.g. watchpoints on machines
1632    without hardware support).  This isn't related to a specific bpstat,
1633    just to things like whether watchpoints are set.  */
1634
1635 int 
1636 bpstat_should_step ()
1637 {
1638   struct breakpoint *b;
1639   ALL_BREAKPOINTS (b)
1640     if (b->enable == enabled && b->type == bp_watchpoint)
1641       return 1;
1642   return 0;
1643 }
1644 \f
1645 /* Print information on breakpoint number BNUM, or -1 if all.
1646    If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
1647    is nonzero, process only watchpoints.  */
1648
1649 static void
1650 breakpoint_1 (bnum, allflag)
1651      int bnum;
1652      int allflag;
1653 {
1654   register struct breakpoint *b;
1655   register struct command_line *l;
1656   register struct symbol *sym;
1657   CORE_ADDR last_addr = (CORE_ADDR)-1;
1658   int found_a_breakpoint = 0;
1659   static char *bptypes[] = {"breakpoint", "hw breakpoint",
1660                               "until", "finish", "watchpoint",
1661                               "hw watchpoint", "read watchpoint",
1662                               "acc watchpoint", "longjmp",
1663                               "longjmp resume", "step resume",
1664                               "sigtramp",
1665                               "watchpoint scope", "call dummy",
1666                               "shlib events" };
1667   static char *bpdisps[] = {"del", "dstp", "dis", "keep"};
1668   static char bpenables[] = "ny";
1669   char wrap_indent[80];
1670
1671   ALL_BREAKPOINTS (b)
1672     if (bnum == -1
1673         || bnum == b->number)
1674       {
1675 /*  We only print out user settable breakpoints unless the allflag is set. */
1676         if (!allflag
1677             && b->type != bp_breakpoint
1678             && b->type != bp_hardware_breakpoint
1679             && b->type != bp_watchpoint
1680             && b->type != bp_read_watchpoint
1681             && b->type != bp_access_watchpoint
1682             && b->type != bp_hardware_watchpoint)
1683           continue;
1684
1685         if (!found_a_breakpoint++)
1686           {
1687             annotate_breakpoints_headers ();
1688   
1689             annotate_field (0);
1690             printf_filtered ("Num ");
1691             annotate_field (1);
1692             printf_filtered ("Type           ");
1693             annotate_field (2);
1694             printf_filtered ("Disp ");
1695             annotate_field (3);
1696             printf_filtered ("Enb ");
1697             if (addressprint)
1698               {
1699                 annotate_field (4);
1700                 printf_filtered ("Address    ");
1701               }
1702             annotate_field (5);
1703             printf_filtered ("What\n");
1704   
1705             annotate_breakpoints_table ();
1706           }
1707   
1708         annotate_record ();
1709         annotate_field (0);
1710         printf_filtered ("%-3d ", b->number);
1711         annotate_field (1);
1712         printf_filtered ("%-14s ", bptypes[(int)b->type]);
1713         annotate_field (2);
1714         printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
1715         annotate_field (3);
1716         printf_filtered ("%-3c ", bpenables[(int)b->enable]);
1717
1718         strcpy (wrap_indent, "                           ");
1719         if (addressprint)
1720           strcat (wrap_indent, "           ");
1721         switch (b->type)
1722           {
1723           case bp_watchpoint:
1724           case bp_hardware_watchpoint:
1725           case bp_read_watchpoint:
1726           case bp_access_watchpoint:
1727             /* Field 4, the address, is omitted (which makes the columns
1728                not line up too nicely with the headers, but the effect
1729                is relatively readable).  */
1730             annotate_field (5);
1731             print_expression (b->exp, gdb_stdout);
1732             break;
1733
1734           case bp_breakpoint:
1735           case bp_hardware_breakpoint:
1736           case bp_until:
1737           case bp_finish:
1738           case bp_longjmp:
1739           case bp_longjmp_resume:
1740           case bp_step_resume:
1741           case bp_through_sigtramp:
1742           case bp_watchpoint_scope:
1743           case bp_call_dummy:
1744           case bp_shlib_event:
1745             if (addressprint)
1746               {
1747                 annotate_field (4);
1748                 /* FIXME-32x64: need a print_address_numeric with
1749                    field width */
1750                 printf_filtered
1751                   ("%s ",
1752                    local_hex_string_custom
1753                    ((unsigned long) b->address, "08l"));
1754               }
1755
1756             annotate_field (5);
1757
1758             last_addr = b->address;
1759             if (b->source_file)
1760               {
1761                 sym = find_pc_function (b->address);
1762                 if (sym)
1763                   {
1764                     fputs_filtered ("in ", gdb_stdout);
1765                     fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
1766                     wrap_here (wrap_indent);
1767                     fputs_filtered (" at ", gdb_stdout);
1768                   }
1769                 fputs_filtered (b->source_file, gdb_stdout);
1770                 printf_filtered (":%d", b->line_number);
1771               }
1772             else
1773               print_address_symbolic (b->address, gdb_stdout, demangle, " ");
1774             break;
1775           }
1776
1777         printf_filtered ("\n");
1778
1779         if (b->frame)
1780           {
1781             annotate_field (6);
1782
1783             printf_filtered ("\tstop only in stack frame at ");
1784             print_address_numeric (b->frame, 1, gdb_stdout);
1785             printf_filtered ("\n");
1786           }
1787
1788         if (b->cond)
1789           {
1790             annotate_field (7);
1791
1792             printf_filtered ("\tstop only if ");
1793             print_expression (b->cond, gdb_stdout);
1794             printf_filtered ("\n");
1795           }
1796
1797         if (show_breakpoint_hit_counts && b->hit_count)
1798           {
1799             /* FIXME should make an annotation for this */
1800
1801             printf_filtered ("\tbreakpoint already hit %d time%s\n",
1802                              b->hit_count, (b->hit_count == 1 ? "" : "s"));
1803           }
1804
1805         if (b->ignore_count)
1806           {
1807             annotate_field (8);
1808
1809             printf_filtered ("\tignore next %d hits\n", b->ignore_count);
1810           }
1811
1812         if ((l = b->commands))
1813           {
1814             annotate_field (9);
1815
1816             while (l)
1817               {
1818                 print_command_line (l, 4);
1819                 l = l->next;
1820               }
1821           }
1822       }
1823
1824   if (!found_a_breakpoint)
1825     {
1826       if (bnum == -1)
1827         printf_filtered ("No breakpoints or watchpoints.\n");
1828       else
1829         printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
1830     }
1831   else
1832     /* Compare against (CORE_ADDR)-1 in case some compiler decides
1833        that a comparison of an unsigned with -1 is always false.  */
1834     if (last_addr != (CORE_ADDR)-1)
1835       set_next_address (last_addr);
1836
1837   annotate_breakpoints_table_end ();
1838 }
1839
1840 /* ARGSUSED */
1841 static void
1842 breakpoints_info (bnum_exp, from_tty)
1843      char *bnum_exp;
1844      int from_tty;
1845 {
1846   int bnum = -1;
1847
1848   if (bnum_exp)
1849     bnum = parse_and_eval_address (bnum_exp);
1850
1851   breakpoint_1 (bnum, 0);
1852 }
1853
1854 #if MAINTENANCE_CMDS
1855
1856 /* ARGSUSED */
1857 static void
1858 maintenance_info_breakpoints (bnum_exp, from_tty)
1859      char *bnum_exp;
1860      int from_tty;
1861 {
1862   int bnum = -1;
1863
1864   if (bnum_exp)
1865     bnum = parse_and_eval_address (bnum_exp);
1866
1867   breakpoint_1 (bnum, 1);
1868 }
1869
1870 #endif
1871
1872 /* Print a message describing any breakpoints set at PC.  */
1873
1874 static void
1875 describe_other_breakpoints (pc)
1876      register CORE_ADDR pc;
1877 {
1878   register int others = 0;
1879   register struct breakpoint *b;
1880
1881   ALL_BREAKPOINTS (b)
1882     if (b->address == pc)
1883       others++;
1884   if (others > 0)
1885     {
1886       printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
1887       ALL_BREAKPOINTS (b)
1888         if (b->address == pc)
1889           {
1890             others--;
1891             printf_filtered
1892               ("%d%s%s ",
1893                b->number,
1894                ((b->enable == disabled || b->enable == shlib_disabled)
1895                 ? " (disabled)" : ""),
1896                (others > 1) ? "," : ((others == 1) ? " and" : ""));
1897           }
1898       printf_filtered ("also set at pc ");
1899       print_address_numeric (pc, 1, gdb_stdout);
1900       printf_filtered (".\n");
1901     }
1902 }
1903 \f
1904 /* Set the default place to put a breakpoint
1905    for the `break' command with no arguments.  */
1906
1907 void
1908 set_default_breakpoint (valid, addr, symtab, line)
1909      int valid;
1910      CORE_ADDR addr;
1911      struct symtab *symtab;
1912      int line;
1913 {
1914   default_breakpoint_valid = valid;
1915   default_breakpoint_address = addr;
1916   default_breakpoint_symtab = symtab;
1917   default_breakpoint_line = line;
1918 }
1919
1920 /* Rescan breakpoints at address ADDRESS,
1921    marking the first one as "first" and any others as "duplicates".
1922    This is so that the bpt instruction is only inserted once.  */
1923
1924 static void
1925 check_duplicates (address)
1926      CORE_ADDR address;
1927 {
1928   register struct breakpoint *b;
1929   register int count = 0;
1930
1931   if (address == 0)             /* Watchpoints are uninteresting */
1932     return;
1933
1934   ALL_BREAKPOINTS (b)
1935     if (b->enable != disabled
1936         && b->enable != shlib_disabled
1937         && b->address == address)
1938       {
1939         count++;
1940         b->duplicate = count > 1;
1941       }
1942 }
1943
1944 /* Low level routine to set a breakpoint.
1945    Takes as args the three things that every breakpoint must have.
1946    Returns the breakpoint object so caller can set other things.
1947    Does not set the breakpoint number!
1948    Does not print anything.
1949
1950    ==> This routine should not be called if there is a chance of later
1951    error(); otherwise it leaves a bogus breakpoint on the chain.  Validate
1952    your arguments BEFORE calling this routine!  */
1953
1954 static struct breakpoint *
1955 set_raw_breakpoint (sal)
1956      struct symtab_and_line sal;
1957 {
1958   register struct breakpoint *b, *b1;
1959
1960   b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
1961   memset (b, 0, sizeof (*b));
1962   b->address = sal.pc;
1963   if (sal.symtab == NULL)
1964     b->source_file = NULL;
1965   else
1966     b->source_file = savestring (sal.symtab->filename,
1967                                  strlen (sal.symtab->filename));
1968   b->language = current_language->la_language;
1969   b->input_radix = input_radix;
1970   b->thread = -1;
1971   b->line_number = sal.line;
1972   b->enable = enabled;
1973   b->next = 0;
1974   b->silent = 0;
1975   b->ignore_count = 0;
1976   b->commands = NULL;
1977   b->frame = 0;
1978
1979   /* Add this breakpoint to the end of the chain
1980      so that a list of breakpoints will come out in order
1981      of increasing numbers.  */
1982
1983   b1 = breakpoint_chain;
1984   if (b1 == 0)
1985     breakpoint_chain = b;
1986   else
1987     {
1988       while (b1->next)
1989         b1 = b1->next;
1990       b1->next = b;
1991     }
1992
1993   check_duplicates (sal.pc);
1994   breakpoints_changed ();
1995
1996   return b;
1997 }
1998
1999 static int internal_breakpoint_number = -1;
2000
2001 #ifdef GET_LONGJMP_TARGET
2002
2003 static void
2004 create_longjmp_breakpoint (func_name)
2005      char *func_name;
2006 {
2007   struct symtab_and_line sal;
2008   struct breakpoint *b;
2009
2010   if (func_name != NULL)
2011     {
2012       struct minimal_symbol *m;
2013
2014       m = lookup_minimal_symbol_text (func_name, NULL, (struct objfile *)NULL);
2015       if (m)
2016         sal.pc = SYMBOL_VALUE_ADDRESS (m);
2017       else
2018         return;
2019     }
2020   else
2021     sal.pc = 0;
2022
2023   sal.symtab = NULL;
2024   sal.line = 0;
2025
2026   b = set_raw_breakpoint (sal);
2027   if (!b) return;
2028
2029   b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
2030   b->disposition = donttouch;
2031   b->enable = disabled;
2032   b->silent = 1;
2033   if (func_name)
2034     b->addr_string = strsave(func_name);
2035   b->number = internal_breakpoint_number--;
2036 }
2037
2038 #endif  /* #ifdef GET_LONGJMP_TARGET */
2039
2040 /* Call this routine when stepping and nexting to enable a breakpoint if we do
2041    a longjmp().  When we hit that breakpoint, call
2042    set_longjmp_resume_breakpoint() to figure out where we are going. */
2043
2044 void
2045 enable_longjmp_breakpoint()
2046 {
2047   register struct breakpoint *b;
2048
2049   ALL_BREAKPOINTS (b)
2050     if (b->type == bp_longjmp)
2051       {
2052         b->enable = enabled;
2053         check_duplicates (b->address);
2054       }
2055 }
2056
2057 void
2058 disable_longjmp_breakpoint()
2059 {
2060   register struct breakpoint *b;
2061
2062   ALL_BREAKPOINTS (b)
2063     if (   b->type == bp_longjmp
2064         || b->type == bp_longjmp_resume)
2065       {
2066         b->enable = disabled;
2067         check_duplicates (b->address);
2068       }
2069 }
2070
2071 #ifdef SOLIB_ADD
2072 void
2073 remove_solib_event_breakpoints ()
2074 {
2075   register struct breakpoint *b, *temp;
2076
2077   ALL_BREAKPOINTS_SAFE (b, temp)
2078     if (b->type == bp_shlib_event)
2079       delete_breakpoint (b);
2080 }
2081
2082 void
2083 create_solib_event_breakpoint (address)
2084      CORE_ADDR address;
2085 {
2086   struct breakpoint *b;
2087   struct symtab_and_line sal;
2088
2089   sal.pc = address;
2090   sal.symtab = NULL;
2091   sal.line = 0;
2092   b = set_raw_breakpoint (sal);
2093   b->number = internal_breakpoint_number--;
2094   b->disposition = donttouch;
2095   b->type = bp_shlib_event;
2096 }
2097
2098 /* Try to reenable any breakpoints in shared libraries.  */
2099 void
2100 re_enable_breakpoints_in_shlibs ()
2101 {
2102   struct breakpoint *b;
2103
2104   ALL_BREAKPOINTS (b)
2105     if (b->enable == shlib_disabled)
2106       {
2107         char buf[1];
2108
2109         /* Do not reenable the breakpoint if the shared library
2110            is still not mapped in.  */
2111         if (target_read_memory (b->address, buf, 1) == 0)
2112           b->enable = enabled;
2113       }
2114 }
2115
2116 #endif
2117
2118 int
2119 hw_breakpoint_used_count()
2120 {
2121   register struct breakpoint *b;
2122   int i = 0;
2123
2124   ALL_BREAKPOINTS (b)
2125     {
2126       if (b->type == bp_hardware_breakpoint && b->enable == enabled)
2127         i++;
2128     }
2129
2130   return i;
2131 }
2132
2133 int
2134 hw_watchpoint_used_count(type, other_type_used)
2135     enum bptype type;
2136     int *other_type_used;
2137 {
2138   register struct breakpoint *b;
2139   int i = 0;
2140
2141   *other_type_used = 0;
2142   ALL_BREAKPOINTS (b)
2143     {
2144       if (b->enable == enabled)
2145         {
2146           if (b->type == type) i++;
2147           else if ((b->type == bp_hardware_watchpoint ||
2148                b->type == bp_read_watchpoint ||
2149                b->type == bp_access_watchpoint)
2150                && b->enable == enabled)
2151             *other_type_used = 1;
2152         }
2153     }
2154   return i;
2155 }
2156
2157 /* Call this after hitting the longjmp() breakpoint.  Use this to set a new
2158    breakpoint at the target of the jmp_buf.
2159
2160    FIXME - This ought to be done by setting a temporary breakpoint that gets
2161    deleted automatically...
2162 */
2163
2164 void
2165 set_longjmp_resume_breakpoint(pc, frame)
2166      CORE_ADDR pc;
2167      struct frame_info *frame;
2168 {
2169   register struct breakpoint *b;
2170
2171   ALL_BREAKPOINTS (b)
2172     if (b->type == bp_longjmp_resume)
2173       {
2174         b->address = pc;
2175         b->enable = enabled;
2176         if (frame != NULL)
2177           b->frame = frame->frame;
2178         else
2179           b->frame = 0;
2180         check_duplicates (b->address);
2181         return;
2182       }
2183 }
2184
2185 /* Set a breakpoint that will evaporate an end of command
2186    at address specified by SAL.
2187    Restrict it to frame FRAME if FRAME is nonzero.  */
2188
2189 struct breakpoint *
2190 set_momentary_breakpoint (sal, frame, type)
2191      struct symtab_and_line sal;
2192      struct frame_info *frame;
2193      enum bptype type;
2194 {
2195   register struct breakpoint *b;
2196   b = set_raw_breakpoint (sal);
2197   b->type = type;
2198   b->enable = enabled;
2199   b->disposition = donttouch;
2200   b->frame = (frame ? frame->frame : 0);
2201
2202   /* If we're debugging a multi-threaded program, then we
2203      want momentary breakpoints to be active in only a 
2204      single thread of control.  */
2205   if (in_thread_list (inferior_pid))
2206     b->thread = pid_to_thread_id (inferior_pid);
2207
2208   return b;
2209 }
2210
2211 \f
2212 /* Tell the user we have just set a breakpoint B.  */
2213
2214 static void
2215 mention (b)
2216      struct breakpoint *b;
2217 {
2218   int say_where = 0;
2219
2220   /* FIXME: This is misplaced; mention() is called by things (like hitting a
2221      watchpoint) other than breakpoint creation.  It should be possible to
2222      clean this up and at the same time replace the random calls to
2223      breakpoint_changed with this hook, as has already been done for
2224      delete_breakpoint_hook and so on.  */
2225   if (create_breakpoint_hook)
2226     create_breakpoint_hook (b);
2227
2228   switch (b->type)
2229     {
2230     case bp_watchpoint:
2231       printf_filtered ("Watchpoint %d: ", b->number);
2232       print_expression (b->exp, gdb_stdout);
2233       break;
2234     case bp_hardware_watchpoint:
2235       printf_filtered ("Hardware watchpoint %d: ", b->number);
2236       print_expression (b->exp, gdb_stdout);
2237       break;
2238     case bp_read_watchpoint:
2239       printf_filtered ("Hardware read watchpoint %d: ", b->number);
2240       print_expression (b->exp, gdb_stdout);
2241       break;
2242     case bp_access_watchpoint:
2243       printf_filtered ("Hardware access(read/write) watchpoint %d: ",b->number);
2244       print_expression (b->exp, gdb_stdout);
2245       break;
2246     case bp_breakpoint:
2247       printf_filtered ("Breakpoint %d", b->number);
2248       say_where = 1;
2249       break;
2250     case bp_hardware_breakpoint:
2251       printf_filtered ("Hardware assisted breakpoint %d", b->number);
2252       say_where = 1;
2253       break;
2254     case bp_until:
2255     case bp_finish:
2256     case bp_longjmp:
2257     case bp_longjmp_resume:
2258     case bp_step_resume:
2259     case bp_through_sigtramp:
2260     case bp_call_dummy:
2261     case bp_watchpoint_scope:
2262     case bp_shlib_event:
2263       break;
2264     }
2265   if (say_where)
2266     {
2267       if (addressprint || b->source_file == NULL)
2268         {
2269           printf_filtered (" at ");
2270           print_address_numeric (b->address, 1, gdb_stdout);
2271         }
2272       if (b->source_file)
2273         printf_filtered (": file %s, line %d.",
2274                          b->source_file, b->line_number);
2275     }
2276   printf_filtered ("\n");
2277 }
2278
2279 \f
2280 /* Set a breakpoint according to ARG (function, linenum or *address)
2281    flag: first bit  : 0 non-temporary, 1 temporary.
2282          second bit : 0 normal breakpoint, 1 hardware breakpoint. */
2283
2284 static void
2285 break_command_1 (arg, flag, from_tty)
2286      char *arg;
2287      int flag, from_tty;
2288 {
2289   int tempflag, hardwareflag;
2290   struct symtabs_and_lines sals;
2291   struct symtab_and_line sal;
2292   register struct expression *cond = 0;
2293   register struct breakpoint *b;
2294
2295   /* Pointers in arg to the start, and one past the end, of the condition.  */
2296   char *cond_start = NULL;
2297   char *cond_end = NULL;
2298   /* Pointers in arg to the start, and one past the end,
2299      of the address part.  */
2300   char *addr_start = NULL;
2301   char *addr_end = NULL;
2302   struct cleanup *old_chain;
2303   struct cleanup *canonical_strings_chain = NULL;
2304   char **canonical = (char **)NULL;
2305   int i;
2306   int thread;
2307
2308   hardwareflag = flag & BP_HARDWAREFLAG;
2309   tempflag = flag & BP_TEMPFLAG;
2310
2311   sals.sals = NULL;
2312   sals.nelts = 0;
2313
2314   sal.line = sal.pc = sal.end = 0;
2315   sal.symtab = 0;
2316
2317   /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
2318
2319   if (!arg || (arg[0] == 'i' && arg[1] == 'f' 
2320                && (arg[2] == ' ' || arg[2] == '\t')))
2321     {
2322       if (default_breakpoint_valid)
2323         {
2324           sals.sals = (struct symtab_and_line *) 
2325             xmalloc (sizeof (struct symtab_and_line));
2326           sal.pc = default_breakpoint_address;
2327           sal.line = default_breakpoint_line;
2328           sal.symtab = default_breakpoint_symtab;
2329           sals.sals[0] = sal;
2330           sals.nelts = 1;
2331         }
2332       else
2333         error ("No default breakpoint address now.");
2334     }
2335   else
2336     {
2337       addr_start = arg;
2338
2339       /* Force almost all breakpoints to be in terms of the
2340          current_source_symtab (which is decode_line_1's default).  This
2341          should produce the results we want almost all of the time while
2342          leaving default_breakpoint_* alone.  */
2343       if (default_breakpoint_valid
2344           && (!current_source_symtab
2345               || (arg && (*arg == '+' || *arg == '-'))))
2346         sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
2347                               default_breakpoint_line, &canonical);
2348       else
2349         sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, &canonical);
2350
2351       addr_end = arg;
2352     }
2353   
2354   if (! sals.nelts) 
2355     return;
2356
2357   /* Make sure that all storage allocated in decode_line_1 gets freed in case
2358      the following `for' loop errors out.  */
2359   old_chain = make_cleanup (free, sals.sals);
2360   if (canonical != (char **)NULL)
2361     {
2362       make_cleanup (free, canonical);
2363       canonical_strings_chain = make_cleanup (null_cleanup, 0);
2364       for (i = 0; i < sals.nelts; i++)
2365         {
2366           if (canonical[i] != NULL)
2367             make_cleanup (free, canonical[i]);
2368         }
2369     }
2370
2371   thread = -1;                  /* No specific thread yet */
2372
2373   /* Resolve all line numbers to PC's, and verify that conditions
2374      can be parsed, before setting any breakpoints.  */
2375   for (i = 0; i < sals.nelts; i++)
2376     {
2377       char *tok, *end_tok;
2378       int toklen;
2379
2380       resolve_sal_pc (&sals.sals[i]);
2381       
2382       tok = arg;
2383
2384       while (tok && *tok)
2385         {
2386           while (*tok == ' ' || *tok == '\t')
2387             tok++;
2388
2389           end_tok = tok;
2390
2391           while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
2392             end_tok++;
2393
2394           toklen = end_tok - tok;
2395
2396           if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
2397             {
2398               tok = cond_start = end_tok + 1;
2399               cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
2400               cond_end = tok;
2401             }
2402           else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
2403             {
2404               char *tmptok;
2405
2406               tok = end_tok + 1;
2407               tmptok = tok;
2408               thread = strtol (tok, &tok, 0);
2409               if (tok == tmptok)
2410                 error ("Junk after thread keyword.");
2411               if (!valid_thread_id (thread))
2412                 error ("Unknown thread %d\n", thread);
2413             }
2414           else
2415             error ("Junk at end of arguments.");
2416         }
2417     }
2418   if (hardwareflag)
2419     {
2420       int i, target_resources_ok;
2421
2422       i = hw_breakpoint_used_count ();  
2423       target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
2424                 bp_hardware_breakpoint, i + sals.nelts, 0);
2425       if (target_resources_ok == 0)
2426         error ("No hardware breakpoint support in the target.");
2427       else if (target_resources_ok < 0)
2428         error ("Hardware breakpoints used exceeds limit.");
2429     }
2430
2431   /* Remove the canonical strings from the cleanup, they are needed below.  */
2432   if (canonical != (char **)NULL)
2433     discard_cleanups (canonical_strings_chain);
2434
2435   /* Now set all the breakpoints.  */
2436   for (i = 0; i < sals.nelts; i++)
2437     {
2438       sal = sals.sals[i];
2439
2440       if (from_tty)
2441         describe_other_breakpoints (sal.pc);
2442
2443       b = set_raw_breakpoint (sal);
2444       set_breakpoint_count (breakpoint_count + 1);
2445       b->number = breakpoint_count;
2446       b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
2447       b->cond = cond;
2448       b->thread = thread;
2449
2450       /* If a canonical line spec is needed use that instead of the
2451          command string.  */
2452       if (canonical != (char **)NULL && canonical[i] != NULL)
2453         b->addr_string = canonical[i];
2454       else if (addr_start)
2455         b->addr_string = savestring (addr_start, addr_end - addr_start);
2456       if (cond_start)
2457         b->cond_string = savestring (cond_start, cond_end - cond_start);
2458                                      
2459       b->enable = enabled;
2460       b->disposition = tempflag ? del : donttouch;
2461
2462       mention (b);
2463     }
2464
2465   if (sals.nelts > 1)
2466     {
2467       printf_filtered ("Multiple breakpoints were set.\n");
2468       printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
2469     }
2470   do_cleanups (old_chain);
2471 }
2472
2473 /* Helper function for break_command_1 and disassemble_command.  */
2474
2475 void
2476 resolve_sal_pc (sal)
2477      struct symtab_and_line *sal;
2478 {
2479   CORE_ADDR pc;
2480
2481   if (sal->pc == 0 && sal->symtab != 0)
2482     {
2483       pc = find_line_pc (sal->symtab, sal->line);
2484       if (pc == 0)
2485         error ("No line %d in file \"%s\".",
2486                sal->line, sal->symtab->filename);
2487       sal->pc = pc;
2488     }
2489 }
2490
2491 void
2492 break_command (arg, from_tty)
2493      char *arg;
2494      int from_tty;
2495 {
2496   break_command_1 (arg, 0, from_tty);
2497 }
2498
2499 static void
2500 tbreak_command (arg, from_tty)
2501      char *arg;
2502      int from_tty;
2503 {
2504   break_command_1 (arg, BP_TEMPFLAG, from_tty);
2505 }
2506
2507 static void
2508 hbreak_command (arg, from_tty)
2509      char *arg;
2510      int from_tty;
2511 {
2512   break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
2513 }
2514
2515 static void
2516 thbreak_command (arg, from_tty)
2517      char *arg;
2518      int from_tty;
2519 {
2520   break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
2521 }
2522
2523 /* ARGSUSED */
2524 /* accessflag:  0: watch write, 1: watch read, 2: watch access(read or write)
2525 */
2526 static void
2527 watch_command_1 (arg, accessflag, from_tty)
2528      char *arg;
2529      int accessflag;
2530      int from_tty;
2531 {
2532   struct breakpoint *b;
2533   struct symtab_and_line sal;
2534   struct expression *exp;
2535   struct block *exp_valid_block;
2536   struct value *val, *mark;
2537   struct frame_info *frame, *prev_frame;
2538   char *exp_start = NULL;
2539   char *exp_end = NULL;
2540   char *tok, *end_tok;
2541   int toklen;
2542   char *cond_start = NULL;
2543   char *cond_end = NULL;
2544   struct expression *cond = NULL;
2545   int i, other_type_used, target_resources_ok;
2546   enum bptype bp_type;
2547   int mem_cnt = 0;
2548
2549   sal.pc = 0;
2550   sal.symtab = NULL;
2551   sal.line = 0;
2552   
2553   /* Parse arguments.  */
2554   innermost_block = NULL;
2555   exp_start = arg;
2556   exp = parse_exp_1 (&arg, 0, 0);
2557   exp_end = arg;
2558   exp_valid_block = innermost_block;
2559   mark = value_mark ();
2560   val = evaluate_expression (exp);
2561   release_value (val);
2562   if (VALUE_LAZY (val))
2563     value_fetch_lazy (val);
2564
2565   tok = arg;
2566   while (*tok == ' ' || *tok == '\t')
2567     tok++;
2568   end_tok = tok;
2569
2570   while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
2571     end_tok++;
2572
2573   toklen = end_tok - tok;
2574   if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
2575     {
2576       tok = cond_start = end_tok + 1;
2577       cond = parse_exp_1 (&tok, 0, 0);
2578       cond_end = tok;
2579     }
2580   if (*tok)
2581     error("Junk at end of command.");
2582
2583   if (accessflag == 1) bp_type = bp_read_watchpoint;
2584   else if (accessflag == 2) bp_type = bp_access_watchpoint;
2585   else bp_type = bp_hardware_watchpoint;
2586
2587   mem_cnt = can_use_hardware_watchpoint (val);
2588   if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
2589     error ("Expression cannot be implemented with read/access watchpoint.");
2590   if (mem_cnt != 0) { 
2591     i = hw_watchpoint_used_count (bp_type, &other_type_used);
2592     target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
2593                 bp_type, i + mem_cnt, other_type_used);
2594     if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
2595       error ("Target does not have this type of hardware watchpoint support.");
2596     if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
2597       error ("Target resources have been allocated for other types of watchpoints.");
2598   }
2599   
2600   /* Now set up the breakpoint.  */
2601   b = set_raw_breakpoint (sal);
2602   set_breakpoint_count (breakpoint_count + 1);
2603   b->number = breakpoint_count;
2604   b->disposition = donttouch;
2605   b->exp = exp;
2606   b->exp_valid_block = exp_valid_block;
2607   b->exp_string = savestring (exp_start, exp_end - exp_start);
2608   b->val = val;
2609   b->cond = cond;
2610   if (cond_start)
2611     b->cond_string = savestring (cond_start, cond_end - cond_start);
2612   else
2613     b->cond_string = 0;
2614          
2615   frame = block_innermost_frame (exp_valid_block);
2616   if (frame)
2617     {
2618       prev_frame = get_prev_frame (frame);
2619       b->watchpoint_frame = frame->frame;
2620     }
2621   else
2622     b->watchpoint_frame = (CORE_ADDR)0;
2623
2624   if (mem_cnt && target_resources_ok > 0)
2625     b->type = bp_type;
2626   else
2627     b->type = bp_watchpoint;
2628
2629   /* If the expression is "local", then set up a "watchpoint scope"
2630      breakpoint at the point where we've left the scope of the watchpoint
2631      expression.  */
2632   if (innermost_block)
2633     {
2634       struct breakpoint *scope_breakpoint;
2635       struct symtab_and_line scope_sal;
2636
2637       if (prev_frame)
2638         {
2639           scope_sal.pc = get_frame_pc (prev_frame);
2640           scope_sal.symtab = NULL;
2641           scope_sal.line = 0;
2642           
2643           scope_breakpoint = set_raw_breakpoint (scope_sal);
2644           set_breakpoint_count (breakpoint_count + 1);
2645           scope_breakpoint->number = breakpoint_count;
2646
2647           scope_breakpoint->type = bp_watchpoint_scope;
2648           scope_breakpoint->enable = enabled;
2649
2650           /* Automatically delete the breakpoint when it hits.  */
2651           scope_breakpoint->disposition = del;
2652
2653           /* Only break in the proper frame (help with recursion).  */
2654           scope_breakpoint->frame = prev_frame->frame;
2655
2656           /* Set the address at which we will stop.  */
2657           scope_breakpoint->address = get_frame_pc (prev_frame);
2658
2659           /* The scope breakpoint is related to the watchpoint.  We
2660              will need to act on them together.  */
2661           b->related_breakpoint = scope_breakpoint;
2662         }
2663     }
2664   value_free_to_mark (mark);
2665   mention (b);
2666 }
2667
2668 /* Return count of locations need to be watched and can be handled
2669    in hardware.  If the watchpoint can not be handled
2670    in hardware return zero.  */
2671
2672 static int
2673 can_use_hardware_watchpoint (v)
2674      struct value *v;
2675 {
2676   int found_memory_cnt = 0;
2677         
2678   /* Make sure all the intermediate values are in memory.  Also make sure
2679      we found at least one memory expression.  Guards against watch 0x12345,
2680      which is meaningless, but could cause errors if one tries to insert a 
2681      hardware watchpoint for the constant expression.  */
2682   for ( ; v; v = v->next)
2683     {
2684       if (v->lval == lval_memory)
2685         {
2686           if (TYPE_LENGTH (VALUE_TYPE (v)) <= REGISTER_SIZE)
2687             found_memory_cnt++;
2688         }
2689       else if (v->lval != not_lval && v->modifiable == 0)
2690         return 0;
2691     }
2692
2693   /* The expression itself looks suitable for using a hardware
2694      watchpoint, but give the target machine a chance to reject it.  */
2695   return found_memory_cnt;
2696 }
2697
2698 static void watch_command (arg, from_tty)
2699      char *arg;
2700      int from_tty;
2701 {
2702   watch_command_1 (arg, 0, from_tty);
2703 }
2704
2705 static void rwatch_command (arg, from_tty)
2706      char *arg;
2707      int from_tty;
2708 {
2709   watch_command_1 (arg, 1, from_tty);
2710 }
2711
2712 static void awatch_command (arg, from_tty)
2713      char *arg;
2714      int from_tty;
2715 {
2716   watch_command_1 (arg, 2, from_tty);
2717 }
2718
2719 \f
2720 /* Helper routine for the until_command routine in infcmd.c.  Here
2721    because it uses the mechanisms of breakpoints.  */
2722
2723 /* ARGSUSED */
2724 void
2725 until_break_command (arg, from_tty)
2726      char *arg;
2727      int from_tty;
2728 {
2729   struct symtabs_and_lines sals;
2730   struct symtab_and_line sal;
2731   struct frame_info *prev_frame = get_prev_frame (selected_frame);
2732   struct breakpoint *breakpoint;
2733   struct cleanup *old_chain;
2734
2735   clear_proceed_status ();
2736
2737   /* Set a breakpoint where the user wants it and at return from
2738      this function */
2739   
2740   if (default_breakpoint_valid)
2741     sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
2742                           default_breakpoint_line, (char ***)NULL);
2743   else
2744     sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, (char ***)NULL);
2745   
2746   if (sals.nelts != 1)
2747     error ("Couldn't get information on specified line.");
2748   
2749   sal = sals.sals[0];
2750   free ((PTR)sals.sals);                /* malloc'd, so freed */
2751   
2752   if (*arg)
2753     error ("Junk at end of arguments.");
2754   
2755   resolve_sal_pc (&sal);
2756   
2757   breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
2758   
2759   old_chain = make_cleanup(delete_breakpoint, breakpoint);
2760
2761   /* Keep within the current frame */
2762   
2763   if (prev_frame)
2764     {
2765       sal = find_pc_line (prev_frame->pc, 0);
2766       sal.pc = prev_frame->pc;
2767       breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
2768       make_cleanup(delete_breakpoint, breakpoint);
2769     }
2770   
2771   proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
2772   do_cleanups(old_chain);
2773 }
2774 \f
2775 #if 0
2776 /* These aren't used; I don't konw what they were for.  */
2777 /* Set a breakpoint at the catch clause for NAME.  */
2778 static int
2779 catch_breakpoint (name)
2780      char *name;
2781 {
2782 }
2783
2784 static int
2785 disable_catch_breakpoint ()
2786 {
2787 }
2788
2789 static int
2790 delete_catch_breakpoint ()
2791 {
2792 }
2793
2794 static int
2795 enable_catch_breakpoint ()
2796 {
2797 }
2798 #endif /* 0 */
2799
2800 struct sal_chain
2801 {
2802   struct sal_chain *next;
2803   struct symtab_and_line sal;
2804 };
2805
2806 #if 0
2807 /* This isn't used; I don't know what it was for.  */
2808 /* For each catch clause identified in ARGS, run FUNCTION
2809    with that clause as an argument.  */
2810 static struct symtabs_and_lines
2811 map_catch_names (args, function)
2812      char *args;
2813      int (*function)();
2814 {
2815   register char *p = args;
2816   register char *p1;
2817   struct symtabs_and_lines sals;
2818 #if 0
2819   struct sal_chain *sal_chain = 0;
2820 #endif
2821
2822   if (p == 0)
2823     error_no_arg ("one or more catch names");
2824
2825   sals.nelts = 0;
2826   sals.sals = NULL;
2827
2828   while (*p)
2829     {
2830       p1 = p;
2831       /* Don't swallow conditional part.  */
2832       if (p1[0] == 'i' && p1[1] == 'f'
2833           && (p1[2] == ' ' || p1[2] == '\t'))
2834         break;
2835
2836       if (isalpha (*p1))
2837         {
2838           p1++;
2839           while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
2840             p1++;
2841         }
2842
2843       if (*p1 && *p1 != ' ' && *p1 != '\t')
2844         error ("Arguments must be catch names.");
2845
2846       *p1 = 0;
2847 #if 0
2848       if (function (p))
2849         {
2850           struct sal_chain *next
2851             = (struct sal_chain *)alloca (sizeof (struct sal_chain));
2852           next->next = sal_chain;
2853           next->sal = get_catch_sal (p);
2854           sal_chain = next;
2855           goto win;
2856         }
2857 #endif
2858       printf_unfiltered ("No catch clause for exception %s.\n", p);
2859 #if 0
2860     win:
2861 #endif
2862       p = p1;
2863       while (*p == ' ' || *p == '\t') p++;
2864     }
2865 }
2866 #endif /* 0 */
2867
2868 /* This shares a lot of code with `print_frame_label_vars' from stack.c.  */
2869
2870 static struct symtabs_and_lines
2871 get_catch_sals (this_level_only)
2872      int this_level_only;
2873 {
2874   register struct blockvector *bl;
2875   register struct block *block;
2876   int index, have_default = 0;
2877   CORE_ADDR pc;
2878   struct symtabs_and_lines sals;
2879   struct sal_chain *sal_chain = 0;
2880   char *blocks_searched;
2881
2882   /* Not sure whether an error message is always the correct response,
2883      but it's better than a core dump.  */
2884   if (selected_frame == NULL)
2885     error ("No selected frame.");
2886   block = get_frame_block (selected_frame);
2887   pc = selected_frame->pc;
2888
2889   sals.nelts = 0;
2890   sals.sals = NULL;
2891
2892   if (block == 0)
2893     error ("No symbol table info available.\n");
2894
2895   bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
2896   blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2897   memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2898
2899   while (block != 0)
2900     {
2901       CORE_ADDR end = BLOCK_END (block) - 4;
2902       int last_index;
2903
2904       if (bl != blockvector_for_pc (end, &index))
2905         error ("blockvector blotch");
2906       if (BLOCKVECTOR_BLOCK (bl, index) != block)
2907         error ("blockvector botch");
2908       last_index = BLOCKVECTOR_NBLOCKS (bl);
2909       index += 1;
2910
2911       /* Don't print out blocks that have gone by.  */
2912       while (index < last_index
2913              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
2914         index++;
2915
2916       while (index < last_index
2917              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
2918         {
2919           if (blocks_searched[index] == 0)
2920             {
2921               struct block *b = BLOCKVECTOR_BLOCK (bl, index);
2922               int nsyms;
2923               register int i;
2924               register struct symbol *sym;
2925
2926               nsyms = BLOCK_NSYMS (b);
2927
2928               for (i = 0; i < nsyms; i++)
2929                 {
2930                   sym = BLOCK_SYM (b, i);
2931                   if (STREQ (SYMBOL_NAME (sym), "default"))
2932                     {
2933                       if (have_default)
2934                         continue;
2935                       have_default = 1;
2936                     }
2937                   if (SYMBOL_CLASS (sym) == LOC_LABEL)
2938                     {
2939                       struct sal_chain *next = (struct sal_chain *)
2940                         alloca (sizeof (struct sal_chain));
2941                       next->next = sal_chain;
2942                       next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
2943                       sal_chain = next;
2944                     }
2945                 }
2946               blocks_searched[index] = 1;
2947             }
2948           index++;
2949         }
2950       if (have_default)
2951         break;
2952       if (sal_chain && this_level_only)
2953         break;
2954
2955       /* After handling the function's top-level block, stop.
2956          Don't continue to its superblock, the block of
2957          per-file symbols.  */
2958       if (BLOCK_FUNCTION (block))
2959         break;
2960       block = BLOCK_SUPERBLOCK (block);
2961     }
2962
2963   if (sal_chain)
2964     {
2965       struct sal_chain *tmp_chain;
2966
2967       /* Count the number of entries.  */
2968       for (index = 0, tmp_chain = sal_chain; tmp_chain;
2969            tmp_chain = tmp_chain->next)
2970         index++;
2971
2972       sals.nelts = index;
2973       sals.sals = (struct symtab_and_line *)
2974         xmalloc (index * sizeof (struct symtab_and_line));
2975       for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
2976         sals.sals[index] = sal_chain->sal;
2977     }
2978
2979   return sals;
2980 }
2981
2982 /* Commands to deal with catching exceptions.  */
2983
2984 static void
2985 catch_command_1 (arg, tempflag, from_tty)
2986      char *arg;
2987      int tempflag;
2988      int from_tty;
2989 {
2990   /* First, translate ARG into something we can deal with in terms
2991      of breakpoints.  */
2992
2993   struct symtabs_and_lines sals;
2994   struct symtab_and_line sal;
2995   register struct expression *cond = 0;
2996   register struct breakpoint *b;
2997   char *save_arg;
2998   int i;
2999
3000   sal.line = sal.pc = sal.end = 0;
3001   sal.symtab = 0;
3002
3003   /* If no arg given, or if first arg is 'if ', all active catch clauses
3004      are breakpointed. */
3005
3006   if (!arg || (arg[0] == 'i' && arg[1] == 'f' 
3007                && (arg[2] == ' ' || arg[2] == '\t')))
3008     {
3009       /* Grab all active catch clauses.  */
3010       sals = get_catch_sals (0);
3011     }
3012   else
3013     {
3014       /* Grab selected catch clauses.  */
3015       error ("catch NAME not implemented");
3016 #if 0
3017       /* This isn't used; I don't know what it was for.  */
3018       sals = map_catch_names (arg, catch_breakpoint);
3019 #endif
3020     }
3021
3022   if (! sals.nelts) 
3023     return;
3024
3025   save_arg = arg;
3026   for (i = 0; i < sals.nelts; i++)
3027     {
3028       resolve_sal_pc (&sals.sals[i]);
3029       
3030       while (arg && *arg)
3031         {
3032           if (arg[0] == 'i' && arg[1] == 'f'
3033               && (arg[2] == ' ' || arg[2] == '\t'))
3034             cond = parse_exp_1 ((arg += 2, &arg), 
3035                                 block_for_pc (sals.sals[i].pc), 0);
3036           else
3037             error ("Junk at end of arguments.");
3038         }
3039       arg = save_arg;
3040     }
3041
3042   for (i = 0; i < sals.nelts; i++)
3043     {
3044       sal = sals.sals[i];
3045
3046       if (from_tty)
3047         describe_other_breakpoints (sal.pc);
3048
3049       b = set_raw_breakpoint (sal);
3050       set_breakpoint_count (breakpoint_count + 1);
3051       b->number = breakpoint_count;
3052       b->type = bp_breakpoint;
3053       b->cond = cond;
3054       b->enable = enabled;
3055       b->disposition = tempflag ? del : donttouch;
3056
3057       mention (b);
3058     }
3059
3060   if (sals.nelts > 1)
3061     {
3062       printf_unfiltered ("Multiple breakpoints were set.\n");
3063       printf_unfiltered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
3064     }
3065   free ((PTR)sals.sals);
3066 }
3067
3068 /* Used by the gui, could be made a worker for other things. */
3069
3070 struct breakpoint *
3071 set_breakpoint_sal (sal)
3072 struct symtab_and_line sal;
3073 {
3074   struct breakpoint *b;
3075   b = set_raw_breakpoint (sal);
3076   set_breakpoint_count (breakpoint_count + 1);
3077   b->number = breakpoint_count;
3078   b->type = bp_breakpoint;
3079   b->cond = 0;
3080   b->thread = -1;
3081   return b;
3082 }
3083
3084 #if 0
3085 /* These aren't used; I don't know what they were for.  */
3086 /* Disable breakpoints on all catch clauses described in ARGS.  */
3087 static void
3088 disable_catch (args)
3089      char *args;
3090 {
3091   /* Map the disable command to catch clauses described in ARGS.  */
3092 }
3093
3094 /* Enable breakpoints on all catch clauses described in ARGS.  */
3095 static void
3096 enable_catch (args)
3097      char *args;
3098 {
3099   /* Map the disable command to catch clauses described in ARGS.  */
3100 }
3101
3102 /* Delete breakpoints on all catch clauses in the active scope.  */
3103 static void
3104 delete_catch (args)
3105      char *args;
3106 {
3107   /* Map the delete command to catch clauses described in ARGS.  */
3108 }
3109 #endif /* 0 */
3110
3111 static void
3112 catch_command (arg, from_tty)
3113      char *arg;
3114      int from_tty;
3115 {
3116   catch_command_1 (arg, 0, from_tty);
3117 }
3118 \f
3119 static void
3120 clear_command (arg, from_tty)
3121      char *arg;
3122      int from_tty;
3123 {
3124   register struct breakpoint *b, *b1;
3125   struct symtabs_and_lines sals;
3126   struct symtab_and_line sal;
3127   register struct breakpoint *found;
3128   int i;
3129
3130   if (arg)
3131     {
3132       sals = decode_line_spec (arg, 1);
3133     }
3134   else
3135     {
3136       sals.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
3137       sal.line = default_breakpoint_line;
3138       sal.symtab = default_breakpoint_symtab;
3139       sal.pc = 0;
3140       if (sal.symtab == 0)
3141         error ("No source file specified.");
3142
3143       sals.sals[0] = sal;
3144       sals.nelts = 1;
3145     }
3146
3147   for (i = 0; i < sals.nelts; i++)
3148     {
3149       /* If exact pc given, clear bpts at that pc.
3150          But if sal.pc is zero, clear all bpts on specified line.  */
3151       sal = sals.sals[i];
3152       found = (struct breakpoint *) 0;
3153       while (breakpoint_chain
3154              && (sal.pc
3155                  ? breakpoint_chain->address == sal.pc
3156                  : (breakpoint_chain->source_file != NULL
3157                     && sal.symtab != NULL
3158                     && STREQ (breakpoint_chain->source_file,
3159                               sal.symtab->filename)
3160                     && breakpoint_chain->line_number == sal.line)))
3161         {
3162           b1 = breakpoint_chain;
3163           breakpoint_chain = b1->next;
3164           b1->next = found;
3165           found = b1;
3166         }
3167
3168       ALL_BREAKPOINTS (b)
3169         while (b->next
3170                && b->next->type != bp_watchpoint
3171                && b->next->type != bp_hardware_watchpoint
3172                && b->next->type != bp_read_watchpoint
3173                && b->next->type != bp_access_watchpoint
3174                && (sal.pc
3175                    ? b->next->address == sal.pc
3176                    : (b->next->source_file != NULL
3177                       && sal.symtab != NULL
3178                       && STREQ (b->next->source_file, sal.symtab->filename)
3179                       && b->next->line_number == sal.line)))
3180           {
3181             b1 = b->next;
3182             b->next = b1->next;
3183             b1->next = found;
3184             found = b1;
3185           }
3186
3187       if (found == 0)
3188         {
3189           if (arg)
3190             error ("No breakpoint at %s.", arg);
3191           else
3192             error ("No breakpoint at this line.");
3193         }
3194
3195       if (found->next) from_tty = 1; /* Always report if deleted more than one */
3196       if (from_tty) printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
3197       breakpoints_changed ();
3198       while (found)
3199         {
3200           if (from_tty) printf_unfiltered ("%d ", found->number);
3201           b1 = found->next;
3202           delete_breakpoint (found);
3203           found = b1;
3204         }
3205       if (from_tty) putchar_unfiltered ('\n');
3206     }
3207   free ((PTR)sals.sals);
3208 }
3209 \f
3210 /* Delete breakpoint in BS if they are `delete' breakpoints and
3211    all breakpoints that are marked for deletion, whether hit or not.
3212    This is called after any breakpoint is hit, or after errors.  */
3213
3214 void
3215 breakpoint_auto_delete (bs)
3216      bpstat bs;
3217 {
3218   struct breakpoint *b, *temp;
3219
3220   for (; bs; bs = bs->next)
3221     if (bs->breakpoint_at && bs->breakpoint_at->disposition == del 
3222         && bs->stop)
3223       delete_breakpoint (bs->breakpoint_at);
3224
3225   ALL_BREAKPOINTS_SAFE (b, temp)
3226     {
3227       if (b->disposition == del_at_next_stop)
3228         delete_breakpoint (b);
3229     }
3230 }
3231
3232 /* Delete a breakpoint and clean up all traces of it in the data structures. */
3233
3234 void
3235 delete_breakpoint (bpt)
3236      struct breakpoint *bpt;
3237 {
3238   register struct breakpoint *b;
3239   register bpstat bs;
3240
3241   if (delete_breakpoint_hook)
3242     delete_breakpoint_hook (bpt);
3243
3244   if (bpt->inserted)
3245     remove_breakpoint (bpt);
3246       
3247   if (breakpoint_chain == bpt)
3248     breakpoint_chain = bpt->next;
3249
3250   ALL_BREAKPOINTS (b)
3251     if (b->next == bpt)
3252       {
3253         b->next = bpt->next;
3254         break;
3255       }
3256
3257   check_duplicates (bpt->address);
3258   /* If this breakpoint was inserted, and there is another breakpoint
3259      at the same address, we need to insert the other breakpoint.  */
3260   if (bpt->inserted
3261       && bpt->type != bp_hardware_watchpoint
3262       && bpt->type != bp_read_watchpoint
3263       && bpt->type != bp_access_watchpoint)
3264     {
3265       ALL_BREAKPOINTS (b)
3266         if (b->address == bpt->address
3267             && !b->duplicate
3268             && b->enable != disabled
3269             && b->enable != shlib_disabled)
3270           {
3271             int val;
3272             val = target_insert_breakpoint (b->address, b->shadow_contents);
3273             if (val != 0)
3274               {
3275                 target_terminal_ours_for_output ();
3276                 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
3277                 memory_error (val, b->address); /* which bombs us out */
3278               }
3279             else
3280               b->inserted = 1;
3281           }
3282     }
3283
3284   free_command_lines (&bpt->commands);
3285   if (bpt->cond)
3286     free (bpt->cond);
3287   if (bpt->cond_string != NULL)
3288     free (bpt->cond_string);
3289   if (bpt->addr_string != NULL)
3290     free (bpt->addr_string);
3291   if (bpt->exp != NULL)
3292     free (bpt->exp);
3293   if (bpt->exp_string != NULL)
3294     free (bpt->exp_string);
3295   if (bpt->val != NULL)
3296     value_free (bpt->val);
3297   if (bpt->source_file != NULL)
3298     free (bpt->source_file);
3299
3300   /* Be sure no bpstat's are pointing at it after it's been freed.  */
3301   /* FIXME, how can we find all bpstat's?
3302      We just check stop_bpstat for now.  */
3303   for (bs = stop_bpstat; bs; bs = bs->next)
3304     if (bs->breakpoint_at == bpt)
3305       bs->breakpoint_at = NULL;
3306   free ((PTR)bpt);
3307 }
3308
3309 static void
3310 delete_command (arg, from_tty)
3311      char *arg;
3312      int from_tty;
3313 {
3314
3315   if (arg == 0)
3316     {
3317       /* Ask user only if there are some breakpoints to delete.  */
3318       if (!from_tty
3319           || (breakpoint_chain && query ("Delete all breakpoints? ")))
3320         {
3321           /* No arg; clear all breakpoints.  */
3322           while (breakpoint_chain)
3323             delete_breakpoint (breakpoint_chain);
3324         }
3325     }
3326   else
3327     map_breakpoint_numbers (arg, delete_breakpoint);
3328 }
3329
3330 /* Reset a breakpoint given it's struct breakpoint * BINT.
3331    The value we return ends up being the return value from catch_errors.
3332    Unused in this case.  */
3333
3334 static int
3335 breakpoint_re_set_one (bint)
3336      char *bint;
3337 {
3338   struct breakpoint *b = (struct breakpoint *)bint;  /* get past catch_errs */
3339   struct value *mark;
3340   int i;
3341   struct symtabs_and_lines sals;
3342   char *s;
3343   enum enable save_enable;
3344
3345   switch (b->type)
3346     {
3347     case bp_breakpoint:
3348     case bp_hardware_breakpoint:
3349       if (b->addr_string == NULL)
3350         {
3351           /* Anything without a string can't be re-set. */
3352           delete_breakpoint (b);
3353           return 0;
3354         }
3355       /* In case we have a problem, disable this breakpoint.  We'll restore
3356          its status if we succeed.  */
3357       save_enable = b->enable;
3358       b->enable = disabled;
3359
3360       set_language (b->language);
3361       input_radix = b->input_radix;
3362       s = b->addr_string;
3363       sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0, (char ***)NULL);
3364       for (i = 0; i < sals.nelts; i++)
3365         {
3366           resolve_sal_pc (&sals.sals[i]);
3367
3368           /* Reparse conditions, they might contain references to the
3369              old symtab.  */
3370           if (b->cond_string != NULL)
3371             {
3372               s = b->cond_string;
3373               if (b->cond)
3374                 free ((PTR)b->cond);
3375               b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
3376             }
3377
3378           /* We need to re-set the breakpoint if the address changes...*/
3379           if (b->address != sals.sals[i].pc
3380               /* ...or new and old breakpoints both have source files, and
3381                  the source file name or the line number changes...  */
3382               || (b->source_file != NULL
3383                   && sals.sals[i].symtab != NULL
3384                   && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
3385                       || b->line_number != sals.sals[i].line)
3386                   )
3387               /* ...or we switch between having a source file and not having
3388                  one.  */
3389               || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
3390               )
3391             {
3392               if (b->source_file != NULL)
3393                 free (b->source_file);
3394               if (sals.sals[i].symtab == NULL)
3395                 b->source_file = NULL;
3396               else
3397                 b->source_file =
3398                   savestring (sals.sals[i].symtab->filename,
3399                               strlen (sals.sals[i].symtab->filename));
3400               b->line_number = sals.sals[i].line;
3401               b->address = sals.sals[i].pc;
3402           
3403               check_duplicates (b->address);
3404
3405               mention (b);
3406
3407               /* Might be better to do this just once per breakpoint_re_set,
3408                  rather than once for every breakpoint.  */
3409               breakpoints_changed ();
3410             }
3411           b->enable = save_enable;      /* Restore it, this worked. */
3412         }
3413       free ((PTR)sals.sals);
3414       break;
3415
3416     case bp_watchpoint:
3417     case bp_hardware_watchpoint:
3418     case bp_read_watchpoint:
3419     case bp_access_watchpoint:
3420       innermost_block = NULL;
3421       /* The issue arises of what context to evaluate this in.  The same
3422          one as when it was set, but what does that mean when symbols have
3423          been re-read?  We could save the filename and functionname, but
3424          if the context is more local than that, the best we could do would
3425          be something like how many levels deep and which index at that
3426          particular level, but that's going to be less stable than filenames
3427          or functionnames.  */
3428       /* So for now, just use a global context.  */
3429       if (b->exp)
3430         free ((PTR)b->exp);
3431       b->exp = parse_expression (b->exp_string);
3432       b->exp_valid_block = innermost_block;
3433       mark = value_mark ();
3434       if (b->val)
3435         value_free (b->val);
3436       b->val = evaluate_expression (b->exp);
3437       release_value (b->val);
3438       if (VALUE_LAZY (b->val))
3439         value_fetch_lazy (b->val);
3440
3441       if (b->cond_string != NULL)
3442         {
3443           s = b->cond_string;
3444           if (b->cond)
3445             free ((PTR)b->cond);
3446           b->cond = parse_exp_1 (&s, (struct block *)0, 0);
3447         }
3448       if (b->enable == enabled)
3449         mention (b);
3450       value_free_to_mark (mark);
3451       break;
3452
3453     default:
3454       printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
3455       /* fall through */
3456     /* Delete longjmp breakpoints, they will be reset later by
3457        breakpoint_re_set.  */
3458     case bp_longjmp:
3459     case bp_longjmp_resume:
3460       delete_breakpoint (b);
3461       break;
3462
3463     /* This breakpoint is special, it's set up when the inferior
3464        starts and we really don't want to touch it.  */
3465     case bp_shlib_event:
3466
3467     /* Keep temporary breakpoints, which can be encountered when we step
3468        over a dlopen call and SOLIB_ADD is resetting the breakpoints.
3469        Otherwise these should have been blown away via the cleanup chain
3470        or by breakpoint_init_inferior when we rerun the executable.  */
3471     case bp_until:
3472     case bp_finish:
3473     case bp_watchpoint_scope:
3474     case bp_call_dummy:
3475     case bp_step_resume:
3476       break;
3477     }
3478
3479   return 0;
3480 }
3481
3482 /* Re-set all breakpoints after symbols have been re-loaded.  */
3483 void
3484 breakpoint_re_set ()
3485 {
3486   struct breakpoint *b, *temp;
3487   enum language save_language;
3488   int save_input_radix;
3489   static char message1[] = "Error in re-setting breakpoint %d:\n";
3490   char message[sizeof (message1) + 30 /* slop */];
3491   
3492   save_language = current_language->la_language;
3493   save_input_radix = input_radix;
3494   ALL_BREAKPOINTS_SAFE (b, temp)
3495     {
3496       sprintf (message, message1, b->number);   /* Format possible error msg */
3497       catch_errors (breakpoint_re_set_one, (char *) b, message,
3498                     RETURN_MASK_ALL);
3499     }
3500   set_language (save_language);
3501   input_radix = save_input_radix;
3502
3503 #ifdef GET_LONGJMP_TARGET
3504   create_longjmp_breakpoint ("longjmp");
3505   create_longjmp_breakpoint ("_longjmp");
3506   create_longjmp_breakpoint ("siglongjmp");
3507   create_longjmp_breakpoint (NULL);
3508 #endif
3509
3510 #if 0
3511   /* Took this out (temporarily at least), since it produces an extra 
3512      blank line at startup. This messes up the gdbtests. -PB */
3513   /* Blank line to finish off all those mention() messages we just printed.  */
3514   printf_filtered ("\n");
3515 #endif
3516 }
3517 \f
3518 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
3519    If from_tty is nonzero, it prints a message to that effect,
3520    which ends with a period (no newline).  */
3521
3522 void
3523 set_ignore_count (bptnum, count, from_tty)
3524      int bptnum, count, from_tty;
3525 {
3526   register struct breakpoint *b;
3527
3528   if (count < 0)
3529     count = 0;
3530
3531   ALL_BREAKPOINTS (b)
3532     if (b->number == bptnum)
3533       {
3534         b->ignore_count = count;
3535         if (!from_tty)
3536           return;
3537         else if (count == 0)
3538           printf_filtered ("Will stop next time breakpoint %d is reached.",
3539                            bptnum);
3540         else if (count == 1)
3541           printf_filtered ("Will ignore next crossing of breakpoint %d.",
3542                            bptnum);
3543         else
3544           printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
3545                   count, bptnum);
3546         breakpoints_changed ();
3547         return;
3548       }
3549
3550   error ("No breakpoint number %d.", bptnum);
3551 }
3552
3553 /* Clear the ignore counts of all breakpoints.  */
3554 void
3555 breakpoint_clear_ignore_counts ()
3556 {
3557   struct breakpoint *b;
3558
3559   ALL_BREAKPOINTS (b)
3560     b->ignore_count = 0;
3561 }
3562
3563 /* Command to set ignore-count of breakpoint N to COUNT.  */
3564
3565 static void
3566 ignore_command (args, from_tty)
3567      char *args;
3568      int from_tty;
3569 {
3570   char *p = args;
3571   register int num;
3572
3573   if (p == 0)
3574     error_no_arg ("a breakpoint number");
3575   
3576   num = get_number (&p);
3577
3578   if (*p == 0)
3579     error ("Second argument (specified ignore-count) is missing.");
3580
3581   set_ignore_count (num,
3582                     longest_to_int (value_as_long (parse_and_eval (p))),
3583                     from_tty);
3584   printf_filtered ("\n");
3585   breakpoints_changed ();
3586 }
3587 \f
3588 /* Call FUNCTION on each of the breakpoints
3589    whose numbers are given in ARGS.  */
3590
3591 static void
3592 map_breakpoint_numbers (args, function)
3593      char *args;
3594      void (*function) PARAMS ((struct breakpoint *));
3595 {
3596   register char *p = args;
3597   char *p1;
3598   register int num;
3599   register struct breakpoint *b;
3600
3601   if (p == 0)
3602     error_no_arg ("one or more breakpoint numbers");
3603
3604   while (*p)
3605     {
3606       p1 = p;
3607       
3608       num = get_number (&p1);
3609
3610       ALL_BREAKPOINTS (b)
3611         if (b->number == num)
3612           {
3613             struct breakpoint *related_breakpoint = b->related_breakpoint;
3614             function (b);
3615             if (related_breakpoint)
3616               function (related_breakpoint);
3617             goto win;
3618           }
3619       printf_unfiltered ("No breakpoint number %d.\n", num);
3620     win:
3621       p = p1;
3622     }
3623 }
3624
3625 void
3626 disable_breakpoint (bpt)
3627      struct breakpoint *bpt;
3628 {
3629   /* Never disable a watchpoint scope breakpoint; we want to
3630      hit them when we leave scope so we can delete both the
3631      watchpoint and its scope breakpoint at that time.  */
3632   if (bpt->type == bp_watchpoint_scope)
3633     return;
3634
3635   bpt->enable = disabled;
3636
3637   check_duplicates (bpt->address);
3638
3639   if (modify_breakpoint_hook)
3640     modify_breakpoint_hook (bpt);
3641 }
3642
3643 /* ARGSUSED */
3644 static void
3645 disable_command (args, from_tty)
3646      char *args;
3647      int from_tty;
3648 {
3649   register struct breakpoint *bpt;
3650   if (args == 0)
3651     ALL_BREAKPOINTS (bpt)
3652       switch (bpt->type)
3653         {
3654         case bp_breakpoint:
3655         case bp_hardware_breakpoint:
3656         case bp_watchpoint:
3657         case bp_hardware_watchpoint:
3658         case bp_read_watchpoint:
3659         case bp_access_watchpoint:
3660           disable_breakpoint (bpt);
3661         default:
3662           continue;
3663         }
3664   else
3665     map_breakpoint_numbers (args, disable_breakpoint);
3666 }
3667
3668 static void
3669 do_enable_breakpoint (bpt, disposition)
3670      struct breakpoint *bpt;
3671      enum bpdisp disposition;
3672 {
3673   struct frame_info *save_selected_frame = NULL;
3674   int save_selected_frame_level = -1;
3675   int target_resources_ok, other_type_used;
3676   struct value *mark;
3677
3678   if (bpt->type == bp_hardware_breakpoint)
3679     {
3680       int i;
3681       i = hw_breakpoint_used_count();
3682       target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
3683                 bp_hardware_breakpoint, i+1, 0);
3684       if (target_resources_ok == 0)
3685         error ("No hardware breakpoint support in the target.");
3686       else if (target_resources_ok < 0)
3687         error ("Hardware breakpoints used exceeds limit.");
3688     }
3689
3690   bpt->enable = enabled;
3691   bpt->disposition = disposition;
3692   check_duplicates (bpt->address);
3693   breakpoints_changed ();
3694
3695   if (bpt->type == bp_watchpoint || bpt->type == bp_hardware_watchpoint ||
3696       bpt->type == bp_read_watchpoint || bpt->type == bp_access_watchpoint)
3697     {
3698       if (bpt->exp_valid_block != NULL)
3699         {
3700           struct frame_info *fr =
3701             find_frame_addr_in_frame_chain (bpt->watchpoint_frame);
3702           if (fr == NULL)
3703             {
3704               printf_filtered ("\
3705 Cannot enable watchpoint %d because the block in which its expression\n\
3706 is valid is not currently in scope.\n", bpt->number);
3707               bpt->enable = disabled;
3708               return;
3709             }
3710
3711           save_selected_frame = selected_frame;
3712           save_selected_frame_level = selected_frame_level;
3713           select_frame (fr, -1);
3714         }
3715
3716       value_free (bpt->val);
3717       mark = value_mark ();
3718       bpt->val = evaluate_expression (bpt->exp);
3719       release_value (bpt->val);
3720       if (VALUE_LAZY (bpt->val))
3721         value_fetch_lazy (bpt->val);
3722
3723       if (bpt->type == bp_hardware_watchpoint ||
3724            bpt->type == bp_read_watchpoint ||
3725            bpt->type == bp_access_watchpoint)
3726       {
3727         int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
3728         int mem_cnt = can_use_hardware_watchpoint (bpt->val);
3729
3730         target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
3731                 bpt->type, i + mem_cnt, other_type_used);
3732         /* we can consider of type is bp_hardware_watchpoint, convert to 
3733            bp_watchpoint in the following condition */
3734         if (target_resources_ok < 0)
3735           {
3736              printf_filtered("\
3737 Cannot enable watchpoint %d because target watch resources\n\
3738 have been allocated for other watchpoints.\n", bpt->number);
3739              bpt->enable = disabled;
3740              value_free_to_mark (mark);
3741              return;
3742           }
3743       }
3744
3745       if (save_selected_frame_level >= 0)
3746         select_frame (save_selected_frame, save_selected_frame_level);
3747       value_free_to_mark (mark);
3748     }
3749   if (modify_breakpoint_hook)
3750     modify_breakpoint_hook (bpt);
3751 }
3752
3753 void
3754 enable_breakpoint (bpt)
3755      struct breakpoint *bpt;
3756 {
3757   do_enable_breakpoint (bpt, donttouch);
3758 }
3759
3760 /* The enable command enables the specified breakpoints (or all defined
3761    breakpoints) so they once again become (or continue to be) effective
3762    in stopping the inferior. */
3763
3764 /* ARGSUSED */
3765 static void
3766 enable_command (args, from_tty)
3767      char *args;
3768      int from_tty;
3769 {
3770   register struct breakpoint *bpt;
3771   if (args == 0)
3772     ALL_BREAKPOINTS (bpt)
3773       switch (bpt->type)
3774         {
3775         case bp_breakpoint:
3776         case bp_hardware_breakpoint:
3777         case bp_watchpoint:
3778         case bp_hardware_watchpoint:
3779         case bp_read_watchpoint:
3780         case bp_access_watchpoint:
3781           enable_breakpoint (bpt);
3782         default:
3783           continue;
3784         }
3785   else
3786     map_breakpoint_numbers (args, enable_breakpoint);
3787 }
3788
3789 static void
3790 enable_once_breakpoint (bpt)
3791      struct breakpoint *bpt;
3792 {
3793   do_enable_breakpoint (bpt, disable);
3794 }
3795
3796 /* ARGSUSED */
3797 static void
3798 enable_once_command (args, from_tty)
3799      char *args;
3800      int from_tty;
3801 {
3802   map_breakpoint_numbers (args, enable_once_breakpoint);
3803 }
3804
3805 static void
3806 enable_delete_breakpoint (bpt)
3807      struct breakpoint *bpt;
3808 {
3809   do_enable_breakpoint (bpt, del);
3810 }
3811
3812 /* ARGSUSED */
3813 static void
3814 enable_delete_command (args, from_tty)
3815      char *args;
3816      int from_tty;
3817 {
3818   map_breakpoint_numbers (args, enable_delete_breakpoint);
3819 }
3820 \f
3821 /* Use default_breakpoint_'s, or nothing if they aren't valid.  */
3822
3823 struct symtabs_and_lines
3824 decode_line_spec_1 (string, funfirstline)
3825      char *string;
3826      int funfirstline;
3827 {
3828   struct symtabs_and_lines sals;
3829   if (string == 0)
3830     error ("Empty line specification.");
3831   if (default_breakpoint_valid)
3832     sals = decode_line_1 (&string, funfirstline,
3833                           default_breakpoint_symtab, default_breakpoint_line,
3834                           (char ***)NULL);
3835   else
3836     sals = decode_line_1 (&string, funfirstline,
3837                           (struct symtab *)NULL, 0, (char ***)NULL);
3838   if (*string)
3839     error ("Junk at end of line specification: %s", string);
3840   return sals;
3841 }
3842 \f
3843 void
3844 _initialize_breakpoint ()
3845 {
3846   breakpoint_chain = 0;
3847   /* Don't bother to call set_breakpoint_count.  $bpnum isn't useful
3848      before a breakpoint is set.  */
3849   breakpoint_count = 0;
3850
3851   add_com ("ignore", class_breakpoint, ignore_command,
3852            "Set ignore-count of breakpoint number N to COUNT.\n\
3853 Usage is `ignore N COUNT'.");
3854
3855   add_com ("commands", class_breakpoint, commands_command,
3856            "Set commands to be executed when a breakpoint is hit.\n\
3857 Give breakpoint number as argument after \"commands\".\n\
3858 With no argument, the targeted breakpoint is the last one set.\n\
3859 The commands themselves follow starting on the next line.\n\
3860 Type a line containing \"end\" to indicate the end of them.\n\
3861 Give \"silent\" as the first line to make the breakpoint silent;\n\
3862 then no output is printed when it is hit, except what the commands print.");
3863
3864   add_com ("condition", class_breakpoint, condition_command,
3865            "Specify breakpoint number N to break only if COND is true.\n\
3866 Usage is `condition N COND', where N is an integer and COND is an\n\
3867 expression to be evaluated whenever breakpoint N is reached.  ");
3868
3869   add_com ("tbreak", class_breakpoint, tbreak_command,
3870            "Set a temporary breakpoint.  Args like \"break\" command.\n\
3871 Like \"break\" except the breakpoint is only temporary,\n\
3872 so it will be deleted when hit.  Equivalent to \"break\" followed\n\
3873 by using \"enable delete\" on the breakpoint number.");
3874
3875   add_com ("hbreak", class_breakpoint, hbreak_command,
3876            "Set a hardware assisted  breakpoint. Args like \"break\" command.\n\
3877 Like \"break\" except the breakpoint requires hardware support,\n\
3878 some target hardware may not have this support.");
3879
3880   add_com ("thbreak", class_breakpoint, thbreak_command,
3881            "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
3882 Like \"hbreak\" except the breakpoint is only temporary,\n\
3883 so it will be deleted when hit.");
3884
3885   add_prefix_cmd ("enable", class_breakpoint, enable_command,
3886                   "Enable some breakpoints.\n\
3887 Give breakpoint numbers (separated by spaces) as arguments.\n\
3888 With no subcommand, breakpoints are enabled until you command otherwise.\n\
3889 This is used to cancel the effect of the \"disable\" command.\n\
3890 With a subcommand you can enable temporarily.",
3891                   &enablelist, "enable ", 1, &cmdlist);
3892
3893   add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
3894                   "Enable some breakpoints.\n\
3895 Give breakpoint numbers (separated by spaces) as arguments.\n\
3896 This is used to cancel the effect of the \"disable\" command.\n\
3897 May be abbreviated to simply \"enable\".\n",
3898                   &enablebreaklist, "enable breakpoints ", 1, &enablelist);
3899
3900   add_cmd ("once", no_class, enable_once_command,
3901            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
3902 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
3903            &enablebreaklist);
3904
3905   add_cmd ("delete", no_class, enable_delete_command,
3906            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
3907 If a breakpoint is hit while enabled in this fashion, it is deleted.",
3908            &enablebreaklist);
3909
3910   add_cmd ("delete", no_class, enable_delete_command,
3911            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
3912 If a breakpoint is hit while enabled in this fashion, it is deleted.",
3913            &enablelist);
3914
3915   add_cmd ("once", no_class, enable_once_command,
3916            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
3917 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
3918            &enablelist);
3919
3920   add_prefix_cmd ("disable", class_breakpoint, disable_command,
3921            "Disable some breakpoints.\n\
3922 Arguments are breakpoint numbers with spaces in between.\n\
3923 To disable all breakpoints, give no argument.\n\
3924 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
3925                   &disablelist, "disable ", 1, &cmdlist);
3926   add_com_alias ("dis", "disable", class_breakpoint, 1);
3927   add_com_alias ("disa", "disable", class_breakpoint, 1);
3928
3929   add_cmd ("breakpoints", class_alias, disable_command,
3930            "Disable some breakpoints.\n\
3931 Arguments are breakpoint numbers with spaces in between.\n\
3932 To disable all breakpoints, give no argument.\n\
3933 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
3934 This command may be abbreviated \"disable\".",
3935            &disablelist);
3936
3937   add_prefix_cmd ("delete", class_breakpoint, delete_command,
3938            "Delete some breakpoints or auto-display expressions.\n\
3939 Arguments are breakpoint numbers with spaces in between.\n\
3940 To delete all breakpoints, give no argument.\n\
3941 \n\
3942 Also a prefix command for deletion of other GDB objects.\n\
3943 The \"unset\" command is also an alias for \"delete\".",
3944                   &deletelist, "delete ", 1, &cmdlist);
3945   add_com_alias ("d", "delete", class_breakpoint, 1);
3946
3947   add_cmd ("breakpoints", class_alias, delete_command,
3948            "Delete some breakpoints or auto-display expressions.\n\
3949 Arguments are breakpoint numbers with spaces in between.\n\
3950 To delete all breakpoints, give no argument.\n\
3951 This command may be abbreviated \"delete\".",
3952            &deletelist);
3953
3954   add_com ("clear", class_breakpoint, clear_command,
3955            concat ("Clear breakpoint at specified line or function.\n\
3956 Argument may be line number, function name, or \"*\" and an address.\n\
3957 If line number is specified, all breakpoints in that line are cleared.\n\
3958 If function is specified, breakpoints at beginning of function are cleared.\n\
3959 If an address is specified, breakpoints at that address are cleared.\n\n",
3960 "With no argument, clears all breakpoints in the line that the selected frame\n\
3961 is executing in.\n\
3962 \n\
3963 See also the \"delete\" command which clears breakpoints by number.", NULL));
3964
3965   add_com ("break", class_breakpoint, break_command,
3966            concat ("Set breakpoint at specified line or function.\n\
3967 Argument may be line number, function name, or \"*\" and an address.\n\
3968 If line number is specified, break at start of code for that line.\n\
3969 If function is specified, break at start of code for that function.\n\
3970 If an address is specified, break at that exact address.\n",
3971 "With no arg, uses current execution address of selected stack frame.\n\
3972 This is useful for breaking on return to a stack frame.\n\
3973 \n\
3974 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
3975 \n\
3976 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
3977   add_com_alias ("b", "break", class_run, 1);
3978   add_com_alias ("br", "break", class_run, 1);
3979   add_com_alias ("bre", "break", class_run, 1);
3980   add_com_alias ("brea", "break", class_run, 1);
3981
3982   add_info ("breakpoints", breakpoints_info,
3983             concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
3984 The \"Type\" column indicates one of:\n\
3985 \tbreakpoint     - normal breakpoint\n\
3986 \twatchpoint     - watchpoint\n\
3987 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
3988 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
3989 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
3990 address and file/line number respectively.\n\n",
3991 "Convenience variable \"$_\" and default examine address for \"x\"\n\
3992 are set to the address of the last breakpoint listed.\n\n\
3993 Convenience variable \"$bpnum\" contains the number of the last\n\
3994 breakpoint set.", NULL));
3995
3996 #if MAINTENANCE_CMDS
3997
3998   add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
3999             concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
4000 The \"Type\" column indicates one of:\n\
4001 \tbreakpoint     - normal breakpoint\n\
4002 \twatchpoint     - watchpoint\n\
4003 \tlongjmp        - internal breakpoint used to step through longjmp()\n\
4004 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
4005 \tuntil          - internal breakpoint used by the \"until\" command\n\
4006 \tfinish         - internal breakpoint used by the \"finish\" command\n",
4007 "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
4008 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
4009 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
4010 address and file/line number respectively.\n\n",
4011 "Convenience variable \"$_\" and default examine address for \"x\"\n\
4012 are set to the address of the last breakpoint listed.\n\n\
4013 Convenience variable \"$bpnum\" contains the number of the last\n\
4014 breakpoint set.", NULL),
4015            &maintenanceinfolist);
4016
4017 #endif  /* MAINTENANCE_CMDS */
4018
4019   add_com ("catch", class_breakpoint, catch_command,
4020          "Set breakpoints to catch exceptions that are raised.\n\
4021 Argument may be a single exception to catch, multiple exceptions\n\
4022 to catch, or the default exception \"default\".  If no arguments\n\
4023 are given, breakpoints are set at all exception handlers catch clauses\n\
4024 within the current scope.\n\
4025 \n\
4026 A condition specified for the catch applies to all breakpoints set\n\
4027 with this command\n\
4028 \n\
4029 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
4030
4031   add_com ("watch", class_breakpoint, watch_command,
4032            "Set a watchpoint for an expression.\n\
4033 A watchpoint stops execution of your program whenever the value of\n\
4034 an expression changes.");
4035
4036   add_com ("rwatch", class_breakpoint, rwatch_command,
4037            "Set a read watchpoint for an expression.\n\
4038 A watchpoint stops execution of your program whenever the value of\n\
4039 an expression is read.");
4040
4041   add_com ("awatch", class_breakpoint, awatch_command,
4042            "Set a watchpoint for an expression.\n\
4043 A watchpoint stops execution of your program whenever the value of\n\
4044 an expression is either read or written.");
4045
4046   add_info ("watchpoints", breakpoints_info,
4047             "Synonym for ``info breakpoints''.");
4048
4049 }