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