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