disable_breakpoints_in_shlibs now takes a new parameter -- silent; callers
[external/binutils.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2    Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 1998
3              Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #include "defs.h"
22 #include <ctype.h>
23 #include "symtab.h"
24 #include "frame.h"
25 #include "breakpoint.h"
26 #include "gdbtypes.h"
27 #include "expression.h"
28 #include "gdbcore.h"
29 #include "gdbcmd.h"
30 #include "value.h"
31 #include "command.h"
32 #include "inferior.h"
33 #include "gdbthread.h"
34 #include "target.h"
35 #include "language.h"
36 #include "gdb_string.h"
37 #include "demangle.h"
38 #include "annotate.h"
39 #include "symfile.h"
40 #include "objfiles.h"
41
42 /* Prototypes for local functions. */
43
44 static void
45 catch_command_1 PARAMS ((char *, int, int));
46
47 static void
48 enable_delete_command PARAMS ((char *, int));
49
50 static void
51 enable_delete_breakpoint PARAMS ((struct breakpoint *));
52
53 static void
54 enable_once_command PARAMS ((char *, int));
55
56 static void
57 enable_once_breakpoint PARAMS ((struct breakpoint *));
58
59 static void
60 disable_command PARAMS ((char *, int));
61
62 static void
63 enable_command PARAMS ((char *, int));
64
65 static void
66 map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
67
68 static void
69 ignore_command PARAMS ((char *, int));
70
71 static int breakpoint_re_set_one PARAMS ((PTR));
72
73 static void
74 clear_command PARAMS ((char *, int));
75
76 static void
77 catch_command PARAMS ((char *, int));
78
79 static void
80 handle_gnu_4_16_catch_command PARAMS ((char *, int, 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 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 struct breakpoint *
101 set_raw_breakpoint PARAMS ((struct symtab_and_line));
102
103 static void
104 check_duplicates PARAMS ((CORE_ADDR, asection *));
105
106 static void
107 describe_other_breakpoints PARAMS ((CORE_ADDR, asection *));
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 breakpoint_cond_eval PARAMS ((PTR));
119
120 static void
121 cleanup_executing_breakpoints PARAMS ((PTR));
122
123 static void
124 commands_command PARAMS ((char *, int));
125
126 static void
127 condition_command PARAMS ((char *, int));
128
129 static int
130 get_number PARAMS ((char **));
131
132 void
133 set_breakpoint_count PARAMS ((int));
134
135 #if 0
136 static struct breakpoint *
137 create_temp_exception_breakpoint PARAMS ((CORE_ADDR));
138 #endif
139
140 typedef enum {
141   mark_inserted,
142   mark_uninserted,
143 } insertion_state_t;
144
145 static int
146 remove_breakpoint PARAMS ((struct breakpoint *, insertion_state_t));
147
148 static int print_it_normal PARAMS ((bpstat));
149
150 typedef struct {
151   enum exception_event_kind kind;
152   int enable;
153 } args_for_catchpoint_enable;
154
155 static int watchpoint_check PARAMS ((PTR));
156
157 static int cover_target_enable_exception_callback PARAMS ((PTR));
158
159 static int print_it_done PARAMS ((bpstat));
160
161 static int print_it_noop PARAMS ((bpstat));
162
163 static void maintenance_info_breakpoints PARAMS ((char *, int));
164
165 #ifdef GET_LONGJMP_TARGET
166 static void create_longjmp_breakpoint PARAMS ((char *));
167 #endif
168
169 static int hw_breakpoint_used_count PARAMS ((void));
170
171 static int hw_watchpoint_used_count PARAMS ((enum bptype, int *));
172
173 static void hbreak_command PARAMS ((char *, int));
174
175 static void thbreak_command PARAMS ((char *, int));
176
177 static void watch_command_1 PARAMS ((char *, int, int));
178
179 static void rwatch_command PARAMS ((char *, int));
180
181 static void awatch_command PARAMS ((char *, int));
182
183 static void do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
184
185 /* Prototypes for exported functions. */
186
187 static void
188 awatch_command PARAMS ((char *, int));
189
190 static void
191 do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
192
193 /* If FALSE, gdb will not use hardware support for watchpoints, even
194    if such is available. */
195 static int can_use_hw_watchpoints;
196
197 void delete_command PARAMS ((char *, int));
198
199 void _initialize_breakpoint PARAMS ((void));
200
201 void set_breakpoint_count PARAMS ((int));
202
203 extern int addressprint;                /* Print machine addresses? */
204
205 #if defined (GET_LONGJMP_TARGET) || defined (SOLIB_ADD)
206 static int internal_breakpoint_number = -1;
207 #endif
208
209 /* Are we executing breakpoint commands?  */
210 static int executing_breakpoint_commands;
211
212 /* Walk the following statement or block through all breakpoints.
213    ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
214    breakpoint.  */
215
216 #define ALL_BREAKPOINTS(b)  for (b = breakpoint_chain; b; b = b->next)
217
218 #define ALL_BREAKPOINTS_SAFE(b,tmp)     \
219         for (b = breakpoint_chain;      \
220              b? (tmp=b->next, 1): 0;    \
221              b = tmp)
222
223 /* True if SHIFT_INST_REGS defined, false otherwise.  */
224
225 int must_shift_inst_regs =
226 #if defined(SHIFT_INST_REGS)
227 1
228 #else
229 0
230 #endif
231 ;
232
233 /* True if breakpoint hit counts should be displayed in breakpoint info.  */
234
235 int show_breakpoint_hit_counts = 1;
236
237 /* Chain of all breakpoints defined.  */
238
239 struct breakpoint *breakpoint_chain;
240
241 /* Number of last breakpoint made.  */
242
243 int breakpoint_count;
244
245 /* Pointer to current exception event record */ 
246 static struct exception_event_record * current_exception_event;
247
248 /* Indicator of whether exception catchpoints should be nuked
249    between runs of a program */
250 int exception_catchpoints_are_fragile = 0;
251  
252 /* Indicator of when exception catchpoints set-up should be
253    reinitialized -- e.g. when program is re-run */
254 int exception_support_initialized = 0;
255
256
257 /* Set breakpoint count to NUM.  */
258
259 void
260 set_breakpoint_count (num)
261      int num;
262 {
263   breakpoint_count = num;
264   set_internalvar (lookup_internalvar ("bpnum"),
265                    value_from_longest (builtin_type_int, (LONGEST) num));
266 }
267
268 /* Used in run_command to zero the hit count when a new run starts. */
269
270 void
271 clear_breakpoint_hit_counts ()
272 {
273   struct breakpoint *b;
274
275   ALL_BREAKPOINTS (b)
276     b->hit_count = 0;
277 }
278
279 /* Default address, symtab and line to put a breakpoint at
280    for "break" command with no arg.
281    if default_breakpoint_valid is zero, the other three are
282    not valid, and "break" with no arg is an error.
283
284    This set by print_stack_frame, which calls set_default_breakpoint.  */
285
286 int default_breakpoint_valid;
287 CORE_ADDR default_breakpoint_address;
288 struct symtab *default_breakpoint_symtab;
289 int default_breakpoint_line;
290 \f
291 /* *PP is a string denoting a breakpoint.  Get the number of the breakpoint.
292    Advance *PP after the string and any trailing whitespace.
293
294    Currently the string can either be a number or "$" followed by the name
295    of a convenience variable.  Making it an expression wouldn't work well
296    for map_breakpoint_numbers (e.g. "4 + 5 + 6").  */
297 static int
298 get_number (pp)
299      char **pp;
300 {
301   int retval;
302   char *p = *pp;
303
304   if (p == NULL)
305     /* Empty line means refer to the last breakpoint.  */
306     return breakpoint_count;
307   else if (*p == '$')
308     {
309       /* Make a copy of the name, so we can null-terminate it
310          to pass to lookup_internalvar().  */
311       char *varname;
312       char *start = ++p;
313       value_ptr val;
314
315       while (isalnum (*p) || *p == '_')
316         p++;
317       varname = (char *) alloca (p - start + 1);
318       strncpy (varname, start, p - start);
319       varname[p - start] = '\0';
320       val = value_of_internalvar (lookup_internalvar (varname));
321       if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
322         error (
323 "Convenience variables used to specify breakpoints must have integer values."
324                );
325       retval = (int) value_as_long (val);
326     }
327   else
328     {
329       if (*p == '-')
330         ++p;
331       while (*p >= '0' && *p <= '9')
332         ++p;
333       if (p == *pp)
334         /* There is no number here.  (e.g. "cond a == b").  */
335         error_no_arg ("breakpoint number");
336       retval = atoi (*pp);
337     }
338   if (!(isspace (*p) || *p == '\0'))
339     error ("breakpoint number expected");
340   while (isspace (*p))
341     p++;
342   *pp = p;
343   return retval;
344 }
345 \f
346 /* condition N EXP -- set break condition of breakpoint N to EXP.  */
347
348 static void
349 condition_command (arg, from_tty)
350      char *arg;
351      int from_tty;
352 {
353   register struct breakpoint *b;
354   char *p;
355   register int bnum;
356
357   if (arg == 0)
358     error_no_arg ("breakpoint number");
359
360   p = arg;
361   bnum = get_number (&p);
362
363   ALL_BREAKPOINTS (b)
364     if (b->number == bnum)
365       {
366         if (b->cond)
367           {
368             free ((PTR)b->cond);
369             b->cond = 0;
370           }
371         if (b->cond_string != NULL)
372           free ((PTR)b->cond_string);
373
374         if (*p == 0)
375           {
376             b->cond = 0;
377             b->cond_string = NULL;
378             if (from_tty)
379               printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
380           }
381         else
382           {
383             arg = p;
384             /* I don't know if it matters whether this is the string the user
385                typed in or the decompiled expression.  */
386             b->cond_string = savestring (arg, strlen (arg));
387             b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
388             if (*arg)
389               error ("Junk at end of expression");
390           }
391         breakpoints_changed ();
392         return;
393       }
394
395   error ("No breakpoint number %d.", bnum);
396 }
397
398 /* ARGSUSED */
399 static void
400 commands_command (arg, from_tty)
401      char *arg;
402      int from_tty;
403 {
404   register struct breakpoint *b;
405   char *p;
406   register int bnum;
407   struct command_line *l;
408
409   /* If we allowed this, we would have problems with when to
410      free the storage, if we change the commands currently
411      being read from.  */
412
413   if (executing_breakpoint_commands)
414     error ("Can't use the \"commands\" command among a breakpoint's commands.");
415
416   p = arg;
417   bnum = get_number (&p);
418   if (p && *p)
419     error ("Unexpected extra arguments following breakpoint number.");
420       
421   ALL_BREAKPOINTS (b)
422     if (b->number == bnum)
423       {
424         char tmpbuf[128];
425         sprintf (tmpbuf, "Type commands for when breakpoint %d is hit, one per line.", bnum);
426         l = read_command_lines (tmpbuf, from_tty);
427         free_command_lines (&b->commands);
428         b->commands = l;
429         breakpoints_changed ();
430         return;
431       }
432   error ("No breakpoint number %d.", bnum);
433 }
434 \f
435 /* Like target_read_memory() but if breakpoints are inserted, return
436    the shadow contents instead of the breakpoints themselves.
437
438    Read "memory data" from whatever target or inferior we have. 
439    Returns zero if successful, errno value if not.  EIO is used
440    for address out of bounds.  If breakpoints are inserted, returns
441    shadow contents, not the breakpoints themselves.  From breakpoint.c.  */
442
443 int
444 read_memory_nobpt (memaddr, myaddr, len)
445      CORE_ADDR memaddr;
446      char *myaddr;
447      unsigned len;
448 {
449   int status;
450   struct breakpoint *b;
451   CORE_ADDR bp_addr = 0;
452   int bp_size = 0;
453
454   if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
455     /* No breakpoints on this machine. */
456     return target_read_memory (memaddr, myaddr, len);
457   
458   ALL_BREAKPOINTS (b)
459     {
460       if (b->type == bp_none)
461         warning ("attempted to read through apparently deleted breakpoint #%d?\n", b->number);
462
463       /* memory breakpoint? */
464       if (b->type == bp_watchpoint
465           || b->type == bp_hardware_watchpoint
466           || b->type == bp_read_watchpoint
467           || b->type == bp_access_watchpoint)
468         continue;
469       /* bp in memory? */
470       if (!b->inserted)
471         continue;
472       /* Addresses and length of the part of the breakpoint that
473          we need to copy.  */
474       /* XXXX The m68k, sh and h8300 have different local and remote
475          breakpoint values.  BREAKPOINT_FROM_PC still manages to
476          correctly determine the breakpoints memory address and size
477          for these targets. */
478       bp_addr = b->address;
479       bp_size = 0;
480       if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
481         continue;
482       if (bp_size == 0)
483         /* bp isn't valid */
484         continue;
485       if (bp_addr + bp_size <= memaddr)
486         /* The breakpoint is entirely before the chunk of memory we
487            are reading.  */
488         continue;
489       if (bp_addr >= memaddr + len)
490         /* The breakpoint is entirely after the chunk of memory we are
491            reading. */
492         continue;
493       /* Copy the breakpoint from the shadow contents, and recurse for
494          the things before and after.  */
495       {
496         /* Offset within shadow_contents.  */
497         int bptoffset = 0;
498           
499         if (bp_addr < memaddr)
500           {
501             /* Only copy the second part of the breakpoint.  */
502             bp_size -= memaddr - bp_addr;
503             bptoffset = memaddr - bp_addr;
504             bp_addr = memaddr;
505           }
506         
507         if (bp_addr + bp_size > memaddr + len)
508           {
509             /* Only copy the first part of the breakpoint.  */
510             bp_size -= (bp_addr + bp_size) - (memaddr + len);
511           }
512         
513         memcpy (myaddr + bp_addr - memaddr, 
514                 b->shadow_contents + bptoffset, bp_size);
515         
516         if (bp_addr > memaddr)
517           {
518             /* Copy the section of memory before the breakpoint.  */
519             status = read_memory_nobpt (memaddr, myaddr, bp_addr - memaddr);
520             if (status != 0)
521               return status;
522           }
523         
524         if (bp_addr + bp_size < memaddr + len)
525           {
526             /* Copy the section of memory after the breakpoint.  */
527             status = read_memory_nobpt
528               (bp_addr + bp_size,
529                myaddr + bp_addr + bp_size - memaddr,
530                memaddr + len - (bp_addr + bp_size));
531             if (status != 0)
532               return status;
533           }
534         return 0;
535       }
536     }
537   /* Nothing overlaps.  Just call read_memory_noerr.  */
538   return target_read_memory (memaddr, myaddr, len);
539 }
540
541 \f
542 /* insert_breakpoints is used when starting or continuing the program.
543    remove_breakpoints is used when the program stops.
544    Both return zero if successful,
545    or an `errno' value if could not write the inferior.  */
546
547 int
548 insert_breakpoints ()
549 {
550   register struct breakpoint *b, *temp;
551   int val = 0;
552   int disabled_breaks = 0;
553
554   static char message1[] = "Error inserting catchpoint %d:\n";
555   static char message[sizeof (message1) + 30];
556
557
558   ALL_BREAKPOINTS_SAFE (b, temp)
559     {
560       if (b->type != bp_watchpoint
561           && b->type != bp_hardware_watchpoint
562           && b->type != bp_read_watchpoint
563           && b->type != bp_access_watchpoint
564           && b->type != bp_catch_fork
565           && b->type != bp_catch_vfork
566           && b->type != bp_catch_exec
567           && b->type != bp_catch_throw
568           && b->type != bp_catch_catch
569           && b->enable != disabled
570           && b->enable != shlib_disabled
571           && b->enable != call_disabled
572           && ! b->inserted
573           && ! b->duplicate)
574         {
575           if (b->type == bp_hardware_breakpoint)
576             val = target_insert_hw_breakpoint(b->address, b->shadow_contents);
577           else
578             {
579               /* Check to see if breakpoint is in an overlay section;
580                  if so, we should set the breakpoint at the LMA address.
581                  Only if the section is currently mapped should we ALSO
582                  set a break at the VMA address. */
583               if (overlay_debugging && b->section &&
584                   section_is_overlay (b->section))
585                 {
586                   CORE_ADDR addr;
587
588                   addr = overlay_unmapped_address (b->address, b->section);
589                   val = target_insert_breakpoint (addr, b->shadow_contents);
590                   /* This would be the time to check val, to see if the
591                      breakpoint write to the load address succeeded.  
592                      However, this might be an ordinary occurrance, eg. if 
593                      the unmapped overlay is in ROM.  */
594                   val = 0;      /* in case unmapped address failed */
595                   if (section_is_mapped (b->section))
596                     val = target_insert_breakpoint (b->address, 
597                                                     b->shadow_contents);
598                 }
599               else /* ordinary (non-overlay) address */
600                 val = target_insert_breakpoint(b->address, b->shadow_contents);
601             }
602           if (val)
603             {
604               /* Can't set the breakpoint.  */
605 #if defined (DISABLE_UNSETTABLE_BREAK)
606               if (DISABLE_UNSETTABLE_BREAK (b->address))
607                 {
608                   /* See also: disable_breakpoints_in_shlibs. */
609                   val = 0;
610                   b->enable = shlib_disabled;
611                   if (!disabled_breaks)
612                     {
613                       target_terminal_ours_for_output ();
614                       fprintf_unfiltered (gdb_stderr,
615                                           "Cannot insert breakpoint %d:\n", b->number);
616                       printf_filtered ("Temporarily disabling shared library breakpoints:\n");
617                     }
618                   disabled_breaks = 1;
619                   printf_filtered ("%d ", b->number);
620                 }
621               else
622 #endif
623                 {
624                   target_terminal_ours_for_output ();
625                   fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
626 #ifdef ONE_PROCESS_WRITETEXT
627                   fprintf_unfiltered (gdb_stderr,
628                                       "The same program may be running in another process.\n");
629 #endif
630                   memory_error (val, b->address);       /* which bombs us out */
631                 }
632             }
633           else
634             b->inserted = 1;
635        }
636     else if (ep_is_exception_catchpoint (b)
637              && b->enable != disabled
638              && b->enable != shlib_disabled
639              && b->enable != call_disabled
640              && ! b->inserted
641              && ! b->duplicate)
642
643       {
644          /* If we get here, we must have a callback mechanism for exception
645             events -- with g++ style embedded label support, we insert
646             ordinary breakpoints and not catchpoints. */ 
647         sprintf (message, message1, b->number); /* Format possible error message */
648  
649         val = target_insert_breakpoint(b->address, b->shadow_contents);
650         if (val)
651           {
652            /* Couldn't set breakpoint for some reason */ 
653            target_terminal_ours_for_output ();
654            fprintf_unfiltered (gdb_stderr,
655                         "Cannot insert catchpoint %d; disabling it\n", b->number);
656            b->enable = disabled;
657           }
658         else
659           {
660               /* Bp set, now make sure callbacks are enabled */ 
661             int val;
662             args_for_catchpoint_enable args;  
663             args.kind = b->type == bp_catch_catch ? EX_EVENT_CATCH : EX_EVENT_THROW;
664             args.enable = 1;
665             val = catch_errors (cover_target_enable_exception_callback,
666                                 &args,
667                                 message, RETURN_MASK_ALL);
668             if (val != 0 && val != -1)
669               {
670                 b->inserted = 1;
671               }
672             /* Check if something went wrong; val == 0 can be ignored */ 
673             if (val == -1)
674               {
675                 /* something went wrong */ 
676                 target_terminal_ours_for_output ();
677                 fprintf_unfiltered (gdb_stderr, "Cannot insert catchpoint %d; disabling it\n", b->number);
678                 b->enable = disabled;
679               }
680           }
681       }
682
683       else if ((b->type == bp_hardware_watchpoint ||
684                 b->type == bp_read_watchpoint ||
685                 b->type == bp_access_watchpoint)
686                && b->enable == enabled
687                && ! b->inserted
688                && ! b->duplicate)
689         {
690           struct frame_info *saved_frame;
691           int saved_level, within_current_scope;
692           value_ptr mark = value_mark ();
693           value_ptr v;
694
695           /* Save the current frame and level so we can restore it after
696              evaluating the watchpoint expression on its own frame.  */
697           saved_frame = selected_frame;
698           saved_level = selected_frame_level;
699
700           /* Determine if the watchpoint is within scope.  */
701           if (b->exp_valid_block == NULL)
702             within_current_scope = 1;
703           else
704             {
705               struct frame_info *fi;
706
707               /* There might be no current frame at this moment if we are
708                  resuming from a step over a breakpoint.
709                  Set up current frame before trying to find the watchpoint
710                  frame.  */
711               get_current_frame ();
712               fi = find_frame_addr_in_frame_chain (b->watchpoint_frame);
713               within_current_scope = (fi != NULL);
714               if (within_current_scope)
715                 select_frame (fi, -1);
716             }
717         
718           if (within_current_scope)
719             {
720               /* Evaluate the expression and cut the chain of values
721                  produced off from the value chain.  */
722               v = evaluate_expression (b->exp);
723               value_release_to_mark (mark);
724             
725               b->val_chain = v;
726               b->inserted = 1;
727
728               /* Look at each value on the value chain.  */
729               for ( ; v; v=v->next)
730                 {
731                   /* If it's a memory location, then we must watch it.  */
732                   if (v->lval == lval_memory)
733                     {
734                       int addr, len, type;
735                     
736                       addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
737                       len = TYPE_LENGTH (VALUE_TYPE (v));
738                       type = 0;
739                       if (b->type == bp_read_watchpoint)
740                         type = 1;
741                       else if (b->type == bp_access_watchpoint)
742                         type = 2;
743
744                       val = target_insert_watchpoint (addr, len, type);
745                       if (val == -1)
746                         {
747                           b->inserted = 0;
748                           break;
749                         }
750                       val = 0;
751                     }
752                 }
753               /* Failure to insert a watchpoint on any memory value in the
754                  value chain brings us here.  */
755               if (!b->inserted)
756                 warning ("Hardware watchpoint %d: Could not insert watchpoint\n",
757                          b->number);
758             }
759           else
760             {
761               printf_filtered ("\
762 Hardware watchpoint %d deleted because the program has left the block in\n\
763 which its expression is valid.\n", b->number);
764               if (b->related_breakpoint)
765                 b->related_breakpoint->disposition = del_at_next_stop;
766               b->disposition = del_at_next_stop;
767             }
768
769           /* Restore the frame and level.  */
770           if ((saved_frame != selected_frame) ||
771               (saved_level != selected_frame_level))
772             select_and_print_frame (saved_frame, saved_level);
773         } 
774       else if ((b->type == bp_catch_fork
775                 || b->type == bp_catch_vfork
776                 || b->type == bp_catch_exec)
777                && b->enable == enabled
778                && ! b->inserted
779                && ! b->duplicate)
780         {
781           val = -1;
782           switch (b->type)
783             {
784             case bp_catch_fork :
785               val = target_insert_fork_catchpoint (inferior_pid);
786               break;
787             case bp_catch_vfork :
788               val = target_insert_vfork_catchpoint (inferior_pid);
789               break;
790             case bp_catch_exec :
791               val = target_insert_exec_catchpoint (inferior_pid);
792               break;
793             }
794           if (val < 0)
795             {
796               target_terminal_ours_for_output ();
797               fprintf_unfiltered (gdb_stderr, "Cannot insert catchpoint %d:\n", b->number);
798             }
799           else
800             b->inserted = 1;
801         }
802     }
803   if (disabled_breaks)
804     printf_filtered ("\n");
805
806   return val;
807 }
808
809
810 int
811 remove_breakpoints ()
812 {
813   register struct breakpoint *b;
814   int val;
815
816   ALL_BREAKPOINTS (b)
817     {
818       if (b->inserted)
819         {
820           val = remove_breakpoint (b, mark_uninserted);
821           if (val != 0)
822             return val;
823         }
824     }
825   return 0;
826 }
827
828 int
829 reattach_breakpoints (pid)
830   int  pid;
831 {
832   register struct breakpoint *b;
833   int val;
834   int  saved_inferior_pid = inferior_pid;
835
836   inferior_pid = pid;  /* Because remove_breakpoint will use this global. */
837   ALL_BREAKPOINTS (b)
838     {
839       if (b->inserted)
840         {
841           remove_breakpoint (b, mark_inserted);
842           if (b->type == bp_hardware_breakpoint)
843             val = target_insert_hw_breakpoint(b->address, b->shadow_contents);
844           else
845             val = target_insert_breakpoint(b->address, b->shadow_contents);
846           if (val != 0)
847             {
848               inferior_pid = saved_inferior_pid;
849               return val;
850             }
851         }
852     }
853   inferior_pid = saved_inferior_pid;
854   return 0;
855 }
856
857 void
858 update_breakpoints_after_exec ()
859 {
860   struct breakpoint *  b;
861   struct breakpoint *  temp;
862
863   /* Doing this first prevents the badness of having delete_breakpoint()
864      write a breakpoint's current "shadow contents" to lift the bp.  That
865      shadow is NOT valid after an exec()! */
866   mark_breakpoints_out ();
867
868   ALL_BREAKPOINTS_SAFE (b, temp)
869     {
870       /* Solib breakpoints must be explicitly reset after an exec(). */
871       if (b->type == bp_shlib_event)
872         {
873           delete_breakpoint (b);
874           continue;
875         }
876
877       /* Step-resume breakpoints are meaningless after an exec(). */
878       if (b->type == bp_step_resume)
879         {
880           delete_breakpoint (b);
881           continue;
882         }
883
884       /* Ditto the sigtramp handler breakpoints. */
885       if (b->type == bp_through_sigtramp)
886         {
887           delete_breakpoint (b);
888           continue;
889         }
890
891       /* Ditto the exception-handling catchpoints. */
892       if ((b->type == bp_catch_catch) || (b->type == bp_catch_throw))
893         {
894           delete_breakpoint (b);
895           continue;
896         }
897
898       /* Don't delete an exec catchpoint, because else the inferior
899          won't stop when it ought!
900
901          Similarly, we probably ought to keep vfork catchpoints, 'cause
902          on this target, we may not be able to stop when the vfork is seen,
903          but only when the subsequent exec is seen.  (And because deleting
904          fork catchpoints here but not vfork catchpoints will seem mysterious
905          to users, keep those too.)
906
907          ??rehrauer: Let's hope that merely clearing out this catchpoint's
908          target address field, if any, is sufficient to have it be reset
909          automagically.  Certainly on HP-UX that's true. */
910       if ((b->type == bp_catch_exec) ||
911           (b->type == bp_catch_vfork) ||
912           (b->type == bp_catch_fork))
913         {
914           b->address = (CORE_ADDR) NULL;
915           continue;
916         }
917
918       /* bp_finish is a special case.  The only way we ought to be able
919          to see one of these when an exec() has happened, is if the user
920          caught a vfork, and then said "finish".  Ordinarily a finish just
921          carries them to the call-site of the current callee, by setting
922          a temporary bp there and resuming.  But in this case, the finish
923          will carry them entirely through the vfork & exec.
924
925          We don't want to allow a bp_finish to remain inserted now.  But
926          we can't safely delete it, 'cause finish_command has a handle to
927          the bp on a bpstat, and will later want to delete it.  There's a
928          chance (and I've seen it happen) that if we delete the bp_finish
929          here, that its storage will get reused by the time finish_command
930          gets 'round to deleting the "use to be a bp_finish" breakpoint.
931          We really must allow finish_command to delete a bp_finish.
932
933          In the absense of a general solution for the "how do we know it's
934          safe to delete something others may have handles to?" problem, what
935          we'll do here is just uninsert the bp_finish, and let finish_command
936          delete it.
937
938          (We know the bp_finish is "doomed" in the sense that it's momentary,
939          and will be deleted as soon as finish_command sees the inferior stopped.
940          So it doesn't matter that the bp's address is probably bogus in the
941          new a.out, unlike e.g., the solib breakpoints.)  */
942       if (b->type == bp_finish)
943         {
944           continue;
945         }
946
947       /* Without a symbolic address, we have little hope of the
948          pre-exec() address meaning the same thing in the post-exec()
949          a.out. */
950       if (b->addr_string == NULL)
951         {
952           delete_breakpoint (b);
953           continue;
954         }
955
956       /* If this breakpoint has survived the above battery of checks, then
957          it must have a symbolic address.  Be sure that it gets reevaluated
958          to a target address, rather than reusing the old evaluation.  */
959       b->address = (CORE_ADDR) NULL;
960     }
961 }
962
963 int
964 detach_breakpoints (pid)
965   int  pid;
966 {
967   register struct breakpoint *b;
968   int val;
969   int  saved_inferior_pid = inferior_pid;
970  
971   if (pid == inferior_pid)
972     error ("Cannot detach breakpoints of inferior_pid");
973  
974   inferior_pid = pid;  /* Because remove_breakpoint will use this global. */
975   ALL_BREAKPOINTS (b)
976     {
977       if (b->inserted)
978         {
979           val = remove_breakpoint (b, mark_inserted);
980           if (val != 0)
981             {
982               inferior_pid = saved_inferior_pid;
983               return val;
984             }
985         }
986     }
987   inferior_pid = saved_inferior_pid;
988   return 0;
989 }
990
991 static int
992 remove_breakpoint (b, is)
993      struct breakpoint *b;
994      insertion_state_t  is;
995 {
996   int val;
997   
998   if (b->type == bp_none)
999     warning ("attempted to remove apparently deleted breakpoint #%d?\n", b->number);
1000
1001   if (b->type != bp_watchpoint
1002       && b->type != bp_hardware_watchpoint
1003       && b->type != bp_read_watchpoint
1004       && b->type != bp_access_watchpoint
1005       && b->type != bp_catch_fork
1006       && b->type != bp_catch_vfork
1007       && b->type != bp_catch_exec
1008       && b->type != bp_catch_catch
1009       && b->type != bp_catch_throw)
1010       
1011     {
1012       if (b->type == bp_hardware_breakpoint)
1013         val = target_remove_hw_breakpoint(b->address, b->shadow_contents);
1014       else
1015         {
1016           /* Check to see if breakpoint is in an overlay section;
1017              if so, we should remove the breakpoint at the LMA address.
1018              If that is not equal to the raw address, then we should 
1019              presumable remove the breakpoint there as well.  */
1020           if (overlay_debugging && b->section && 
1021               section_is_overlay (b->section))
1022             {
1023               CORE_ADDR addr;
1024
1025               addr = overlay_unmapped_address (b->address, b->section);
1026               val = target_remove_breakpoint (addr, b->shadow_contents);
1027               /* This would be the time to check val, to see if the
1028                  shadow breakpoint write to the load address succeeded.  
1029                  However, this might be an ordinary occurrance, eg. if 
1030                  the unmapped overlay is in ROM.  */
1031               val = 0;  /* in case unmapped address failed */
1032               if (section_is_mapped (b->section))
1033                 val = target_remove_breakpoint (b->address, 
1034                                                 b->shadow_contents);
1035             }
1036           else /* ordinary (non-overlay) address */
1037             val = target_remove_breakpoint(b->address, b->shadow_contents);
1038         }
1039       if (val)
1040         return val;
1041       b->inserted = (is == mark_inserted);
1042     }
1043   else if ((b->type == bp_hardware_watchpoint ||
1044             b->type == bp_read_watchpoint ||
1045             b->type == bp_access_watchpoint)
1046            && b->enable == enabled
1047            && ! b->duplicate)
1048     {
1049       value_ptr v, n;
1050       
1051       b->inserted = (is == mark_inserted);
1052       /* Walk down the saved value chain.  */
1053       for (v = b->val_chain; v; v = v->next)
1054         {
1055           /* For each memory reference remove the watchpoint
1056              at that address.  */
1057           if (v->lval == lval_memory)
1058             {
1059               int addr, len, type;
1060               
1061               addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1062               len = TYPE_LENGTH (VALUE_TYPE (v));
1063               type = 0;
1064               if (b->type == bp_read_watchpoint)
1065                 type = 1;
1066               else if (b->type == bp_access_watchpoint)
1067                 type = 2;
1068
1069               val = target_remove_watchpoint (addr, len, type);
1070               if (val == -1)
1071                 b->inserted = 1;
1072               val = 0;
1073             }
1074         }
1075       /* Failure to remove any of the hardware watchpoints comes here.  */
1076       if ((is == mark_uninserted) && (b->inserted))
1077         warning ("Hardware watchpoint %d: Could not remove watchpoint\n",
1078                  b->number);
1079       
1080       /* Free the saved value chain.  We will construct a new one
1081          the next time the watchpoint is inserted.  */
1082       for (v = b->val_chain; v; v = n)
1083         {
1084           n = v->next;
1085           value_free (v);
1086         }
1087       b->val_chain = NULL;
1088     }
1089   else if ((b->type == bp_catch_fork ||
1090             b->type == bp_catch_vfork ||
1091             b->type == bp_catch_exec)
1092            && b->enable == enabled
1093            && ! b->duplicate)
1094     {
1095       val = -1;
1096       switch (b->type)
1097         {
1098           case bp_catch_fork:
1099             val = target_remove_fork_catchpoint (inferior_pid);
1100             break;
1101           case bp_catch_vfork :
1102             val = target_remove_vfork_catchpoint (inferior_pid);
1103             break;
1104           case bp_catch_exec :
1105             val = target_remove_exec_catchpoint (inferior_pid);
1106             break;
1107         }
1108       if (val)
1109         return val;
1110       b->inserted = (is == mark_inserted);
1111     }
1112   else if ((b->type == bp_catch_catch ||
1113             b->type == bp_catch_throw)
1114            && b->enable == enabled
1115            && ! b->duplicate)
1116     {
1117
1118       val = target_remove_breakpoint(b->address, b->shadow_contents);
1119       if (val)
1120         return val;
1121       b->inserted = (is == mark_inserted);
1122     }
1123   else if (ep_is_exception_catchpoint (b)
1124            && b->inserted /* sometimes previous insert doesn't happen */ 
1125            && b->enable == enabled
1126            && ! b->duplicate)
1127     {
1128
1129       val = target_remove_breakpoint(b->address, b->shadow_contents);
1130       if (val)
1131           return val;
1132       
1133       b->inserted = (is == mark_inserted);
1134     }
1135
1136   return 0;
1137 }
1138
1139 /* Clear the "inserted" flag in all breakpoints.  */
1140
1141 void
1142 mark_breakpoints_out ()
1143 {
1144   register struct breakpoint *b;
1145
1146   ALL_BREAKPOINTS (b)
1147     b->inserted = 0;
1148 }
1149
1150 /* Clear the "inserted" flag in all breakpoints and delete any breakpoints
1151    which should go away between runs of the program.
1152
1153    Plus other such housekeeping that has to be done for breakpoints
1154    between runs.
1155
1156    Note: this function gets called at the end of a run (by generic_mourn_inferior)
1157    and when a run begins (by init_wait_for_inferior). */ 
1158
1159
1160
1161 void
1162 breakpoint_init_inferior (context)
1163   enum inf_context context;
1164 {
1165   register struct breakpoint *b, *temp;
1166   static int warning_needed = 0;
1167
1168   ALL_BREAKPOINTS_SAFE (b, temp)
1169     {
1170       b->inserted = 0;
1171
1172       switch (b->type)
1173         {
1174         case bp_call_dummy:
1175         case bp_watchpoint_scope:
1176
1177           /* If the call dummy breakpoint is at the entry point it will
1178              cause problems when the inferior is rerun, so we better
1179              get rid of it. 
1180
1181              Also get rid of scope breakpoints.  */
1182           delete_breakpoint (b);
1183           break;
1184
1185         case bp_watchpoint:
1186         case bp_hardware_watchpoint:
1187         case bp_read_watchpoint:
1188         case bp_access_watchpoint:
1189
1190           /* Likewise for watchpoints on local expressions.  */
1191           if (b->exp_valid_block != NULL)
1192             delete_breakpoint (b);
1193           break;
1194         default:
1195          /* Likewise for exception catchpoints in dynamic-linked
1196          executables where required */
1197          if (ep_is_exception_catchpoint (b) &&
1198             exception_catchpoints_are_fragile)
1199           {
1200             warning_needed = 1;
1201             delete_breakpoint (b);
1202           }
1203           break;
1204         }
1205     }
1206
1207   if (exception_catchpoints_are_fragile)
1208     exception_support_initialized = 0;
1209
1210   /* Don't issue the warning unless it's really needed... */ 
1211   if (warning_needed && (context != inf_exited))
1212     {
1213       warning ("Exception catchpoints from last run were deleted, you must reinsert them explicitly");
1214       warning_needed = 0;
1215     }  
1216 }
1217
1218 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
1219    When continuing from a location with a breakpoint,
1220    we actually single step once before calling insert_breakpoints.  */
1221
1222 int
1223 breakpoint_here_p (pc)
1224      CORE_ADDR pc;
1225 {
1226   register struct breakpoint *b;
1227
1228   ALL_BREAKPOINTS (b)
1229     if (b->enable == enabled
1230         && b->enable != shlib_disabled
1231         && b->enable != call_disabled
1232         && b->address == pc)    /* bp is enabled and matches pc */
1233       {
1234         if (overlay_debugging &&
1235             section_is_overlay (b->section) &&
1236             !section_is_mapped (b->section))
1237           continue;             /* unmapped overlay -- can't be a match */
1238         else
1239           return 1;
1240       }
1241
1242   return 0;
1243 }
1244
1245 /* breakpoint_inserted_here_p (PC) is just like breakpoint_here_p(), but it
1246    only returns true if there is actually a breakpoint inserted at PC.  */
1247
1248 int
1249 breakpoint_inserted_here_p (pc)
1250      CORE_ADDR pc;
1251 {
1252   register struct breakpoint *b;
1253
1254   ALL_BREAKPOINTS (b)
1255     if (b->inserted
1256         && b->address == pc)    /* bp is inserted and matches pc */
1257       {
1258         if (overlay_debugging &&
1259             section_is_overlay (b->section) &&
1260             !section_is_mapped (b->section))
1261           continue;             /* unmapped overlay -- can't be a match */
1262         else
1263           return 1;
1264       }
1265
1266   return 0;
1267 }
1268
1269 /* Return nonzero if FRAME is a dummy frame.  We can't use PC_IN_CALL_DUMMY
1270    because figuring out the saved SP would take too much time, at least using
1271    get_saved_register on the 68k.  This means that for this function to
1272    work right a port must use the bp_call_dummy breakpoint.  */
1273
1274 int
1275 frame_in_dummy (frame)
1276      struct frame_info *frame;
1277 {
1278 #ifdef CALL_DUMMY
1279 #ifdef USE_GENERIC_DUMMY_FRAMES 
1280   return generic_pc_in_call_dummy (frame->pc, frame->frame);
1281 #else
1282   struct breakpoint *b;
1283
1284   ALL_BREAKPOINTS (b)
1285     {
1286       static ULONGEST dummy[] = CALL_DUMMY;
1287
1288       if (b->type == bp_call_dummy
1289           && b->frame == frame->frame
1290
1291           /* We need to check the PC as well as the frame on the sparc,
1292              for signals.exp in the testsuite.  */
1293           && (frame->pc
1294               >= (b->address
1295                   - sizeof (dummy) / sizeof (LONGEST) * REGISTER_SIZE))
1296           && frame->pc <= b->address)
1297         return 1;
1298     }
1299 #endif  /* GENERIC_DUMMY_FRAMES */
1300 #endif /* CALL_DUMMY */
1301   return 0;
1302 }
1303
1304 /* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
1305    is valid for process/thread PID.  */
1306
1307 int
1308 breakpoint_thread_match (pc, pid)
1309      CORE_ADDR pc;
1310      int pid;
1311 {
1312   struct breakpoint *b;
1313   int thread;
1314
1315   thread = pid_to_thread_id (pid);
1316
1317   ALL_BREAKPOINTS (b)
1318     if (b->enable != disabled
1319         && b->enable != shlib_disabled
1320         && b->enable != call_disabled
1321         && b->address == pc
1322         && (b->thread == -1 || b->thread == thread))
1323       {
1324         if (overlay_debugging &&
1325             section_is_overlay (b->section) &&
1326             !section_is_mapped (b->section))
1327           continue;             /* unmapped overlay -- can't be a match */
1328         else
1329           return 1;
1330       }
1331
1332   return 0;
1333 }
1334
1335 \f
1336 /* bpstat stuff.  External routines' interfaces are documented
1337    in breakpoint.h.  */
1338
1339 int
1340 ep_is_catchpoint (ep)
1341   struct breakpoint *  ep;
1342 {
1343   return
1344     (ep->type == bp_catch_load)
1345     || (ep->type == bp_catch_unload)
1346     || (ep->type == bp_catch_fork)
1347     || (ep->type == bp_catch_vfork)
1348     || (ep->type == bp_catch_exec)
1349     || (ep->type == bp_catch_catch)
1350     || (ep->type == bp_catch_throw)
1351
1352
1353     /* ??rehrauer: Add more kinds here, as are implemented... */
1354     ;
1355 }
1356  
1357 int
1358 ep_is_shlib_catchpoint (ep)
1359   struct breakpoint *  ep;
1360 {
1361   return
1362     (ep->type == bp_catch_load)
1363     || (ep->type == bp_catch_unload)
1364     ;
1365 }
1366
1367 int
1368 ep_is_exception_catchpoint (ep)
1369   struct breakpoint *  ep;
1370 {
1371   return
1372     (ep->type == bp_catch_catch)
1373     || (ep->type == bp_catch_throw)
1374     ;
1375 }
1376
1377 /* Clear a bpstat so that it says we are not at any breakpoint.
1378    Also free any storage that is part of a bpstat.  */
1379
1380 void
1381 bpstat_clear (bsp)
1382      bpstat *bsp;
1383 {
1384   bpstat p;
1385   bpstat q;
1386
1387   if (bsp == 0)
1388     return;
1389   p = *bsp;
1390   while (p != NULL)
1391     {
1392       q = p->next;
1393       if (p->old_val != NULL)
1394         value_free (p->old_val);
1395       free ((PTR)p);
1396       p = q;
1397     }
1398   *bsp = NULL;
1399 }
1400
1401 /* Return a copy of a bpstat.  Like "bs1 = bs2" but all storage that
1402    is part of the bpstat is copied as well.  */
1403
1404 bpstat
1405 bpstat_copy (bs)
1406      bpstat bs;
1407 {
1408   bpstat p = NULL;
1409   bpstat tmp;
1410   bpstat retval = NULL;
1411
1412   if (bs == NULL)
1413     return bs;
1414
1415   for (; bs != NULL; bs = bs->next)
1416     {
1417       tmp = (bpstat) xmalloc (sizeof (*tmp));
1418       memcpy (tmp, bs, sizeof (*tmp));
1419       if (p == NULL)
1420         /* This is the first thing in the chain.  */
1421         retval = tmp;
1422       else
1423         p->next = tmp;
1424       p = tmp;
1425     }
1426   p->next = NULL;
1427   return retval;
1428 }
1429
1430 /* Find the bpstat associated with this breakpoint */
1431
1432 bpstat
1433 bpstat_find_breakpoint(bsp, breakpoint)
1434      bpstat bsp;
1435      struct breakpoint *breakpoint;
1436 {
1437   if (bsp == NULL) return NULL;
1438
1439   for (;bsp != NULL; bsp = bsp->next) {
1440     if (bsp->breakpoint_at == breakpoint) return bsp;
1441   }
1442   return NULL;
1443 }
1444
1445 /* Find a step_resume breakpoint associated with this bpstat.
1446    (If there are multiple step_resume bp's on the list, this function
1447    will arbitrarily pick one.)
1448
1449    It is an error to use this function if BPSTAT doesn't contain a
1450    step_resume breakpoint.
1451
1452    See wait_for_inferior's use of this function.  */
1453 struct breakpoint *
1454 bpstat_find_step_resume_breakpoint (bsp)
1455   bpstat  bsp;
1456 {
1457   if (bsp == NULL)
1458     error ("Internal error (bpstat_find_step_resume_breakpoint)");
1459
1460   for (; bsp != NULL; bsp = bsp->next)
1461     {
1462       if ((bsp->breakpoint_at != NULL) &&
1463           (bsp->breakpoint_at->type == bp_step_resume))
1464         return bsp->breakpoint_at;
1465     }
1466
1467   error ("Internal error (no step_resume breakpoint found)");
1468 }
1469
1470
1471 /* Return the breakpoint number of the first breakpoint we are stopped
1472    at.  *BSP upon return is a bpstat which points to the remaining
1473    breakpoints stopped at (but which is not guaranteed to be good for
1474    anything but further calls to bpstat_num).
1475    Return 0 if passed a bpstat which does not indicate any breakpoints.  */
1476
1477 int
1478 bpstat_num (bsp)
1479      bpstat *bsp;
1480 {
1481   struct breakpoint *b;
1482
1483   if ((*bsp) == NULL)
1484     return 0;                   /* No more breakpoint values */
1485   else
1486     {
1487       b = (*bsp)->breakpoint_at;
1488       *bsp = (*bsp)->next;
1489       if (b == NULL)
1490         return -1;              /* breakpoint that's been deleted since */
1491       else
1492         return b->number;       /* We have its number */
1493     }
1494 }
1495
1496 /* Modify BS so that the actions will not be performed.  */
1497
1498 void
1499 bpstat_clear_actions (bs)
1500      bpstat bs;
1501 {
1502   for (; bs != NULL; bs = bs->next)
1503     {
1504       bs->commands = NULL;
1505       if (bs->old_val != NULL)
1506         {
1507           value_free (bs->old_val);
1508           bs->old_val = NULL;
1509         }
1510     }
1511 }
1512
1513 /* Stub for cleaning up our state if we error-out of a breakpoint command */
1514 /* ARGSUSED */
1515 static void
1516 cleanup_executing_breakpoints (ignore)
1517      PTR ignore;
1518 {
1519   executing_breakpoint_commands = 0;
1520 }
1521
1522 /* Execute all the commands associated with all the breakpoints at this
1523    location.  Any of these commands could cause the process to proceed
1524    beyond this point, etc.  We look out for such changes by checking
1525    the global "breakpoint_proceeded" after each command.  */
1526
1527 void
1528 bpstat_do_actions (bsp)
1529      bpstat *bsp;
1530 {
1531   bpstat bs;
1532   struct cleanup *old_chain;
1533   struct command_line *cmd;
1534
1535   /* Avoid endless recursion if a `source' command is contained
1536      in bs->commands.  */
1537   if (executing_breakpoint_commands)
1538     return;
1539
1540   executing_breakpoint_commands = 1;
1541   old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
1542
1543 top:
1544   /* Note that (as of this writing), our callers all appear to
1545      be passing us the address of global stop_bpstat.  And, if
1546      our calls to execute_control_command cause the inferior to
1547      proceed, that global (and hence, *bsp) will change.
1548
1549      We must be careful to not touch *bsp unless the inferior
1550      has not proceeded. */
1551
1552   /* This pointer will iterate over the list of bpstat's. */
1553   bs = *bsp;
1554
1555   breakpoint_proceeded = 0;
1556   for (; bs != NULL; bs = bs->next)
1557     {
1558       cmd = bs->commands;
1559       while (cmd != NULL)
1560         {
1561           execute_control_command (cmd);
1562
1563           if (breakpoint_proceeded)
1564             break;
1565           else
1566             cmd = cmd->next;
1567         }
1568       if (breakpoint_proceeded)
1569         /* The inferior is proceeded by the command; bomb out now.
1570            The bpstat chain has been blown away by wait_for_inferior.
1571            But since execution has stopped again, there is a new bpstat
1572            to look at, so start over.  */
1573         goto top;
1574       else
1575         bs->commands = NULL;
1576     }
1577
1578   executing_breakpoint_commands = 0;
1579   discard_cleanups (old_chain);
1580 }
1581
1582 /* This is the normal print_it function for a bpstat.  In the future,
1583    much of this logic could (should?) be moved to bpstat_stop_status,
1584    by having it set different print_it functions.
1585
1586    Current scheme: When we stop, bpstat_print() is called.
1587    It loops through the bpstat list of things causing this stop,
1588    calling the print_it function for each one. The default
1589    print_it function, used for breakpoints, is print_it_normal().
1590    (Also see print_it_noop() and print_it_done()).
1591    
1592    Return values from this routine (used by bpstat_print() to
1593    decide what to do):
1594    1: Means we printed something, and we do *not* desire that
1595       something to be followed by a location.
1596    0: Means we printed something, and we *do*  desire that
1597       something to be followed by a location.
1598    -1: Means we printed nothing.  */
1599
1600 static int
1601 print_it_normal (bs)
1602      bpstat bs;
1603 {
1604   /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
1605      which has since been deleted.  */
1606   if (bs->breakpoint_at == NULL
1607       || (bs->breakpoint_at->type != bp_breakpoint
1608           && bs->breakpoint_at->type != bp_catch_load
1609           && bs->breakpoint_at->type != bp_catch_unload
1610           && bs->breakpoint_at->type != bp_catch_fork
1611           && bs->breakpoint_at->type != bp_catch_vfork
1612           && bs->breakpoint_at->type != bp_catch_exec
1613           && bs->breakpoint_at->type != bp_catch_catch
1614           && bs->breakpoint_at->type != bp_catch_throw
1615           && bs->breakpoint_at->type != bp_hardware_breakpoint
1616           && bs->breakpoint_at->type != bp_watchpoint
1617           && bs->breakpoint_at->type != bp_read_watchpoint
1618           && bs->breakpoint_at->type != bp_access_watchpoint
1619           && bs->breakpoint_at->type != bp_hardware_watchpoint))
1620     return -1;
1621
1622   if (ep_is_shlib_catchpoint (bs->breakpoint_at))
1623     {
1624       annotate_catchpoint (bs->breakpoint_at->number);
1625       printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1626       if (bs->breakpoint_at->type == bp_catch_load)
1627         printf_filtered ("loaded");
1628       else if (bs->breakpoint_at->type == bp_catch_unload)
1629         printf_filtered ("unloaded");
1630       printf_filtered (" %s), ", bs->breakpoint_at->triggered_dll_pathname);
1631       return 0;
1632     }
1633   else if (bs->breakpoint_at->type == bp_catch_fork ||
1634       bs->breakpoint_at->type == bp_catch_vfork)
1635     {
1636       annotate_catchpoint (bs->breakpoint_at->number);
1637       printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1638       if (bs->breakpoint_at->type == bp_catch_fork)
1639         printf_filtered ("forked");
1640       else if (bs->breakpoint_at->type == bp_catch_vfork)
1641         printf_filtered ("vforked");
1642       printf_filtered (" process %d), ", bs->breakpoint_at->forked_inferior_pid);
1643       return 0;
1644     }
1645   else if (bs->breakpoint_at->type == bp_catch_exec)
1646     {
1647       annotate_catchpoint (bs->breakpoint_at->number);
1648       printf_filtered ("\nCatchpoint %d (exec'd %s), ",
1649                        bs->breakpoint_at->number,
1650                        bs->breakpoint_at->exec_pathname);
1651       return 0;
1652     }
1653  else if (bs->breakpoint_at->type == bp_catch_catch)
1654     {
1655       if (current_exception_event && (CURRENT_EXCEPTION_KIND == EX_EVENT_CATCH))
1656         {
1657           annotate_catchpoint (bs->breakpoint_at->number);
1658           printf_filtered ("\nCatchpoint %d (exception caught), ", bs->breakpoint_at->number);
1659           printf_filtered ("throw location ");
1660           if (CURRENT_EXCEPTION_THROW_PC && CURRENT_EXCEPTION_THROW_LINE)
1661                 printf_filtered ("%s:%d",
1662                                  CURRENT_EXCEPTION_THROW_FILE,
1663                                  CURRENT_EXCEPTION_THROW_LINE);
1664           else
1665             printf_filtered ("unknown");
1666           
1667           printf_filtered (", catch location ");
1668           if (CURRENT_EXCEPTION_CATCH_PC  && CURRENT_EXCEPTION_CATCH_LINE)
1669             printf_filtered ("%s:%d",
1670                              CURRENT_EXCEPTION_CATCH_FILE,
1671                              CURRENT_EXCEPTION_CATCH_LINE);
1672           else
1673             printf_filtered ("unknown");
1674           
1675           printf_filtered ("\n");
1676           return 1;   /* don't bother to print location frame info */ 
1677         }
1678       else
1679         {
1680           return -1;  /* really throw, some other bpstat will handle it */
1681         }
1682     }
1683   else if (bs->breakpoint_at->type == bp_catch_throw)
1684     {
1685       if (current_exception_event && (CURRENT_EXCEPTION_KIND == EX_EVENT_THROW))
1686         {
1687           annotate_catchpoint (bs->breakpoint_at->number);
1688           printf_filtered ("\nCatchpoint %d (exception thrown), ", bs->breakpoint_at->number);
1689           printf_filtered ("throw location ");
1690           if (CURRENT_EXCEPTION_THROW_PC && CURRENT_EXCEPTION_THROW_LINE)
1691                 printf_filtered ("%s:%d",
1692                                  CURRENT_EXCEPTION_THROW_FILE,
1693                                  CURRENT_EXCEPTION_THROW_LINE);
1694           else
1695             printf_filtered ("unknown");
1696           
1697           printf_filtered (", catch location ");
1698           if (CURRENT_EXCEPTION_CATCH_PC  && CURRENT_EXCEPTION_CATCH_LINE)
1699             printf_filtered ("%s:%d",
1700                              CURRENT_EXCEPTION_CATCH_FILE,
1701                              CURRENT_EXCEPTION_CATCH_LINE);
1702           else
1703             printf_filtered ("unknown");
1704           
1705           printf_filtered ("\n");
1706           return 1;   /* don't bother to print location frame info */ 
1707         }
1708       else
1709         {
1710           return -1;  /* really catch, some other bpstat willhandle it */
1711         }
1712     }
1713
1714   else if (bs->breakpoint_at->type == bp_breakpoint ||
1715       bs->breakpoint_at->type == bp_hardware_breakpoint)
1716     {
1717       /* I think the user probably only wants to see one breakpoint
1718          number, not all of them.  */
1719       annotate_breakpoint (bs->breakpoint_at->number);
1720       printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
1721       return 0;
1722     }
1723   else if ((bs->old_val != NULL) &&
1724         (bs->breakpoint_at->type == bp_watchpoint ||
1725          bs->breakpoint_at->type == bp_access_watchpoint ||
1726          bs->breakpoint_at->type == bp_hardware_watchpoint))
1727     {
1728       annotate_watchpoint (bs->breakpoint_at->number);
1729       mention (bs->breakpoint_at);
1730       printf_filtered ("\nOld value = ");
1731       value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
1732       printf_filtered ("\nNew value = ");
1733       value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1734                    Val_pretty_default);
1735       printf_filtered ("\n");
1736       value_free (bs->old_val);
1737       bs->old_val = NULL;
1738       /* More than one watchpoint may have been triggered.  */
1739       return -1;
1740     }
1741   else if (bs->breakpoint_at->type == bp_access_watchpoint ||
1742            bs->breakpoint_at->type == bp_read_watchpoint)
1743     {
1744       mention (bs->breakpoint_at);
1745       printf_filtered ("\nValue = ");
1746       value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1747                    Val_pretty_default);
1748       printf_filtered ("\n");
1749       return -1;
1750     }
1751   /* We can't deal with it.  Maybe another member of the bpstat chain can.  */
1752   return -1;
1753 }
1754
1755 /* Print a message indicating what happened.
1756    This is called from normal_stop().
1757    The input to this routine is the head of the bpstat list - a list
1758    of the eventpoints that caused this stop.
1759    This routine calls the "print_it" routine(s) associated
1760    with these eventpoints. This will print (for example)
1761    the "Breakpoint n," part of the output.
1762    The return value of this routine is one of:
1763
1764    -1: Means we printed nothing
1765    0: Means we printed something, and expect subsequent
1766       code to print the location. An example is 
1767       "Breakpoint 1, " which should be followed by
1768       the location.
1769    1 : Means we printed something, but there is no need
1770        to also print the location part of the message.
1771        An example is the catch/throw messages, which
1772        don't require a location appended to the end.  */ 
1773
1774 int
1775 bpstat_print (bs)
1776      bpstat bs;
1777 {
1778   int val;
1779   
1780   if (bs == NULL)
1781     return -1;
1782
1783   val = (*bs->print_it) (bs);
1784   if (val >= 0)
1785     return val;
1786   
1787   /* Maybe another breakpoint in the chain caused us to stop.
1788      (Currently all watchpoints go on the bpstat whether hit or
1789      not.  That probably could (should) be changed, provided care is taken
1790      with respect to bpstat_explains_signal).  */
1791   if (bs->next)
1792     return bpstat_print (bs->next);
1793
1794   /* We reached the end of the chain without printing anything.  */
1795   return -1;
1796 }
1797
1798 /* Evaluate the expression EXP and return 1 if value is zero.
1799    This is used inside a catch_errors to evaluate the breakpoint condition. 
1800    The argument is a "struct expression *" that has been cast to char * to 
1801    make it pass through catch_errors.  */
1802
1803 static int
1804 breakpoint_cond_eval (exp)
1805      PTR exp;
1806 {
1807   value_ptr mark = value_mark ();
1808   int i = !value_true (evaluate_expression ((struct expression *)exp));
1809   value_free_to_mark (mark);
1810   return i;
1811 }
1812
1813 /* Allocate a new bpstat and chain it to the current one.  */
1814
1815 static bpstat
1816 bpstat_alloc (b, cbs)
1817      register struct breakpoint *b;
1818      bpstat cbs;                        /* Current "bs" value */
1819 {
1820   bpstat bs;
1821
1822   bs = (bpstat) xmalloc (sizeof (*bs));
1823   cbs->next = bs;
1824   bs->breakpoint_at = b;
1825   /* If the condition is false, etc., don't do the commands.  */
1826   bs->commands = NULL;
1827   bs->old_val = NULL;
1828   bs->print_it = print_it_normal;
1829   return bs;
1830 }
1831 \f
1832 /* Possible return values for watchpoint_check (this can't be an enum
1833    because of check_errors).  */
1834 /* The watchpoint has been deleted.  */
1835 #define WP_DELETED 1
1836 /* The value has changed.  */
1837 #define WP_VALUE_CHANGED 2
1838 /* The value has not changed.  */
1839 #define WP_VALUE_NOT_CHANGED 3
1840
1841 #define BP_TEMPFLAG 1
1842 #define BP_HARDWAREFLAG 2
1843
1844 /* Check watchpoint condition.  */
1845
1846 static int
1847 watchpoint_check (p)
1848      PTR p;
1849 {
1850   bpstat bs = (bpstat) p;
1851   struct breakpoint *b;
1852   struct frame_info *fr;
1853   int within_current_scope;
1854
1855   b = bs->breakpoint_at;
1856
1857   if (b->exp_valid_block == NULL)
1858     within_current_scope = 1;
1859   else
1860     {
1861       /* There is no current frame at this moment.  If we're going to have
1862          any chance of handling watchpoints on local variables, we'll need
1863          the frame chain (so we can determine if we're in scope).  */
1864       reinit_frame_cache();
1865       fr = find_frame_addr_in_frame_chain (b->watchpoint_frame);
1866       within_current_scope = (fr != NULL);
1867       if (within_current_scope)
1868         /* If we end up stopping, the current frame will get selected
1869            in normal_stop.  So this call to select_frame won't affect
1870            the user.  */
1871         select_frame (fr, -1);
1872     }
1873       
1874   if (within_current_scope)
1875     {
1876       /* We use value_{,free_to_}mark because it could be a
1877          *long* time before we return to the command level and
1878          call free_all_values.  We can't call free_all_values because
1879          we might be in the middle of evaluating a function call.  */
1880
1881       value_ptr mark = value_mark ();
1882       value_ptr new_val = evaluate_expression (bs->breakpoint_at->exp);
1883       if (!value_equal (b->val, new_val))
1884         {
1885           release_value (new_val);
1886           value_free_to_mark (mark);
1887           bs->old_val = b->val;
1888           b->val = new_val;
1889           /* We will stop here */
1890           return WP_VALUE_CHANGED;
1891         }
1892       else
1893         {
1894           /* Nothing changed, don't do anything.  */
1895           value_free_to_mark (mark);
1896           /* We won't stop here */
1897           return WP_VALUE_NOT_CHANGED;
1898         }
1899     }
1900   else
1901     {
1902       /* This seems like the only logical thing to do because
1903          if we temporarily ignored the watchpoint, then when
1904          we reenter the block in which it is valid it contains
1905          garbage (in the case of a function, it may have two
1906          garbage values, one before and one after the prologue).
1907          So we can't even detect the first assignment to it and
1908          watch after that (since the garbage may or may not equal
1909          the first value assigned).  */
1910       printf_filtered ("\
1911 Watchpoint %d deleted because the program has left the block in\n\
1912 which its expression is valid.\n", bs->breakpoint_at->number);
1913       if (b->related_breakpoint)
1914         b->related_breakpoint->disposition = del_at_next_stop;
1915       b->disposition = del_at_next_stop;
1916
1917       return WP_DELETED;
1918     }
1919 }
1920
1921 /* This is used when everything which needs to be printed has
1922    already been printed.  But we still want to print the frame.  */
1923
1924 /* Background: When we stop, bpstat_print() is called.
1925    It loops through the bpstat list of things causing this stop,
1926    calling the print_it function for each one. The default
1927    print_it function, used for breakpoints, is print_it_normal().
1928    Also see print_it_noop() and print_it_done() are the other 
1929    two possibilities. See comments in bpstat_print() and
1930    in header of print_it_normal() for more detail.  */
1931
1932 static int
1933 print_it_done (bs)
1934      bpstat bs;
1935 {
1936   return 0;
1937 }
1938
1939 /* This is used when nothing should be printed for this bpstat entry.  */
1940 /* Background: When we stop, bpstat_print() is called.
1941    It loops through the bpstat list of things causing this stop,
1942    calling the print_it function for each one. The default
1943    print_it function, used for breakpoints, is print_it_normal().
1944    Also see print_it_noop() and print_it_done() are the other 
1945    two possibilities. See comments in bpstat_print() and
1946    in header of print_it_normal() for more detail.  */
1947
1948 static int
1949 print_it_noop (bs)
1950      bpstat bs;
1951 {
1952   return -1;
1953 }
1954
1955 /* Get a bpstat associated with having just stopped at address *PC
1956    and frame address CORE_ADDRESS.  Update *PC to point at the
1957    breakpoint (if we hit a breakpoint).  NOT_A_BREAKPOINT is nonzero
1958    if this is known to not be a real breakpoint (it could still be a
1959    watchpoint, though).  */
1960
1961 /* Determine whether we stopped at a breakpoint, etc, or whether we
1962    don't understand this stop.  Result is a chain of bpstat's such that:
1963
1964         if we don't understand the stop, the result is a null pointer.
1965
1966         if we understand why we stopped, the result is not null.
1967
1968         Each element of the chain refers to a particular breakpoint or
1969         watchpoint at which we have stopped.  (We may have stopped for
1970         several reasons concurrently.)
1971
1972         Each element of the chain has valid next, breakpoint_at,
1973         commands, FIXME??? fields.  */
1974
1975 bpstat
1976 bpstat_stop_status (pc, not_a_breakpoint)
1977      CORE_ADDR *pc;
1978      int not_a_breakpoint;
1979 {
1980   register struct breakpoint *b, *temp;
1981   CORE_ADDR bp_addr;
1982   /* True if we've hit a breakpoint (as opposed to a watchpoint).  */
1983   int real_breakpoint = 0;
1984   /* Root of the chain of bpstat's */
1985   struct bpstats root_bs[1];
1986   /* Pointer to the last thing in the chain currently.  */
1987   bpstat bs = root_bs;
1988   static char message1[] =
1989             "Error evaluating expression for watchpoint %d\n";
1990   char message[sizeof (message1) + 30 /* slop */];
1991
1992   /* Get the address where the breakpoint would have been.  */
1993   bp_addr = *pc - DECR_PC_AFTER_BREAK;
1994
1995   ALL_BREAKPOINTS_SAFE (b, temp)
1996     {
1997       if (b->enable == disabled
1998           || b->enable == shlib_disabled
1999           || b->enable == call_disabled)
2000         continue;
2001
2002       if (b->type != bp_watchpoint
2003           && b->type != bp_hardware_watchpoint
2004           && b->type != bp_read_watchpoint
2005           && b->type != bp_access_watchpoint
2006           && b->type != bp_hardware_breakpoint
2007           && b->type != bp_catch_fork
2008           && b->type != bp_catch_vfork
2009           && b->type != bp_catch_exec
2010           && b->type != bp_catch_catch
2011           && b->type != bp_catch_throw)         /* a non-watchpoint bp */
2012         if (b->address != bp_addr ||            /* address doesn't match or */
2013             (overlay_debugging &&               /* overlay doesn't match */
2014              section_is_overlay (b->section) &&
2015              !section_is_mapped (b->section)))
2016           continue;
2017
2018       if (b->type == bp_hardware_breakpoint
2019           && b->address != (bp_addr - DECR_PC_AFTER_HW_BREAK))
2020         continue;
2021
2022       if (b->type != bp_watchpoint
2023           && b->type != bp_hardware_watchpoint
2024           && b->type != bp_read_watchpoint
2025           && b->type != bp_access_watchpoint
2026           && not_a_breakpoint)
2027         continue;
2028
2029       /* Is this a catchpoint of a load or unload?  If so, did we
2030          get a load or unload of the specified library?  If not,
2031          ignore it. */
2032       if ((b->type == bp_catch_load)
2033 #if defined(SOLIB_HAVE_LOAD_EVENT)
2034           && (!SOLIB_HAVE_LOAD_EVENT(inferior_pid)
2035               || ((b->dll_pathname != NULL)
2036                   && (strcmp (b->dll_pathname, SOLIB_LOADED_LIBRARY_PATHNAME(inferior_pid)) != 0)))
2037 #endif
2038                   )
2039         continue;
2040  
2041       if ((b->type == bp_catch_unload)
2042 #if defined(SOLIB_HAVE_UNLOAD_EVENT)
2043           && (!SOLIB_HAVE_UNLOAD_EVENT(inferior_pid)
2044               || ((b->dll_pathname != NULL)
2045                   && (strcmp (b->dll_pathname, SOLIB_UNLOADED_LIBRARY_PATHNAME(inferior_pid)) != 0)))
2046 #endif
2047           )
2048         continue;
2049  
2050       if ((b->type == bp_catch_fork)
2051           && ! target_has_forked (inferior_pid, &b->forked_inferior_pid))
2052           continue;
2053  
2054       if ((b->type == bp_catch_vfork)
2055           && ! target_has_vforked (inferior_pid, &b->forked_inferior_pid))
2056           continue;
2057  
2058       if ((b->type == bp_catch_exec)
2059           && ! target_has_execd (inferior_pid, &b->exec_pathname))
2060         continue;
2061
2062       if (ep_is_exception_catchpoint (b) &&
2063           !(current_exception_event = target_get_current_exception_event ()))
2064         continue;
2065
2066       /* Come here if it's a watchpoint, or if the break address matches */
2067
2068       bs = bpstat_alloc (b, bs);        /* Alloc a bpstat to explain stop */
2069
2070       /* Watchpoints may change this, if not found to have triggered. */
2071       bs->stop = 1;
2072       bs->print = 1;
2073
2074       sprintf (message, message1, b->number);
2075       if (b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
2076         {
2077           switch (catch_errors (watchpoint_check, bs, message, RETURN_MASK_ALL))
2078             {
2079             case WP_DELETED:
2080               /* We've already printed what needs to be printed.  */
2081               bs->print_it = print_it_done;
2082               /* Stop.  */
2083               break;
2084             case WP_VALUE_CHANGED:
2085               /* Stop.  */
2086               ++(b->hit_count);
2087               break;
2088             case WP_VALUE_NOT_CHANGED:
2089               /* Don't stop.  */
2090               bs->print_it = print_it_noop;
2091               bs->stop = 0;
2092               /* Don't consider this a hit.  */
2093               --(b->hit_count);
2094               continue;
2095             default:
2096               /* Can't happen.  */
2097               /* FALLTHROUGH */
2098             case 0:
2099               /* Error from catch_errors.  */
2100               printf_filtered ("Watchpoint %d deleted.\n", b->number);
2101               if (b->related_breakpoint)
2102                 b->related_breakpoint->disposition = del_at_next_stop;
2103               b->disposition = del_at_next_stop;
2104               /* We've already printed what needs to be printed.  */
2105               bs->print_it = print_it_done;
2106
2107               /* Stop.  */
2108               break;
2109             }
2110         }
2111       else if (b->type == bp_read_watchpoint || b->type == bp_access_watchpoint)
2112         {
2113           CORE_ADDR addr;
2114           value_ptr v;
2115           int found = 0;
2116
2117           addr = target_stopped_data_address();
2118           if (addr == 0) continue;
2119           for (v = b->val_chain; v; v = v->next)
2120             {
2121               if (v->lval == lval_memory)
2122                 {
2123                   CORE_ADDR vaddr;
2124
2125                   vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
2126                   if (addr == vaddr)
2127                     found = 1;
2128                 }
2129             }
2130           if (found) 
2131             switch (catch_errors (watchpoint_check, bs, message, RETURN_MASK_ALL))
2132               {
2133                 case WP_DELETED:
2134                   /* We've already printed what needs to be printed.  */
2135                   bs->print_it = print_it_done;
2136                   /* Stop.  */
2137                   break;
2138                 case WP_VALUE_CHANGED:
2139                 case WP_VALUE_NOT_CHANGED:
2140                   /* Stop.  */
2141                   ++(b->hit_count);
2142                   break;
2143                 default:
2144                   /* Can't happen.  */
2145                 case 0:
2146                   /* Error from catch_errors.  */
2147                   printf_filtered ("Watchpoint %d deleted.\n", b->number);
2148                   if (b->related_breakpoint)
2149                     b->related_breakpoint->disposition = del_at_next_stop;
2150                   b->disposition = del_at_next_stop;
2151                   /* We've already printed what needs to be printed.  */
2152                   bs->print_it = print_it_done;
2153                   break;
2154               }
2155         }
2156       else 
2157         {
2158           /* By definition, an encountered breakpoint is a triggered
2159              breakpoint. */
2160           ++(b->hit_count);
2161
2162           if (DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs)
2163              real_breakpoint = 1;
2164         }
2165
2166       if (b->frame && b->frame != (get_current_frame ())->frame &&
2167           (b->type == bp_step_resume && 
2168            (INNER_THAN (get_current_frame ()->frame, b->frame))))
2169         bs->stop = 0;
2170       else
2171         {
2172           int value_is_zero = 0;
2173
2174           if (b->cond)
2175             {
2176               /* Need to select the frame, with all that implies
2177                  so that the conditions will have the right context.  */
2178               select_frame (get_current_frame (), 0);
2179               value_is_zero
2180                 = catch_errors (breakpoint_cond_eval, (b->cond),
2181                                 "Error in testing breakpoint condition:\n",
2182                                 RETURN_MASK_ALL);
2183                                 /* FIXME-someday, should give breakpoint # */
2184               free_all_values ();
2185             }
2186           if (b->cond && value_is_zero)
2187             {
2188               bs->stop = 0;
2189               /* Don't consider this a hit.  */
2190               --(b->hit_count);
2191             }
2192           else if (b->ignore_count > 0)
2193             {
2194               b->ignore_count--;
2195               bs->stop = 0;
2196             }
2197           else
2198             {
2199               /* We will stop here */
2200               if (b->disposition == disable)
2201                 b->enable = disabled;
2202               bs->commands = b->commands;
2203               if (b->silent)
2204                 bs->print = 0;
2205               if (bs->commands &&
2206                   (STREQ ("silent", bs->commands->line) ||
2207                    (xdb_commands && STREQ ("Q", bs->commands->line))))
2208                 {
2209                   bs->commands = bs->commands->next;
2210                   bs->print = 0;
2211                 }
2212             }
2213         }
2214       /* Print nothing for this entry if we dont stop or if we dont print.  */
2215       if (bs->stop == 0 || bs->print == 0)
2216         bs->print_it = print_it_noop;
2217     }
2218
2219   bs->next = NULL;              /* Terminate the chain */
2220   bs = root_bs->next;           /* Re-grab the head of the chain */
2221
2222   if ((DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs) && bs)
2223     {
2224       if (real_breakpoint)
2225         {
2226           *pc = bp_addr;
2227 #if defined (SHIFT_INST_REGS)
2228           SHIFT_INST_REGS();
2229 #else /* No SHIFT_INST_REGS.  */
2230           write_pc (bp_addr);
2231 #endif /* No SHIFT_INST_REGS.  */
2232         }
2233     }
2234
2235   /* The value of a hardware watchpoint hasn't changed, but the
2236      intermediate memory locations we are watching may have.  */
2237   if (bs && ! bs->stop &&
2238       (bs->breakpoint_at->type == bp_hardware_watchpoint ||
2239        bs->breakpoint_at->type == bp_read_watchpoint ||
2240        bs->breakpoint_at->type == bp_access_watchpoint))
2241     {
2242       remove_breakpoints ();
2243       insert_breakpoints ();
2244     }
2245   return bs;
2246 }
2247 \f
2248 /* Tell what to do about this bpstat.  */
2249 struct bpstat_what
2250 bpstat_what (bs)
2251      bpstat bs;
2252 {
2253   /* Classify each bpstat as one of the following.  */
2254   enum class {
2255     /* This bpstat element has no effect on the main_action.  */
2256     no_effect = 0,
2257
2258     /* There was a watchpoint, stop but don't print.  */
2259     wp_silent,
2260
2261     /* There was a watchpoint, stop and print.  */
2262     wp_noisy,
2263
2264     /* There was a breakpoint but we're not stopping.  */
2265     bp_nostop,
2266
2267     /* There was a breakpoint, stop but don't print.  */
2268     bp_silent,
2269
2270     /* There was a breakpoint, stop and print.  */
2271     bp_noisy,
2272
2273     /* We hit the longjmp breakpoint.  */
2274     long_jump,
2275
2276     /* We hit the longjmp_resume breakpoint.  */
2277     long_resume,
2278
2279     /* We hit the step_resume breakpoint.  */
2280     step_resume,
2281
2282     /* We hit the through_sigtramp breakpoint.  */
2283     through_sig,
2284
2285     /* We hit the shared library event breakpoint.  */
2286     shlib_event,
2287
2288     /* We caught a shared library event.  */
2289     catch_shlib_event,
2290  
2291     /* This is just used to count how many enums there are.  */
2292     class_last
2293     };
2294
2295   /* Here is the table which drives this routine.  So that we can
2296      format it pretty, we define some abbreviations for the
2297      enum bpstat_what codes.  */
2298 #define kc BPSTAT_WHAT_KEEP_CHECKING
2299 #define ss BPSTAT_WHAT_STOP_SILENT
2300 #define sn BPSTAT_WHAT_STOP_NOISY
2301 #define sgl BPSTAT_WHAT_SINGLE
2302 #define slr BPSTAT_WHAT_SET_LONGJMP_RESUME
2303 #define clr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
2304 #define clrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
2305 #define sr BPSTAT_WHAT_STEP_RESUME
2306 #define ts BPSTAT_WHAT_THROUGH_SIGTRAMP
2307 #define shl BPSTAT_WHAT_CHECK_SHLIBS
2308 #define shlr BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK
2309
2310 /* "Can't happen."  Might want to print an error message.
2311    abort() is not out of the question, but chances are GDB is just
2312    a bit confused, not unusable.  */
2313 #define err BPSTAT_WHAT_STOP_NOISY
2314
2315   /* Given an old action and a class, come up with a new action.  */
2316   /* One interesting property of this table is that wp_silent is the same
2317      as bp_silent and wp_noisy is the same as bp_noisy.  That is because
2318      after stopping, the check for whether to step over a breakpoint
2319      (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
2320      reference to how we stopped.  We retain separate wp_silent and bp_silent
2321      codes in case we want to change that someday.  */
2322
2323   /* step_resume entries: a step resume breakpoint overrides another
2324      breakpoint of signal handling (see comment in wait_for_inferior
2325      at first IN_SIGTRAMP where we set the step_resume breakpoint).  */
2326   /* We handle the through_sigtramp_breakpoint the same way; having both
2327      one of those and a step_resume_breakpoint is probably very rare (?).  */
2328
2329   static const enum bpstat_what_main_action
2330     table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
2331       {
2332         /*                              old action */
2333         /*       kc    ss    sn    sgl    slr   clr    clrs   sr    ts   shl   shlr
2334          */
2335 /*no_effect*/   {kc,   ss,   sn,   sgl,   slr,  clr,   clrs,  sr,   ts,  shl,  shlr},
2336 /*wp_silent*/   {ss,   ss,   sn,   ss,    ss,   ss,    ss,    sr,   ts,  shl,  shlr},
2337 /*wp_noisy*/    {sn,   sn,   sn,   sn,    sn,   sn,    sn,    sr,   ts,  shl,  shlr},
2338 /*bp_nostop*/   {sgl,  ss,   sn,   sgl,   slr,  clrs,  clrs,  sr,   ts,  shl,  shlr},
2339 /*bp_silent*/   {ss,   ss,   sn,   ss,    ss,   ss,    ss,    sr,   ts,  shl,  shlr},
2340 /*bp_noisy*/    {sn,   sn,   sn,   sn,    sn,   sn,    sn,    sr,   ts,  shl,  shlr},
2341 /*long_jump*/   {slr,  ss,   sn,   slr,   err,  err,   err,   sr,   ts,  shl,  shlr},
2342 /*long_resume*/ {clr,  ss,   sn,   clrs,  err,  err,   err,   sr,   ts,  shl,  shlr},
2343 /*step_resume*/ {sr,   sr,   sr,   sr,    sr,   sr,    sr,    sr,   ts,  shl,  shlr},
2344 /*through_sig*/ {ts,   ts,   ts,   ts,    ts,   ts,    ts,    ts,   ts,  shl,  shlr},
2345 /*shlib*/       {shl,  shl,  shl,  shl,   shl,  shl,   shl,   shl,  ts,  shl,  shlr},
2346 /*catch_shlib*/ {shlr, shlr, shlr, shlr,  shlr, shlr,  shlr,  shlr, ts,  shlr, shlr}
2347               };
2348
2349 #undef kc
2350 #undef ss
2351 #undef sn
2352 #undef sgl
2353 #undef slr
2354 #undef clr
2355 #undef clrs
2356 #undef err
2357 #undef sr
2358 #undef ts
2359 #undef shl
2360 #undef shlr
2361   enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
2362   struct bpstat_what retval;
2363
2364   retval.call_dummy = 0;
2365   for (; bs != NULL; bs = bs->next)
2366     {
2367       enum class bs_class = no_effect;
2368       if (bs->breakpoint_at == NULL)
2369         /* I suspect this can happen if it was a momentary breakpoint
2370            which has since been deleted.  */
2371         continue;
2372       switch (bs->breakpoint_at->type)
2373         {
2374         case bp_none:
2375           continue;
2376
2377         case bp_breakpoint:
2378         case bp_hardware_breakpoint:
2379         case bp_until:
2380         case bp_finish:
2381           if (bs->stop)
2382             {
2383               if (bs->print)
2384                 bs_class = bp_noisy;
2385               else
2386                 bs_class = bp_silent;
2387             }
2388           else
2389             bs_class = bp_nostop;
2390           break;
2391         case bp_watchpoint:
2392         case bp_hardware_watchpoint:
2393         case bp_read_watchpoint:
2394         case bp_access_watchpoint:
2395           if (bs->stop)
2396             {
2397               if (bs->print)
2398                 bs_class = wp_noisy;
2399               else
2400                 bs_class = wp_silent;
2401             }
2402           else
2403             /* There was a watchpoint, but we're not stopping.  This requires
2404                no further action.  */
2405             bs_class = no_effect;
2406           break;
2407         case bp_longjmp:
2408           bs_class = long_jump;
2409           break;
2410         case bp_longjmp_resume:
2411           bs_class = long_resume;
2412           break;
2413         case bp_step_resume:
2414           if (bs->stop)
2415             {
2416               bs_class = step_resume;
2417             }
2418           else
2419             /* It is for the wrong frame.  */
2420             bs_class = bp_nostop;
2421           break;
2422         case bp_through_sigtramp:
2423           bs_class = through_sig;
2424           break;
2425         case bp_watchpoint_scope:
2426           bs_class = bp_nostop;
2427           break;
2428         case bp_shlib_event:
2429           bs_class = shlib_event;
2430           break;
2431         case bp_catch_load:
2432         case bp_catch_unload:
2433           /* Only if this catchpoint triggered should we cause the
2434              step-out-of-dld behaviour.  Otherwise, we ignore this
2435              catchpoint.  */
2436           if (bs->stop)
2437             bs_class = catch_shlib_event;
2438           else
2439             bs_class = no_effect;
2440           break;
2441         case bp_catch_fork:
2442         case bp_catch_vfork:
2443         case bp_catch_exec:
2444           if (bs->stop)
2445             {
2446               if (bs->print)
2447                 bs_class = bp_noisy;
2448               else
2449                 bs_class = bp_silent;
2450             }
2451           else
2452             /* There was a catchpoint, but we're not stopping.  This requires
2453                no further action.  */
2454             bs_class = no_effect;
2455           break;
2456         case bp_catch_catch:
2457           if (!bs->stop || CURRENT_EXCEPTION_KIND != EX_EVENT_CATCH)
2458             bs_class = bp_nostop;
2459           else if (bs->stop)
2460             bs_class = bs->print ? bp_noisy : bp_silent;
2461           break;
2462         case bp_catch_throw:
2463           if (!bs->stop || CURRENT_EXCEPTION_KIND != EX_EVENT_THROW)
2464             bs_class = bp_nostop;
2465           else if (bs->stop)
2466             bs_class = bs->print ? bp_noisy : bp_silent;
2467           break;
2468         case bp_call_dummy:
2469           /* Make sure the action is stop (silent or noisy), so infrun.c
2470              pops the dummy frame.  */
2471           bs_class = bp_silent;
2472           retval.call_dummy = 1;
2473           break;
2474         }
2475       current_action = table[(int)bs_class][(int)current_action];
2476     }
2477   retval.main_action = current_action;
2478   return retval;
2479 }
2480
2481 /* Nonzero if we should step constantly (e.g. watchpoints on machines
2482    without hardware support).  This isn't related to a specific bpstat,
2483    just to things like whether watchpoints are set.  */
2484
2485 int 
2486 bpstat_should_step ()
2487 {
2488   struct breakpoint *b;
2489   ALL_BREAKPOINTS (b)
2490     if (b->enable == enabled && b->type == bp_watchpoint)
2491       return 1;
2492   return 0;
2493 }
2494
2495 /* Nonzero if there are enabled hardware watchpoints. */
2496 int
2497 bpstat_have_active_hw_watchpoints ()
2498 {
2499   struct breakpoint *b;
2500   ALL_BREAKPOINTS (b)
2501     if ((b->enable == enabled) &&
2502         (b->inserted) &&
2503         ((b->type == bp_hardware_watchpoint) ||
2504          (b->type == bp_read_watchpoint) ||
2505          (b->type == bp_access_watchpoint)))
2506       return 1;
2507   return 0;
2508 }
2509
2510 \f
2511 /* Given a bpstat that records zero or more triggered eventpoints, this
2512    function returns another bpstat which contains only the catchpoints
2513    on that first list, if any. */
2514 void
2515 bpstat_get_triggered_catchpoints (ep_list, cp_list)
2516   bpstat  ep_list;
2517   bpstat *  cp_list;
2518 {
2519   struct bpstats  root_bs[1];
2520   bpstat  bs = root_bs;
2521   struct breakpoint *  ep;
2522   char *  dll_pathname;
2523  
2524   bpstat_clear (cp_list);
2525   root_bs->next = NULL;
2526  
2527   for (; ep_list != NULL; ep_list = ep_list->next )
2528     {
2529       /* Is this eventpoint a catchpoint?  If not, ignore it. */
2530       ep = ep_list->breakpoint_at;
2531       if (ep == NULL)
2532         break;
2533       if ((ep->type != bp_catch_load) && 
2534           (ep->type != bp_catch_unload) &&
2535           (ep->type != bp_catch_catch) &&
2536           (ep->type != bp_catch_throw))   /* pai: (temp) ADD fork/vfork here!!  */
2537         continue;
2538  
2539       /* Yes; add it to the list. */
2540       bs = bpstat_alloc (ep, bs);
2541       *bs = *ep_list;
2542       bs->next = NULL;
2543       bs = root_bs->next;
2544  
2545 #if defined(SOLIB_ADD)
2546       /* Also, for each triggered catchpoint, tag it with the name of
2547          the library that caused this trigger.  (We copy the name now,
2548          because it's only guaranteed to be available NOW, when the
2549          catchpoint triggers.  Clients who may wish to know the name
2550          later must get it from the catchpoint itself.) */
2551       if (ep->triggered_dll_pathname != NULL)
2552         free (ep->triggered_dll_pathname);
2553       if (ep->type == bp_catch_load)
2554         dll_pathname = SOLIB_LOADED_LIBRARY_PATHNAME (inferior_pid);
2555       else
2556         dll_pathname = SOLIB_UNLOADED_LIBRARY_PATHNAME (inferior_pid);
2557 #else
2558       dll_pathname = NULL;
2559 #endif
2560       if (dll_pathname)
2561         {
2562           ep->triggered_dll_pathname = (char *) xmalloc (strlen (dll_pathname) + 1);
2563           strcpy (ep->triggered_dll_pathname, dll_pathname);
2564         }
2565       else
2566         ep->triggered_dll_pathname = NULL;
2567     }
2568  
2569   *cp_list = bs;
2570 }
2571
2572 /* Print information on breakpoint number BNUM, or -1 if all.
2573    If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
2574    is nonzero, process only watchpoints.  */
2575
2576 typedef struct {
2577   enum bptype  type;
2578   char *  description;
2579 } ep_type_description_t;
2580
2581 static void
2582 breakpoint_1 (bnum, allflag)
2583      int bnum;
2584      int allflag;
2585 {
2586   register struct breakpoint *b;
2587   register struct command_line *l;
2588   register struct symbol *sym;
2589   CORE_ADDR last_addr = (CORE_ADDR)-1;
2590   int found_a_breakpoint = 0;
2591   static ep_type_description_t  bptypes[] =
2592   {
2593     {bp_none,                "?deleted?"},
2594     {bp_breakpoint,          "breakpoint"},
2595     {bp_hardware_breakpoint, "hw breakpoint"},
2596     {bp_until,               "until"},
2597     {bp_finish,              "finish"},
2598     {bp_watchpoint,          "watchpoint"},
2599     {bp_hardware_watchpoint, "hw watchpoint"},
2600     {bp_read_watchpoint,     "read watchpoint"},
2601     {bp_access_watchpoint,   "acc watchpoint"},
2602     {bp_longjmp,             "longjmp"},
2603     {bp_longjmp_resume,      "longjmp resume"},
2604     {bp_step_resume,         "step resume"},
2605     {bp_through_sigtramp,    "sigtramp"},
2606     {bp_watchpoint_scope,    "watchpoint scope"},
2607     {bp_call_dummy,          "call dummy"},
2608     {bp_shlib_event,         "shlib events"},
2609     {bp_catch_load,          "catch load"},
2610     {bp_catch_unload,        "catch unload"},
2611     {bp_catch_fork,          "catch fork"},
2612     {bp_catch_vfork,         "catch vfork"},
2613     {bp_catch_exec,          "catch exec"},
2614     {bp_catch_catch,         "catch catch"},
2615     {bp_catch_throw,         "catch throw"}
2616    };
2617
2618   static char *bpdisps[] = {"del", "dstp", "dis", "keep"};
2619   static char bpenables[] = "nyn";
2620   char wrap_indent[80];
2621
2622   ALL_BREAKPOINTS (b)
2623     if (bnum == -1
2624         || bnum == b->number)
2625       {
2626 /*  We only print out user settable breakpoints unless the allflag is set. */
2627         if (!allflag
2628             && b->type != bp_breakpoint
2629             && b->type != bp_catch_load
2630             && b->type != bp_catch_unload
2631             && b->type != bp_catch_fork
2632             && b->type != bp_catch_vfork
2633             && b->type != bp_catch_exec
2634             && b->type != bp_catch_catch
2635             && b->type != bp_catch_throw
2636             && b->type != bp_hardware_breakpoint
2637             && b->type != bp_watchpoint
2638             && b->type != bp_read_watchpoint
2639             && b->type != bp_access_watchpoint
2640             && b->type != bp_hardware_watchpoint)
2641           continue;
2642
2643         if (!found_a_breakpoint++)
2644           {
2645             annotate_breakpoints_headers ();
2646   
2647             annotate_field (0);
2648             printf_filtered ("Num ");
2649             annotate_field (1);
2650             printf_filtered ("Type           ");
2651             annotate_field (2);
2652             printf_filtered ("Disp ");
2653             annotate_field (3);
2654             printf_filtered ("Enb ");
2655             if (addressprint)
2656               {
2657                 annotate_field (4);
2658                 printf_filtered ("Address    ");
2659               }
2660             annotate_field (5);
2661             printf_filtered ("What\n");
2662   
2663             annotate_breakpoints_table ();
2664           }
2665   
2666         annotate_record ();
2667         annotate_field (0);
2668         printf_filtered ("%-3d ", b->number);
2669         annotate_field (1);
2670         if ((int)b->type > (sizeof(bptypes)/sizeof(bptypes[0])))
2671           error ("bptypes table does not describe type #%d.", (int)b->type);
2672         if ((int)b->type != bptypes[(int)b->type].type)
2673           error ("bptypes table does not describe type #%d?", (int)b->type);
2674         printf_filtered ("%-14s ", bptypes[(int)b->type].description);
2675         annotate_field (2);
2676         printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
2677         annotate_field (3);
2678         printf_filtered ("%-3c ", bpenables[(int)b->enable]);
2679
2680         strcpy (wrap_indent, "                           ");
2681         if (addressprint)
2682           strcat (wrap_indent, "           ");
2683         switch (b->type)
2684           {
2685           case bp_watchpoint:
2686           case bp_hardware_watchpoint:
2687           case bp_read_watchpoint:
2688           case bp_access_watchpoint:
2689             /* Field 4, the address, is omitted (which makes the columns
2690                not line up too nicely with the headers, but the effect
2691                is relatively readable).  */
2692             annotate_field (5);
2693             print_expression (b->exp, gdb_stdout);
2694             break;
2695  
2696           case bp_catch_load:
2697           case bp_catch_unload:
2698             /* Field 4, the address, is omitted (which makes the columns
2699                not line up too nicely with the headers, but the effect
2700                is relatively readable).  */
2701             annotate_field (5);
2702             if (b->dll_pathname == NULL)
2703               printf_filtered ("<any library> ");
2704             else
2705               printf_filtered ("library \"%s\" ", b->dll_pathname);
2706             break;
2707
2708           case bp_catch_fork:
2709           case bp_catch_vfork:
2710             /* Field 4, the address, is omitted (which makes the columns
2711                not line up too nicely with the headers, but the effect
2712                is relatively readable).  */
2713             annotate_field (5);
2714             if (b->forked_inferior_pid != 0)
2715               printf_filtered ("process %d ", b->forked_inferior_pid);
2716             break;
2717
2718           case bp_catch_exec:
2719             /* Field 4, the address, is omitted (which makes the columns
2720                not line up too nicely with the headers, but the effect
2721                is relatively readable).  */
2722             annotate_field (5);
2723             if (b->exec_pathname != NULL)
2724               printf_filtered ("program \"%s\" ", b->exec_pathname);
2725             break;
2726           case bp_catch_catch:
2727             /* Field 4, the address, is omitted (which makes the columns
2728                not line up too nicely with the headers, but the effect
2729                is relatively readable).  */
2730             annotate_field (5);
2731             printf_filtered ("exception catch ");
2732             break;
2733           case bp_catch_throw:
2734             /* Field 4, the address, is omitted (which makes the columns
2735                not line up too nicely with the headers, but the effect
2736                is relatively readable).  */
2737             annotate_field (5);
2738             printf_filtered ("exception throw ");
2739             break;
2740
2741           case bp_breakpoint:
2742           case bp_hardware_breakpoint:
2743           case bp_until:
2744           case bp_finish:
2745           case bp_longjmp:
2746           case bp_longjmp_resume:
2747           case bp_step_resume:
2748           case bp_through_sigtramp:
2749           case bp_watchpoint_scope:
2750           case bp_call_dummy:
2751           case bp_shlib_event:
2752             if (addressprint)
2753               {
2754                 annotate_field (4);
2755                 /* FIXME-32x64: need a print_address_numeric with
2756                    field width */
2757                 printf_filtered
2758                   ("%s ",
2759                    local_hex_string_custom
2760                    ((unsigned long) b->address, "08l"));
2761               }
2762
2763             annotate_field (5);
2764
2765             last_addr = b->address;
2766             if (b->source_file)
2767               {
2768                 sym = find_pc_sect_function (b->address, b->section);
2769                 if (sym)
2770                   {
2771                     fputs_filtered ("in ", gdb_stdout);
2772                     fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
2773                     wrap_here (wrap_indent);
2774                     fputs_filtered (" at ", gdb_stdout);
2775                   }
2776                 fputs_filtered (b->source_file, gdb_stdout);
2777                 printf_filtered (":%d", b->line_number);
2778               }
2779             else
2780               print_address_symbolic (b->address, gdb_stdout, demangle, " ");
2781             break;
2782           }
2783
2784         if (b->thread != -1)
2785             printf_filtered (" thread %d", b->thread );
2786
2787         printf_filtered ("\n");
2788
2789         if (b->frame)
2790           {
2791             annotate_field (6);
2792
2793             printf_filtered ("\tstop only in stack frame at ");
2794             print_address_numeric (b->frame, 1, gdb_stdout);
2795             printf_filtered ("\n");
2796           }
2797
2798         if (b->cond)
2799           {
2800             annotate_field (7);
2801
2802             printf_filtered ("\tstop only if ");
2803             print_expression (b->cond, gdb_stdout);
2804             printf_filtered ("\n");
2805           }
2806
2807         if (b->thread != -1)
2808           {
2809             /* FIXME should make an annotation for this */
2810             printf_filtered ("\tstop only in thread %d\n", b->thread);
2811           }
2812
2813         if (show_breakpoint_hit_counts && b->hit_count)
2814           {
2815             /* FIXME should make an annotation for this */
2816             if (ep_is_catchpoint (b))
2817               printf_filtered ("\tcatchpoint");
2818             else
2819               printf_filtered ("\tbreakpoint");
2820             printf_filtered (" already hit %d time%s\n",
2821                              b->hit_count, (b->hit_count == 1 ? "" : "s"));
2822           }
2823
2824         if (b->ignore_count)
2825           {
2826             annotate_field (8);
2827
2828             printf_filtered ("\tignore next %d hits\n", b->ignore_count);
2829           }
2830
2831         if ((l = b->commands))
2832           {
2833             annotate_field (9);
2834
2835             while (l)
2836               {
2837                 print_command_line (l, 4);
2838                 l = l->next;
2839               }
2840           }
2841       }
2842
2843   if (!found_a_breakpoint)
2844     {
2845       if (bnum == -1)
2846         printf_filtered ("No breakpoints or watchpoints.\n");
2847       else
2848         printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
2849     }
2850   else
2851     /* Compare against (CORE_ADDR)-1 in case some compiler decides
2852        that a comparison of an unsigned with -1 is always false.  */
2853     if (last_addr != (CORE_ADDR)-1)
2854       set_next_address (last_addr);
2855
2856   annotate_breakpoints_table_end ();
2857 }
2858
2859 /* ARGSUSED */
2860 static void
2861 breakpoints_info (bnum_exp, from_tty)
2862      char *bnum_exp;
2863      int from_tty;
2864 {
2865   int bnum = -1;
2866
2867   if (bnum_exp)
2868     bnum = parse_and_eval_address (bnum_exp);
2869
2870   breakpoint_1 (bnum, 0);
2871 }
2872
2873 #if MAINTENANCE_CMDS
2874
2875 /* ARGSUSED */
2876 void
2877 maintenance_info_breakpoints (bnum_exp, from_tty)
2878      char *bnum_exp;
2879      int from_tty;
2880 {
2881   int bnum = -1;
2882
2883   if (bnum_exp)
2884     bnum = parse_and_eval_address (bnum_exp);
2885
2886   breakpoint_1 (bnum, 1);
2887 }
2888
2889 #endif
2890
2891 /* Print a message describing any breakpoints set at PC.  */
2892
2893 static void
2894 describe_other_breakpoints (pc, section)
2895      CORE_ADDR pc;
2896      asection *section;
2897 {
2898   register int others = 0;
2899   register struct breakpoint *b;
2900
2901   ALL_BREAKPOINTS (b)
2902     if (b->address == pc)
2903       if (overlay_debugging == 0 ||
2904           b->section == section)
2905         others++;
2906   if (others > 0)
2907     {
2908       printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
2909       ALL_BREAKPOINTS (b)
2910         if (b->address == pc)
2911           if (overlay_debugging == 0 ||
2912               b->section == section)
2913             {
2914               others--;
2915               printf_filtered
2916                 ("%d%s%s ",
2917                  b->number,
2918                  ((b->enable == disabled || b->enable == shlib_disabled || b->enable == call_disabled)
2919                   ? " (disabled)" : ""),
2920                  (others > 1) ? "," : ((others == 1) ? " and" : ""));
2921             }
2922       printf_filtered ("also set at pc ");
2923       print_address_numeric (pc, 1, gdb_stdout);
2924       printf_filtered (".\n");
2925     }
2926 }
2927 \f
2928 /* Set the default place to put a breakpoint
2929    for the `break' command with no arguments.  */
2930
2931 void
2932 set_default_breakpoint (valid, addr, symtab, line)
2933      int valid;
2934      CORE_ADDR addr;
2935      struct symtab *symtab;
2936      int line;
2937 {
2938   default_breakpoint_valid = valid;
2939   default_breakpoint_address = addr;
2940   default_breakpoint_symtab = symtab;
2941   default_breakpoint_line = line;
2942 }
2943
2944 /* Rescan breakpoints at address ADDRESS,
2945    marking the first one as "first" and any others as "duplicates".
2946    This is so that the bpt instruction is only inserted once.  */
2947
2948 static void
2949 check_duplicates (address, section)
2950      CORE_ADDR address;
2951      asection *section;
2952 {
2953   register struct breakpoint *b;
2954   register int count = 0;
2955
2956   if (address == 0)             /* Watchpoints are uninteresting */
2957     return;
2958
2959   ALL_BREAKPOINTS (b)
2960     if (b->enable != disabled
2961         && b->enable != shlib_disabled
2962         && b->enable != call_disabled
2963         && b->address == address
2964         && (overlay_debugging == 0 || b->section == section))
2965       {
2966         count++;
2967         b->duplicate = count > 1;
2968       }
2969 }
2970
2971 /* Low level routine to set a breakpoint.
2972    Takes as args the three things that every breakpoint must have.
2973    Returns the breakpoint object so caller can set other things.
2974    Does not set the breakpoint number!
2975    Does not print anything.
2976
2977    ==> This routine should not be called if there is a chance of later
2978    error(); otherwise it leaves a bogus breakpoint on the chain.  Validate
2979    your arguments BEFORE calling this routine!  */
2980
2981 struct breakpoint *
2982 set_raw_breakpoint (sal)
2983      struct symtab_and_line sal;
2984 {
2985   register struct breakpoint *b, *b1;
2986
2987   b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
2988   memset (b, 0, sizeof (*b));
2989   b->address = sal.pc;
2990   if (sal.symtab == NULL)
2991     b->source_file = NULL;
2992   else
2993     b->source_file = savestring (sal.symtab->filename,
2994                                  strlen (sal.symtab->filename));
2995   b->section = sal.section;
2996   b->language = current_language->la_language;
2997   b->input_radix = input_radix;
2998   b->thread = -1;
2999   b->line_number = sal.line;
3000   b->enable = enabled;
3001   b->next = 0;
3002   b->silent = 0;
3003   b->ignore_count = 0;
3004   b->commands = NULL;
3005   b->frame = 0;
3006   b->dll_pathname = NULL;
3007   b->triggered_dll_pathname = NULL;
3008   b->forked_inferior_pid = 0;
3009   b->exec_pathname = NULL;
3010
3011   /* Add this breakpoint to the end of the chain
3012      so that a list of breakpoints will come out in order
3013      of increasing numbers.  */
3014
3015   b1 = breakpoint_chain;
3016   if (b1 == 0)
3017     breakpoint_chain = b;
3018   else
3019     {
3020       while (b1->next)
3021         b1 = b1->next;
3022       b1->next = b;
3023     }
3024
3025   check_duplicates (sal.pc, sal.section);
3026   breakpoints_changed ();
3027
3028   return b;
3029 }
3030
3031 #ifdef GET_LONGJMP_TARGET
3032
3033 static void
3034 create_longjmp_breakpoint (func_name)
3035      char *func_name;
3036 {
3037   struct symtab_and_line sal;
3038   struct breakpoint *b;
3039
3040   INIT_SAL (&sal);      /* initialize to zeroes */
3041   if (func_name != NULL)
3042     {
3043       struct minimal_symbol *m;
3044
3045       m = lookup_minimal_symbol_text (func_name, NULL, (struct objfile *)NULL);
3046       if (m)
3047         sal.pc = SYMBOL_VALUE_ADDRESS (m);
3048       else
3049         return;
3050     }
3051   sal.section = find_pc_overlay (sal.pc);
3052   b = set_raw_breakpoint (sal);
3053   if (!b) return;
3054
3055   b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
3056   b->disposition = donttouch;
3057   b->enable = disabled;
3058   b->silent = 1;
3059   if (func_name)
3060     b->addr_string = strsave(func_name);
3061   b->number = internal_breakpoint_number--;
3062 }
3063
3064 #endif  /* #ifdef GET_LONGJMP_TARGET */
3065
3066 /* Call this routine when stepping and nexting to enable a breakpoint if we do
3067    a longjmp().  When we hit that breakpoint, call
3068    set_longjmp_resume_breakpoint() to figure out where we are going. */
3069
3070 void
3071 enable_longjmp_breakpoint()
3072 {
3073   register struct breakpoint *b;
3074
3075   ALL_BREAKPOINTS (b)
3076     if (b->type == bp_longjmp)
3077       {
3078         b->enable = enabled;
3079         check_duplicates (b->address, b->section);
3080       }
3081 }
3082
3083 void
3084 disable_longjmp_breakpoint()
3085 {
3086   register struct breakpoint *b;
3087
3088   ALL_BREAKPOINTS (b)
3089     if (   b->type == bp_longjmp
3090         || b->type == bp_longjmp_resume)
3091       {
3092         b->enable = disabled;
3093         check_duplicates (b->address, b->section);
3094       }
3095 }
3096
3097 #ifdef SOLIB_ADD
3098 void
3099 remove_solib_event_breakpoints ()
3100 {
3101   register struct breakpoint *b, *temp;
3102
3103   ALL_BREAKPOINTS_SAFE (b, temp)
3104     if (b->type == bp_shlib_event)
3105       delete_breakpoint (b);
3106 }
3107
3108 void
3109 create_solib_event_breakpoint (address)
3110      CORE_ADDR address;
3111 {
3112   struct breakpoint *b;
3113   struct symtab_and_line sal;
3114
3115   INIT_SAL (&sal);      /* initialize to zeroes */
3116   sal.pc = address;
3117   sal.section = find_pc_overlay (sal.pc);
3118   b = set_raw_breakpoint (sal);
3119   b->number = internal_breakpoint_number--;
3120   b->disposition = donttouch;
3121   b->type = bp_shlib_event;
3122 }
3123
3124 void
3125 disable_breakpoints_in_shlibs (silent)
3126      int silent;
3127 {
3128   struct breakpoint *  b;
3129   int  disabled_shlib_breaks = 0;
3130
3131   /* See also: insert_breakpoints, under DISABLE_UNSETTABLE_BREAK. */
3132   ALL_BREAKPOINTS (b)
3133     {
3134 #if defined (PC_SOLIB)
3135       if (((b->type == bp_breakpoint) ||
3136            (b->type == bp_hardware_breakpoint)) &&
3137           (b->enable != shlib_disabled) &&
3138           (b->enable != call_disabled) &&
3139           ! b->duplicate &&
3140           PC_SOLIB (b->address))
3141         {
3142           b->enable = shlib_disabled;
3143           if (!silent)
3144             {
3145               if (!disabled_shlib_breaks)
3146                 {
3147                   target_terminal_ours_for_output ();
3148                   printf_filtered ("Temporarily disabling shared library breakpoints:\n");
3149                 }
3150               disabled_shlib_breaks = 1;
3151               printf_filtered ("%d ", b->number);
3152             }
3153         }
3154 #endif
3155     }
3156   if (disabled_shlib_breaks && !silent)
3157     printf_filtered ("\n");
3158 }
3159
3160 /* Try to reenable any breakpoints in shared libraries.  */
3161 void
3162 re_enable_breakpoints_in_shlibs ()
3163 {
3164   struct breakpoint *b;
3165
3166   ALL_BREAKPOINTS (b)
3167     if (b->enable == shlib_disabled)
3168       {
3169         char buf[1];
3170
3171         /* Do not reenable the breakpoint if the shared library
3172            is still not mapped in.  */
3173         if (target_read_memory (b->address, buf, 1) == 0)
3174           b->enable = enabled;
3175       }
3176 }
3177
3178 #endif
3179
3180 static void
3181 create_solib_load_unload_event_breakpoint (hookname, tempflag, dll_pathname, cond_string, bp_kind)
3182   char *  hookname;
3183   int  tempflag;
3184   char *  dll_pathname;
3185   char *  cond_string;
3186   enum bptype  bp_kind;
3187 {
3188   struct breakpoint *  b;
3189   struct symtabs_and_lines sals;
3190   struct symtab_and_line  sal;
3191   struct cleanup *  old_chain;
3192   struct cleanup *  canonical_strings_chain = NULL;
3193   int  i;
3194   char *  addr_start = hookname;
3195   char *  addr_end = NULL;
3196   char **  canonical = (char **) NULL;
3197   int  thread = -1;  /* All threads. */
3198  
3199   /* Set a breakpoint on the specified hook. */
3200   sals = decode_line_1 (&hookname, 1, (struct symtab *) NULL, 0, &canonical);
3201   addr_end = hookname;
3202  
3203   if (sals.nelts == 0)
3204     {
3205       warning ("Unable to set a breakpoint on dynamic linker callback.");
3206       warning ("Suggest linking with /opt/langtools/lib/end.o.");
3207       warning ("GDB will be unable to track shl_load/shl_unload calls");
3208       return;
3209     }
3210   if (sals.nelts != 1)
3211     {
3212       warning ("Unable to set a unique breakpoint on dynamic linker callback.");
3213       warning ("GDB will be unable to track shl_load/shl_unload calls");
3214       return;
3215     }
3216
3217   /* Make sure that all storage allocated in decode_line_1 gets freed in case
3218      the following errors out.  */
3219   old_chain = make_cleanup (free, sals.sals);
3220   if (canonical != (char **)NULL)
3221     {
3222       make_cleanup (free, canonical);
3223       canonical_strings_chain = make_cleanup (null_cleanup, 0);
3224       if (canonical[0] != NULL)
3225         make_cleanup (free, canonical[0]);
3226     }
3227  
3228   resolve_sal_pc (&sals.sals[0]);
3229  
3230   /* Remove the canonical strings from the cleanup, they are needed below.  */
3231   if (canonical != (char **)NULL)
3232     discard_cleanups (canonical_strings_chain);
3233  
3234   b = set_raw_breakpoint (sals.sals[0]);
3235   set_breakpoint_count (breakpoint_count + 1);
3236   b->number = breakpoint_count;
3237   b->cond = NULL;
3238   b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3239   b->thread = thread;
3240  
3241   if (canonical != (char **)NULL && canonical[0] != NULL)
3242     b->addr_string = canonical[0];
3243   else if (addr_start)
3244     b->addr_string = savestring (addr_start, addr_end - addr_start);
3245  
3246   b->enable = enabled;
3247   b->disposition = tempflag ? del : donttouch;
3248  
3249   if (dll_pathname == NULL)
3250     b->dll_pathname = NULL;
3251   else
3252     {
3253       b->dll_pathname = (char *) xmalloc (strlen (dll_pathname) + 1);
3254       strcpy (b->dll_pathname, dll_pathname);
3255     }
3256   b->type = bp_kind;
3257  
3258   mention (b);
3259   do_cleanups (old_chain);
3260 }
3261
3262 void
3263 create_solib_load_event_breakpoint (hookname, tempflag, dll_pathname, cond_string)
3264   char *  hookname;
3265   int  tempflag;
3266   char *  dll_pathname;
3267   char *  cond_string;
3268 {
3269   create_solib_load_unload_event_breakpoint (hookname,
3270                                              tempflag,
3271                                              dll_pathname,
3272                                              cond_string,
3273                                              bp_catch_load);
3274 }
3275
3276 void
3277 create_solib_unload_event_breakpoint (hookname, tempflag, dll_pathname, cond_string)
3278   char *  hookname;
3279   int  tempflag;
3280   char *  dll_pathname;
3281   char *  cond_string;
3282 {
3283   create_solib_load_unload_event_breakpoint (hookname,
3284                                              tempflag,
3285                                              dll_pathname,
3286                                              cond_string,
3287                                              bp_catch_unload);
3288 }
3289
3290 static void
3291 create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_kind)
3292   int  tempflag;
3293   char *  cond_string;
3294   enum bptype  bp_kind;
3295 {
3296   struct symtab_and_line  sal;
3297   struct breakpoint *  b;
3298   int  thread = -1;  /* All threads. */
3299  
3300   INIT_SAL(&sal);
3301   sal.pc = 0;
3302   sal.symtab = NULL;
3303   sal.line = 0;
3304  
3305   b = set_raw_breakpoint (sal);
3306   set_breakpoint_count (breakpoint_count + 1);
3307   b->number = breakpoint_count;
3308   b->cond = NULL;
3309   b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3310   b->thread = thread;
3311   b->addr_string = NULL;
3312   b->enable = enabled;
3313   b->disposition = tempflag ? del : donttouch;
3314   b->forked_inferior_pid = 0;
3315  
3316   b->type = bp_kind;
3317  
3318   mention (b);
3319 }
3320
3321 void
3322 create_fork_event_catchpoint (tempflag, cond_string)
3323   int  tempflag;
3324   char *  cond_string;
3325 {
3326   create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_fork);
3327 }
3328  
3329 void
3330 create_vfork_event_catchpoint (tempflag, cond_string)
3331   int  tempflag;
3332   char *  cond_string;
3333 {
3334   create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_vfork);
3335 }
3336
3337 void
3338 create_exec_event_catchpoint (tempflag, cond_string)
3339   int  tempflag;
3340   char *  cond_string;
3341 {
3342   struct symtab_and_line  sal;
3343   struct breakpoint *  b;
3344   int  thread = -1;  /* All threads. */
3345
3346   INIT_SAL(&sal);
3347   sal.pc = 0;
3348   sal.symtab = NULL;
3349   sal.line = 0;
3350
3351   b = set_raw_breakpoint (sal);
3352   set_breakpoint_count (breakpoint_count + 1);
3353   b->number = breakpoint_count;
3354   b->cond = NULL;
3355   b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3356   b->thread = thread;
3357   b->addr_string = NULL;
3358   b->enable = enabled;
3359   b->disposition = tempflag ? del : donttouch;
3360
3361   b->type = bp_catch_exec;
3362
3363   mention (b);
3364 }
3365
3366 static int
3367 hw_breakpoint_used_count()
3368 {
3369   register struct breakpoint *b;
3370   int i = 0;
3371
3372   ALL_BREAKPOINTS (b)
3373     {
3374       if (b->type == bp_hardware_breakpoint && b->enable == enabled)
3375         i++;
3376     }
3377
3378   return i;
3379 }
3380
3381 static int
3382 hw_watchpoint_used_count(type, other_type_used)
3383     enum bptype type;
3384     int *other_type_used;
3385 {
3386   register struct breakpoint *b;
3387   int i = 0;
3388
3389   *other_type_used = 0;
3390   ALL_BREAKPOINTS (b)
3391     {
3392       if (b->enable == enabled)
3393         {
3394           if (b->type == type) i++;
3395           else if ((b->type == bp_hardware_watchpoint ||
3396                b->type == bp_read_watchpoint ||
3397                b->type == bp_access_watchpoint)
3398                && b->enable == enabled)
3399             *other_type_used = 1;
3400         }
3401     }
3402   return i;
3403 }
3404
3405 /* Call this after hitting the longjmp() breakpoint.  Use this to set a new
3406    breakpoint at the target of the jmp_buf.
3407
3408    FIXME - This ought to be done by setting a temporary breakpoint that gets
3409    deleted automatically... */
3410
3411 void
3412 set_longjmp_resume_breakpoint(pc, frame)
3413      CORE_ADDR pc;
3414      struct frame_info *frame;
3415 {
3416   register struct breakpoint *b;
3417
3418   ALL_BREAKPOINTS (b)
3419     if (b->type == bp_longjmp_resume)
3420       {
3421         b->address = pc;
3422         b->enable = enabled;
3423         if (frame != NULL)
3424           b->frame = frame->frame;
3425         else
3426           b->frame = 0;
3427         check_duplicates (b->address, b->section);
3428         return;
3429       }
3430 }
3431
3432 void
3433 disable_watchpoints_before_interactive_call_start ()
3434 {
3435   struct breakpoint *  b;
3436
3437   ALL_BREAKPOINTS (b)
3438     {
3439       if (((b->type == bp_watchpoint)
3440            || (b->type == bp_hardware_watchpoint)
3441            || (b->type == bp_read_watchpoint)
3442            || (b->type == bp_access_watchpoint)
3443            || ep_is_exception_catchpoint (b))
3444           && (b->enable == enabled))
3445         {
3446           b->enable = call_disabled;
3447           check_duplicates (b->address, b->section);
3448         }
3449     }
3450 }
3451
3452 void
3453 enable_watchpoints_after_interactive_call_stop ()
3454 {
3455   struct breakpoint *  b;
3456
3457   ALL_BREAKPOINTS (b)
3458     {
3459       if (((b->type == bp_watchpoint)
3460            || (b->type == bp_hardware_watchpoint)
3461            || (b->type == bp_read_watchpoint)
3462            || (b->type == bp_access_watchpoint)
3463            || ep_is_exception_catchpoint (b))
3464           && (b->enable == call_disabled))
3465         {
3466           b->enable = enabled;
3467           check_duplicates (b->address, b->section);
3468         }
3469     }
3470 }
3471
3472
3473 /* Set a breakpoint that will evaporate an end of command
3474    at address specified by SAL.
3475    Restrict it to frame FRAME if FRAME is nonzero.  */
3476
3477 struct breakpoint *
3478 set_momentary_breakpoint (sal, frame, type)
3479      struct symtab_and_line sal;
3480      struct frame_info *frame;
3481      enum bptype type;
3482 {
3483   register struct breakpoint *b;
3484   b = set_raw_breakpoint (sal);
3485   b->type = type;
3486   b->enable = enabled;
3487   b->disposition = donttouch;
3488   b->frame = (frame ? frame->frame : 0);
3489
3490   /* If we're debugging a multi-threaded program, then we
3491      want momentary breakpoints to be active in only a 
3492      single thread of control.  */
3493   if (in_thread_list (inferior_pid))
3494     b->thread = pid_to_thread_id (inferior_pid);
3495
3496   return b;
3497 }
3498
3499 \f
3500 /* Tell the user we have just set a breakpoint B.  */
3501
3502 static void
3503 mention (b)
3504      struct breakpoint *b;
3505 {
3506   int say_where = 0;
3507
3508   /* FIXME: This is misplaced; mention() is called by things (like hitting a
3509      watchpoint) other than breakpoint creation.  It should be possible to
3510      clean this up and at the same time replace the random calls to
3511      breakpoint_changed with this hook, as has already been done for
3512      delete_breakpoint_hook and so on.  */
3513   if (create_breakpoint_hook)
3514     create_breakpoint_hook (b);
3515
3516   switch (b->type)
3517     {
3518     case bp_none:
3519       printf_filtered ("(apparently deleted?) Eventpoint %d: ", b->number);
3520       break;
3521     case bp_watchpoint:
3522       printf_filtered ("Watchpoint %d: ", b->number);
3523       print_expression (b->exp, gdb_stdout);
3524       break;
3525     case bp_hardware_watchpoint:
3526       printf_filtered ("Hardware watchpoint %d: ", b->number);
3527       print_expression (b->exp, gdb_stdout);
3528       break;
3529     case bp_read_watchpoint:
3530       printf_filtered ("Hardware read watchpoint %d: ", b->number);
3531       print_expression (b->exp, gdb_stdout);
3532       break;
3533     case bp_access_watchpoint:
3534       printf_filtered ("Hardware access (read/write) watchpoint %d: ",b->number);
3535       print_expression (b->exp, gdb_stdout);
3536       break;
3537     case bp_breakpoint:
3538       printf_filtered ("Breakpoint %d", b->number);
3539       say_where = 1;
3540       break;
3541     case bp_hardware_breakpoint:
3542       printf_filtered ("Hardware assisted breakpoint %d", b->number);
3543       say_where = 1;
3544       break;
3545     case bp_catch_load:
3546     case bp_catch_unload:
3547       printf_filtered ("Catchpoint %d (%s %s)",
3548                        b->number,
3549                        (b->type == bp_catch_load) ? "load" : "unload",
3550                        (b->dll_pathname != NULL) ? b->dll_pathname : "<any library>");
3551       break;
3552     case bp_catch_fork:
3553     case bp_catch_vfork:
3554       printf_filtered ("Catchpoint %d (%s)",
3555                        b->number,
3556                        (b->type == bp_catch_fork) ? "fork" : "vfork");
3557       break;
3558     case bp_catch_exec:
3559       printf_filtered ("Catchpoint %d (exec)",
3560                        b->number);
3561       break;
3562     case bp_catch_catch:
3563     case bp_catch_throw:
3564       printf_filtered ("Catchpoint %d (%s)",
3565                        b->number,
3566                        (b->type == bp_catch_catch) ? "catch" : "throw");
3567       break;
3568
3569     case bp_until:
3570     case bp_finish:
3571     case bp_longjmp:
3572     case bp_longjmp_resume:
3573     case bp_step_resume:
3574     case bp_through_sigtramp:
3575     case bp_call_dummy:
3576     case bp_watchpoint_scope:
3577     case bp_shlib_event:
3578       break;
3579     }
3580   if (say_where)
3581     {
3582       if (addressprint || b->source_file == NULL)
3583         {
3584           printf_filtered (" at ");
3585           print_address_numeric (b->address, 1, gdb_stdout);
3586         }
3587       if (b->source_file)
3588         printf_filtered (": file %s, line %d.",
3589                          b->source_file, b->line_number);
3590       TUIDO(((TuiOpaqueFuncPtr)tui_vAllSetHasBreakAt, b, 1));
3591       TUIDO(((TuiOpaqueFuncPtr)tuiUpdateAllExecInfos));
3592     }
3593   printf_filtered ("\n");
3594 }
3595
3596 \f
3597 /* Set a breakpoint according to ARG (function, linenum or *address)
3598    flag: first bit  : 0 non-temporary, 1 temporary.
3599          second bit : 0 normal breakpoint, 1 hardware breakpoint. */
3600
3601 static void
3602 break_command_1 (arg, flag, from_tty)
3603      char *arg;
3604      int flag, from_tty;
3605 {
3606   int tempflag, hardwareflag;
3607   struct symtabs_and_lines sals;
3608   struct symtab_and_line sal;
3609   register struct expression *cond = 0;
3610   register struct breakpoint *b;
3611
3612   /* Pointers in arg to the start, and one past the end, of the condition.  */
3613   char *cond_start = NULL;
3614   char *cond_end = NULL;
3615   /* Pointers in arg to the start, and one past the end,
3616      of the address part.  */
3617   char *addr_start = NULL;
3618   char *addr_end = NULL;
3619   struct cleanup *old_chain;
3620   struct cleanup *canonical_strings_chain = NULL;
3621   char **canonical = (char **)NULL;
3622   int i;
3623   int thread;
3624
3625   hardwareflag = flag & BP_HARDWAREFLAG;
3626   tempflag = flag & BP_TEMPFLAG;
3627
3628   sals.sals = NULL;
3629   sals.nelts = 0;
3630
3631   INIT_SAL (&sal);      /* initialize to zeroes */
3632
3633   /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
3634
3635   if (!arg || (arg[0] == 'i' && arg[1] == 'f' 
3636                && (arg[2] == ' ' || arg[2] == '\t')))
3637     {
3638       if (default_breakpoint_valid)
3639         {
3640           sals.sals = (struct symtab_and_line *) 
3641             xmalloc (sizeof (struct symtab_and_line));
3642           sal.pc = default_breakpoint_address;
3643           sal.line = default_breakpoint_line;
3644           sal.symtab = default_breakpoint_symtab;
3645           sal.section  = find_pc_overlay (sal.pc);
3646           sals.sals[0] = sal;
3647           sals.nelts = 1;
3648         }
3649       else
3650         error ("No default breakpoint address now.");
3651     }
3652   else
3653     {
3654       addr_start = arg;
3655
3656       /* Force almost all breakpoints to be in terms of the
3657          current_source_symtab (which is decode_line_1's default).  This
3658          should produce the results we want almost all of the time while
3659          leaving default_breakpoint_* alone.  */
3660       if (default_breakpoint_valid
3661           && (!current_source_symtab
3662               || (arg && (*arg == '+' || *arg == '-'))))
3663         sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
3664                               default_breakpoint_line, &canonical);
3665       else
3666         sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, &canonical);
3667
3668       addr_end = arg;
3669     }
3670   
3671   if (! sals.nelts) 
3672     return;
3673
3674   /* Make sure that all storage allocated in decode_line_1 gets freed in case
3675      the following `for' loop errors out.  */
3676   old_chain = make_cleanup (free, sals.sals);
3677   if (canonical != (char **)NULL)
3678     {
3679       make_cleanup (free, canonical);
3680       canonical_strings_chain = make_cleanup (null_cleanup, 0);
3681       for (i = 0; i < sals.nelts; i++)
3682         {
3683           if (canonical[i] != NULL)
3684             make_cleanup (free, canonical[i]);
3685         }
3686     }
3687
3688   thread = -1;                  /* No specific thread yet */
3689
3690   /* Resolve all line numbers to PC's, and verify that conditions
3691      can be parsed, before setting any breakpoints.  */
3692   for (i = 0; i < sals.nelts; i++)
3693     {
3694       char *tok, *end_tok;
3695       int toklen;
3696
3697       resolve_sal_pc (&sals.sals[i]);
3698
3699       /* It's possible for the PC to be nonzero, but still an illegal
3700          value on some targets.
3701
3702          For example, on HP-UX if you start gdb, and before running the
3703          inferior you try to set a breakpoint on a shared library function
3704          "foo" where the inferior doesn't call "foo" directly but does
3705          pass its address to another function call, then we do find a
3706          minimal symbol for the "foo", but it's address is invalid.
3707          (Appears to be an index into a table that the loader sets up
3708          when the inferior is run.)
3709
3710          Give the target a chance to bless sals.sals[i].pc before we
3711          try to make a breakpoint for it. */
3712       if (PC_REQUIRES_RUN_BEFORE_USE(sals.sals[i].pc))
3713         {
3714           error ("Cannot break on %s without a running program.", addr_start);
3715         }
3716       
3717       tok = arg;
3718
3719       while (tok && *tok)
3720         {
3721           while (*tok == ' ' || *tok == '\t')
3722             tok++;
3723
3724           end_tok = tok;
3725
3726           while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
3727             end_tok++;
3728
3729           toklen = end_tok - tok;
3730
3731           if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
3732             {
3733               tok = cond_start = end_tok + 1;
3734               cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
3735               cond_end = tok;
3736             }
3737           else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
3738             {
3739               char *tmptok;
3740
3741               tok = end_tok + 1;
3742               tmptok = tok;
3743               thread = strtol (tok, &tok, 0);
3744               if (tok == tmptok)
3745                 error ("Junk after thread keyword.");
3746               if (!valid_thread_id (thread))
3747                 error ("Unknown thread %d\n", thread);
3748             }
3749           else
3750             error ("Junk at end of arguments.");
3751         }
3752     }
3753   if (hardwareflag)
3754     {
3755       int i, target_resources_ok;
3756
3757       i = hw_breakpoint_used_count ();  
3758       target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
3759                 bp_hardware_breakpoint, i + sals.nelts, 0);
3760       if (target_resources_ok == 0)
3761         error ("No hardware breakpoint support in the target.");
3762       else if (target_resources_ok < 0)
3763         error ("Hardware breakpoints used exceeds limit.");
3764     }
3765
3766   /* Remove the canonical strings from the cleanup, they are needed below.  */
3767   if (canonical != (char **)NULL)
3768     discard_cleanups (canonical_strings_chain);
3769
3770   /* Now set all the breakpoints.  */
3771   for (i = 0; i < sals.nelts; i++)
3772     {
3773       sal = sals.sals[i];
3774
3775       if (from_tty)
3776         describe_other_breakpoints (sal.pc, sal.section);
3777
3778       b = set_raw_breakpoint (sal);
3779       set_breakpoint_count (breakpoint_count + 1);
3780       b->number = breakpoint_count;
3781       b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
3782       b->cond = cond;
3783       b->thread = thread;
3784
3785       /* If a canonical line spec is needed use that instead of the
3786          command string.  */
3787       if (canonical != (char **)NULL && canonical[i] != NULL)
3788         b->addr_string = canonical[i];
3789       else if (addr_start)
3790         b->addr_string = savestring (addr_start, addr_end - addr_start);
3791       if (cond_start)
3792         b->cond_string = savestring (cond_start, cond_end - cond_start);
3793                                      
3794       b->enable = enabled;
3795       b->disposition = tempflag ? del : donttouch;
3796       mention (b);
3797     }
3798
3799   if (sals.nelts > 1)
3800     {
3801       printf_filtered ("Multiple breakpoints were set.\n");
3802       printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
3803     }
3804   do_cleanups (old_chain);
3805 }
3806
3807 static void
3808 break_at_finish_at_depth_command_1 (arg, flag, from_tty)
3809      char *arg;
3810      int flag;
3811      int from_tty;
3812 {
3813   struct frame_info *frame;
3814   CORE_ADDR low, high, selected_pc = 0;
3815   char *extra_args, *level_arg, *addr_string;
3816   int extra_args_len = 0, if_arg = 0;
3817
3818   if (!arg ||
3819       (arg[0] == 'i' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\t')))
3820     {
3821
3822       if (default_breakpoint_valid)
3823         {
3824           if (selected_frame)
3825             {
3826               selected_pc = selected_frame->pc;
3827               if (arg)
3828                 if_arg = 1;
3829             }
3830           else
3831             error ("No selected frame.");
3832         }
3833       else
3834         error ("No default breakpoint address now.");
3835     }
3836   else
3837     {
3838       extra_args = strchr (arg, ' ');
3839       if (extra_args)
3840         {
3841           extra_args++;
3842           extra_args_len = strlen (extra_args);
3843           level_arg = (char *) xmalloc (extra_args - arg);
3844           strncpy (level_arg, arg, extra_args - arg - 1);
3845           level_arg[extra_args - arg - 1] = '\0';
3846         }
3847       else
3848         {
3849           level_arg = (char *) xmalloc (strlen (arg) + 1);
3850           strcpy (level_arg, arg);
3851         }
3852
3853       frame = parse_frame_specification (level_arg);
3854       if (frame)
3855         selected_pc = frame->pc;
3856       else
3857         selected_pc = 0;
3858     }
3859   if (if_arg)
3860     {
3861       extra_args = arg;
3862       extra_args_len = strlen (arg); 
3863     }
3864
3865   if (selected_pc)
3866     {
3867       if (find_pc_partial_function(selected_pc, (char **)NULL, &low, &high))
3868         {
3869           addr_string = (char *) xmalloc (26 + extra_args_len);
3870           if (extra_args_len)
3871             sprintf (addr_string, "*0x%x %s", high, extra_args);
3872           else
3873             sprintf (addr_string, "*0x%x", high);
3874           break_command_1 (addr_string, flag, from_tty);
3875           free (addr_string);
3876         }
3877       else
3878         error ("No function contains the specified address");
3879     }
3880   else
3881     error ("Unable to set breakpoint at procedure exit");
3882 }
3883
3884
3885 static void
3886 break_at_finish_command_1 (arg, flag, from_tty)
3887      char *arg;
3888      int flag;
3889      int from_tty;
3890 {
3891   char *addr_string, *break_string, *beg_addr_string;
3892   CORE_ADDR low, high;
3893   struct symtabs_and_lines sals;
3894   struct symtab_and_line sal;
3895   struct cleanup *old_chain;
3896   char *extra_args;
3897   int extra_args_len = 0;
3898   int i, if_arg = 0;
3899
3900   if (!arg ||
3901       (arg[0] == 'i' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\t')))
3902     {
3903       if (default_breakpoint_valid)
3904         {
3905           if (selected_frame)
3906             {
3907               addr_string = (char *) xmalloc (15);
3908               sprintf (addr_string, "*0x%x", selected_frame->pc);
3909               if (arg)
3910                 if_arg = 1;
3911             }
3912           else
3913             error ("No selected frame.");
3914         }
3915       else
3916         error ("No default breakpoint address now.");
3917     }
3918   else
3919     {
3920       addr_string = (char *) xmalloc (strlen (arg) + 1);
3921       strcpy (addr_string, arg);
3922     }
3923
3924   if (if_arg)
3925     {
3926       extra_args = arg;
3927       extra_args_len = strlen (arg); 
3928     }
3929   else
3930     if (arg)
3931       {
3932         /* get the stuff after the function name or address */
3933         extra_args = strchr (arg, ' ');
3934         if (extra_args)
3935           {
3936             extra_args++;
3937             extra_args_len = strlen (extra_args);
3938           }
3939       }
3940
3941   sals.sals = NULL;
3942   sals.nelts = 0;
3943
3944   beg_addr_string = addr_string;  
3945   sals = decode_line_1 (&addr_string, 1, (struct symtab *)NULL, 0, 
3946                         (char ***)NULL);
3947
3948   free (beg_addr_string);
3949   old_chain = make_cleanup (free, sals.sals);
3950   for (i = 0; (i < sals.nelts); i++)
3951     {
3952       sal = sals.sals[i];
3953       if (find_pc_partial_function (sal.pc, (char **)NULL, &low, &high))
3954         {
3955           break_string = (char *) xmalloc (extra_args_len + 26);
3956           if (extra_args_len)
3957             sprintf (break_string, "*0x%x %s", high, extra_args);
3958           else
3959             sprintf (break_string, "*0x%x", high);
3960           break_command_1 (break_string, flag, from_tty);
3961           free(break_string);
3962         }
3963       else
3964         error ("No function contains the specified address");
3965     }
3966   if (sals.nelts > 1)
3967     {
3968       printf_filtered ("Multiple breakpoints were set.\n");
3969       printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
3970     }
3971   do_cleanups(old_chain);
3972 }
3973
3974
3975 /* Helper function for break_command_1 and disassemble_command.  */
3976
3977 void
3978 resolve_sal_pc (sal)
3979      struct symtab_and_line *sal;
3980 {
3981   CORE_ADDR pc;
3982
3983   if (sal->pc == 0 && sal->symtab != NULL)
3984     {
3985       if (!find_line_pc (sal->symtab, sal->line, &pc))
3986         error ("No line %d in file \"%s\".",
3987                sal->line, sal->symtab->filename);
3988       sal->pc = pc;
3989     }
3990
3991   if (sal->section == 0 && sal->symtab != NULL)
3992     {
3993       struct blockvector *bv;
3994       struct block       *b;
3995       struct symbol      *sym;
3996       int                 index;
3997
3998       bv  = blockvector_for_pc_sect (sal->pc, 0, &index, sal->symtab);
3999       if (bv != NULL)
4000         {
4001           b   = BLOCKVECTOR_BLOCK (bv, index);
4002           sym = block_function (b);
4003           if (sym != NULL)
4004             {
4005               fixup_symbol_section (sym, sal->symtab->objfile);
4006               sal->section = SYMBOL_BFD_SECTION (sym);
4007             }
4008           else
4009             {
4010               /* It really is worthwhile to have the section, so we'll just
4011                  have to look harder. This case can be executed if we have 
4012                  line numbers but no functions (as can happen in assembly 
4013                  source).  */
4014
4015               struct minimal_symbol *msym; 
4016
4017               msym = lookup_minimal_symbol_by_pc (sal->pc);
4018               if (msym)
4019                 sal->section = SYMBOL_BFD_SECTION (msym);
4020             }
4021         }
4022     }
4023 }
4024
4025 void
4026 break_command (arg, from_tty)
4027      char *arg;
4028      int from_tty;
4029 {
4030   break_command_1 (arg, 0, from_tty);
4031 }
4032
4033 void
4034 break_at_finish_command (arg, from_tty)
4035      char *arg;
4036      int from_tty;
4037 {
4038   break_at_finish_command_1 (arg, 0, from_tty);
4039 }
4040
4041 void
4042 break_at_finish_at_depth_command (arg, from_tty)
4043      char *arg;
4044      int from_tty;
4045 {
4046   break_at_finish_at_depth_command_1 (arg, 0, from_tty);
4047 }
4048
4049 void
4050 tbreak_command (arg, from_tty)
4051      char *arg;
4052      int from_tty;
4053 {
4054   break_command_1 (arg, BP_TEMPFLAG, from_tty);
4055 }
4056
4057 void
4058 tbreak_at_finish_command (arg, from_tty)
4059      char *arg;
4060      int from_tty;
4061 {
4062   break_at_finish_command_1 (arg, BP_TEMPFLAG, from_tty);
4063 }
4064
4065 static void
4066 hbreak_command (arg, from_tty)
4067      char *arg;
4068      int from_tty;
4069 {
4070   break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
4071 }
4072
4073 static void
4074 thbreak_command (arg, from_tty)
4075      char *arg;
4076      int from_tty;
4077 {
4078   break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
4079 }
4080
4081 static void
4082 stop_command (arg, from_tty)
4083      char *arg;
4084      int from_tty;
4085 {
4086   printf_filtered ("Specify the type of breakpoint to set.\n\
4087 Usage: stop in <function | address>\n\
4088        stop at <line>\n");
4089 }
4090
4091 static void
4092 stopin_command (arg, from_tty)
4093      char *arg;
4094      int from_tty;
4095 {
4096   int badInput = 0;
4097
4098   if (arg == (char *)NULL)
4099     badInput = 1;
4100   else if (*arg != '*')
4101     {
4102       char *argptr = arg;
4103       int hasColon = 0;
4104
4105       /* look for a ':'.  If this is a line number specification, then say
4106          it is bad, otherwise, it should be an address or function/method
4107          name */
4108       while (*argptr && !hasColon)
4109         {
4110           hasColon = (*argptr == ':');
4111           argptr++;
4112         }
4113
4114       if (hasColon)
4115         badInput = (*argptr != ':'); /* Not a class::method */
4116       else
4117         badInput = isdigit(*arg); /* a simple line number */
4118     }
4119
4120   if (badInput)
4121     printf_filtered("Usage: stop in <function | address>\n");
4122   else
4123     break_command_1 (arg, 0, from_tty);
4124 }
4125
4126 static void
4127 stopat_command (arg, from_tty)
4128      char *arg;
4129      int from_tty;
4130 {
4131   int badInput = 0;
4132
4133   if (arg == (char *)NULL || *arg == '*') /* no line number */
4134     badInput = 1;
4135   else
4136     {
4137       char *argptr = arg;
4138       int hasColon = 0;
4139
4140       /* look for a ':'.  If there is a '::' then get out, otherwise
4141          it is probably a line number. */
4142       while (*argptr && !hasColon)
4143         {
4144           hasColon = (*argptr == ':');
4145           argptr++;
4146         }
4147
4148       if (hasColon)
4149         badInput = (*argptr == ':'); /* we have class::method */
4150       else
4151         badInput = !isdigit(*arg); /* not a line number */
4152     }
4153
4154   if (badInput)
4155     printf_filtered("Usage: stop at <line>\n");
4156   else
4157     break_command_1 (arg, 0, from_tty);
4158 }
4159
4160 /* ARGSUSED */
4161 /* accessflag:  0: watch write, 1: watch read, 2: watch access(read or write) */
4162 static void
4163 watch_command_1 (arg, accessflag, from_tty)
4164      char *arg;
4165      int accessflag;
4166      int from_tty;
4167 {
4168   struct breakpoint *b;
4169   struct symtab_and_line sal;
4170   struct expression *exp;
4171   struct block *exp_valid_block;
4172   struct value *val, *mark;
4173   struct frame_info *frame;
4174   struct frame_info *prev_frame = NULL;
4175   char *exp_start = NULL;
4176   char *exp_end = NULL;
4177   char *tok, *end_tok;
4178   int toklen;
4179   char *cond_start = NULL;
4180   char *cond_end = NULL;
4181   struct expression *cond = NULL;
4182   int i, other_type_used, target_resources_ok = 0;
4183   enum bptype bp_type;
4184   int mem_cnt = 0;
4185
4186   INIT_SAL (&sal);      /* initialize to zeroes */
4187   
4188   /* Parse arguments.  */
4189   innermost_block = NULL;
4190   exp_start = arg;
4191   exp = parse_exp_1 (&arg, 0, 0);
4192   exp_end = arg;
4193   exp_valid_block = innermost_block;
4194   mark = value_mark ();
4195   val = evaluate_expression (exp);
4196   release_value (val);
4197   if (VALUE_LAZY (val))
4198     value_fetch_lazy (val);
4199
4200   tok = arg;
4201   while (*tok == ' ' || *tok == '\t')
4202     tok++;
4203   end_tok = tok;
4204
4205   while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
4206     end_tok++;
4207
4208   toklen = end_tok - tok;
4209   if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
4210     {
4211       tok = cond_start = end_tok + 1;
4212       cond = parse_exp_1 (&tok, 0, 0);
4213       cond_end = tok;
4214     }
4215   if (*tok)
4216     error("Junk at end of command.");
4217
4218   if (accessflag == 1) bp_type = bp_read_watchpoint;
4219   else if (accessflag == 2) bp_type = bp_access_watchpoint;
4220   else bp_type = bp_hardware_watchpoint;
4221
4222   mem_cnt = can_use_hardware_watchpoint (val);
4223   if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
4224     error ("Expression cannot be implemented with read/access watchpoint.");
4225   if (mem_cnt != 0) { 
4226     i = hw_watchpoint_used_count (bp_type, &other_type_used);
4227     target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
4228                 bp_type, i + mem_cnt, other_type_used);
4229     if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
4230       error ("Target does not have this type of hardware watchpoint support.");
4231     if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
4232       error ("Target resources have been allocated for other types of watchpoints.");
4233   }
4234
4235 #if defined(HPUXHPPA)
4236  /* ??rehrauer: DTS #CHFts23014 notes that on HP-UX if you set a h/w
4237      watchpoint before the "run" command, the inferior dies with a e.g.,
4238      SIGILL once you start it.  I initially believed this was due to a
4239      bad interaction between page protection traps and the initial
4240      startup sequence by the dynamic linker.
4241
4242      However, I tried avoiding that by having HP-UX's implementation of
4243      TARGET_CAN_USE_HW_WATCHPOINT return FALSE if there was no inferior_pid
4244      yet, which forced slow watches before a "run" or "attach", and it
4245      still fails somewhere in the startup code.
4246
4247      Until I figure out what's happening, I'm disallowing watches altogether
4248      before the "run" or "attach" command.  We'll tell the user they must
4249      set watches after getting the program started. */
4250   if (! target_has_execution)
4251     {
4252       warning ("can't do that without a running program; try \"break main\", \"run\" first");
4253       return;
4254     }
4255 #endif /* HPUXHPPA */
4256   
4257   /* Now set up the breakpoint.  */
4258   b = set_raw_breakpoint (sal);
4259   set_breakpoint_count (breakpoint_count + 1);
4260   b->number = breakpoint_count;
4261   b->disposition = donttouch;
4262   b->exp = exp;
4263   b->exp_valid_block = exp_valid_block;
4264   b->exp_string = savestring (exp_start, exp_end - exp_start);
4265   b->val = val;
4266   b->cond = cond;
4267   if (cond_start)
4268     b->cond_string = savestring (cond_start, cond_end - cond_start);
4269   else
4270     b->cond_string = 0;
4271          
4272   frame = block_innermost_frame (exp_valid_block);
4273   if (frame)
4274     {
4275       prev_frame = get_prev_frame (frame);
4276       b->watchpoint_frame = frame->frame;
4277     }
4278   else
4279     b->watchpoint_frame = (CORE_ADDR)0;
4280
4281   if (mem_cnt && target_resources_ok > 0)
4282     b->type = bp_type;
4283   else
4284     b->type = bp_watchpoint;
4285
4286   /* If the expression is "local", then set up a "watchpoint scope"
4287      breakpoint at the point where we've left the scope of the watchpoint
4288      expression.  */
4289   if (innermost_block)
4290     {
4291       if (prev_frame)
4292         {
4293           struct breakpoint *scope_breakpoint;
4294           struct symtab_and_line scope_sal;
4295
4296           INIT_SAL (&scope_sal);        /* initialize to zeroes */
4297           scope_sal.pc      = get_frame_pc (prev_frame);
4298           scope_sal.section = find_pc_overlay (scope_sal.pc);
4299
4300           scope_breakpoint = set_raw_breakpoint (scope_sal);
4301           set_breakpoint_count (breakpoint_count + 1);
4302           scope_breakpoint->number = breakpoint_count;
4303
4304           scope_breakpoint->type = bp_watchpoint_scope;
4305           scope_breakpoint->enable = enabled;
4306
4307           /* Automatically delete the breakpoint when it hits.  */
4308           scope_breakpoint->disposition = del;
4309
4310           /* Only break in the proper frame (help with recursion).  */
4311           scope_breakpoint->frame = prev_frame->frame;
4312
4313           /* Set the address at which we will stop.  */
4314           scope_breakpoint->address = get_frame_pc (prev_frame);
4315
4316           /* The scope breakpoint is related to the watchpoint.  We
4317              will need to act on them together.  */
4318           b->related_breakpoint = scope_breakpoint;
4319         }
4320     }
4321   value_free_to_mark (mark);
4322   mention (b);
4323 }
4324
4325 /* Return count of locations need to be watched and can be handled
4326    in hardware.  If the watchpoint can not be handled
4327    in hardware return zero.  */
4328
4329 #if !defined(TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT)
4330 #define TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(byte_size) \
4331     ((byte_size) <= (REGISTER_SIZE))
4332 #endif
4333
4334 static int
4335 can_use_hardware_watchpoint (v)
4336      struct value *v;
4337 {
4338   int found_memory_cnt = 0;
4339
4340   /* Did the user specifically forbid us to use hardware watchpoints? */
4341   if (! can_use_hw_watchpoints)
4342     return 0;
4343         
4344   /* Make sure all the intermediate values are in memory.  Also make sure
4345      we found at least one memory expression.  Guards against watch 0x12345,
4346      which is meaningless, but could cause errors if one tries to insert a 
4347      hardware watchpoint for the constant expression.  */
4348   for ( ; v; v = v->next)
4349     {
4350       if (v->lval == lval_memory)
4351         {
4352           if (TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT (TYPE_LENGTH (VALUE_TYPE (v))))
4353             found_memory_cnt++;
4354         }
4355       else if (v->lval != not_lval && v->modifiable == 0)
4356         return 0;
4357     }
4358
4359   /* The expression itself looks suitable for using a hardware
4360      watchpoint, but give the target machine a chance to reject it.  */
4361   return found_memory_cnt;
4362 }
4363
4364 static void watch_command (arg, from_tty)
4365      char *arg;
4366      int from_tty;
4367 {
4368   watch_command_1 (arg, 0, from_tty);
4369 }
4370
4371 static void rwatch_command (arg, from_tty)
4372      char *arg;
4373      int from_tty;
4374 {
4375   watch_command_1 (arg, 1, from_tty);
4376 }
4377
4378 static void awatch_command (arg, from_tty)
4379      char *arg;
4380      int from_tty;
4381 {
4382   watch_command_1 (arg, 2, from_tty);
4383 }
4384
4385 \f
4386 /* Helper routine for the until_command routine in infcmd.c.  Here
4387    because it uses the mechanisms of breakpoints.  */
4388
4389 /* ARGSUSED */
4390 void
4391 until_break_command (arg, from_tty)
4392      char *arg;
4393      int from_tty;
4394 {
4395   struct symtabs_and_lines sals;
4396   struct symtab_and_line sal;
4397   struct frame_info *prev_frame = get_prev_frame (selected_frame);
4398   struct breakpoint *breakpoint;
4399   struct cleanup *old_chain;
4400
4401   clear_proceed_status ();
4402
4403   /* Set a breakpoint where the user wants it and at return from
4404      this function */
4405   
4406   if (default_breakpoint_valid)
4407     sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
4408                           default_breakpoint_line, (char ***)NULL);
4409   else
4410     sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, (char ***)NULL);
4411   
4412   if (sals.nelts != 1)
4413     error ("Couldn't get information on specified line.");
4414   
4415   sal = sals.sals[0];
4416   free ((PTR)sals.sals);                /* malloc'd, so freed */
4417   
4418   if (*arg)
4419     error ("Junk at end of arguments.");
4420   
4421   resolve_sal_pc (&sal);
4422   
4423   breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
4424   
4425   old_chain = make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
4426
4427   /* Keep within the current frame */
4428   
4429   if (prev_frame)
4430     {
4431       sal = find_pc_line (prev_frame->pc, 0);
4432       sal.pc = prev_frame->pc;
4433       breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
4434       make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
4435     }
4436   
4437   proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
4438   do_cleanups(old_chain);
4439 }
4440 \f
4441 #if 0
4442 /* These aren't used; I don't konw what they were for.  */
4443 /* Set a breakpoint at the catch clause for NAME.  */
4444 static int
4445 catch_breakpoint (name)
4446      char *name;
4447 {
4448 }
4449
4450 static int
4451 disable_catch_breakpoint ()
4452 {
4453 }
4454
4455 static int
4456 delete_catch_breakpoint ()
4457 {
4458 }
4459
4460 static int
4461 enable_catch_breakpoint ()
4462 {
4463 }
4464 #endif /* 0 */
4465
4466 struct sal_chain
4467 {
4468   struct sal_chain *next;
4469   struct symtab_and_line sal;
4470 };
4471
4472 /* Not really used -- invocation in handle_gnu_4_16_catch_command
4473    had been commented out in the v.4.16 sources, and stays
4474    disabled there now because "catch NAME" syntax isn't allowed.
4475    pai/1997-07-11 */
4476 /* This isn't used; I don't know what it was for.  */
4477 /* For each catch clause identified in ARGS, run FUNCTION
4478    with that clause as an argument.  */
4479 static struct symtabs_and_lines
4480 map_catch_names (args, function)
4481      char *args;
4482      int (*function)();
4483 {
4484   register char *p = args;
4485   register char *p1;
4486   struct symtabs_and_lines sals;
4487 #if 0
4488   struct sal_chain *sal_chain = 0;
4489 #endif
4490
4491   if (p == 0)
4492     error_no_arg ("one or more catch names");
4493
4494   sals.nelts = 0;
4495   sals.sals = NULL;
4496
4497   while (*p)
4498     {
4499       p1 = p;
4500       /* Don't swallow conditional part.  */
4501       if (p1[0] == 'i' && p1[1] == 'f'
4502           && (p1[2] == ' ' || p1[2] == '\t'))
4503         break;
4504
4505       if (isalpha (*p1))
4506         {
4507           p1++;
4508           while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
4509             p1++;
4510         }
4511
4512       if (*p1 && *p1 != ' ' && *p1 != '\t')
4513         error ("Arguments must be catch names.");
4514
4515       *p1 = 0;
4516 #if 0
4517       if (function (p))
4518         {
4519           struct sal_chain *next = (struct sal_chain *)
4520             alloca (sizeof (struct sal_chain));
4521           next->next = sal_chain;
4522           next->sal = get_catch_sal (p);
4523           sal_chain = next;
4524           goto win;
4525         }
4526 #endif
4527       printf_unfiltered ("No catch clause for exception %s.\n", p);
4528 #if 0
4529     win:
4530 #endif
4531       p = p1;
4532       while (*p == ' ' || *p == '\t') p++;
4533     }
4534 }
4535
4536 /* This shares a lot of code with `print_frame_label_vars' from stack.c.  */
4537
4538 static struct symtabs_and_lines
4539 get_catch_sals (this_level_only)
4540      int this_level_only;
4541 {
4542   register struct blockvector *bl;
4543   register struct block *block;
4544   int index, have_default = 0;
4545   CORE_ADDR pc;
4546   struct symtabs_and_lines sals;
4547   struct sal_chain *sal_chain = 0;
4548   char *blocks_searched;
4549
4550   /* Not sure whether an error message is always the correct response,
4551      but it's better than a core dump.  */
4552   if (selected_frame == NULL)
4553     error ("No selected frame.");
4554   block = get_frame_block (selected_frame);
4555   pc = selected_frame->pc;
4556
4557   sals.nelts = 0;
4558   sals.sals = NULL;
4559
4560   if (block == 0)
4561     error ("No symbol table info available.\n");
4562
4563   bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
4564   blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
4565   memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
4566
4567   while (block != 0)
4568     {
4569       CORE_ADDR end = BLOCK_END (block) - 4;
4570       int last_index;
4571
4572       if (bl != blockvector_for_pc (end, &index))
4573         error ("blockvector blotch");
4574       if (BLOCKVECTOR_BLOCK (bl, index) != block)
4575         error ("blockvector botch");
4576       last_index = BLOCKVECTOR_NBLOCKS (bl);
4577       index += 1;
4578
4579       /* Don't print out blocks that have gone by.  */
4580       while (index < last_index
4581              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
4582         index++;
4583
4584       while (index < last_index
4585              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
4586         {
4587           if (blocks_searched[index] == 0)
4588             {
4589               struct block *b = BLOCKVECTOR_BLOCK (bl, index);
4590               int nsyms;
4591               register int i;
4592               register struct symbol *sym;
4593
4594               nsyms = BLOCK_NSYMS (b);
4595
4596               for (i = 0; i < nsyms; i++)
4597                 {
4598                   sym = BLOCK_SYM (b, i);
4599                   if (STREQ (SYMBOL_NAME (sym), "default"))
4600                     {
4601                       if (have_default)
4602                         continue;
4603                       have_default = 1;
4604                     }
4605                   if (SYMBOL_CLASS (sym) == LOC_LABEL)
4606                     {
4607                       struct sal_chain *next = (struct sal_chain *)
4608                         alloca (sizeof (struct sal_chain));
4609                       next->next = sal_chain;
4610                       next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
4611                       sal_chain = next;
4612                     }
4613                 }
4614               blocks_searched[index] = 1;
4615             }
4616           index++;
4617         }
4618       if (have_default)
4619         break;
4620       if (sal_chain && this_level_only)
4621         break;
4622
4623       /* After handling the function's top-level block, stop.
4624          Don't continue to its superblock, the block of
4625          per-file symbols.  */
4626       if (BLOCK_FUNCTION (block))
4627         break;
4628       block = BLOCK_SUPERBLOCK (block);
4629     }
4630
4631   if (sal_chain)
4632     {
4633       struct sal_chain *tmp_chain;
4634
4635       /* Count the number of entries.  */
4636       for (index = 0, tmp_chain = sal_chain; tmp_chain;
4637            tmp_chain = tmp_chain->next)
4638         index++;
4639
4640       sals.nelts = index;
4641       sals.sals = (struct symtab_and_line *)
4642         xmalloc (index * sizeof (struct symtab_and_line));
4643       for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
4644         sals.sals[index] = sal_chain->sal;
4645     }
4646
4647   return sals;
4648 }
4649
4650 static void
4651 ep_skip_leading_whitespace (s)
4652     char **  s;
4653 {
4654    if ((s == NULL) || (*s == NULL))
4655        return;
4656    while (isspace(**s))
4657        *s += 1;
4658 }
4659  
4660 /* This function examines a string, and attempts to find a token
4661    that might be an event name in the leading characters.  If a
4662    possible match is found, a pointer to the last character of
4663    the token is returned.  Else, NULL is returned. */
4664 static char *
4665 ep_find_event_name_end (arg)
4666   char *  arg;
4667 {
4668   char *  s = arg;
4669   char *  event_name_end = NULL;
4670  
4671   /* If we could depend upon the presense of strrpbrk, we'd use that... */
4672   if (arg == NULL)
4673     return NULL;
4674  
4675   /* We break out of the loop when we find a token delimiter.
4676    Basically, we're looking for alphanumerics and underscores;
4677    anything else delimites the token. */
4678   while (*s != '\0')
4679     {
4680       if (! isalnum(*s) && (*s != '_'))
4681         break;
4682       event_name_end = s;
4683       s++;
4684     }
4685  
4686   return event_name_end;
4687 }
4688
4689  
4690 /* This function attempts to parse an optional "if <cond>" clause
4691    from the arg string.  If one is not found, it returns NULL.
4692  
4693    Else, it returns a pointer to the condition string.  (It does not
4694    attempt to evaluate the string against a particular block.)  And,
4695    it updates arg to point to the first character following the parsed
4696    if clause in the arg string. */
4697 static char *
4698 ep_parse_optional_if_clause (arg)
4699   char **  arg;
4700 {
4701   char *  cond_string;
4702  
4703   if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace((*arg)[2]))
4704     return NULL;
4705  
4706   /* Skip the "if" keyword. */
4707   (*arg) += 2;
4708  
4709   /* Skip any extra leading whitespace, and record the start of the
4710      condition string. */
4711   ep_skip_leading_whitespace (arg);
4712   cond_string = *arg;
4713  
4714   /* Assume that the condition occupies the remainder of the arg string. */
4715   (*arg) += strlen (cond_string);
4716  
4717   return cond_string;
4718 }
4719  
4720 /* This function attempts to parse an optional filename from the arg
4721    string.  If one is not found, it returns NULL.
4722  
4723    Else, it returns a pointer to the parsed filename.  (This function
4724    makes no attempt to verify that a file of that name exists, or is
4725    accessible.)  And, it updates arg to point to the first character
4726    following the parsed filename in the arg string.
4727  
4728    Note that clients needing to preserve the returned filename for
4729    future access should copy it to their own buffers. */
4730 static char *
4731 ep_parse_optional_filename (arg)
4732   char **  arg;
4733 {
4734   static char  filename [1024];
4735   char *  arg_p = *arg;
4736   int  i;
4737   char  c;
4738  
4739   if ((*arg_p == '\0') || isspace (*arg_p))
4740     return NULL;
4741  
4742   for (i=0; ; i++)
4743     {
4744       c = *arg_p;
4745       if (isspace (c))
4746         c = '\0';
4747       filename[i] = c;
4748       if (c == '\0')
4749         break;
4750       arg_p++;
4751     }
4752   *arg = arg_p;
4753  
4754   return filename;
4755 }
4756  
4757 /* Commands to deal with catching events, such as signals, exceptions,
4758    process start/exit, etc.  */
4759  
4760 typedef enum {catch_fork, catch_vfork} catch_fork_kind;
4761  
4762 static void
4763 catch_fork_command_1 (fork_kind, arg, tempflag, from_tty)
4764   catch_fork_kind  fork_kind;
4765   char *  arg;
4766   int  tempflag;
4767   int  from_tty;
4768 {
4769   char *  cond_string = NULL;
4770  
4771   ep_skip_leading_whitespace (&arg);
4772  
4773   /* The allowed syntax is:
4774         catch [v]fork
4775         catch [v]fork if <cond>
4776  
4777      First, check if there's an if clause. */
4778   cond_string = ep_parse_optional_if_clause (&arg);
4779  
4780   if ((*arg != '\0') && !isspace (*arg))
4781     error ("Junk at end of arguments.");
4782  
4783   /* If this target supports it, create a fork or vfork catchpoint
4784      and enable reporting of such events. */
4785   switch (fork_kind) {
4786     case catch_fork :
4787       create_fork_event_catchpoint (tempflag, cond_string);
4788       break;
4789     case catch_vfork :
4790       create_vfork_event_catchpoint (tempflag, cond_string);
4791       break;
4792     default :
4793       error ("unsupported or unknown fork kind; cannot catch it");
4794       break;
4795   }
4796 }
4797
4798 static void
4799 catch_exec_command_1 (arg, tempflag, from_tty)
4800   char *  arg;
4801   int  tempflag;
4802   int  from_tty;
4803 {
4804   char *  cond_string = NULL;
4805
4806   ep_skip_leading_whitespace (&arg);
4807
4808   /* The allowed syntax is:
4809         catch exec
4810         catch exec if <cond>
4811
4812      First, check if there's an if clause. */
4813   cond_string = ep_parse_optional_if_clause (&arg);
4814
4815   if ((*arg != '\0') && !isspace (*arg))
4816     error ("Junk at end of arguments.");
4817
4818   /* If this target supports it, create an exec catchpoint
4819      and enable reporting of such events. */
4820   create_exec_event_catchpoint (tempflag, cond_string);
4821 }
4822  
4823 #if defined(SOLIB_ADD)
4824 static void
4825 catch_load_command_1 (arg, tempflag, from_tty)
4826   char *  arg;
4827   int  tempflag;
4828   int  from_tty;
4829 {
4830   char *  dll_pathname = NULL;
4831   char *  cond_string = NULL;
4832  
4833   ep_skip_leading_whitespace (&arg);
4834  
4835   /* The allowed syntax is:
4836         catch load
4837         catch load if <cond>
4838         catch load <filename>
4839         catch load <filename> if <cond>
4840  
4841      The user is not allowed to specify the <filename> after an
4842      if clause.
4843  
4844      We'll ignore the pathological case of a file named "if".
4845  
4846      First, check if there's an if clause.  If so, then there
4847      cannot be a filename. */
4848   cond_string = ep_parse_optional_if_clause (&arg);
4849  
4850   /* If there was an if clause, then there cannot be a filename.
4851      Else, there might be a filename and an if clause. */
4852   if (cond_string == NULL)
4853     {
4854       dll_pathname = ep_parse_optional_filename (&arg);
4855       ep_skip_leading_whitespace (&arg);
4856       cond_string = ep_parse_optional_if_clause (&arg);
4857     }
4858  
4859   if ((*arg != '\0') && !isspace (*arg))
4860     error ("Junk at end of arguments.");
4861  
4862   /* Create a load breakpoint that only triggers when a load of
4863      the specified dll (or any dll, if no pathname was specified)
4864      occurs. */
4865   SOLIB_CREATE_CATCH_LOAD_HOOK (inferior_pid, tempflag, dll_pathname, cond_string);
4866 }
4867  
4868 static void
4869 catch_unload_command_1 (arg, tempflag, from_tty)
4870   char *  arg;
4871   int  tempflag;
4872   int  from_tty;
4873 {
4874   char *  dll_pathname = NULL;
4875   char *  cond_string = NULL;
4876  
4877   ep_skip_leading_whitespace (&arg);
4878  
4879   /* The allowed syntax is:
4880         catch unload
4881         catch unload if <cond>
4882         catch unload <filename>
4883         catch unload <filename> if <cond>
4884  
4885      The user is not allowed to specify the <filename> after an
4886      if clause.
4887  
4888      We'll ignore the pathological case of a file named "if".
4889  
4890      First, check if there's an if clause.  If so, then there
4891      cannot be a filename. */
4892   cond_string = ep_parse_optional_if_clause (&arg);
4893  
4894   /* If there was an if clause, then there cannot be a filename.
4895      Else, there might be a filename and an if clause. */
4896   if (cond_string == NULL)
4897     {
4898       dll_pathname = ep_parse_optional_filename (&arg);
4899       ep_skip_leading_whitespace (&arg);
4900       cond_string = ep_parse_optional_if_clause (&arg);
4901     }
4902  
4903   if ((*arg != '\0') && !isspace (*arg))
4904     error ("Junk at end of arguments.");
4905  
4906   /* Create an unload breakpoint that only triggers when an unload of
4907      the specified dll (or any dll, if no pathname was specified)
4908      occurs. */
4909   SOLIB_CREATE_CATCH_UNLOAD_HOOK (inferior_pid, tempflag, dll_pathname, cond_string);
4910 }
4911 #endif /* SOLIB_ADD */
4912
4913 /* Commands to deal with catching exceptions.  */
4914
4915 /* Set a breakpoint at the specified callback routine for an
4916    exception event callback */ 
4917
4918 static void
4919 create_exception_catchpoint (tempflag, cond_string, ex_event, sal)
4920   int tempflag;
4921   char * cond_string;
4922   enum exception_event_kind ex_event;
4923   struct symtab_and_line * sal;
4924 {
4925   struct breakpoint *  b;
4926   int  i;
4927   int  thread = -1;  /* All threads. */
4928
4929   if (!sal) /* no exception support? */
4930     return;
4931
4932   b = set_raw_breakpoint (*sal);
4933   set_breakpoint_count (breakpoint_count + 1);
4934   b->number = breakpoint_count;
4935   b->cond = NULL;
4936   b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
4937   b->thread = thread;
4938   b->addr_string = NULL;
4939   b->enable = enabled;
4940   b->disposition = tempflag ? del : donttouch;
4941   switch (ex_event)
4942     {
4943       case EX_EVENT_THROW:
4944         b->type = bp_catch_throw;
4945         break;
4946       case EX_EVENT_CATCH:
4947         b->type = bp_catch_catch;
4948         break;
4949       default: /* error condition */ 
4950         b->type = bp_none;
4951         b->enable = disabled;
4952         error ("Internal error -- invalid catchpoint kind");
4953     }
4954   mention (b);
4955 }
4956
4957 /* Deal with "catch catch" and "catch throw" commands */ 
4958
4959 static void
4960 catch_exception_command_1 (ex_event, arg, tempflag, from_tty)
4961   enum exception_event_kind ex_event;
4962   char *  arg;
4963   int  tempflag;
4964   int  from_tty;
4965 {
4966   char * cond_string = NULL;
4967   struct symtab_and_line * sal = NULL;
4968   
4969   ep_skip_leading_whitespace (&arg);
4970   
4971   cond_string = ep_parse_optional_if_clause (&arg);
4972
4973   if ((*arg != '\0') && !isspace (*arg))
4974     error ("Junk at end of arguments.");
4975
4976   if ((ex_event != EX_EVENT_THROW) &&
4977       (ex_event != EX_EVENT_CATCH))
4978     error ("Unsupported or unknown exception event; cannot catch it");
4979
4980   /* See if we can find a callback routine */
4981   sal = target_enable_exception_callback (ex_event, 1);
4982
4983   if (sal) 
4984     {
4985       /* We have callbacks from the runtime system for exceptions.
4986          Set a breakpoint on the sal found, if no errors */ 
4987       if (sal != (struct symtab_and_line *) -1)
4988         create_exception_catchpoint (tempflag, cond_string, ex_event, sal);
4989       else
4990         return; /* something went wrong with setting up callbacks */ 
4991     }
4992   else  
4993     {
4994       /* No callbacks from runtime system for exceptions.
4995          Try GNU C++ exception breakpoints using labels in debug info. */
4996       if (ex_event == EX_EVENT_CATCH)
4997         {
4998           handle_gnu_4_16_catch_command (arg, tempflag, from_tty);
4999         }
5000       else if (ex_event == EX_EVENT_THROW)
5001         {
5002           /* Set a breakpoint on __raise_exception () */
5003           
5004           fprintf_filtered (gdb_stderr, "Unsupported with this platform/compiler combination.\n");
5005           fprintf_filtered (gdb_stderr, "Perhaps you can achieve the effect you want by setting\n");
5006           fprintf_filtered (gdb_stderr, "a breakpoint on __raise_exception().\n");
5007         }
5008     }
5009 }
5010
5011 /* Cover routine to allow wrapping target_enable_exception_catchpoints
5012    inside a catch_errors */
5013
5014 static int
5015 cover_target_enable_exception_callback (arg)
5016   PTR arg;
5017 {
5018   args_for_catchpoint_enable *args = arg;
5019   struct symtab_and_line *sal;
5020   sal = target_enable_exception_callback (args->kind, args->enable);
5021   if (sal == NULL)
5022     return 0;
5023   else if (sal == (struct symtab_and_line *) -1)
5024     return -1;
5025   else
5026     return 1; /*is valid*/
5027 }
5028
5029
5030
5031 /* This is the original v.4.16 and earlier version of the
5032    catch_command_1() function.  Now that other flavours of "catch"
5033    have been introduced, and since exception handling can be handled
5034    in other ways (through target ops) also, this is used only for the
5035    GNU C++ exception handling system.
5036    Note: Only the "catch" flavour of GDB 4.16 is handled here.  The
5037    "catch NAME" is now no longer allowed in catch_command_1().  Also,
5038    there was no code in GDB 4.16 for "catch throw". 
5039   
5040    Called from catch_exception_command_1 () */
5041
5042
5043 static void
5044 handle_gnu_4_16_catch_command (arg, tempflag, from_tty)
5045      char *arg;
5046      int tempflag;
5047      int from_tty;
5048 {
5049   /* First, translate ARG into something we can deal with in terms
5050      of breakpoints.  */
5051
5052   struct symtabs_and_lines sals;
5053   struct symtab_and_line sal;
5054   register struct expression *cond = 0;
5055   register struct breakpoint *b;
5056   char *save_arg;
5057   int i;
5058
5059   INIT_SAL (&sal);      /* initialize to zeroes */
5060
5061   /* If no arg given, or if first arg is 'if ', all active catch clauses
5062      are breakpointed. */
5063
5064   if (!arg || (arg[0] == 'i' && arg[1] == 'f' 
5065                && (arg[2] == ' ' || arg[2] == '\t')))
5066     {
5067       /* Grab all active catch clauses.  */
5068       sals = get_catch_sals (0);
5069     }
5070   else
5071     {
5072       /* Grab selected catch clauses.  */
5073       error ("catch NAME not implemented");
5074
5075 #if 0
5076       /* Not sure why this code has been disabled. I'm leaving
5077          it disabled.  We can never come here now anyway
5078          since we don't allow the "catch NAME" syntax.
5079          pai/1997-07-11 */ 
5080
5081       /* This isn't used; I don't know what it was for.  */
5082       sals = map_catch_names (arg, catch_breakpoint);
5083 #endif
5084     }
5085
5086   if (! sals.nelts) 
5087     return;
5088
5089   save_arg = arg;
5090   for (i = 0; i < sals.nelts; i++)
5091     {
5092       resolve_sal_pc (&sals.sals[i]);
5093       
5094       while (arg && *arg)
5095         {
5096           if (arg[0] == 'i' && arg[1] == 'f'
5097               && (arg[2] == ' ' || arg[2] == '\t'))
5098             cond = parse_exp_1 ((arg += 2, &arg), 
5099                                 block_for_pc (sals.sals[i].pc), 0);
5100           else
5101             error ("Junk at end of arguments.");
5102         }
5103       arg = save_arg;
5104     }
5105
5106   for (i = 0; i < sals.nelts; i++)
5107     {
5108       sal = sals.sals[i];
5109
5110       if (from_tty)
5111         describe_other_breakpoints (sal.pc, sal.section);
5112
5113       b = set_raw_breakpoint (sal);
5114       set_breakpoint_count (breakpoint_count + 1);
5115       b->number = breakpoint_count;
5116       b->type = bp_breakpoint; /* Important -- this is an ordinary breakpoint.
5117                                   For platforms with callback support for exceptions,
5118                                   create_exception_catchpoint() will create special
5119                                   bp types (bp_catch_catch and bp_catch_throw), and
5120                                   there is code in insert_breakpoints() and elsewhere
5121                                   that depends on that. */
5122
5123       b->cond = cond;
5124       b->enable = enabled;
5125       b->disposition = tempflag ? del : donttouch;
5126
5127       mention (b);
5128     }
5129
5130   if (sals.nelts > 1)
5131     {
5132       printf_unfiltered ("Multiple breakpoints were set.\n");
5133       printf_unfiltered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
5134     }
5135   free ((PTR)sals.sals);
5136 }
5137
5138 #if 0
5139 /* This creates a temporary internal breakpoint
5140    just to placate infrun */
5141 static struct breakpoint *
5142 create_temp_exception_breakpoint (pc)
5143   CORE_ADDR pc;
5144 {
5145   struct symtab_and_line sal;
5146   struct breakpoint *b;
5147
5148   INIT_SAL(&sal);
5149   sal.pc = pc;
5150   sal.symtab = NULL;
5151   sal.line = 0;
5152
5153   b = set_raw_breakpoint (sal);
5154   if (!b)
5155     error ("Internal error -- couldn't set temp exception breakpoint");
5156
5157   b->type = bp_breakpoint;
5158   b->disposition = del;
5159   b->enable = enabled;
5160   b->silent = 1;
5161   b->number = internal_breakpoint_number--;
5162   return b;
5163 }
5164 #endif
5165
5166 static void
5167 catch_command_1 (arg, tempflag, from_tty)
5168   char *arg;
5169   int tempflag;
5170   int from_tty;
5171 {
5172  
5173   /* The first argument may be an event name, such as "start" or "load".
5174      If so, then handle it as such.  If it doesn't match an event name,
5175      then attempt to interpret it as an exception name.  (This latter is
5176      the v4.16-and-earlier GDB meaning of the "catch" command.)
5177  
5178      First, try to find the bounds of what might be an event name. */
5179   char *  arg1_start = arg;
5180   char *  arg1_end;
5181   int  arg1_length;
5182  
5183   if (arg1_start == NULL)
5184     {
5185       /* Old behaviour was to use pre-v-4.16 syntax */ 
5186       /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
5187       /* return; */
5188       /* Now, this is not allowed */ 
5189       error ("Catch requires an event name.");
5190
5191     }
5192   arg1_end = ep_find_event_name_end (arg1_start);
5193   if (arg1_end == NULL)
5194     error ("catch requires an event");
5195   arg1_length = arg1_end + 1 - arg1_start;
5196  
5197   /* Try to match what we found against known event names. */
5198   if (strncmp (arg1_start, "signal", arg1_length) == 0)
5199     {
5200       error ("Catch of signal not yet implemented");
5201     }
5202   else if (strncmp (arg1_start, "catch", arg1_length) == 0)
5203     {
5204       catch_exception_command_1 (EX_EVENT_CATCH, arg1_end+1, tempflag, from_tty); 
5205     }
5206   else if (strncmp (arg1_start, "throw", arg1_length) == 0)
5207     {
5208       catch_exception_command_1 (EX_EVENT_THROW, arg1_end+1, tempflag, from_tty);
5209     }
5210   else if (strncmp (arg1_start, "thread_start", arg1_length) == 0)
5211     {
5212       error ("Catch of thread_start not yet implemented");
5213     }
5214   else if (strncmp (arg1_start, "thread_exit", arg1_length) == 0)
5215     {
5216       error ("Catch of thread_exit not yet implemented");
5217     }
5218   else if (strncmp (arg1_start, "thread_join", arg1_length) == 0)
5219     {
5220       error ("Catch of thread_join not yet implemented");
5221     }
5222   else if (strncmp (arg1_start, "start", arg1_length) == 0)
5223     {
5224       error ("Catch of start not yet implemented");
5225     }
5226   else if (strncmp (arg1_start, "exit", arg1_length) == 0)
5227     {
5228       error ("Catch of exit not yet implemented");
5229     }
5230   else if (strncmp (arg1_start, "fork", arg1_length) == 0)
5231     {
5232 #if defined(CHILD_INSERT_FORK_CATCHPOINT)
5233       catch_fork_command_1 (catch_fork, arg1_end+1, tempflag, from_tty);
5234 #else
5235       error ("Catch of fork not yet implemented");
5236 #endif
5237     }
5238   else if (strncmp (arg1_start, "vfork", arg1_length) == 0)
5239     {
5240 #if defined(CHILD_INSERT_VFORK_CATCHPOINT)
5241       catch_fork_command_1 (catch_vfork, arg1_end+1, tempflag, from_tty);
5242 #else
5243       error ("Catch of vfork not yet implemented");
5244 #endif
5245     }
5246   else if (strncmp (arg1_start, "exec", arg1_length) == 0)
5247     {
5248 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
5249       catch_exec_command_1 (arg1_end+1, tempflag, from_tty);
5250 #else
5251       error ("Catch of exec not yet implemented");
5252 #endif
5253     }
5254   else if (strncmp (arg1_start, "load", arg1_length) == 0)
5255     {
5256 #if defined(SOLIB_ADD)
5257       catch_load_command_1 (arg1_end+1, tempflag, from_tty);
5258 #else
5259       error ("Catch of load not implemented");
5260 #endif
5261     }
5262   else if (strncmp (arg1_start, "unload", arg1_length) == 0)
5263     {
5264 #if defined(SOLIB_ADD)
5265       catch_unload_command_1 (arg1_end+1, tempflag, from_tty);
5266 #else
5267       error ("Catch of load not implemented");
5268 #endif
5269     }
5270   else if (strncmp (arg1_start, "stop", arg1_length) == 0)
5271     {
5272       error ("Catch of stop not yet implemented");
5273     }
5274  
5275   /* This doesn't appear to be an event name */
5276
5277   else
5278     {
5279       /* Pre-v.4.16 behaviour was to treat the argument
5280          as the name of an exception */ 
5281       /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
5282       /* Now this is not allowed */ 
5283       error ("Unknown event kind specified for catch");
5284
5285     }
5286 }
5287
5288 /* Used by the gui, could be made a worker for other things. */
5289
5290 struct breakpoint *
5291 set_breakpoint_sal (sal)
5292      struct symtab_and_line sal;
5293 {
5294   struct breakpoint *b;
5295   b = set_raw_breakpoint (sal);
5296   set_breakpoint_count (breakpoint_count + 1);
5297   b->number = breakpoint_count;
5298   b->type = bp_breakpoint;
5299   b->cond = 0;
5300   b->thread = -1;
5301   return b;
5302 }
5303
5304 #if 0
5305 /* These aren't used; I don't know what they were for.  */
5306 /* Disable breakpoints on all catch clauses described in ARGS.  */
5307 static void
5308 disable_catch (args)
5309      char *args;
5310 {
5311   /* Map the disable command to catch clauses described in ARGS.  */
5312 }
5313
5314 /* Enable breakpoints on all catch clauses described in ARGS.  */
5315 static void
5316 enable_catch (args)
5317      char *args;
5318 {
5319   /* Map the disable command to catch clauses described in ARGS.  */
5320 }
5321
5322 /* Delete breakpoints on all catch clauses in the active scope.  */
5323 static void
5324 delete_catch (args)
5325      char *args;
5326 {
5327   /* Map the delete command to catch clauses described in ARGS.  */
5328 }
5329 #endif /* 0 */
5330
5331 static void
5332 catch_command (arg, from_tty)
5333      char *arg;
5334      int from_tty;
5335 {
5336   catch_command_1 (arg, 0, from_tty);
5337 }
5338 \f
5339
5340 static void
5341 tcatch_command (arg, from_tty)
5342      char *arg;
5343      int from_tty;
5344 {
5345   catch_command_1 (arg, 1, from_tty);
5346 }
5347
5348
5349 static void
5350 clear_command (arg, from_tty)
5351      char *arg;
5352      int from_tty;
5353 {
5354   register struct breakpoint *b, *b1;
5355   int default_match;
5356   struct symtabs_and_lines sals;
5357   struct symtab_and_line sal;
5358   register struct breakpoint *found;
5359   int i;
5360
5361   if (arg)
5362     {
5363       sals = decode_line_spec (arg, 1);
5364       default_match = 0;
5365     }
5366   else
5367     {
5368       sals.sals = (struct symtab_and_line *) 
5369         xmalloc (sizeof (struct symtab_and_line));
5370       INIT_SAL (&sal);  /* initialize to zeroes */
5371       sal.line = default_breakpoint_line;
5372       sal.symtab = default_breakpoint_symtab;
5373       sal.pc = default_breakpoint_address;
5374       if (sal.symtab == 0)
5375         error ("No source file specified.");
5376
5377       sals.sals[0] = sal;
5378       sals.nelts = 1;
5379
5380       default_match = 1;
5381     }
5382
5383   /* For each line spec given, delete bps which correspond
5384      to it.  We do this in two loops: the first loop looks at
5385      the initial bp(s) in the chain which should be deleted,
5386      the second goes down the rest of the chain looking ahead
5387      one so it can take those bps off the chain without messing
5388      up the chain. */
5389
5390
5391   for (i = 0; i < sals.nelts; i++)
5392     {
5393       /* If exact pc given, clear bpts at that pc.
5394          If line given (pc == 0), clear all bpts on specified line.
5395          If defaulting, clear all bpts on default line
5396          or at default pc.
5397        
5398                 defaulting    sal.pc != 0    tests to do
5399        
5400                 0              1             pc
5401                 1              1             pc _and_ line
5402                 0              0             line
5403                 1              0             <can't happen> */
5404
5405       sal = sals.sals[i];
5406       found = (struct breakpoint *) 0;
5407
5408
5409       while (breakpoint_chain
5410              /* Why don't we check here that this is not
5411                 a watchpoint, etc., as we do below?
5412                 I can't make it fail, but don't know
5413                 what's stopping the failure: a watchpoint
5414                 of the same address as "sal.pc" should
5415                 wind up being deleted. */
5416  
5417              && (  ((sal.pc && (breakpoint_chain->address == sal.pc)) &&
5418                    (overlay_debugging == 0 ||
5419                     breakpoint_chain->section == sal.section))
5420                 || ((default_match || (0 == sal.pc))
5421                    && breakpoint_chain->source_file != NULL
5422                    && sal.symtab != NULL
5423                    && STREQ (breakpoint_chain->source_file, sal.symtab->filename)
5424                    && breakpoint_chain->line_number == sal.line)))
5425
5426         {
5427           b1 = breakpoint_chain;
5428           breakpoint_chain = b1->next;
5429           b1->next = found;
5430           found = b1;
5431         }
5432
5433       ALL_BREAKPOINTS (b)
5434
5435       while (b->next
5436              && b->next->type != bp_none
5437              && b->next->type != bp_watchpoint
5438              && b->next->type != bp_hardware_watchpoint
5439              && b->next->type != bp_read_watchpoint
5440              && b->next->type != bp_access_watchpoint
5441              && (  ((sal.pc && (b->next->address == sal.pc)) &&
5442                    (overlay_debugging == 0 ||
5443                     b->next->section == sal.section))
5444                 || ((default_match || (0 == sal.pc))
5445                    && b->next->source_file != NULL
5446                    && sal.symtab != NULL
5447                    && STREQ (b->next->source_file, sal.symtab->filename)
5448                    && b->next->line_number == sal.line)))
5449
5450
5451           {
5452             b1 = b->next;
5453             b->next = b1->next;
5454             b1->next = found;
5455             found = b1;
5456           }
5457
5458       if (found == 0)
5459         {
5460           if (arg)
5461             error ("No breakpoint at %s.", arg);
5462           else
5463             error ("No breakpoint at this line.");
5464         }
5465
5466       if (found->next) from_tty = 1; /* Always report if deleted more than one */
5467       if (from_tty) printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
5468       breakpoints_changed ();
5469       while (found)
5470         {
5471           if (from_tty) printf_unfiltered ("%d ", found->number);
5472           b1 = found->next;
5473           delete_breakpoint (found);
5474           found = b1;
5475         }
5476       if (from_tty) putchar_unfiltered ('\n');
5477     }
5478   free ((PTR)sals.sals);
5479 }
5480 \f
5481 /* Delete breakpoint in BS if they are `delete' breakpoints and
5482    all breakpoints that are marked for deletion, whether hit or not.
5483    This is called after any breakpoint is hit, or after errors.  */
5484
5485 void
5486 breakpoint_auto_delete (bs)
5487      bpstat bs;
5488 {
5489   struct breakpoint *b, *temp;
5490
5491   for (; bs; bs = bs->next)
5492     if (bs->breakpoint_at && bs->breakpoint_at->disposition == del 
5493         && bs->stop)
5494       delete_breakpoint (bs->breakpoint_at);
5495
5496   ALL_BREAKPOINTS_SAFE (b, temp)
5497     {
5498       if (b->disposition == del_at_next_stop)
5499         delete_breakpoint (b);
5500     }
5501 }
5502
5503 /* Delete a breakpoint and clean up all traces of it in the data structures. */
5504
5505 void
5506 delete_breakpoint (bpt)
5507      struct breakpoint *bpt;
5508 {
5509   register struct breakpoint *b;
5510   register bpstat bs;
5511
5512   if (bpt == NULL)
5513     error ("Internal error (attempted to delete a NULL breakpoint)");
5514
5515
5516   /* Has this bp already been deleted?  This can happen because multiple
5517      lists can hold pointers to bp's.  bpstat lists are especial culprits.
5518
5519      One example of this happening is a watchpoint's scope bp.  When the
5520      scope bp triggers, we notice that the watchpoint is out of scope, and
5521      delete it.  We also delete its scope bp.  But the scope bp is marked
5522      "auto-deleting", and is already on a bpstat.  That bpstat is then
5523      checked for auto-deleting bp's, which are deleted.
5524
5525      A real solution to this problem might involve reference counts in bp's,
5526      and/or giving them pointers back to their referencing bpstat's, and
5527      teaching delete_breakpoint to only free a bp's storage when no more
5528      references were extent.  A cheaper bandaid was chosen. */
5529   if (bpt->type == bp_none)
5530     return;
5531
5532   if (delete_breakpoint_hook)
5533     delete_breakpoint_hook (bpt);
5534
5535   if (bpt->inserted)
5536     remove_breakpoint (bpt, mark_uninserted);
5537       
5538   if (breakpoint_chain == bpt)
5539     breakpoint_chain = bpt->next;
5540
5541   /* If we have callback-style exception catchpoints, don't go through
5542      the adjustments to the C++ runtime library etc. if the inferior
5543      isn't actually running.  target_enable_exception_callback for a
5544      null target ops vector gives an undesirable error message, so we
5545      check here and avoid it. Since currently (1997-09-17) only HP-UX aCC's
5546      exceptions are supported in this way, it's OK for now. FIXME */ 
5547   if (ep_is_exception_catchpoint (bpt) && target_has_execution)
5548     {
5549       static char message1[] = "Error in deleting catchpoint %d:\n";
5550       static char message[sizeof (message1) + 30];
5551       args_for_catchpoint_enable args;
5552
5553       sprintf (message, message1, bpt->number); /* Format possible error msg */
5554       args.kind = bpt->type == bp_catch_catch ? EX_EVENT_CATCH : EX_EVENT_THROW;
5555       args.enable = 0;
5556       catch_errors (cover_target_enable_exception_callback, &args,
5557                     message, RETURN_MASK_ALL);
5558     }
5559
5560
5561   ALL_BREAKPOINTS (b)
5562     if (b->next == bpt)
5563       {
5564         b->next = bpt->next;
5565         break;
5566       }
5567
5568   /* Before turning off the visuals for the bp, check to see that
5569      there are no other bps at the same address. */
5570   if (tui_version)
5571     {
5572       int clearIt;
5573
5574       ALL_BREAKPOINTS (b)
5575         {
5576           clearIt = (b->address != bpt->address);
5577           if (!clearIt)
5578             break;
5579         }
5580
5581       if (clearIt)
5582         {
5583           TUIDO(((TuiOpaqueFuncPtr)tui_vAllSetHasBreakAt, bpt, 0));
5584           TUIDO(((TuiOpaqueFuncPtr)tuiUpdateAllExecInfos));
5585         }
5586     }
5587
5588   check_duplicates (bpt->address, bpt->section);
5589   /* If this breakpoint was inserted, and there is another breakpoint
5590      at the same address, we need to insert the other breakpoint.  */
5591   if (bpt->inserted
5592       && bpt->type != bp_hardware_watchpoint
5593       && bpt->type != bp_read_watchpoint
5594       && bpt->type != bp_access_watchpoint
5595       && bpt->type != bp_catch_fork
5596       && bpt->type != bp_catch_vfork
5597       && bpt->type != bp_catch_exec)
5598     {
5599       ALL_BREAKPOINTS (b)
5600         if (b->address == bpt->address
5601             && b->section == bpt->section
5602             && !b->duplicate
5603             && b->enable != disabled
5604             && b->enable != shlib_disabled
5605             && b->enable != call_disabled)
5606           {
5607             int val;
5608             val = target_insert_breakpoint (b->address, b->shadow_contents);
5609             if (val != 0)
5610               {
5611                 target_terminal_ours_for_output ();
5612                 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
5613                 memory_error (val, b->address); /* which bombs us out */
5614               }
5615             else
5616               b->inserted = 1;
5617           }
5618     }
5619
5620   free_command_lines (&bpt->commands);
5621   if (bpt->cond)
5622     free (bpt->cond);
5623   if (bpt->cond_string != NULL)
5624     free (bpt->cond_string);
5625   if (bpt->addr_string != NULL)
5626     free (bpt->addr_string);
5627   if (bpt->exp != NULL)
5628     free (bpt->exp);
5629   if (bpt->exp_string != NULL)
5630     free (bpt->exp_string);
5631   if (bpt->val != NULL)
5632     value_free (bpt->val);
5633   if (bpt->source_file != NULL)
5634     free (bpt->source_file);
5635   if (bpt->dll_pathname != NULL)
5636     free (bpt->dll_pathname);
5637   if (bpt->triggered_dll_pathname != NULL)
5638     free (bpt->triggered_dll_pathname);
5639   if (bpt->exec_pathname != NULL)
5640     free (bpt->exec_pathname);
5641
5642   /* Be sure no bpstat's are pointing at it after it's been freed.  */
5643   /* FIXME, how can we find all bpstat's?
5644      We just check stop_bpstat for now.  */
5645   for (bs = stop_bpstat; bs; bs = bs->next)
5646     if (bs->breakpoint_at == bpt)
5647       {
5648         bs->breakpoint_at = NULL;
5649
5650         /* we'd call bpstat_clear_actions, but that free's stuff and due
5651            to the multiple pointers pointing to one item with no
5652            reference counts found anywhere through out the bpstat's (how
5653            do you spell fragile?), we don't want to free things twice --
5654            better a memory leak than a corrupt malloc pool! */
5655         bs->commands = NULL;
5656         bs->old_val = NULL;
5657       }
5658   /* On the chance that someone will soon try again to delete this same
5659      bp, we mark it as deleted before freeing its storage. */
5660   bpt->type = bp_none;
5661
5662   free ((PTR)bpt);
5663 }
5664
5665 void
5666 delete_command (arg, from_tty)
5667      char *arg;
5668      int from_tty;
5669 {
5670   struct breakpoint *b, *temp;
5671
5672   if (arg == 0)
5673     {
5674       int breaks_to_delete = 0;
5675
5676       /* Delete all breakpoints if no argument.
5677          Do not delete internal or call-dummy breakpoints, these
5678          have to be deleted with an explicit breakpoint number argument.  */
5679       ALL_BREAKPOINTS (b) 
5680         {
5681           if (b->type != bp_call_dummy && 
5682               b->type != bp_shlib_event && 
5683               b->number >= 0)
5684             breaks_to_delete = 1;
5685         }
5686
5687       /* Ask user only if there are some breakpoints to delete.  */
5688       if (!from_tty
5689           || (breaks_to_delete && query ("Delete all breakpoints? ")))
5690         {
5691           ALL_BREAKPOINTS_SAFE (b, temp) 
5692             {
5693               if (b->type != bp_call_dummy &&
5694                   b->type != bp_shlib_event &&
5695                   b->number >= 0)
5696                 delete_breakpoint (b);
5697             }
5698         }
5699     }
5700   else
5701     map_breakpoint_numbers (arg, delete_breakpoint);
5702 }
5703
5704 /* Reset a breakpoint given it's struct breakpoint * BINT.
5705    The value we return ends up being the return value from catch_errors.
5706    Unused in this case.  */
5707
5708 static int
5709 breakpoint_re_set_one (bint)
5710      PTR bint;
5711 {
5712   struct breakpoint *b = (struct breakpoint *)bint;  /* get past catch_errs */
5713   struct value *mark;
5714   int i;
5715   struct symtabs_and_lines sals;
5716   char *s;
5717   enum enable save_enable;
5718
5719   switch (b->type)
5720     {
5721     case bp_none:
5722       warning ("attempted to reset apparently deleted breakpoint #%d?\n", b->number);
5723       return 0;
5724     case bp_breakpoint:
5725     case bp_hardware_breakpoint:
5726     case bp_catch_load:
5727     case bp_catch_unload:
5728       if (b->addr_string == NULL)
5729         {
5730           /* Anything without a string can't be re-set. */
5731           delete_breakpoint (b);
5732           return 0;
5733         }
5734       /* In case we have a problem, disable this breakpoint.  We'll restore
5735          its status if we succeed.  */
5736       save_enable = b->enable;
5737       b->enable = disabled;
5738
5739       set_language (b->language);
5740       input_radix = b->input_radix;
5741       s = b->addr_string;
5742       sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0, (char ***)NULL);
5743       for (i = 0; i < sals.nelts; i++)
5744         {
5745           resolve_sal_pc (&sals.sals[i]);
5746
5747           /* Reparse conditions, they might contain references to the
5748              old symtab.  */
5749           if (b->cond_string != NULL)
5750             {
5751               s = b->cond_string;
5752               if (b->cond)
5753                 free ((PTR)b->cond);
5754               b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
5755             }
5756
5757           /* We need to re-set the breakpoint if the address changes...*/
5758           if (b->address != sals.sals[i].pc
5759               /* ...or new and old breakpoints both have source files, and
5760                  the source file name or the line number changes...  */
5761               || (b->source_file != NULL
5762                   && sals.sals[i].symtab != NULL
5763                   && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
5764                       || b->line_number != sals.sals[i].line)
5765                   )
5766               /* ...or we switch between having a source file and not having
5767                  one.  */
5768               || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
5769               )
5770             {
5771               if (b->source_file != NULL)
5772                 free (b->source_file);
5773               if (sals.sals[i].symtab == NULL)
5774                 b->source_file = NULL;
5775               else
5776                 b->source_file =
5777                   savestring (sals.sals[i].symtab->filename,
5778                               strlen (sals.sals[i].symtab->filename));
5779               b->line_number = sals.sals[i].line;
5780               b->address = sals.sals[i].pc;
5781
5782              /* Used to check for duplicates here, but that can
5783                 cause trouble, as it doesn't check for disable
5784                 breakpoints. */
5785
5786               mention (b);
5787
5788               /* Might be better to do this just once per breakpoint_re_set,
5789                  rather than once for every breakpoint.  */
5790               breakpoints_changed ();
5791             }
5792           b->section = sals.sals[i].section;
5793           b->enable = save_enable;      /* Restore it, this worked. */
5794
5795
5796           /* Now that this is re-enabled, check_duplicates
5797              can be used. */
5798           check_duplicates (b->address, b->section);
5799
5800         }
5801       free ((PTR)sals.sals);
5802       break;
5803
5804     case bp_watchpoint:
5805     case bp_hardware_watchpoint:
5806     case bp_read_watchpoint:
5807     case bp_access_watchpoint:
5808       innermost_block = NULL;
5809       /* The issue arises of what context to evaluate this in.  The same
5810          one as when it was set, but what does that mean when symbols have
5811          been re-read?  We could save the filename and functionname, but
5812          if the context is more local than that, the best we could do would
5813          be something like how many levels deep and which index at that
5814          particular level, but that's going to be less stable than filenames
5815          or functionnames.  */
5816       /* So for now, just use a global context.  */
5817       if (b->exp)
5818         free ((PTR)b->exp);
5819       b->exp = parse_expression (b->exp_string);
5820       b->exp_valid_block = innermost_block;
5821       mark = value_mark ();
5822       if (b->val)
5823         value_free (b->val);
5824       b->val = evaluate_expression (b->exp);
5825       release_value (b->val);
5826       if (VALUE_LAZY (b->val))
5827         value_fetch_lazy (b->val);
5828
5829       if (b->cond_string != NULL)
5830         {
5831           s = b->cond_string;
5832           if (b->cond)
5833             free ((PTR)b->cond);
5834           b->cond = parse_exp_1 (&s, (struct block *)0, 0);
5835         }
5836       if (b->enable == enabled)
5837         mention (b);
5838       value_free_to_mark (mark);
5839       break;
5840     case bp_catch_catch:  
5841     case bp_catch_throw:  
5842       break;
5843     /* We needn't really do anything to reset these, since the mask
5844        that requests them is unaffected by e.g., new libraries being
5845        loaded. */
5846     case bp_catch_fork:
5847     case bp_catch_vfork:
5848     case bp_catch_exec:
5849       break;
5850  
5851     default:
5852       printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
5853       /* fall through */
5854     /* Delete longjmp breakpoints, they will be reset later by
5855        breakpoint_re_set.  */
5856     case bp_longjmp:
5857     case bp_longjmp_resume:
5858       delete_breakpoint (b);
5859       break;
5860
5861     /* This breakpoint is special, it's set up when the inferior
5862        starts and we really don't want to touch it.  */
5863     case bp_shlib_event:
5864
5865     /* Keep temporary breakpoints, which can be encountered when we step
5866        over a dlopen call and SOLIB_ADD is resetting the breakpoints.
5867        Otherwise these should have been blown away via the cleanup chain
5868        or by breakpoint_init_inferior when we rerun the executable.  */
5869     case bp_until:
5870     case bp_finish:
5871     case bp_watchpoint_scope:
5872     case bp_call_dummy:
5873     case bp_step_resume:
5874       break;
5875     }
5876
5877   return 0;
5878 }
5879
5880 /* Re-set all breakpoints after symbols have been re-loaded.  */
5881 void
5882 breakpoint_re_set ()
5883 {
5884   struct breakpoint *b, *temp;
5885   enum language save_language;
5886   int save_input_radix;
5887   static char message1[] = "Error in re-setting breakpoint %d:\n";
5888   char message[sizeof (message1) + 30 /* slop */];
5889   
5890   save_language = current_language->la_language;
5891   save_input_radix = input_radix;
5892   ALL_BREAKPOINTS_SAFE (b, temp)
5893     {
5894       sprintf (message, message1, b->number);   /* Format possible error msg */
5895       catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
5896     }
5897   set_language (save_language);
5898   input_radix = save_input_radix;
5899
5900 #ifdef GET_LONGJMP_TARGET
5901   create_longjmp_breakpoint ("longjmp");
5902   create_longjmp_breakpoint ("_longjmp");
5903   create_longjmp_breakpoint ("siglongjmp");
5904   create_longjmp_breakpoint ("_siglongjmp");
5905   create_longjmp_breakpoint (NULL);
5906 #endif
5907
5908 #if 0
5909   /* Took this out (temporarily at least), since it produces an extra 
5910      blank line at startup. This messes up the gdbtests. -PB */
5911   /* Blank line to finish off all those mention() messages we just printed.  */
5912   printf_filtered ("\n");
5913 #endif
5914 }
5915 \f
5916 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
5917    If from_tty is nonzero, it prints a message to that effect,
5918    which ends with a period (no newline).  */
5919
5920 /* Reset the thread number of this breakpoint:
5921
5922    - If the breakpoint is for all threads, leave it as-is.
5923    - Else, reset it to the current thread for inferior_pid. */
5924 void
5925 breakpoint_re_set_thread (b)
5926   struct breakpoint *  b;
5927 {
5928   if (b->thread != -1)
5929     {
5930       if (in_thread_list (inferior_pid))
5931         b->thread = pid_to_thread_id (inferior_pid);
5932     }
5933 }
5934
5935 void
5936 set_ignore_count (bptnum, count, from_tty)
5937      int bptnum, count, from_tty;
5938 {
5939   register struct breakpoint *b;
5940
5941   if (count < 0)
5942     count = 0;
5943
5944   ALL_BREAKPOINTS (b)
5945     if (b->number == bptnum)
5946       {
5947         b->ignore_count = count;
5948         if (!from_tty)
5949           return;
5950         else if (count == 0)
5951           printf_filtered ("Will stop next time breakpoint %d is reached.",
5952                            bptnum);
5953         else if (count == 1)
5954           printf_filtered ("Will ignore next crossing of breakpoint %d.",
5955                            bptnum);
5956         else
5957           printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
5958                   count, bptnum);
5959         breakpoints_changed ();
5960         return;
5961       }
5962
5963   error ("No breakpoint number %d.", bptnum);
5964 }
5965
5966 /* Clear the ignore counts of all breakpoints.  */
5967 void
5968 breakpoint_clear_ignore_counts ()
5969 {
5970   struct breakpoint *b;
5971
5972   ALL_BREAKPOINTS (b)
5973     b->ignore_count = 0;
5974 }
5975
5976 /* Command to set ignore-count of breakpoint N to COUNT.  */
5977
5978 static void
5979 ignore_command (args, from_tty)
5980      char *args;
5981      int from_tty;
5982 {
5983   char *p = args;
5984   register int num;
5985
5986   if (p == 0)
5987     error_no_arg ("a breakpoint number");
5988   
5989   num = get_number (&p);
5990
5991   if (*p == 0)
5992     error ("Second argument (specified ignore-count) is missing.");
5993
5994   set_ignore_count (num,
5995                     longest_to_int (value_as_long (parse_and_eval (p))),
5996                     from_tty);
5997   printf_filtered ("\n");
5998   breakpoints_changed ();
5999 }
6000 \f
6001 /* Call FUNCTION on each of the breakpoints
6002    whose numbers are given in ARGS.  */
6003
6004 static void
6005 map_breakpoint_numbers (args, function)
6006      char *args;
6007      void (*function) PARAMS ((struct breakpoint *));
6008 {
6009   register char *p = args;
6010   char *p1;
6011   register int num;
6012   register struct breakpoint *b;
6013
6014   if (p == 0)
6015     error_no_arg ("one or more breakpoint numbers");
6016
6017   while (*p)
6018     {
6019       p1 = p;
6020       
6021       num = get_number (&p1);
6022
6023       ALL_BREAKPOINTS (b)
6024         if (b->number == num)
6025           {
6026             struct breakpoint *related_breakpoint = b->related_breakpoint;
6027             function (b);
6028             if (related_breakpoint)
6029               function (related_breakpoint);
6030             goto win;
6031           }
6032       printf_unfiltered ("No breakpoint number %d.\n", num);
6033     win:
6034       p = p1;
6035     }
6036 }
6037
6038 void
6039 disable_breakpoint (bpt)
6040      struct breakpoint *bpt;
6041 {
6042   /* Never disable a watchpoint scope breakpoint; we want to
6043      hit them when we leave scope so we can delete both the
6044      watchpoint and its scope breakpoint at that time.  */
6045   if (bpt->type == bp_watchpoint_scope)
6046     return;
6047
6048   bpt->enable = disabled;
6049
6050   check_duplicates (bpt->address, bpt->section);
6051
6052   if (modify_breakpoint_hook)
6053     modify_breakpoint_hook (bpt);
6054 }
6055
6056 /* ARGSUSED */
6057 static void
6058 disable_command (args, from_tty)
6059      char *args;
6060      int from_tty;
6061 {
6062   register struct breakpoint *bpt;
6063   if (args == 0)
6064     ALL_BREAKPOINTS (bpt)
6065       switch (bpt->type)
6066         {
6067         case bp_none:
6068           warning ("attempted to disable apparently deleted breakpoint #%d?\n", bpt->number);
6069           continue;
6070         case bp_breakpoint:
6071         case bp_catch_load:
6072         case bp_catch_unload:
6073         case bp_catch_fork:
6074         case bp_catch_vfork:
6075         case bp_catch_exec:
6076         case bp_catch_catch:
6077         case bp_catch_throw:
6078         case bp_hardware_breakpoint:
6079         case bp_watchpoint:
6080         case bp_hardware_watchpoint:
6081         case bp_read_watchpoint:
6082         case bp_access_watchpoint:
6083           disable_breakpoint (bpt);
6084         default:
6085           continue;
6086         }
6087   else
6088     map_breakpoint_numbers (args, disable_breakpoint);
6089 }
6090
6091 static void
6092 do_enable_breakpoint (bpt, disposition)
6093      struct breakpoint *bpt;
6094      enum bpdisp disposition;
6095 {
6096   struct frame_info *save_selected_frame = NULL;
6097   int save_selected_frame_level = -1;
6098   int target_resources_ok, other_type_used;
6099   struct value *mark;
6100
6101   if (bpt->type == bp_hardware_breakpoint)
6102     {
6103       int i;
6104       i = hw_breakpoint_used_count();
6105       target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
6106                 bp_hardware_breakpoint, i+1, 0);
6107       if (target_resources_ok == 0)
6108         error ("No hardware breakpoint support in the target.");
6109       else if (target_resources_ok < 0)
6110         error ("Hardware breakpoints used exceeds limit.");
6111     }
6112
6113   bpt->enable = enabled;
6114   bpt->disposition = disposition;
6115   check_duplicates (bpt->address, bpt->section);
6116   breakpoints_changed ();
6117
6118   if (bpt->type == bp_watchpoint || bpt->type == bp_hardware_watchpoint ||
6119       bpt->type == bp_read_watchpoint || bpt->type == bp_access_watchpoint)
6120     {
6121       if (bpt->exp_valid_block != NULL)
6122         {
6123           struct frame_info *fr =
6124
6125           /* Ensure that we have the current frame.  Else, this
6126              next query may pessimistically be answered as, "No,
6127              not within current scope". */
6128           get_current_frame ();
6129           fr = find_frame_addr_in_frame_chain (bpt->watchpoint_frame);
6130           if (fr == NULL)
6131             {
6132               printf_filtered ("\
6133 Cannot enable watchpoint %d because the block in which its expression\n\
6134 is valid is not currently in scope.\n", bpt->number);
6135               bpt->enable = disabled;
6136               return;
6137             }
6138
6139           save_selected_frame = selected_frame;
6140           save_selected_frame_level = selected_frame_level;
6141           select_frame (fr, -1);
6142         }
6143
6144       value_free (bpt->val);
6145       mark = value_mark ();
6146       bpt->val = evaluate_expression (bpt->exp);
6147       release_value (bpt->val);
6148       if (VALUE_LAZY (bpt->val))
6149         value_fetch_lazy (bpt->val);
6150
6151       if (bpt->type == bp_hardware_watchpoint ||
6152            bpt->type == bp_read_watchpoint ||
6153            bpt->type == bp_access_watchpoint)
6154       {
6155         int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
6156         int mem_cnt = can_use_hardware_watchpoint (bpt->val);
6157
6158         /* Hack around 'unused var' error for some targets here */
6159         (void) mem_cnt, i;
6160         target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
6161                 bpt->type, i + mem_cnt, other_type_used);
6162         /* we can consider of type is bp_hardware_watchpoint, convert to 
6163            bp_watchpoint in the following condition */
6164         if (target_resources_ok < 0)
6165           {
6166              printf_filtered("\
6167 Cannot enable watchpoint %d because target watch resources\n\
6168 have been allocated for other watchpoints.\n", bpt->number);
6169              bpt->enable = disabled;
6170              value_free_to_mark (mark);
6171              return;
6172           }
6173       }
6174
6175       if (save_selected_frame_level >= 0)
6176         select_and_print_frame (save_selected_frame, save_selected_frame_level);
6177       value_free_to_mark (mark);
6178     }
6179   if (modify_breakpoint_hook)
6180     modify_breakpoint_hook (bpt);
6181 }
6182
6183 void
6184 enable_breakpoint (bpt)
6185      struct breakpoint *bpt;
6186 {
6187   do_enable_breakpoint (bpt, bpt->disposition);
6188 }
6189
6190 /* The enable command enables the specified breakpoints (or all defined
6191    breakpoints) so they once again become (or continue to be) effective
6192    in stopping the inferior. */
6193
6194 /* ARGSUSED */
6195 static void
6196 enable_command (args, from_tty)
6197      char *args;
6198      int from_tty;
6199 {
6200   register struct breakpoint *bpt;
6201   if (args == 0)
6202     ALL_BREAKPOINTS (bpt)
6203       switch (bpt->type)
6204         {
6205         case bp_none:
6206           warning ("attempted to enable apparently deleted breakpoint #%d?\n", bpt->number);
6207           continue;
6208         case bp_breakpoint:
6209         case bp_catch_load:
6210         case bp_catch_unload:
6211         case bp_catch_fork:
6212         case bp_catch_vfork:
6213         case bp_catch_exec:
6214         case bp_catch_catch:
6215         case bp_catch_throw:
6216         case bp_hardware_breakpoint:
6217         case bp_watchpoint:
6218         case bp_hardware_watchpoint:
6219         case bp_read_watchpoint:
6220         case bp_access_watchpoint:
6221           enable_breakpoint (bpt);
6222         default:
6223           continue;
6224         }
6225   else
6226     map_breakpoint_numbers (args, enable_breakpoint);
6227 }
6228
6229 static void
6230 enable_once_breakpoint (bpt)
6231      struct breakpoint *bpt;
6232 {
6233   do_enable_breakpoint (bpt, disable);
6234 }
6235
6236 /* ARGSUSED */
6237 static void
6238 enable_once_command (args, from_tty)
6239      char *args;
6240      int from_tty;
6241 {
6242   map_breakpoint_numbers (args, enable_once_breakpoint);
6243 }
6244
6245 static void
6246 enable_delete_breakpoint (bpt)
6247      struct breakpoint *bpt;
6248 {
6249   do_enable_breakpoint (bpt, del);
6250 }
6251
6252 /* ARGSUSED */
6253 static void
6254 enable_delete_command (args, from_tty)
6255      char *args;
6256      int from_tty;
6257 {
6258   map_breakpoint_numbers (args, enable_delete_breakpoint);
6259 }
6260 \f
6261 /* Use default_breakpoint_'s, or nothing if they aren't valid.  */
6262
6263 struct symtabs_and_lines
6264 decode_line_spec_1 (string, funfirstline)
6265      char *string;
6266      int funfirstline;
6267 {
6268   struct symtabs_and_lines sals;
6269   if (string == 0)
6270     error ("Empty line specification.");
6271   if (default_breakpoint_valid)
6272     sals = decode_line_1 (&string, funfirstline,
6273                           default_breakpoint_symtab, default_breakpoint_line,
6274                           (char ***)NULL);
6275   else
6276     sals = decode_line_1 (&string, funfirstline,
6277                           (struct symtab *)NULL, 0, (char ***)NULL);
6278   if (*string)
6279     error ("Junk at end of line specification: %s", string);
6280   return sals;
6281 }
6282 \f
6283 void
6284 _initialize_breakpoint ()
6285 {
6286   struct cmd_list_element *c;
6287
6288   breakpoint_chain = 0;
6289   /* Don't bother to call set_breakpoint_count.  $bpnum isn't useful
6290      before a breakpoint is set.  */
6291   breakpoint_count = 0;
6292
6293   add_com ("ignore", class_breakpoint, ignore_command,
6294            "Set ignore-count of breakpoint number N to COUNT.\n\
6295 Usage is `ignore N COUNT'.");
6296   if (xdb_commands)
6297     add_com_alias("bc", "ignore", class_breakpoint, 1);
6298
6299   add_com ("commands", class_breakpoint, commands_command,
6300            "Set commands to be executed when a breakpoint is hit.\n\
6301 Give breakpoint number as argument after \"commands\".\n\
6302 With no argument, the targeted breakpoint is the last one set.\n\
6303 The commands themselves follow starting on the next line.\n\
6304 Type a line containing \"end\" to indicate the end of them.\n\
6305 Give \"silent\" as the first line to make the breakpoint silent;\n\
6306 then no output is printed when it is hit, except what the commands print.");
6307
6308   add_com ("condition", class_breakpoint, condition_command,
6309            "Specify breakpoint number N to break only if COND is true.\n\
6310 Usage is `condition N COND', where N is an integer and COND is an\n\
6311 expression to be evaluated whenever breakpoint N is reached.  ");
6312
6313   add_com ("tbreak", class_breakpoint, tbreak_command,
6314            "Set a temporary breakpoint.  Args like \"break\" command.\n\
6315 Like \"break\" except the breakpoint is only temporary,\n\
6316 so it will be deleted when hit.  Equivalent to \"break\" followed\n\
6317 by using \"enable delete\" on the breakpoint number.");
6318   add_com("txbreak", class_breakpoint, tbreak_at_finish_command,
6319           "Set temporary breakpoint at procedure exit.  Either there should\n\
6320 be no argument or the argument must be a depth.\n");
6321
6322   add_com ("hbreak", class_breakpoint, hbreak_command,
6323            "Set a hardware assisted  breakpoint. Args like \"break\" command.\n\
6324 Like \"break\" except the breakpoint requires hardware support,\n\
6325 some target hardware may not have this support.");
6326
6327   add_com ("thbreak", class_breakpoint, thbreak_command,
6328            "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
6329 Like \"hbreak\" except the breakpoint is only temporary,\n\
6330 so it will be deleted when hit.");
6331
6332   add_prefix_cmd ("enable", class_breakpoint, enable_command,
6333                   "Enable some breakpoints.\n\
6334 Give breakpoint numbers (separated by spaces) as arguments.\n\
6335 With no subcommand, breakpoints are enabled until you command otherwise.\n\
6336 This is used to cancel the effect of the \"disable\" command.\n\
6337 With a subcommand you can enable temporarily.",
6338                   &enablelist, "enable ", 1, &cmdlist);
6339   if (xdb_commands)
6340       add_com("ab", class_breakpoint, enable_command,
6341                       "Enable some breakpoints.\n\
6342 Give breakpoint numbers (separated by spaces) as arguments.\n\
6343 With no subcommand, breakpoints are enabled until you command otherwise.\n\
6344 This is used to cancel the effect of the \"disable\" command.\n\
6345 With a subcommand you can enable temporarily.");
6346
6347   add_com_alias ("en", "enable", class_breakpoint, 1);
6348
6349   add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
6350                   "Enable some breakpoints.\n\
6351 Give breakpoint numbers (separated by spaces) as arguments.\n\
6352 This is used to cancel the effect of the \"disable\" command.\n\
6353 May be abbreviated to simply \"enable\".\n",
6354                   &enablebreaklist, "enable breakpoints ", 1, &enablelist);
6355
6356   add_cmd ("once", no_class, enable_once_command,
6357            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
6358 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
6359            &enablebreaklist);
6360
6361   add_cmd ("delete", no_class, enable_delete_command,
6362            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
6363 If a breakpoint is hit while enabled in this fashion, it is deleted.",
6364            &enablebreaklist);
6365
6366   add_cmd ("delete", no_class, enable_delete_command,
6367            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
6368 If a breakpoint is hit while enabled in this fashion, it is deleted.",
6369            &enablelist);
6370
6371   add_cmd ("once", no_class, enable_once_command,
6372            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
6373 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
6374            &enablelist);
6375
6376   add_prefix_cmd ("disable", class_breakpoint, disable_command,
6377            "Disable some breakpoints.\n\
6378 Arguments are breakpoint numbers with spaces in between.\n\
6379 To disable all breakpoints, give no argument.\n\
6380 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
6381                   &disablelist, "disable ", 1, &cmdlist);
6382   add_com_alias ("dis", "disable", class_breakpoint, 1);
6383   add_com_alias ("disa", "disable", class_breakpoint, 1);
6384   if (xdb_commands)
6385     add_com("sb", class_breakpoint, disable_command,
6386                 "Disable some breakpoints.\n\
6387 Arguments are breakpoint numbers with spaces in between.\n\
6388 To disable all breakpoints, give no argument.\n\
6389 A disabled breakpoint is not forgotten, but has no effect until reenabled.");
6390
6391   add_cmd ("breakpoints", class_alias, disable_command,
6392            "Disable some breakpoints.\n\
6393 Arguments are breakpoint numbers with spaces in between.\n\
6394 To disable all breakpoints, give no argument.\n\
6395 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
6396 This command may be abbreviated \"disable\".",
6397            &disablelist);
6398
6399   add_prefix_cmd ("delete", class_breakpoint, delete_command,
6400            "Delete some breakpoints or auto-display expressions.\n\
6401 Arguments are breakpoint numbers with spaces in between.\n\
6402 To delete all breakpoints, give no argument.\n\
6403 \n\
6404 Also a prefix command for deletion of other GDB objects.\n\
6405 The \"unset\" command is also an alias for \"delete\".",
6406                   &deletelist, "delete ", 1, &cmdlist);
6407   add_com_alias ("d", "delete", class_breakpoint, 1);
6408   if (xdb_commands)
6409     add_com ("db", class_breakpoint, delete_command,
6410            "Delete some breakpoints.\n\
6411 Arguments are breakpoint numbers with spaces in between.\n\
6412 To delete all breakpoints, give no argument.\n");
6413
6414   add_cmd ("breakpoints", class_alias, delete_command,
6415            "Delete some breakpoints or auto-display expressions.\n\
6416 Arguments are breakpoint numbers with spaces in between.\n\
6417 To delete all breakpoints, give no argument.\n\
6418 This command may be abbreviated \"delete\".",
6419            &deletelist);
6420
6421   add_com ("clear", class_breakpoint, clear_command,
6422            concat ("Clear breakpoint at specified line or function.\n\
6423 Argument may be line number, function name, or \"*\" and an address.\n\
6424 If line number is specified, all breakpoints in that line are cleared.\n\
6425 If function is specified, breakpoints at beginning of function are cleared.\n\
6426 If an address is specified, breakpoints at that address are cleared.\n\n",
6427 "With no argument, clears all breakpoints in the line that the selected frame\n\
6428 is executing in.\n\
6429 \n\
6430 See also the \"delete\" command which clears breakpoints by number.", NULL));
6431
6432   add_com ("break", class_breakpoint, break_command,
6433            concat ("Set breakpoint at specified line or function.\n\
6434 Argument may be line number, function name, or \"*\" and an address.\n\
6435 If line number is specified, break at start of code for that line.\n\
6436 If function is specified, break at start of code for that function.\n\
6437 If an address is specified, break at that exact address.\n",
6438 "With no arg, uses current execution address of selected stack frame.\n\
6439 This is useful for breaking on return to a stack frame.\n\
6440 \n\
6441 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
6442 \n\
6443 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
6444   add_com_alias ("b", "break", class_run, 1);
6445   add_com_alias ("br", "break", class_run, 1);
6446   add_com_alias ("bre", "break", class_run, 1);
6447   add_com_alias ("brea", "break", class_run, 1);
6448
6449   add_com("xbreak", class_breakpoint, break_at_finish_command,
6450           concat("Set breakpoint at procedure exit. \n\
6451 Argument may be function name, or \"*\" and an address.\n\
6452 If function is specified, break at end of code for that function.\n\
6453 If an address is specified, break at the end of the function that contains \n\
6454 that exact address.\n",
6455 "With no arg, uses current execution address of selected stack frame.\n\
6456 This is useful for breaking on return to a stack frame.\n\
6457 \n\
6458 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
6459 \n\
6460 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
6461   add_com_alias ("xb", "xbreak", class_breakpoint, 1);
6462   add_com_alias ("xbr", "xbreak", class_breakpoint, 1);
6463   add_com_alias ("xbre", "xbreak", class_breakpoint, 1);
6464   add_com_alias ("xbrea", "xbreak", class_breakpoint, 1);
6465
6466   if (xdb_commands)
6467     {
6468       add_com_alias ("ba", "break", class_breakpoint, 1);
6469       add_com_alias ("bu", "ubreak", class_breakpoint, 1);
6470       add_com ("bx", class_breakpoint, break_at_finish_at_depth_command,
6471           "Set breakpoint at procedure exit.  Either there should\n\
6472 be no argument or the argument must be a depth.\n");
6473     }
6474
6475   if (dbx_commands)
6476     {
6477       add_abbrev_prefix_cmd("stop", class_breakpoint, stop_command, 
6478            "Break in function/address or break at a line in the current file.",
6479            &stoplist, "stop ", 1, &cmdlist);
6480       add_cmd("in", class_breakpoint, stopin_command,
6481               "Break in function or address.\n", &stoplist);
6482       add_cmd("at", class_breakpoint, stopat_command,
6483               "Break at a line in the current file.\n", &stoplist);
6484       add_com("status", class_info, breakpoints_info, 
6485             concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
6486 The \"Type\" column indicates one of:\n\
6487 \tbreakpoint     - normal breakpoint\n\
6488 \twatchpoint     - watchpoint\n\
6489 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6490 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
6491 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
6492 address and file/line number respectively.\n\n",
6493 "Convenience variable \"$_\" and default examine address for \"x\"\n\
6494 are set to the address of the last breakpoint listed.\n\n\
6495 Convenience variable \"$bpnum\" contains the number of the last\n\
6496 breakpoint set.", NULL));
6497     }
6498
6499   add_info ("breakpoints", breakpoints_info,
6500             concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
6501 The \"Type\" column indicates one of:\n\
6502 \tbreakpoint     - normal breakpoint\n\
6503 \twatchpoint     - watchpoint\n\
6504 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6505 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
6506 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
6507 address and file/line number respectively.\n\n",
6508 "Convenience variable \"$_\" and default examine address for \"x\"\n\
6509 are set to the address of the last breakpoint listed.\n\n\
6510 Convenience variable \"$bpnum\" contains the number of the last\n\
6511 breakpoint set.", NULL));
6512
6513   if (xdb_commands)
6514     add_com("lb", class_breakpoint, breakpoints_info,
6515             concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
6516 The \"Type\" column indicates one of:\n\
6517 \tbreakpoint     - normal breakpoint\n\
6518 \twatchpoint     - watchpoint\n\
6519 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6520 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
6521 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
6522 address and file/line number respectively.\n\n",
6523 "Convenience variable \"$_\" and default examine address for \"x\"\n\
6524 are set to the address of the last breakpoint listed.\n\n\
6525 Convenience variable \"$bpnum\" contains the number of the last\n\
6526 breakpoint set.", NULL));
6527
6528 #if MAINTENANCE_CMDS
6529
6530   add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
6531             concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
6532 The \"Type\" column indicates one of:\n\
6533 \tbreakpoint     - normal breakpoint\n\
6534 \twatchpoint     - watchpoint\n\
6535 \tlongjmp        - internal breakpoint used to step through longjmp()\n\
6536 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
6537 \tuntil          - internal breakpoint used by the \"until\" command\n\
6538 \tfinish         - internal breakpoint used by the \"finish\" command\n",
6539 "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6540 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
6541 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
6542 address and file/line number respectively.\n\n",
6543 "Convenience variable \"$_\" and default examine address for \"x\"\n\
6544 are set to the address of the last breakpoint listed.\n\n\
6545 Convenience variable \"$bpnum\" contains the number of the last\n\
6546 breakpoint set.", NULL),
6547            &maintenanceinfolist);
6548
6549 #endif  /* MAINTENANCE_CMDS */
6550
6551   add_com ("catch", class_breakpoint, catch_command,
6552          "Set catchpoints to catch events.\n\
6553 Raised signals may be caught:\n\
6554 \tcatch signal              - all signals\n\
6555 \tcatch signal <signame>    - a particular signal\n\
6556 Raised exceptions may be caught:\n\
6557 \tcatch throw               - all exceptions, when thrown\n\
6558 \tcatch throw <exceptname>  - a particular exception, when thrown\n\
6559 \tcatch catch               - all exceptions, when caught\n\
6560 \tcatch catch <exceptname>  - a particular exception, when caught\n\
6561 Thread or process events may be caught:\n\
6562 \tcatch thread_start        - any threads, just after creation\n\
6563 \tcatch thread_exit         - any threads, just before expiration\n\
6564 \tcatch thread_join         - any threads, just after joins\n\
6565 Process events may be caught:\n\
6566 \tcatch start               - any processes, just after creation\n\
6567 \tcatch exit                - any processes, just before expiration\n\
6568 \tcatch fork                - calls to fork()\n\
6569 \tcatch vfork               - calls to vfork()\n\
6570 \tcatch exec                - calls to exec()\n\
6571 Dynamically-linked library events may be caught:\n\
6572 \tcatch load                - loads of any library\n\
6573 \tcatch load <libname>      - loads of a particular library\n\
6574 \tcatch unload              - unloads of any library\n\
6575 \tcatch unload <libname>    - unloads of a particular library\n\
6576 The act of your program's execution stopping may also be caught:\n\
6577 \tcatch stop\n\n\
6578 C++ exceptions may be caught:\n\
6579 \tcatch throw               - all exceptions, when thrown\n\
6580 \tcatch catch               - all exceptions, when caught\n\
6581 \n\
6582 Do \"help set follow-fork-mode\" for info on debugging your program\n\
6583 after a fork or vfork is caught.\n\n\
6584 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
6585  
6586   add_com ("tcatch", class_breakpoint, tcatch_command,
6587          "Set temporary catchpoints to catch events.\n\
6588 Args like \"catch\" command.\n\
6589 Like \"catch\" except the catchpoint is only temporary,\n\
6590 so it will be deleted when hit.  Equivalent to \"catch\" followed\n\
6591 by using \"enable delete\" on the catchpoint number.");
6592  
6593 add_com ("watch", class_breakpoint, watch_command,
6594
6595            "Set a watchpoint for an expression.\n\
6596 A watchpoint stops execution of your program whenever the value of\n\
6597 an expression changes.");
6598
6599   add_com ("rwatch", class_breakpoint, rwatch_command,
6600            "Set a read watchpoint for an expression.\n\
6601 A watchpoint stops execution of your program whenever the value of\n\
6602 an expression is read.");
6603
6604   add_com ("awatch", class_breakpoint, awatch_command,
6605            "Set a watchpoint for an expression.\n\
6606 A watchpoint stops execution of your program whenever the value of\n\
6607 an expression is either read or written.");
6608
6609   add_info ("watchpoints", breakpoints_info,
6610             "Synonym for ``info breakpoints''.");
6611
6612
6613   c = add_set_cmd ("can-use-hw-watchpoints", class_support, var_zinteger,
6614                    (char *) &can_use_hw_watchpoints,
6615                    "Set debugger's willingness to use watchpoint hardware.\n\
6616 If zero, gdb will not use hardware for new watchpoints, even if\n\
6617 such is available.  (However, any hardware watchpoints that were\n\
6618 created before setting this to nonzero, will continue to use watchpoint\n\
6619 hardware.)",
6620                &setlist);
6621   add_show_from_set (c, &showlist);
6622
6623   can_use_hw_watchpoints = 1;
6624 }