* infrun.c (normal_stop, proceed): Remove call to print_sys_errmsg
[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
49 #include "gdb-events.h"
50
51 /* Prototypes for local functions. */
52
53 static void until_break_command_continuation (struct continuation_arg *arg);
54
55 static void catch_command_1 (char *, int, int);
56
57 static void enable_delete_command (char *, int);
58
59 static void enable_delete_breakpoint (struct breakpoint *);
60
61 static void enable_once_command (char *, int);
62
63 static void enable_once_breakpoint (struct breakpoint *);
64
65 static void disable_command (char *, int);
66
67 static void enable_command (char *, int);
68
69 static void map_breakpoint_numbers (char *, void (*)(struct breakpoint *));
70
71 static void ignore_command (char *, int);
72
73 static int breakpoint_re_set_one (PTR);
74
75 static void clear_command (char *, int);
76
77 static void catch_command (char *, int);
78
79 static void handle_gnu_4_16_catch_command (char *, int, int);
80
81 static struct symtabs_and_lines get_catch_sals (int);
82
83 static void watch_command (char *, int);
84
85 static int can_use_hardware_watchpoint (struct value *);
86
87 extern void break_at_finish_command (char *, int);
88 extern void break_at_finish_at_depth_command (char *, int);
89
90 extern void tbreak_at_finish_command (char *, int);
91
92 static void break_command_1 (char *, int, int);
93
94 static void mention (struct breakpoint *);
95
96 struct breakpoint *set_raw_breakpoint (struct symtab_and_line, enum bptype);
97
98 static void check_duplicates (struct breakpoint *);
99
100 static void describe_other_breakpoints (CORE_ADDR, asection *);
101
102 static void breakpoints_info (char *, int);
103
104 static void breakpoint_1 (int, int);
105
106 static bpstat bpstat_alloc (struct breakpoint *, bpstat);
107
108 static int breakpoint_cond_eval (PTR);
109
110 static void cleanup_executing_breakpoints (PTR);
111
112 static void commands_command (char *, int);
113
114 static void condition_command (char *, int);
115
116 static int get_number_trailer (char **, int);
117
118 void set_breakpoint_count (int);
119
120 typedef enum
121   {
122     mark_inserted,
123     mark_uninserted
124   }
125 insertion_state_t;
126
127 static int remove_breakpoint (struct breakpoint *, insertion_state_t);
128
129 static enum print_stop_action print_it_typical (bpstat);
130
131 static enum print_stop_action print_bp_stop_message (bpstat bs);
132
133 typedef struct
134   {
135     enum exception_event_kind kind;
136     int enable_p;
137   }
138 args_for_catchpoint_enable;
139
140 static int watchpoint_check (PTR);
141
142 static int cover_target_enable_exception_callback (PTR);
143
144 static void maintenance_info_breakpoints (char *, int);
145
146 static void create_longjmp_breakpoint (char *);
147
148 static void create_overlay_event_breakpoint (char *);
149
150 static int hw_breakpoint_used_count (void);
151
152 static int hw_watchpoint_used_count (enum bptype, int *);
153
154 static void hbreak_command (char *, int);
155
156 static void thbreak_command (char *, int);
157
158 static void watch_command_1 (char *, int, int);
159
160 static void rwatch_command (char *, int);
161
162 static void awatch_command (char *, int);
163
164 static void do_enable_breakpoint (struct breakpoint *, enum bpdisp);
165
166 static void solib_load_unload_1 (char *hookname,
167                                  int tempflag,
168                                  char *dll_pathname,
169                                  char *cond_string, enum bptype bp_kind);
170
171 static void create_fork_vfork_event_catchpoint (int tempflag,
172                                                 char *cond_string,
173                                                 enum bptype bp_kind);
174
175 static void break_at_finish_at_depth_command_1 (char *arg,
176                                                 int flag, int from_tty);
177
178 static void break_at_finish_command_1 (char *arg, int flag, int from_tty);
179
180 static void stop_command (char *arg, int from_tty);
181
182 static void stopin_command (char *arg, int from_tty);
183
184 static void stopat_command (char *arg, int from_tty);
185
186 static char *ep_find_event_name_end (char *arg);
187
188 static char *ep_parse_optional_if_clause (char **arg);
189
190 static char *ep_parse_optional_filename (char **arg);
191
192 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
193 static void catch_exec_command_1 (char *arg, int tempflag, int from_tty);
194 #endif
195
196 static void create_exception_catchpoint (int tempflag, char *cond_string,
197                                          enum exception_event_kind ex_event,
198                                          struct symtab_and_line *sal);
199
200 static void catch_exception_command_1 (enum exception_event_kind ex_event, 
201                                        char *arg, int tempflag, int from_tty);
202
203 static void tcatch_command (char *arg, int from_tty);
204
205 static void ep_skip_leading_whitespace (char **s);
206
207 /* Prototypes for exported functions. */
208
209 /* If FALSE, gdb will not use hardware support for watchpoints, even
210    if such is available. */
211 static int can_use_hw_watchpoints;
212
213 void _initialize_breakpoint (void);
214
215 extern int addressprint;        /* Print machine addresses? */
216
217 /* Are we executing breakpoint commands?  */
218 static int executing_breakpoint_commands;
219
220 /* Are overlay event breakpoints enabled? */
221 static int overlay_events_enabled;
222
223 /* Walk the following statement or block through all breakpoints.
224    ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
225    breakpoint.  */
226
227 #define ALL_BREAKPOINTS(B)  for (B = breakpoint_chain; B; B = B->next)
228
229 #define ALL_BREAKPOINTS_SAFE(B,TMP)     \
230         for (B = breakpoint_chain;      \
231              B ? (TMP=B->next, 1): 0;   \
232              B = TMP)
233
234 /* True if SHIFT_INST_REGS defined, false otherwise.  */
235
236 int must_shift_inst_regs =
237 #if defined(SHIFT_INST_REGS)
238 1
239 #else
240 0
241 #endif
242  ;
243
244 /* True if breakpoint hit counts should be displayed in breakpoint info.  */
245
246 int show_breakpoint_hit_counts = 1;
247
248 /* Chain of all breakpoints defined.  */
249
250 struct breakpoint *breakpoint_chain;
251
252 /* Number of last breakpoint made.  */
253
254 int breakpoint_count;
255
256 /* Pointer to current exception event record */
257 static struct exception_event_record *current_exception_event;
258
259 /* Indicator of whether exception catchpoints should be nuked
260    between runs of a program */
261 int exception_catchpoints_are_fragile = 0;
262
263 /* Indicator of when exception catchpoints set-up should be
264    reinitialized -- e.g. when program is re-run */
265 int exception_support_initialized = 0;
266
267 /* This function returns a pointer to the string representation of the
268    pathname of the dynamically-linked library that has just been
269    loaded.
270
271    This function must be used only when SOLIB_HAVE_LOAD_EVENT is TRUE,
272    or undefined results are guaranteed.
273
274    This string's contents are only valid immediately after the
275    inferior has stopped in the dynamic linker hook, and becomes
276    invalid as soon as the inferior is continued.  Clients should make
277    a copy of this string if they wish to continue the inferior and
278    then access the string.  */
279
280 #ifndef SOLIB_LOADED_LIBRARY_PATHNAME
281 #define SOLIB_LOADED_LIBRARY_PATHNAME(pid) ""
282 #endif
283
284 /* This function returns a pointer to the string representation of the
285    pathname of the dynamically-linked library that has just been
286    unloaded.
287
288    This function must be used only when SOLIB_HAVE_UNLOAD_EVENT is
289    TRUE, or undefined results are guaranteed.
290
291    This string's contents are only valid immediately after the
292    inferior has stopped in the dynamic linker hook, and becomes
293    invalid as soon as the inferior is continued.  Clients should make
294    a copy of this string if they wish to continue the inferior and
295    then access the string.  */
296
297 #ifndef SOLIB_UNLOADED_LIBRARY_PATHNAME
298 #define SOLIB_UNLOADED_LIBRARY_PATHNAME(pid) ""
299 #endif
300
301 /* This function is called by the "catch load" command.  It allows the
302    debugger to be notified by the dynamic linker when a specified
303    library file (or any library file, if filename is NULL) is loaded.  */
304
305 #ifndef SOLIB_CREATE_CATCH_LOAD_HOOK
306 #define SOLIB_CREATE_CATCH_LOAD_HOOK(pid,tempflag,filename,cond_string) \
307    error ("catch of library loads not yet implemented on this platform")
308 #endif
309
310 /* This function is called by the "catch unload" command.  It allows
311    the debugger to be notified by the dynamic linker when a specified
312    library file (or any library file, if filename is NULL) is
313    unloaded.  */
314
315 #ifndef SOLIB_CREATE_CATCH_UNLOAD_HOOK
316 #define SOLIB_CREATE_CATCH_UNLOAD_HOOK(pid,tempflag,filename,cond_string) \
317    error ("catch of library unloads not yet implemented on this platform")
318 #endif
319
320 /* Set breakpoint count to NUM.  */
321
322 void
323 set_breakpoint_count (int num)
324 {
325   breakpoint_count = num;
326   set_internalvar (lookup_internalvar ("bpnum"),
327                    value_from_longest (builtin_type_int, (LONGEST) num));
328 }
329
330 /* Used in run_command to zero the hit count when a new run starts. */
331
332 void
333 clear_breakpoint_hit_counts (void)
334 {
335   struct breakpoint *b;
336
337   ALL_BREAKPOINTS (b)
338     b->hit_count = 0;
339 }
340
341 /* Default address, symtab and line to put a breakpoint at
342    for "break" command with no arg.
343    if default_breakpoint_valid is zero, the other three are
344    not valid, and "break" with no arg is an error.
345
346    This set by print_stack_frame, which calls set_default_breakpoint.  */
347
348 int default_breakpoint_valid;
349 CORE_ADDR default_breakpoint_address;
350 struct symtab *default_breakpoint_symtab;
351 int default_breakpoint_line;
352 \f
353 /* *PP is a string denoting a breakpoint.  Get the number of the breakpoint.
354    Advance *PP after the string and any trailing whitespace.
355
356    Currently the string can either be a number or "$" followed by the name
357    of a convenience variable.  Making it an expression wouldn't work well
358    for map_breakpoint_numbers (e.g. "4 + 5 + 6").
359    
360    TRAILER is a character which can be found after the number; most
361    commonly this is `-'.  If you don't want a trailer, use \0.  */ 
362 static int
363 get_number_trailer (char **pp, int trailer)
364 {
365   int retval = 0;       /* default */
366   char *p = *pp;
367
368   if (p == NULL)
369     /* Empty line means refer to the last breakpoint.  */
370     return breakpoint_count;
371   else if (*p == '$')
372     {
373       /* Make a copy of the name, so we can null-terminate it
374          to pass to lookup_internalvar().  */
375       char *varname;
376       char *start = ++p;
377       struct value *val;
378
379       while (isalnum (*p) || *p == '_')
380         p++;
381       varname = (char *) alloca (p - start + 1);
382       strncpy (varname, start, p - start);
383       varname[p - start] = '\0';
384       val = value_of_internalvar (lookup_internalvar (varname));
385       if (TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT)
386         retval = (int) value_as_long (val);
387       else
388         {
389           printf_filtered ("Convenience variable must have integer value.\n");
390           retval = 0;
391         }
392     }
393   else
394     {
395       if (*p == '-')
396         ++p;
397       while (*p >= '0' && *p <= '9')
398         ++p;
399       if (p == *pp)
400         /* There is no number here.  (e.g. "cond a == b").  */
401         {
402           /* Skip non-numeric token */
403           while (*p && !isspace((int) *p))
404             ++p;
405           /* Return zero, which caller must interpret as error. */
406           retval = 0;
407         }
408       else
409         retval = atoi (*pp);
410     }
411   if (!(isspace (*p) || *p == '\0' || *p == trailer))
412     {
413       /* Trailing junk: return 0 and let caller print error msg. */
414       while (!(isspace (*p) || *p == '\0' || *p == trailer))
415         ++p;
416       retval = 0;
417     }
418   while (isspace (*p))
419     p++;
420   *pp = p;
421   return retval;
422 }
423
424
425 /* Like get_number_trailer, but don't allow a trailer.  */
426 int
427 get_number (char **pp)
428 {
429   return get_number_trailer (pp, '\0');
430 }
431
432 /* Parse a number or a range.
433  * A number will be of the form handled by get_number.
434  * A range will be of the form <number1> - <number2>, and 
435  * will represent all the integers between number1 and number2,
436  * inclusive.
437  *
438  * While processing a range, this fuction is called iteratively;
439  * At each call it will return the next value in the range.
440  *
441  * At the beginning of parsing a range, the char pointer PP will
442  * be advanced past <number1> and left pointing at the '-' token.
443  * Subsequent calls will not advance the pointer until the range
444  * is completed.  The call that completes the range will advance
445  * pointer PP past <number2>.
446  */
447
448 int 
449 get_number_or_range (char **pp)
450 {
451   static int last_retval, end_value;
452   static char *end_ptr;
453   static int in_range = 0;
454
455   if (**pp != '-')
456     {
457       /* Default case: pp is pointing either to a solo number, 
458          or to the first number of a range.  */
459       last_retval = get_number_trailer (pp, '-');
460       if (**pp == '-')
461         {
462           char **temp;
463
464           /* This is the start of a range (<number1> - <number2>).
465              Skip the '-', parse and remember the second number,
466              and also remember the end of the final token.  */
467
468           temp = &end_ptr; 
469           end_ptr = *pp + 1; 
470           while (isspace ((int) *end_ptr))
471             end_ptr++;  /* skip white space */
472           end_value = get_number (temp);
473           if (end_value < last_retval) 
474             {
475               error ("inverted range");
476             }
477           else if (end_value == last_retval)
478             {
479               /* degenerate range (number1 == number2).  Advance the
480                  token pointer so that the range will be treated as a
481                  single number.  */ 
482               *pp = end_ptr;
483             }
484           else
485             in_range = 1;
486         }
487     }
488   else if (! in_range)
489     error ("negative value");
490   else
491     {
492       /* pp points to the '-' that betokens a range.  All
493          number-parsing has already been done.  Return the next
494          integer value (one greater than the saved previous value).
495          Do not advance the token pointer 'pp' until the end of range
496          is reached.  */
497
498       if (++last_retval == end_value)
499         {
500           /* End of range reached; advance token pointer.  */
501           *pp = end_ptr;
502           in_range = 0;
503         }
504     }
505   return last_retval;
506 }
507
508
509 \f
510 /* condition N EXP -- set break condition of breakpoint N to EXP.  */
511
512 static void
513 condition_command (char *arg, int from_tty)
514 {
515   register struct breakpoint *b;
516   char *p;
517   register int bnum;
518
519   if (arg == 0)
520     error_no_arg ("breakpoint number");
521
522   p = arg;
523   bnum = get_number (&p);
524   if (bnum == 0)
525     error ("Bad breakpoint argument: '%s'", arg);
526
527   ALL_BREAKPOINTS (b)
528     if (b->number == bnum)
529     {
530       if (b->cond)
531         {
532           xfree (b->cond);
533           b->cond = 0;
534         }
535       if (b->cond_string != NULL)
536         xfree (b->cond_string);
537
538       if (*p == 0)
539         {
540           b->cond = 0;
541           b->cond_string = NULL;
542           if (from_tty)
543             printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
544         }
545       else
546         {
547           arg = p;
548           /* I don't know if it matters whether this is the string the user
549              typed in or the decompiled expression.  */
550           b->cond_string = savestring (arg, strlen (arg));
551           b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
552           if (*arg)
553             error ("Junk at end of expression");
554         }
555       breakpoints_changed ();
556       breakpoint_modify_event (b->number);
557       return;
558     }
559
560   error ("No breakpoint number %d.", bnum);
561 }
562
563 /* ARGSUSED */
564 static void
565 commands_command (char *arg, int from_tty)
566 {
567   register struct breakpoint *b;
568   char *p;
569   register int bnum;
570   struct command_line *l;
571
572   /* If we allowed this, we would have problems with when to
573      free the storage, if we change the commands currently
574      being read from.  */
575
576   if (executing_breakpoint_commands)
577     error ("Can't use the \"commands\" command among a breakpoint's commands.");
578
579   p = arg;
580   bnum = get_number (&p);
581
582   if (p && *p)
583     error ("Unexpected extra arguments following breakpoint number.");
584
585   ALL_BREAKPOINTS (b)
586     if (b->number == bnum)
587     {
588       char tmpbuf[128];
589       sprintf (tmpbuf, 
590                "Type commands for when breakpoint %d is hit, one per line.", 
591                bnum);
592       l = read_command_lines (tmpbuf, from_tty);
593       free_command_lines (&b->commands);
594       b->commands = l;
595       breakpoints_changed ();
596       breakpoint_modify_event (b->number);
597       return;
598     }
599   error ("No breakpoint number %d.", bnum);
600 }
601 \f
602 /* Like target_read_memory() but if breakpoints are inserted, return
603    the shadow contents instead of the breakpoints themselves.
604
605    Read "memory data" from whatever target or inferior we have. 
606    Returns zero if successful, errno value if not.  EIO is used
607    for address out of bounds.  If breakpoints are inserted, returns
608    shadow contents, not the breakpoints themselves.  From breakpoint.c.  */
609
610 int
611 read_memory_nobpt (CORE_ADDR memaddr, char *myaddr, unsigned len)
612 {
613   int status;
614   struct breakpoint *b;
615   CORE_ADDR bp_addr = 0;
616   int bp_size = 0;
617
618   if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
619     /* No breakpoints on this machine. */
620     return target_read_memory (memaddr, myaddr, len);
621
622   ALL_BREAKPOINTS (b)
623   {
624     if (b->type == bp_none)
625       warning ("reading through apparently deleted breakpoint #%d?", 
626                b->number);
627
628     /* memory breakpoint? */
629     if (b->type == bp_watchpoint
630         || b->type == bp_hardware_watchpoint
631         || b->type == bp_read_watchpoint
632         || b->type == bp_access_watchpoint)
633       continue;
634     /* bp in memory? */
635     if (!b->inserted)
636       continue;
637     /* Addresses and length of the part of the breakpoint that
638        we need to copy.  */
639     /* XXXX The m68k, sh and h8300 have different local and remote
640        breakpoint values.  BREAKPOINT_FROM_PC still manages to
641        correctly determine the breakpoints memory address and size
642        for these targets. */
643     bp_addr = b->address;
644     bp_size = 0;
645     if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
646       continue;
647     if (bp_size == 0)
648       /* bp isn't valid */
649       continue;
650     if (bp_addr + bp_size <= memaddr)
651       /* The breakpoint is entirely before the chunk of memory we
652          are reading.  */
653       continue;
654     if (bp_addr >= memaddr + len)
655       /* The breakpoint is entirely after the chunk of memory we are
656          reading. */
657       continue;
658     /* Copy the breakpoint from the shadow contents, and recurse for
659        the things before and after.  */
660     {
661       /* Offset within shadow_contents.  */
662       int bptoffset = 0;
663
664       if (bp_addr < memaddr)
665         {
666           /* Only copy the second part of the breakpoint.  */
667           bp_size -= memaddr - bp_addr;
668           bptoffset = memaddr - bp_addr;
669           bp_addr = memaddr;
670         }
671
672       if (bp_addr + bp_size > memaddr + len)
673         {
674           /* Only copy the first part of the breakpoint.  */
675           bp_size -= (bp_addr + bp_size) - (memaddr + len);
676         }
677
678       memcpy (myaddr + bp_addr - memaddr,
679               b->shadow_contents + bptoffset, bp_size);
680
681       if (bp_addr > memaddr)
682         {
683           /* Copy the section of memory before the breakpoint.  */
684           status = read_memory_nobpt (memaddr, myaddr, bp_addr - memaddr);
685           if (status != 0)
686             return status;
687         }
688
689       if (bp_addr + bp_size < memaddr + len)
690         {
691           /* Copy the section of memory after the breakpoint.  */
692           status = read_memory_nobpt (bp_addr + bp_size,
693                                       myaddr + bp_addr + bp_size - memaddr,
694                                       memaddr + len - (bp_addr + bp_size));
695           if (status != 0)
696             return status;
697         }
698       return 0;
699     }
700   }
701   /* Nothing overlaps.  Just call read_memory_noerr.  */
702   return target_read_memory (memaddr, myaddr, len);
703 }
704 \f
705
706 /* insert_breakpoints is used when starting or continuing the program.
707    remove_breakpoints is used when the program stops.
708    Both return zero if successful,
709    or an `errno' value if could not write the inferior.  */
710
711 int
712 insert_breakpoints (void)
713 {
714   register struct breakpoint *b, *temp;
715   int return_val = 0;   /* return success code. */
716   int val = 0;
717   int disabled_breaks = 0;
718   int hw_breakpoint_error = 0;
719   int process_warning = 0;
720
721   static char message1[] = "Error inserting catchpoint %d:\n";
722   static char message[sizeof (message1) + 30];
723
724 #ifdef ONE_PROCESS_WRITETEXT
725   process_warning = 1;
726 #endif
727
728   struct ui_file *tmp_error_stream = mem_fileopen ();
729   make_cleanup_ui_file_delete (tmp_error_stream);
730
731   /* Explicitly mark the warning -- this will only be printed if
732      there was an error.  */
733   fprintf_unfiltered (tmp_error_stream, "Warning:\n");
734
735   ALL_BREAKPOINTS_SAFE (b, temp)
736   {
737     if (b->enable_state == bp_permanent)
738       /* Permanent breakpoints cannot be inserted or removed.  */
739       continue;
740     else if (b->type != bp_watchpoint
741         && b->type != bp_hardware_watchpoint
742         && b->type != bp_read_watchpoint
743         && b->type != bp_access_watchpoint
744         && b->type != bp_catch_fork
745         && b->type != bp_catch_vfork
746         && b->type != bp_catch_exec
747         && b->type != bp_catch_throw
748         && b->type != bp_catch_catch
749         && b->enable_state != bp_disabled
750         && b->enable_state != bp_shlib_disabled
751         && b->enable_state != bp_call_disabled
752         && !b->inserted
753         && !b->duplicate)
754       {
755         /* "Normal" instruction breakpoint: either the standard
756            trap-instruction bp (bp_breakpoint), or a
757            bp_hardware_breakpoint.  */
758
759         /* First check to see if we have to handle an overlay.  */
760         if (overlay_debugging == ovly_off
761             || b->section == NULL
762             || !(section_is_overlay (b->section)))
763           {
764             /* No overlay handling: just set the breakpoint.  */
765
766             if (b->type == bp_hardware_breakpoint)
767               val = target_insert_hw_breakpoint (b->address, 
768                                                  b->shadow_contents);
769             else
770               val = target_insert_breakpoint (b->address, b->shadow_contents);
771           }
772         else
773           {
774             /* This breakpoint is in an overlay section.  
775                Shall we set a breakpoint at the LMA?  */
776             if (!overlay_events_enabled)
777               {
778                 /* Yes -- overlay event support is not active, 
779                    so we must try to set a breakpoint at the LMA.
780                    This will not work for a hardware breakpoint.  */
781                 if (b->type == bp_hardware_breakpoint)
782                   warning ("hardware breakpoint %d not supported in overlay!\n",
783                            b->number);
784                 else
785                   {
786                     CORE_ADDR addr = overlay_unmapped_address (b->address, 
787                                                                b->section);
788                     /* Set a software (trap) breakpoint at the LMA.  */
789                     val = target_insert_breakpoint (addr, b->shadow_contents);
790                     if (val != 0)
791                       fprintf_unfiltered (tmp_error_stream, 
792                                           "Overlay breakpoint %d failed: in ROM?", 
793                                           b->number);
794                   }
795               }
796             /* Shall we set a breakpoint at the VMA? */
797             if (section_is_mapped (b->section))
798               {
799                 /* Yes.  This overlay section is mapped into memory.  */
800                 if (b->type == bp_hardware_breakpoint)
801                   val = target_insert_hw_breakpoint (b->address, 
802                                                      b->shadow_contents);
803                 else
804                   val = target_insert_breakpoint (b->address,
805                                                   b->shadow_contents);
806               }
807             else
808               {
809                 /* No.  This breakpoint will not be inserted.  
810                    No error, but do not mark the bp as 'inserted'.  */
811                 continue;
812               }
813           }
814
815         if (val)
816           {
817             /* Can't set the breakpoint.  */
818 #if defined (DISABLE_UNSETTABLE_BREAK)
819             if (DISABLE_UNSETTABLE_BREAK (b->address))
820               {
821                 /* See also: disable_breakpoints_in_shlibs. */
822                 val = 0;
823                 b->enable_state = bp_shlib_disabled;
824                 if (!disabled_breaks)
825                   {
826                     fprintf_unfiltered (tmp_error_stream, 
827                                         "Cannot insert breakpoint %d.\n", b->number);
828                     fprintf_unfiltered (tmp_error_stream, 
829                                         "Temporarily disabling shared library breakpoints:\n");
830                   }
831                 disabled_breaks = 1;
832                 fprintf_unfiltered (tmp_error_stream, "breakpoint #%d\n", b->number);
833               }
834             else
835 #endif
836               {
837                 process_warning = 1;
838                 if (b->type == bp_hardware_breakpoint)
839                   {
840                     hw_breakpoint_error = 1;
841                     fprintf_unfiltered (tmp_error_stream, 
842                                         "Cannot insert hardware breakpoint %d.\n",
843                                         b->number);
844                   }
845                 else
846                   {
847                     fprintf_unfiltered (tmp_error_stream, "Cannot insert breakpoint %d.\n", b->number);
848                     fprintf_filtered (tmp_error_stream, "Error accessing memory address ");
849                     print_address_numeric (b->address, 1, tmp_error_stream);
850                     fprintf_filtered (tmp_error_stream, ": %s.\n",
851                                       safe_strerror (val));
852                   }
853
854               }
855           }
856         else
857           b->inserted = 1;
858
859         if (val)
860           return_val = val;     /* remember failure */
861       }
862     else if (ep_is_exception_catchpoint (b)
863              && b->enable_state != bp_disabled
864              && b->enable_state != bp_shlib_disabled
865              && b->enable_state != bp_call_disabled
866              && !b->inserted
867              && !b->duplicate)
868
869       {
870         /* If we get here, we must have a callback mechanism for exception
871            events -- with g++ style embedded label support, we insert
872            ordinary breakpoints and not catchpoints. */
873         /* Format possible error message */
874         sprintf (message, message1, b->number);
875
876         val = target_insert_breakpoint (b->address, b->shadow_contents);
877         if (val)
878           {
879             /* Couldn't set breakpoint for some reason */
880             fprintf_unfiltered (tmp_error_stream, 
881                                 "Cannot insert catchpoint %d; disabling it.\n",
882                                 b->number);
883             fprintf_filtered (tmp_error_stream, "Error accessing memory address ");
884             print_address_numeric (b->address, 1, tmp_error_stream);
885             fprintf_filtered (tmp_error_stream, ": %s.\n",
886                               safe_strerror (val));
887             b->enable_state = bp_disabled;
888           }
889         else
890           {
891             /* Bp set, now make sure callbacks are enabled */
892             int val;
893             args_for_catchpoint_enable args;
894             args.kind = b->type == bp_catch_catch ? 
895               EX_EVENT_CATCH : EX_EVENT_THROW;
896             args.enable_p = 1;
897             val = catch_errors (cover_target_enable_exception_callback,
898                                 &args,
899                                 message, RETURN_MASK_ALL);
900             if (val != 0 && val != -1)
901               {
902                 b->inserted = 1;
903               }
904             /* Check if something went wrong; val == 0 can be ignored */
905             if (val == -1)
906               {
907                 /* something went wrong */
908                 fprintf_unfiltered (tmp_error_stream, 
909                                     "Cannot insert catchpoint %d; disabling it.\n",
910                                     b->number);
911                 b->enable_state = bp_disabled;
912               }
913           }
914
915         if (val)
916           return_val = val;     /* remember failure */
917       }
918
919     else if ((b->type == bp_hardware_watchpoint ||
920               b->type == bp_read_watchpoint ||
921               b->type == bp_access_watchpoint)
922              && b->enable_state == bp_enabled
923              && b->disposition != disp_del_at_next_stop
924              && !b->inserted
925              && !b->duplicate)
926       {
927         struct frame_info *saved_frame;
928         int saved_level, within_current_scope;
929         struct value *mark = value_mark ();
930         struct value *v;
931
932         /* Save the current frame and level so we can restore it after
933            evaluating the watchpoint expression on its own frame.  */
934         saved_frame = selected_frame;
935         saved_level = frame_relative_level (selected_frame);
936
937         /* Determine if the watchpoint is within scope.  */
938         if (b->exp_valid_block == NULL)
939           within_current_scope = 1;
940         else
941           {
942             struct frame_info *fi;
943             fi = frame_find_by_id (b->watchpoint_frame);
944             within_current_scope = (fi != NULL);
945             if (within_current_scope)
946               select_frame (fi);
947           }
948
949         if (within_current_scope)
950           {
951             /* Evaluate the expression and cut the chain of values
952                produced off from the value chain.
953
954                Make sure the value returned isn't lazy; we use
955                laziness to determine what memory GDB actually needed
956                in order to compute the value of the expression.  */
957             v = evaluate_expression (b->exp);
958             VALUE_CONTENTS(v);
959             value_release_to_mark (mark);
960
961             b->val_chain = v;
962             b->inserted = 1;
963
964             /* Look at each value on the value chain.  */
965             for (; v; v = v->next)
966               {
967                 /* If it's a memory location, and GDB actually needed
968                    its contents to evaluate the expression, then we
969                    must watch it.  */
970                 if (VALUE_LVAL (v) == lval_memory
971                     && ! VALUE_LAZY (v))
972                   {
973                     struct type *vtype = check_typedef (VALUE_TYPE (v));
974
975                     /* We only watch structs and arrays if user asked
976                        for it explicitly, never if they just happen to
977                        appear in the middle of some value chain.  */
978                     if (v == b->val_chain
979                         || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
980                             && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
981                       {
982                         CORE_ADDR addr;
983                         int len, type;
984
985                         addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
986                         len = TYPE_LENGTH (VALUE_TYPE (v));
987                         type = hw_write;
988                         if (b->type == bp_read_watchpoint)
989                           type = hw_read;
990                         else if (b->type == bp_access_watchpoint)
991                           type = hw_access;
992
993                         val = target_insert_watchpoint (addr, len, type);
994                         if (val == -1)
995                           {
996                             /* Don't exit the loop, try to insert
997                                every value on the value chain.  That's
998                                because we will be removing all the
999                                watches below, and removing a
1000                                watchpoint we didn't insert could have
1001                                adverse effects.  */
1002                             b->inserted = 0;
1003                           }
1004                         val = 0;
1005                       }
1006                   }
1007               }
1008             /* Failure to insert a watchpoint on any memory value in the
1009                value chain brings us here.  */
1010             if (!b->inserted)
1011               {
1012                 process_warning = 1;
1013                 remove_breakpoint (b, mark_uninserted);
1014                 hw_breakpoint_error = 1;
1015                 fprintf_unfiltered (tmp_error_stream,
1016                                     "Cannot insert hardware watchpoint %d.\n", b->number);
1017                 val = -1;
1018               }               
1019           }
1020         else
1021           {
1022             printf_filtered ("Hardware watchpoint %d deleted ", b->number);
1023             printf_filtered ("because the program has left the block \n");
1024             printf_filtered ("in which its expression is valid.\n");
1025             if (b->related_breakpoint)
1026               b->related_breakpoint->disposition = disp_del_at_next_stop;
1027             b->disposition = disp_del_at_next_stop;
1028           }
1029
1030         /* Restore the frame and level.  */
1031         if ((saved_frame != selected_frame) ||
1032             (saved_level != frame_relative_level (selected_frame)))
1033           select_frame (saved_frame);
1034
1035         if (val)
1036           return_val = val;     /* remember failure */
1037       }
1038     else if ((b->type == bp_catch_fork
1039               || b->type == bp_catch_vfork
1040               || b->type == bp_catch_exec)
1041              && b->enable_state == bp_enabled
1042              && !b->inserted
1043              && !b->duplicate)
1044       {
1045         val = -1;
1046         switch (b->type)
1047           {
1048           case bp_catch_fork:
1049             val = target_insert_fork_catchpoint (PIDGET (inferior_ptid));
1050             break;
1051           case bp_catch_vfork:
1052             val = target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
1053             break;
1054           case bp_catch_exec:
1055             val = target_insert_exec_catchpoint (PIDGET (inferior_ptid));
1056             break;
1057           default:
1058             warning ("Internal error, %s line %d.", __FILE__, __LINE__);
1059             break;
1060           }
1061         if (val < 0)
1062           {
1063             fprintf_unfiltered (tmp_error_stream, "Cannot insert catchpoint %d.", b->number);
1064           }
1065         else
1066           b->inserted = 1;
1067
1068         if (val)
1069           return_val = val;     /* remember failure */
1070       }
1071   }
1072   
1073   if (return_val) 
1074     {
1075       /* If a hardware breakpoint or watchpoint was inserted, add a
1076          message about possibly exhausted resources.  */
1077       if (hw_breakpoint_error)  
1078         {
1079           fprintf_unfiltered (tmp_error_stream, "Could not insert hardware breakpoints:\n" 
1080                               "You may have requested too many hardware breakpoints/watchpoints.\n");
1081         }
1082
1083       if (process_warning)
1084         fprintf_unfiltered (tmp_error_stream,"The same program may be running in another process.");
1085
1086       target_terminal_ours_for_output ();
1087       error_stream (tmp_error_stream);
1088     }
1089   return return_val;
1090 }
1091
1092 int
1093 remove_breakpoints (void)
1094 {
1095   register struct breakpoint *b;
1096   int val;
1097
1098   ALL_BREAKPOINTS (b)
1099   {
1100     if (b->inserted)
1101       {
1102         val = remove_breakpoint (b, mark_uninserted);
1103         if (val != 0)
1104           return val;
1105       }
1106   }
1107   return 0;
1108 }
1109
1110 int
1111 remove_hw_watchpoints (void)
1112 {
1113   register struct breakpoint *b;
1114   int val;
1115
1116   ALL_BREAKPOINTS (b)
1117   {
1118     if (b->inserted
1119         && (b->type == bp_hardware_watchpoint
1120             || b->type == bp_read_watchpoint
1121             || b->type == bp_access_watchpoint))
1122       {
1123         val = remove_breakpoint (b, mark_uninserted);
1124         if (val != 0)
1125           return val;
1126       }
1127   }
1128   return 0;
1129 }
1130
1131 int
1132 reattach_breakpoints (int pid)
1133 {
1134   register struct breakpoint *b;
1135   int val;
1136   struct cleanup *old_chain = save_inferior_ptid ();
1137
1138   /* Set inferior_ptid; remove_breakpoint uses this global.  */
1139   inferior_ptid = pid_to_ptid (pid);
1140   ALL_BREAKPOINTS (b)
1141   {
1142     if (b->inserted)
1143       {
1144         remove_breakpoint (b, mark_inserted);
1145         if (b->type == bp_hardware_breakpoint)
1146           val = target_insert_hw_breakpoint (b->address, b->shadow_contents);
1147         else
1148           val = target_insert_breakpoint (b->address, b->shadow_contents);
1149         if (val != 0)
1150           {
1151             do_cleanups (old_chain);
1152             return val;
1153           }
1154       }
1155   }
1156   do_cleanups (old_chain);
1157   return 0;
1158 }
1159
1160 void
1161 update_breakpoints_after_exec (void)
1162 {
1163   struct breakpoint *b;
1164   struct breakpoint *temp;
1165
1166   /* Doing this first prevents the badness of having delete_breakpoint()
1167      write a breakpoint's current "shadow contents" to lift the bp.  That
1168      shadow is NOT valid after an exec()! */
1169   mark_breakpoints_out ();
1170
1171   ALL_BREAKPOINTS_SAFE (b, temp)
1172   {
1173     /* Solib breakpoints must be explicitly reset after an exec(). */
1174     if (b->type == bp_shlib_event)
1175       {
1176         delete_breakpoint (b);
1177         continue;
1178       }
1179
1180     /* Thread event breakpoints must be set anew after an exec(),
1181        as must overlay event breakpoints.  */
1182     if (b->type == bp_thread_event || b->type == bp_overlay_event)
1183       {
1184         delete_breakpoint (b);
1185         continue;
1186       }
1187
1188     /* Step-resume breakpoints are meaningless after an exec(). */
1189     if (b->type == bp_step_resume)
1190       {
1191         delete_breakpoint (b);
1192         continue;
1193       }
1194
1195     /* Ditto the sigtramp handler breakpoints. */
1196     if (b->type == bp_through_sigtramp)
1197       {
1198         delete_breakpoint (b);
1199         continue;
1200       }
1201
1202     /* Ditto the exception-handling catchpoints. */
1203     if ((b->type == bp_catch_catch) || (b->type == bp_catch_throw))
1204       {
1205         delete_breakpoint (b);
1206         continue;
1207       }
1208
1209     /* Don't delete an exec catchpoint, because else the inferior
1210        won't stop when it ought!
1211
1212        Similarly, we probably ought to keep vfork catchpoints, 'cause
1213        on this target, we may not be able to stop when the vfork is
1214        seen, but only when the subsequent exec is seen.  (And because
1215        deleting fork catchpoints here but not vfork catchpoints will
1216        seem mysterious to users, keep those too.)
1217
1218        ??rehrauer: Let's hope that merely clearing out this catchpoint's
1219        target address field, if any, is sufficient to have it be reset
1220        automagically.  Certainly on HP-UX that's true.
1221
1222        Jim Blandy <jimb@redhat.com>: Actually, zero is a perfectly
1223        valid code address on some platforms (like the mn10200 and
1224        mn10300 simulators).  We shouldn't assign any special
1225        interpretation to a breakpoint with a zero address.  And in
1226        fact, GDB doesn't --- I can't see what that comment above is
1227        talking about.  As far as I can tell, setting the address of a
1228        bp_catch_exec/bp_catch_vfork/bp_catch_fork breakpoint to zero
1229        is meaningless, since those are implemented with HP-UX kernel
1230        hackery, not by storing breakpoint instructions somewhere.  */
1231     if ((b->type == bp_catch_exec) ||
1232         (b->type == bp_catch_vfork) ||
1233         (b->type == bp_catch_fork))
1234       {
1235         b->address = (CORE_ADDR) NULL;
1236         continue;
1237       }
1238
1239     /* bp_finish is a special case.  The only way we ought to be able
1240        to see one of these when an exec() has happened, is if the user
1241        caught a vfork, and then said "finish".  Ordinarily a finish just
1242        carries them to the call-site of the current callee, by setting
1243        a temporary bp there and resuming.  But in this case, the finish
1244        will carry them entirely through the vfork & exec.
1245
1246        We don't want to allow a bp_finish to remain inserted now.  But
1247        we can't safely delete it, 'cause finish_command has a handle to
1248        the bp on a bpstat, and will later want to delete it.  There's a
1249        chance (and I've seen it happen) that if we delete the bp_finish
1250        here, that its storage will get reused by the time finish_command
1251        gets 'round to deleting the "use to be a bp_finish" breakpoint.
1252        We really must allow finish_command to delete a bp_finish.
1253
1254        In the absense of a general solution for the "how do we know
1255        it's safe to delete something others may have handles to?"
1256        problem, what we'll do here is just uninsert the bp_finish, and
1257        let finish_command delete it.
1258
1259        (We know the bp_finish is "doomed" in the sense that it's
1260        momentary, and will be deleted as soon as finish_command sees
1261        the inferior stopped.  So it doesn't matter that the bp's
1262        address is probably bogus in the new a.out, unlike e.g., the
1263        solib breakpoints.)  */
1264
1265     if (b->type == bp_finish)
1266       {
1267         continue;
1268       }
1269
1270     /* Without a symbolic address, we have little hope of the
1271        pre-exec() address meaning the same thing in the post-exec()
1272        a.out. */
1273     if (b->addr_string == NULL)
1274       {
1275         delete_breakpoint (b);
1276         continue;
1277       }
1278
1279     /* If this breakpoint has survived the above battery of checks, then
1280        it must have a symbolic address.  Be sure that it gets reevaluated
1281        to a target address, rather than reusing the old evaluation.
1282
1283        Jim Blandy <jimb@redhat.com>: As explained above in the comment
1284        for bp_catch_exec and friends, I'm pretty sure this is entirely
1285        unnecessary.  A call to breakpoint_re_set_one always recomputes
1286        the breakpoint's address from scratch, or deletes it if it can't.
1287        So I think this assignment could be deleted without effect.  */
1288     b->address = (CORE_ADDR) NULL;
1289   }
1290   /* FIXME what about longjmp breakpoints?  Re-create them here?  */
1291   create_overlay_event_breakpoint ("_ovly_debug_event");
1292 }
1293
1294 int
1295 detach_breakpoints (int pid)
1296 {
1297   register struct breakpoint *b;
1298   int val;
1299   struct cleanup *old_chain = save_inferior_ptid ();
1300
1301   if (pid == PIDGET (inferior_ptid))
1302     error ("Cannot detach breakpoints of inferior_ptid");
1303
1304   /* Set inferior_ptid; remove_breakpoint uses this global.  */
1305   inferior_ptid = pid_to_ptid (pid);
1306   ALL_BREAKPOINTS (b)
1307   {
1308     if (b->inserted)
1309       {
1310         val = remove_breakpoint (b, mark_inserted);
1311         if (val != 0)
1312           {
1313             do_cleanups (old_chain);
1314             return val;
1315           }
1316       }
1317   }
1318   do_cleanups (old_chain);
1319   return 0;
1320 }
1321
1322 static int
1323 remove_breakpoint (struct breakpoint *b, insertion_state_t is)
1324 {
1325   int val;
1326
1327   if (b->enable_state == bp_permanent)
1328     /* Permanent breakpoints cannot be inserted or removed.  */
1329     return 0;
1330
1331   if (b->type == bp_none)
1332     warning ("attempted to remove apparently deleted breakpoint #%d?", 
1333              b->number);
1334
1335   if (b->type != bp_watchpoint
1336       && b->type != bp_hardware_watchpoint
1337       && b->type != bp_read_watchpoint
1338       && b->type != bp_access_watchpoint
1339       && b->type != bp_catch_fork
1340       && b->type != bp_catch_vfork
1341       && b->type != bp_catch_exec
1342       && b->type != bp_catch_catch
1343       && b->type != bp_catch_throw)
1344     {
1345       /* "Normal" instruction breakpoint: either the standard
1346          trap-instruction bp (bp_breakpoint), or a
1347          bp_hardware_breakpoint.  */
1348
1349       /* First check to see if we have to handle an overlay.  */
1350       if (overlay_debugging == ovly_off
1351           || b->section == NULL
1352           || !(section_is_overlay (b->section)))
1353         {
1354           /* No overlay handling: just remove the breakpoint.  */
1355
1356           if (b->type == bp_hardware_breakpoint)
1357             val = target_remove_hw_breakpoint (b->address, 
1358                                                b->shadow_contents);
1359           else
1360             val = target_remove_breakpoint (b->address, b->shadow_contents);
1361         }
1362       else
1363         {
1364           /* This breakpoint is in an overlay section.  
1365              Did we set a breakpoint at the LMA?  */
1366           if (!overlay_events_enabled)
1367               {
1368                 /* Yes -- overlay event support is not active, so we
1369                    should have set a breakpoint at the LMA.  Remove it.  
1370                 */
1371                 CORE_ADDR addr = overlay_unmapped_address (b->address, 
1372                                                            b->section);
1373                 /* Ignore any failures: if the LMA is in ROM, we will
1374                    have already warned when we failed to insert it.  */
1375                 if (b->type != bp_hardware_breakpoint)
1376                   target_remove_hw_breakpoint (addr, b->shadow_contents);
1377                 else
1378                   target_remove_breakpoint (addr, b->shadow_contents);
1379               }
1380           /* Did we set a breakpoint at the VMA? 
1381              If so, we will have marked the breakpoint 'inserted'.  */
1382           if (b->inserted)
1383             {
1384               /* Yes -- remove it.  Previously we did not bother to
1385                  remove the breakpoint if the section had been
1386                  unmapped, but let's not rely on that being safe.  We
1387                  don't know what the overlay manager might do.  */
1388               if (b->type == bp_hardware_breakpoint)
1389                 val = target_remove_hw_breakpoint (b->address, 
1390                                                    b->shadow_contents);
1391               else
1392                 val = target_remove_breakpoint (b->address,
1393                                                 b->shadow_contents);
1394             }
1395           else
1396             {
1397               /* No -- not inserted, so no need to remove.  No error.  */
1398               val = 0;
1399             }
1400         }
1401       if (val)
1402         return val;
1403       b->inserted = (is == mark_inserted);
1404     }
1405   else if ((b->type == bp_hardware_watchpoint ||
1406             b->type == bp_read_watchpoint ||
1407             b->type == bp_access_watchpoint)
1408            && b->enable_state == bp_enabled
1409            && !b->duplicate)
1410     {
1411       struct value *v;
1412       struct value *n;
1413
1414       b->inserted = (is == mark_inserted);
1415       /* Walk down the saved value chain.  */
1416       for (v = b->val_chain; v; v = v->next)
1417         {
1418           /* For each memory reference remove the watchpoint
1419              at that address.  */
1420           if (VALUE_LVAL (v) == lval_memory
1421               && ! VALUE_LAZY (v))
1422             {
1423               struct type *vtype = check_typedef (VALUE_TYPE (v));
1424
1425               if (v == b->val_chain
1426                   || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
1427                       && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
1428                 {
1429                   CORE_ADDR addr;
1430                   int len, type;
1431
1432                   addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1433                   len = TYPE_LENGTH (VALUE_TYPE (v));
1434                   type   = hw_write;
1435                   if (b->type == bp_read_watchpoint)
1436                     type = hw_read;
1437                   else if (b->type == bp_access_watchpoint)
1438                     type = hw_access;
1439
1440                   val = target_remove_watchpoint (addr, len, type);
1441                   if (val == -1)
1442                     b->inserted = 1;
1443                   val = 0;
1444                 }
1445             }
1446         }
1447       /* Failure to remove any of the hardware watchpoints comes here.  */
1448       if ((is == mark_uninserted) && (b->inserted))
1449         warning ("Could not remove hardware watchpoint %d.",
1450                  b->number);
1451
1452       /* Free the saved value chain.  We will construct a new one
1453          the next time the watchpoint is inserted.  */
1454       for (v = b->val_chain; v; v = n)
1455         {
1456           n = v->next;
1457           value_free (v);
1458         }
1459       b->val_chain = NULL;
1460     }
1461   else if ((b->type == bp_catch_fork ||
1462             b->type == bp_catch_vfork ||
1463             b->type == bp_catch_exec)
1464            && b->enable_state == bp_enabled
1465            && !b->duplicate)
1466     {
1467       val = -1;
1468       switch (b->type)
1469         {
1470         case bp_catch_fork:
1471           val = target_remove_fork_catchpoint (PIDGET (inferior_ptid));
1472           break;
1473         case bp_catch_vfork:
1474           val = target_remove_vfork_catchpoint (PIDGET (inferior_ptid));
1475           break;
1476         case bp_catch_exec:
1477           val = target_remove_exec_catchpoint (PIDGET (inferior_ptid));
1478           break;
1479         default:
1480           warning ("Internal error, %s line %d.", __FILE__, __LINE__);
1481           break;
1482         }
1483       if (val)
1484         return val;
1485       b->inserted = (is == mark_inserted);
1486     }
1487   else if ((b->type == bp_catch_catch ||
1488             b->type == bp_catch_throw)
1489            && b->enable_state == bp_enabled
1490            && !b->duplicate)
1491     {
1492
1493       val = target_remove_breakpoint (b->address, b->shadow_contents);
1494       if (val)
1495         return val;
1496       b->inserted = (is == mark_inserted);
1497     }
1498   else if (ep_is_exception_catchpoint (b)
1499            && b->inserted       /* sometimes previous insert doesn't happen */
1500            && b->enable_state == bp_enabled
1501            && !b->duplicate)
1502     {
1503
1504       val = target_remove_breakpoint (b->address, b->shadow_contents);
1505       if (val)
1506         return val;
1507
1508       b->inserted = (is == mark_inserted);
1509     }
1510
1511   return 0;
1512 }
1513
1514 /* Clear the "inserted" flag in all breakpoints.  */
1515
1516 void
1517 mark_breakpoints_out (void)
1518 {
1519   register struct breakpoint *b;
1520
1521   ALL_BREAKPOINTS (b)
1522     b->inserted = 0;
1523 }
1524
1525 /* Clear the "inserted" flag in all breakpoints and delete any
1526    breakpoints which should go away between runs of the program.
1527
1528    Plus other such housekeeping that has to be done for breakpoints
1529    between runs.
1530
1531    Note: this function gets called at the end of a run (by
1532    generic_mourn_inferior) and when a run begins (by
1533    init_wait_for_inferior). */
1534
1535
1536
1537 void
1538 breakpoint_init_inferior (enum inf_context context)
1539 {
1540   register struct breakpoint *b, *temp;
1541   static int warning_needed = 0;
1542
1543   ALL_BREAKPOINTS_SAFE (b, temp)
1544   {
1545     b->inserted = 0;
1546
1547     switch (b->type)
1548       {
1549       case bp_call_dummy:
1550       case bp_watchpoint_scope:
1551
1552         /* If the call dummy breakpoint is at the entry point it will
1553            cause problems when the inferior is rerun, so we better
1554            get rid of it. 
1555
1556            Also get rid of scope breakpoints.  */
1557         delete_breakpoint (b);
1558         break;
1559
1560       case bp_watchpoint:
1561       case bp_hardware_watchpoint:
1562       case bp_read_watchpoint:
1563       case bp_access_watchpoint:
1564
1565         /* Likewise for watchpoints on local expressions.  */
1566         if (b->exp_valid_block != NULL)
1567           delete_breakpoint (b);
1568         break;
1569       default:
1570         /* Likewise for exception catchpoints in dynamic-linked
1571            executables where required */
1572         if (ep_is_exception_catchpoint (b) &&
1573             exception_catchpoints_are_fragile)
1574           {
1575             warning_needed = 1;
1576             delete_breakpoint (b);
1577           }
1578         break;
1579       }
1580   }
1581
1582   if (exception_catchpoints_are_fragile)
1583     exception_support_initialized = 0;
1584
1585   /* Don't issue the warning unless it's really needed... */
1586   if (warning_needed && (context != inf_exited))
1587     {
1588       warning ("Exception catchpoints from last run were deleted.");
1589       warning ("You must reinsert them explicitly.");
1590       warning_needed = 0;
1591     }
1592 }
1593
1594 /* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint
1595    exists at PC.  It returns ordinary_breakpoint_here if it's an
1596    ordinary breakpoint, or permanent_breakpoint_here if it's a
1597    permanent breakpoint.
1598    - When continuing from a location with an ordinary breakpoint, we
1599      actually single step once before calling insert_breakpoints.
1600    - When continuing from a localion with a permanent breakpoint, we
1601      need to use the `SKIP_PERMANENT_BREAKPOINT' macro, provided by
1602      the target, to advance the PC past the breakpoint.  */
1603
1604 enum breakpoint_here
1605 breakpoint_here_p (CORE_ADDR pc)
1606 {
1607   register struct breakpoint *b;
1608   int any_breakpoint_here = 0;
1609
1610   ALL_BREAKPOINTS (b)
1611     if ((b->enable_state == bp_enabled
1612          || b->enable_state == bp_permanent)
1613         && b->address == pc)    /* bp is enabled and matches pc */
1614       {
1615         if (overlay_debugging 
1616             && section_is_overlay (b->section) 
1617             && !section_is_mapped (b->section))
1618           continue;             /* unmapped overlay -- can't be a match */
1619         else if (b->enable_state == bp_permanent)
1620           return permanent_breakpoint_here;
1621         else
1622           any_breakpoint_here = 1;
1623       }
1624
1625   return any_breakpoint_here ? ordinary_breakpoint_here : 0;
1626 }
1627
1628
1629 /* breakpoint_inserted_here_p (PC) is just like breakpoint_here_p(),
1630    but it only returns true if there is actually a breakpoint inserted
1631    at PC.  */
1632
1633 int
1634 breakpoint_inserted_here_p (CORE_ADDR pc)
1635 {
1636   register struct breakpoint *b;
1637
1638   ALL_BREAKPOINTS (b)
1639     if (b->inserted
1640         && b->address == pc)    /* bp is inserted and matches pc */
1641     {
1642       if (overlay_debugging 
1643           && section_is_overlay (b->section) 
1644           && !section_is_mapped (b->section))
1645         continue;               /* unmapped overlay -- can't be a match */
1646       else
1647         return 1;
1648     }
1649
1650   return 0;
1651 }
1652
1653 /* Return nonzero if FRAME is a dummy frame.  We can't use
1654    PC_IN_CALL_DUMMY because figuring out the saved SP would take too
1655    much time, at least using get_saved_register on the 68k.  This
1656    means that for this function to work right a port must use the
1657    bp_call_dummy breakpoint.  */
1658
1659 int
1660 frame_in_dummy (struct frame_info *frame)
1661 {
1662   struct breakpoint *b;
1663
1664   if (!CALL_DUMMY_P)
1665     return 0;
1666
1667   if (USE_GENERIC_DUMMY_FRAMES)
1668     return generic_pc_in_call_dummy (frame->pc, frame->frame, frame->frame);
1669
1670   ALL_BREAKPOINTS (b)
1671   {
1672     if (b->type == bp_call_dummy
1673         && b->frame == frame->frame
1674     /* We need to check the PC as well as the frame on the sparc,
1675        for signals.exp in the testsuite.  */
1676         && (frame->pc
1677             >= (b->address
1678               - SIZEOF_CALL_DUMMY_WORDS / sizeof (LONGEST) * REGISTER_SIZE))
1679         && frame->pc <= b->address)
1680       return 1;
1681   }
1682   return 0;
1683 }
1684
1685 /* breakpoint_thread_match (PC, PID) returns true if the breakpoint at
1686    PC is valid for process/thread PID.  */
1687
1688 int
1689 breakpoint_thread_match (CORE_ADDR pc, ptid_t ptid)
1690 {
1691   struct breakpoint *b;
1692   int thread;
1693
1694   thread = pid_to_thread_id (ptid);
1695
1696   ALL_BREAKPOINTS (b)
1697     if (b->enable_state != bp_disabled
1698         && b->enable_state != bp_shlib_disabled
1699         && b->enable_state != bp_call_disabled
1700         && b->address == pc
1701         && (b->thread == -1 || b->thread == thread))
1702     {
1703       if (overlay_debugging 
1704           && section_is_overlay (b->section) 
1705           && !section_is_mapped (b->section))
1706         continue;               /* unmapped overlay -- can't be a match */
1707       else
1708         return 1;
1709     }
1710
1711   return 0;
1712 }
1713 \f
1714
1715 /* bpstat stuff.  External routines' interfaces are documented
1716    in breakpoint.h.  */
1717
1718 int
1719 ep_is_catchpoint (struct breakpoint *ep)
1720 {
1721   return
1722     (ep->type == bp_catch_load)
1723     || (ep->type == bp_catch_unload)
1724     || (ep->type == bp_catch_fork)
1725     || (ep->type == bp_catch_vfork)
1726     || (ep->type == bp_catch_exec)
1727     || (ep->type == bp_catch_catch)
1728     || (ep->type == bp_catch_throw);
1729
1730   /* ??rehrauer: Add more kinds here, as are implemented... */
1731 }
1732
1733 int
1734 ep_is_shlib_catchpoint (struct breakpoint *ep)
1735 {
1736   return
1737     (ep->type == bp_catch_load)
1738     || (ep->type == bp_catch_unload);
1739 }
1740
1741 int
1742 ep_is_exception_catchpoint (struct breakpoint *ep)
1743 {
1744   return
1745     (ep->type == bp_catch_catch)
1746     || (ep->type == bp_catch_throw);
1747 }
1748
1749 /* Clear a bpstat so that it says we are not at any breakpoint.
1750    Also free any storage that is part of a bpstat.  */
1751
1752 void
1753 bpstat_clear (bpstat *bsp)
1754 {
1755   bpstat p;
1756   bpstat q;
1757
1758   if (bsp == 0)
1759     return;
1760   p = *bsp;
1761   while (p != NULL)
1762     {
1763       q = p->next;
1764       if (p->old_val != NULL)
1765         value_free (p->old_val);
1766       xfree (p);
1767       p = q;
1768     }
1769   *bsp = NULL;
1770 }
1771
1772 /* Return a copy of a bpstat.  Like "bs1 = bs2" but all storage that
1773    is part of the bpstat is copied as well.  */
1774
1775 bpstat
1776 bpstat_copy (bpstat bs)
1777 {
1778   bpstat p = NULL;
1779   bpstat tmp;
1780   bpstat retval = NULL;
1781
1782   if (bs == NULL)
1783     return bs;
1784
1785   for (; bs != NULL; bs = bs->next)
1786     {
1787       tmp = (bpstat) xmalloc (sizeof (*tmp));
1788       memcpy (tmp, bs, sizeof (*tmp));
1789       if (p == NULL)
1790         /* This is the first thing in the chain.  */
1791         retval = tmp;
1792       else
1793         p->next = tmp;
1794       p = tmp;
1795     }
1796   p->next = NULL;
1797   return retval;
1798 }
1799
1800 /* Find the bpstat associated with this breakpoint */
1801
1802 bpstat
1803 bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
1804 {
1805   if (bsp == NULL)
1806     return NULL;
1807
1808   for (; bsp != NULL; bsp = bsp->next)
1809     {
1810       if (bsp->breakpoint_at == breakpoint)
1811         return bsp;
1812     }
1813   return NULL;
1814 }
1815
1816 /* Find a step_resume breakpoint associated with this bpstat.
1817    (If there are multiple step_resume bp's on the list, this function
1818    will arbitrarily pick one.)
1819
1820    It is an error to use this function if BPSTAT doesn't contain a
1821    step_resume breakpoint.
1822
1823    See wait_for_inferior's use of this function.  */
1824 struct breakpoint *
1825 bpstat_find_step_resume_breakpoint (bpstat bsp)
1826 {
1827   int current_thread;
1828
1829   if (bsp == NULL)
1830     error ("Internal error (bpstat_find_step_resume_breakpoint)");
1831
1832   current_thread = pid_to_thread_id (inferior_ptid);
1833
1834   for (; bsp != NULL; bsp = bsp->next)
1835     {
1836       if ((bsp->breakpoint_at != NULL) &&
1837           (bsp->breakpoint_at->type == bp_step_resume) &&
1838           (bsp->breakpoint_at->thread == current_thread || 
1839            bsp->breakpoint_at->thread == -1))
1840         return bsp->breakpoint_at;
1841     }
1842
1843   error ("Internal error (no step_resume breakpoint found)");
1844 }
1845
1846
1847 /* Return the breakpoint number of the first breakpoint we are stopped
1848    at.  *BSP upon return is a bpstat which points to the remaining
1849    breakpoints stopped at (but which is not guaranteed to be good for
1850    anything but further calls to bpstat_num).
1851    Return 0 if passed a bpstat which does not indicate any breakpoints.  */
1852
1853 int
1854 bpstat_num (bpstat *bsp)
1855 {
1856   struct breakpoint *b;
1857
1858   if ((*bsp) == NULL)
1859     return 0;                   /* No more breakpoint values */
1860   else
1861     {
1862       b = (*bsp)->breakpoint_at;
1863       *bsp = (*bsp)->next;
1864       if (b == NULL)
1865         return -1;              /* breakpoint that's been deleted since */
1866       else
1867         return b->number;       /* We have its number */
1868     }
1869 }
1870
1871 /* Modify BS so that the actions will not be performed.  */
1872
1873 void
1874 bpstat_clear_actions (bpstat bs)
1875 {
1876   for (; bs != NULL; bs = bs->next)
1877     {
1878       bs->commands = NULL;
1879       if (bs->old_val != NULL)
1880         {
1881           value_free (bs->old_val);
1882           bs->old_val = NULL;
1883         }
1884     }
1885 }
1886
1887 /* Stub for cleaning up our state if we error-out of a breakpoint command */
1888 /* ARGSUSED */
1889 static void
1890 cleanup_executing_breakpoints (PTR ignore)
1891 {
1892   executing_breakpoint_commands = 0;
1893 }
1894
1895 /* Execute all the commands associated with all the breakpoints at this
1896    location.  Any of these commands could cause the process to proceed
1897    beyond this point, etc.  We look out for such changes by checking
1898    the global "breakpoint_proceeded" after each command.  */
1899
1900 void
1901 bpstat_do_actions (bpstat *bsp)
1902 {
1903   bpstat bs;
1904   struct cleanup *old_chain;
1905   struct command_line *cmd;
1906
1907   /* Avoid endless recursion if a `source' command is contained
1908      in bs->commands.  */
1909   if (executing_breakpoint_commands)
1910     return;
1911
1912   executing_breakpoint_commands = 1;
1913   old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
1914
1915 top:
1916   /* Note that (as of this writing), our callers all appear to
1917      be passing us the address of global stop_bpstat.  And, if
1918      our calls to execute_control_command cause the inferior to
1919      proceed, that global (and hence, *bsp) will change.
1920
1921      We must be careful to not touch *bsp unless the inferior
1922      has not proceeded. */
1923
1924   /* This pointer will iterate over the list of bpstat's. */
1925   bs = *bsp;
1926
1927   breakpoint_proceeded = 0;
1928   for (; bs != NULL; bs = bs->next)
1929     {
1930       cmd = bs->commands;
1931       while (cmd != NULL)
1932         {
1933           execute_control_command (cmd);
1934
1935           if (breakpoint_proceeded)
1936             break;
1937           else
1938             cmd = cmd->next;
1939         }
1940       if (breakpoint_proceeded)
1941         /* The inferior is proceeded by the command; bomb out now.
1942            The bpstat chain has been blown away by wait_for_inferior.
1943            But since execution has stopped again, there is a new bpstat
1944            to look at, so start over.  */
1945         goto top;
1946       else
1947         bs->commands = NULL;
1948     }
1949
1950   executing_breakpoint_commands = 0;
1951   discard_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 = 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
6791         /* we'd call bpstat_clear_actions, but that free's stuff and due
6792            to the multiple pointers pointing to one item with no
6793            reference counts found anywhere through out the bpstat's (how
6794            do you spell fragile?), we don't want to free things twice --
6795            better a memory leak than a corrupt malloc pool! */
6796         bs->commands = NULL;
6797         bs->old_val = NULL;
6798       }
6799   /* On the chance that someone will soon try again to delete this same
6800      bp, we mark it as deleted before freeing its storage. */
6801   bpt->type = bp_none;
6802
6803   xfree (bpt);
6804 }
6805
6806 static void
6807 do_delete_breakpoint_cleanup (void *b)
6808 {
6809   delete_breakpoint (b);
6810 }
6811
6812 struct cleanup *
6813 make_cleanup_delete_breakpoint (struct breakpoint *b)
6814 {
6815   return make_cleanup (do_delete_breakpoint_cleanup, b);
6816 }
6817
6818 struct cleanup *
6819 make_exec_cleanup_delete_breakpoint (struct breakpoint *b)
6820 {
6821   return make_exec_cleanup (do_delete_breakpoint_cleanup, b);
6822 }
6823
6824 void
6825 delete_command (char *arg, int from_tty)
6826 {
6827   struct breakpoint *b, *temp;
6828
6829   dont_repeat ();
6830
6831   if (arg == 0)
6832     {
6833       int breaks_to_delete = 0;
6834
6835       /* Delete all breakpoints if no argument.
6836          Do not delete internal or call-dummy breakpoints, these
6837          have to be deleted with an explicit breakpoint number argument.  */
6838       ALL_BREAKPOINTS (b)
6839       {
6840         if (b->type != bp_call_dummy &&
6841             b->type != bp_shlib_event &&
6842             b->type != bp_thread_event &&
6843             b->type != bp_overlay_event &&
6844             b->number >= 0)
6845           breaks_to_delete = 1;
6846       }
6847
6848       /* Ask user only if there are some breakpoints to delete.  */
6849       if (!from_tty
6850           || (breaks_to_delete && query ("Delete all breakpoints? ")))
6851         {
6852           ALL_BREAKPOINTS_SAFE (b, temp)
6853           {
6854             if (b->type != bp_call_dummy &&
6855                 b->type != bp_shlib_event &&
6856                 b->type != bp_thread_event &&
6857                 b->type != bp_overlay_event &&
6858                 b->number >= 0)
6859               delete_breakpoint (b);
6860           }
6861         }
6862     }
6863   else
6864     map_breakpoint_numbers (arg, delete_breakpoint);
6865 }
6866
6867 /* Reset a breakpoint given it's struct breakpoint * BINT.
6868    The value we return ends up being the return value from catch_errors.
6869    Unused in this case.  */
6870
6871 static int
6872 breakpoint_re_set_one (PTR bint)
6873 {
6874   /* get past catch_errs */
6875   struct breakpoint *b = (struct breakpoint *) bint;
6876   struct value *mark;
6877   int i;
6878   struct symtabs_and_lines sals;
6879   char *s;
6880   enum enable_state save_enable;
6881
6882   switch (b->type)
6883     {
6884     case bp_none:
6885       warning ("attempted to reset apparently deleted breakpoint #%d?",
6886                b->number);
6887       return 0;
6888     case bp_breakpoint:
6889     case bp_hardware_breakpoint:
6890     case bp_catch_load:
6891     case bp_catch_unload:
6892       if (b->addr_string == NULL)
6893         {
6894           /* Anything without a string can't be re-set. */
6895           delete_breakpoint (b);
6896           return 0;
6897         }
6898       /* HACK: cagney/2001-11-11: kettenis/2001-11-11: MarkK wrote:
6899
6900          ``And a hack it is, although Apple's Darwin version of GDB
6901          contains an almost identical hack to implement a "future
6902          break" command.  It seems to work in many real world cases,
6903          but it is easy to come up with a test case where the patch
6904          doesn't help at all.''
6905
6906          ``It seems that the way GDB implements breakpoints - in -
6907          shared - libraries was designed for a.out shared library
6908          systems (SunOS 4) where shared libraries were loaded at a
6909          fixed address in memory.  Since ELF shared libraries can (and
6910          will) be loaded at any address in memory, things break.
6911          Fixing this is not trivial.  Therefore, I'm not sure whether
6912          we should add this hack to the branch only.  I cannot
6913          guarantee that things will be fixed on the trunk in the near
6914          future.''
6915
6916          In case we have a problem, disable this breakpoint.  We'll
6917          restore its status if we succeed.  Don't disable a
6918          shlib_disabled breakpoint though.  There's a fair chance we
6919          can't re-set it if the shared library it's in hasn't been
6920          loaded yet.  */
6921       save_enable = b->enable_state;
6922       if (b->enable_state != bp_shlib_disabled)
6923         b->enable_state = bp_disabled;
6924
6925       set_language (b->language);
6926       input_radix = b->input_radix;
6927       s = b->addr_string;
6928       sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, (char ***) NULL);
6929       for (i = 0; i < sals.nelts; i++)
6930         {
6931           resolve_sal_pc (&sals.sals[i]);
6932
6933           /* Reparse conditions, they might contain references to the
6934              old symtab.  */
6935           if (b->cond_string != NULL)
6936             {
6937               s = b->cond_string;
6938               if (b->cond)
6939                 xfree (b->cond);
6940               b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
6941             }
6942
6943           /* We need to re-set the breakpoint if the address changes... */
6944           if (b->address != sals.sals[i].pc
6945           /* ...or new and old breakpoints both have source files, and
6946              the source file name or the line number changes...  */
6947               || (b->source_file != NULL
6948                   && sals.sals[i].symtab != NULL
6949                   && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
6950                       || b->line_number != sals.sals[i].line)
6951               )
6952           /* ...or we switch between having a source file and not having
6953              one.  */
6954               || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
6955             )
6956             {
6957               if (b->source_file != NULL)
6958                 xfree (b->source_file);
6959               if (sals.sals[i].symtab == NULL)
6960                 b->source_file = NULL;
6961               else
6962                 b->source_file =
6963                   savestring (sals.sals[i].symtab->filename,
6964                               strlen (sals.sals[i].symtab->filename));
6965               b->line_number = sals.sals[i].line;
6966               b->address = sals.sals[i].pc;
6967
6968               /* Used to check for duplicates here, but that can
6969                  cause trouble, as it doesn't check for disabled
6970                  breakpoints. */
6971
6972               mention (b);
6973
6974               /* Might be better to do this just once per breakpoint_re_set,
6975                  rather than once for every breakpoint.  */
6976               breakpoints_changed ();
6977             }
6978           b->section = sals.sals[i].section;
6979           b->enable_state = save_enable;        /* Restore it, this worked. */
6980
6981
6982           /* Now that this is re-enabled, check_duplicates
6983              can be used. */
6984           check_duplicates (b);
6985
6986         }
6987       xfree (sals.sals);
6988       break;
6989
6990     case bp_watchpoint:
6991     case bp_hardware_watchpoint:
6992     case bp_read_watchpoint:
6993     case bp_access_watchpoint:
6994       innermost_block = NULL;
6995       /* The issue arises of what context to evaluate this in.  The
6996          same one as when it was set, but what does that mean when
6997          symbols have been re-read?  We could save the filename and
6998          functionname, but if the context is more local than that, the
6999          best we could do would be something like how many levels deep
7000          and which index at that particular level, but that's going to
7001          be less stable than filenames or function names.  */
7002
7003       /* So for now, just use a global context.  */
7004       if (b->exp)
7005         xfree (b->exp);
7006       b->exp = parse_expression (b->exp_string);
7007       b->exp_valid_block = innermost_block;
7008       mark = value_mark ();
7009       if (b->val)
7010         value_free (b->val);
7011       b->val = evaluate_expression (b->exp);
7012       release_value (b->val);
7013       if (VALUE_LAZY (b->val))
7014         value_fetch_lazy (b->val);
7015
7016       if (b->cond_string != NULL)
7017         {
7018           s = b->cond_string;
7019           if (b->cond)
7020             xfree (b->cond);
7021           b->cond = parse_exp_1 (&s, (struct block *) 0, 0);
7022         }
7023       if (b->enable_state == bp_enabled)
7024         mention (b);
7025       value_free_to_mark (mark);
7026       break;
7027     case bp_catch_catch:
7028     case bp_catch_throw:
7029       break;
7030       /* We needn't really do anything to reset these, since the mask
7031          that requests them is unaffected by e.g., new libraries being
7032          loaded. */
7033     case bp_catch_fork:
7034     case bp_catch_vfork:
7035     case bp_catch_exec:
7036       break;
7037
7038     default:
7039       printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
7040       /* fall through */
7041       /* Delete longjmp and overlay event breakpoints; they will be
7042          reset later by breakpoint_re_set.  */
7043     case bp_longjmp:
7044     case bp_longjmp_resume:
7045     case bp_overlay_event:
7046       delete_breakpoint (b);
7047       break;
7048
7049       /* This breakpoint is special, it's set up when the inferior
7050          starts and we really don't want to touch it.  */
7051     case bp_shlib_event:
7052
7053       /* Like bp_shlib_event, this breakpoint type is special.
7054          Once it is set up, we do not want to touch it.  */
7055     case bp_thread_event:
7056
7057       /* Keep temporary breakpoints, which can be encountered when we step
7058          over a dlopen call and SOLIB_ADD is resetting the breakpoints.
7059          Otherwise these should have been blown away via the cleanup chain
7060          or by breakpoint_init_inferior when we rerun the executable.  */
7061     case bp_until:
7062     case bp_finish:
7063     case bp_watchpoint_scope:
7064     case bp_call_dummy:
7065     case bp_step_resume:
7066       break;
7067     }
7068
7069   return 0;
7070 }
7071
7072 /* Re-set all breakpoints after symbols have been re-loaded.  */
7073 void
7074 breakpoint_re_set (void)
7075 {
7076   struct breakpoint *b, *temp;
7077   enum language save_language;
7078   int save_input_radix;
7079   static char message1[] = "Error in re-setting breakpoint %d:\n";
7080   char message[sizeof (message1) + 30 /* slop */ ];
7081
7082   save_language = current_language->la_language;
7083   save_input_radix = input_radix;
7084   ALL_BREAKPOINTS_SAFE (b, temp)
7085   {
7086     /* Format possible error msg */
7087     sprintf (message, message1, b->number);
7088     catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
7089   }
7090   set_language (save_language);
7091   input_radix = save_input_radix;
7092
7093   if (GET_LONGJMP_TARGET_P ())
7094     {
7095       create_longjmp_breakpoint ("longjmp");
7096       create_longjmp_breakpoint ("_longjmp");
7097       create_longjmp_breakpoint ("siglongjmp");
7098       create_longjmp_breakpoint ("_siglongjmp");
7099       create_longjmp_breakpoint (NULL);
7100     }
7101   
7102   create_overlay_event_breakpoint ("_ovly_debug_event");
7103 }
7104 \f
7105 /* Reset the thread number of this breakpoint:
7106
7107    - If the breakpoint is for all threads, leave it as-is.
7108    - Else, reset it to the current thread for inferior_ptid. */
7109 void
7110 breakpoint_re_set_thread (struct breakpoint *b)
7111 {
7112   if (b->thread != -1)
7113     {
7114       if (in_thread_list (inferior_ptid))
7115         b->thread = pid_to_thread_id (inferior_ptid);
7116     }
7117 }
7118
7119 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
7120    If from_tty is nonzero, it prints a message to that effect,
7121    which ends with a period (no newline).  */
7122
7123 void
7124 set_ignore_count (int bptnum, int count, int from_tty)
7125 {
7126   register struct breakpoint *b;
7127
7128   if (count < 0)
7129     count = 0;
7130
7131   ALL_BREAKPOINTS (b)
7132     if (b->number == bptnum)
7133     {
7134       b->ignore_count = count;
7135       if (from_tty)
7136         {
7137           if (count == 0)
7138             printf_filtered ("Will stop next time breakpoint %d is reached.",
7139                              bptnum);
7140           else if (count == 1)
7141             printf_filtered ("Will ignore next crossing of breakpoint %d.",
7142                              bptnum);
7143           else
7144             printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
7145                              count, bptnum);
7146         }
7147       breakpoints_changed ();
7148       breakpoint_modify_event (b->number);
7149       return;
7150     }
7151
7152   error ("No breakpoint number %d.", bptnum);
7153 }
7154
7155 /* Clear the ignore counts of all breakpoints.  */
7156 void
7157 breakpoint_clear_ignore_counts (void)
7158 {
7159   struct breakpoint *b;
7160
7161   ALL_BREAKPOINTS (b)
7162     b->ignore_count = 0;
7163 }
7164
7165 /* Command to set ignore-count of breakpoint N to COUNT.  */
7166
7167 static void
7168 ignore_command (char *args, int from_tty)
7169 {
7170   char *p = args;
7171   register int num;
7172
7173   if (p == 0)
7174     error_no_arg ("a breakpoint number");
7175
7176   num = get_number (&p);
7177   if (num == 0)
7178     error ("bad breakpoint number: '%s'", args);
7179   if (*p == 0)
7180     error ("Second argument (specified ignore-count) is missing.");
7181
7182   set_ignore_count (num,
7183                     longest_to_int (value_as_long (parse_and_eval (p))),
7184                     from_tty);
7185   if (from_tty)
7186     printf_filtered ("\n");
7187 }
7188 \f
7189 /* Call FUNCTION on each of the breakpoints
7190    whose numbers are given in ARGS.  */
7191
7192 static void
7193 map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *))
7194 {
7195   register char *p = args;
7196   char *p1;
7197   register int num;
7198   register struct breakpoint *b, *tmp;
7199   int match;
7200
7201   if (p == 0)
7202     error_no_arg ("one or more breakpoint numbers");
7203
7204   while (*p)
7205     {
7206       match = 0;
7207       p1 = p;
7208
7209       num = get_number_or_range (&p1);
7210       if (num == 0)
7211         {
7212           warning ("bad breakpoint number at or near '%s'", p);
7213         }
7214       else
7215         {
7216           ALL_BREAKPOINTS_SAFE (b, tmp)
7217             if (b->number == num)
7218               {
7219                 struct breakpoint *related_breakpoint = b->related_breakpoint;
7220                 match = 1;
7221                 function (b);
7222                 if (related_breakpoint)
7223                   function (related_breakpoint);
7224                 break;
7225               }
7226           if (match == 0)
7227             printf_unfiltered ("No breakpoint number %d.\n", num);
7228         }
7229       p = p1;
7230     }
7231 }
7232
7233 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
7234    If from_tty is nonzero, it prints a message to that effect,
7235    which ends with a period (no newline).  */
7236
7237 void
7238 disable_breakpoint (struct breakpoint *bpt)
7239 {
7240   /* Never disable a watchpoint scope breakpoint; we want to
7241      hit them when we leave scope so we can delete both the
7242      watchpoint and its scope breakpoint at that time.  */
7243   if (bpt->type == bp_watchpoint_scope)
7244     return;
7245
7246   /* You can't disable permanent breakpoints.  */
7247   if (bpt->enable_state == bp_permanent)
7248     return;
7249
7250   bpt->enable_state = bp_disabled;
7251
7252   check_duplicates (bpt);
7253
7254   if (modify_breakpoint_hook)
7255     modify_breakpoint_hook (bpt);
7256   breakpoint_modify_event (bpt->number);
7257 }
7258
7259 /* ARGSUSED */
7260 static void
7261 disable_command (char *args, int from_tty)
7262 {
7263   register struct breakpoint *bpt;
7264   if (args == 0)
7265     ALL_BREAKPOINTS (bpt)
7266       switch (bpt->type)
7267       {
7268       case bp_none:
7269         warning ("attempted to disable apparently deleted breakpoint #%d?",
7270                  bpt->number);
7271         continue;
7272       case bp_breakpoint:
7273       case bp_catch_load:
7274       case bp_catch_unload:
7275       case bp_catch_fork:
7276       case bp_catch_vfork:
7277       case bp_catch_exec:
7278       case bp_catch_catch:
7279       case bp_catch_throw:
7280       case bp_hardware_breakpoint:
7281       case bp_watchpoint:
7282       case bp_hardware_watchpoint:
7283       case bp_read_watchpoint:
7284       case bp_access_watchpoint:
7285         disable_breakpoint (bpt);
7286       default:
7287         continue;
7288       }
7289   else
7290     map_breakpoint_numbers (args, disable_breakpoint);
7291 }
7292
7293 static void
7294 do_enable_breakpoint (struct breakpoint *bpt, enum bpdisp disposition)
7295 {
7296   struct frame_info *save_selected_frame = NULL;
7297   int save_selected_frame_level = -1;
7298   int target_resources_ok, other_type_used;
7299   struct value *mark;
7300
7301   if (bpt->type == bp_hardware_breakpoint)
7302     {
7303       int i;
7304       i = hw_breakpoint_used_count ();
7305       target_resources_ok = 
7306         TARGET_CAN_USE_HARDWARE_WATCHPOINT (bp_hardware_breakpoint, 
7307                                             i + 1, 0);
7308       if (target_resources_ok == 0)
7309         error ("No hardware breakpoint support in the target.");
7310       else if (target_resources_ok < 0)
7311         error ("Hardware breakpoints used exceeds limit.");
7312     }
7313
7314   if (bpt->enable_state != bp_permanent)
7315     bpt->enable_state = bp_enabled;
7316   bpt->disposition = disposition;
7317   check_duplicates (bpt);
7318   breakpoints_changed ();
7319
7320   if (bpt->type == bp_watchpoint || 
7321       bpt->type == bp_hardware_watchpoint ||
7322       bpt->type == bp_read_watchpoint || 
7323       bpt->type == bp_access_watchpoint)
7324     {
7325       if (bpt->exp_valid_block != NULL)
7326         {
7327           struct frame_info *fr =
7328           fr = frame_find_by_id (bpt->watchpoint_frame);
7329           if (fr == NULL)
7330             {
7331               printf_filtered ("\
7332 Cannot enable watchpoint %d because the block in which its expression\n\
7333 is valid is not currently in scope.\n", bpt->number);
7334               bpt->enable_state = bp_disabled;
7335               return;
7336             }
7337
7338           save_selected_frame = selected_frame;
7339           save_selected_frame_level = frame_relative_level (selected_frame);
7340           select_frame (fr);
7341         }
7342
7343       value_free (bpt->val);
7344       mark = value_mark ();
7345       bpt->val = evaluate_expression (bpt->exp);
7346       release_value (bpt->val);
7347       if (VALUE_LAZY (bpt->val))
7348         value_fetch_lazy (bpt->val);
7349
7350       if (bpt->type == bp_hardware_watchpoint ||
7351           bpt->type == bp_read_watchpoint ||
7352           bpt->type == bp_access_watchpoint)
7353         {
7354           int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
7355           int mem_cnt = can_use_hardware_watchpoint (bpt->val);
7356
7357           /* Hack around 'unused var' error for some targets here */
7358           (void) mem_cnt, i;
7359           target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
7360                                    bpt->type, i + mem_cnt, other_type_used);
7361           /* we can consider of type is bp_hardware_watchpoint, convert to 
7362              bp_watchpoint in the following condition */
7363           if (target_resources_ok < 0)
7364             {
7365               printf_filtered ("\
7366 Cannot enable watchpoint %d because target watch resources\n\
7367 have been allocated for other watchpoints.\n", bpt->number);
7368               bpt->enable_state = bp_disabled;
7369               value_free_to_mark (mark);
7370               return;
7371             }
7372         }
7373
7374       if (save_selected_frame_level >= 0)
7375         select_frame (save_selected_frame);
7376       value_free_to_mark (mark);
7377     }
7378   if (modify_breakpoint_hook)
7379     modify_breakpoint_hook (bpt);
7380   breakpoint_modify_event (bpt->number);
7381 }
7382
7383 void
7384 enable_breakpoint (struct breakpoint *bpt)
7385 {
7386   do_enable_breakpoint (bpt, bpt->disposition);
7387 }
7388
7389 /* The enable command enables the specified breakpoints (or all defined
7390    breakpoints) so they once again become (or continue to be) effective
7391    in stopping the inferior. */
7392
7393 /* ARGSUSED */
7394 static void
7395 enable_command (char *args, int from_tty)
7396 {
7397   register struct breakpoint *bpt;
7398   if (args == 0)
7399     ALL_BREAKPOINTS (bpt)
7400       switch (bpt->type)
7401       {
7402       case bp_none:
7403         warning ("attempted to enable apparently deleted breakpoint #%d?",
7404                  bpt->number);
7405         continue;
7406       case bp_breakpoint:
7407       case bp_catch_load:
7408       case bp_catch_unload:
7409       case bp_catch_fork:
7410       case bp_catch_vfork:
7411       case bp_catch_exec:
7412       case bp_catch_catch:
7413       case bp_catch_throw:
7414       case bp_hardware_breakpoint:
7415       case bp_watchpoint:
7416       case bp_hardware_watchpoint:
7417       case bp_read_watchpoint:
7418       case bp_access_watchpoint:
7419         enable_breakpoint (bpt);
7420       default:
7421         continue;
7422       }
7423   else
7424     map_breakpoint_numbers (args, enable_breakpoint);
7425 }
7426
7427 static void
7428 enable_once_breakpoint (struct breakpoint *bpt)
7429 {
7430   do_enable_breakpoint (bpt, disp_disable);
7431 }
7432
7433 /* ARGSUSED */
7434 static void
7435 enable_once_command (char *args, int from_tty)
7436 {
7437   map_breakpoint_numbers (args, enable_once_breakpoint);
7438 }
7439
7440 static void
7441 enable_delete_breakpoint (struct breakpoint *bpt)
7442 {
7443   do_enable_breakpoint (bpt, disp_del);
7444 }
7445
7446 /* ARGSUSED */
7447 static void
7448 enable_delete_command (char *args, int from_tty)
7449 {
7450   map_breakpoint_numbers (args, enable_delete_breakpoint);
7451 }
7452 \f
7453 /* Use default_breakpoint_'s, or nothing if they aren't valid.  */
7454
7455 struct symtabs_and_lines
7456 decode_line_spec_1 (char *string, int funfirstline)
7457 {
7458   struct symtabs_and_lines sals;
7459   if (string == 0)
7460     error ("Empty line specification.");
7461   if (default_breakpoint_valid)
7462     sals = decode_line_1 (&string, funfirstline,
7463                           default_breakpoint_symtab,
7464                           default_breakpoint_line,
7465                           (char ***) NULL);
7466   else
7467     sals = decode_line_1 (&string, funfirstline,
7468                           (struct symtab *) NULL, 0, (char ***) NULL);
7469   if (*string)
7470     error ("Junk at end of line specification: %s", string);
7471   return sals;
7472 }
7473 \f
7474 void
7475 _initialize_breakpoint (void)
7476 {
7477   struct cmd_list_element *c;
7478
7479   breakpoint_chain = 0;
7480   /* Don't bother to call set_breakpoint_count.  $bpnum isn't useful
7481      before a breakpoint is set.  */
7482   breakpoint_count = 0;
7483
7484   add_com ("ignore", class_breakpoint, ignore_command,
7485            "Set ignore-count of breakpoint number N to COUNT.\n\
7486 Usage is `ignore N COUNT'.");
7487   if (xdb_commands)
7488     add_com_alias ("bc", "ignore", class_breakpoint, 1);
7489
7490   add_com ("commands", class_breakpoint, commands_command,
7491            "Set commands to be executed when a breakpoint is hit.\n\
7492 Give breakpoint number as argument after \"commands\".\n\
7493 With no argument, the targeted breakpoint is the last one set.\n\
7494 The commands themselves follow starting on the next line.\n\
7495 Type a line containing \"end\" to indicate the end of them.\n\
7496 Give \"silent\" as the first line to make the breakpoint silent;\n\
7497 then no output is printed when it is hit, except what the commands print.");
7498
7499   add_com ("condition", class_breakpoint, condition_command,
7500            "Specify breakpoint number N to break only if COND is true.\n\
7501 Usage is `condition N COND', where N is an integer and COND is an\n\
7502 expression to be evaluated whenever breakpoint N is reached.");
7503
7504   c = add_com ("tbreak", class_breakpoint, tbreak_command,
7505                "Set a temporary breakpoint.  Args like \"break\" command.\n\
7506 Like \"break\" except the breakpoint is only temporary,\n\
7507 so it will be deleted when hit.  Equivalent to \"break\" followed\n\
7508 by using \"enable delete\" on the breakpoint number.");
7509   set_cmd_completer (c, location_completer);
7510
7511   c = add_com ("hbreak", class_breakpoint, hbreak_command,
7512                "Set a hardware assisted  breakpoint. Args like \"break\" command.\n\
7513 Like \"break\" except the breakpoint requires hardware support,\n\
7514 some target hardware may not have this support.");
7515   set_cmd_completer (c, location_completer);
7516
7517   c = add_com ("thbreak", class_breakpoint, thbreak_command,
7518                "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
7519 Like \"hbreak\" except the breakpoint is only temporary,\n\
7520 so it will be deleted when hit.");
7521   set_cmd_completer (c, location_completer);
7522
7523   add_prefix_cmd ("enable", class_breakpoint, enable_command,
7524                   "Enable some breakpoints.\n\
7525 Give breakpoint numbers (separated by spaces) as arguments.\n\
7526 With no subcommand, breakpoints are enabled until you command otherwise.\n\
7527 This is used to cancel the effect of the \"disable\" command.\n\
7528 With a subcommand you can enable temporarily.",
7529                   &enablelist, "enable ", 1, &cmdlist);
7530   if (xdb_commands)
7531     add_com ("ab", class_breakpoint, enable_command,
7532              "Enable some breakpoints.\n\
7533 Give breakpoint numbers (separated by spaces) as arguments.\n\
7534 With no subcommand, breakpoints are enabled until you command otherwise.\n\
7535 This is used to cancel the effect of the \"disable\" command.\n\
7536 With a subcommand you can enable temporarily.");
7537
7538   add_com_alias ("en", "enable", class_breakpoint, 1);
7539
7540   add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
7541                          "Enable some breakpoints.\n\
7542 Give breakpoint numbers (separated by spaces) as arguments.\n\
7543 This is used to cancel the effect of the \"disable\" command.\n\
7544 May be abbreviated to simply \"enable\".\n",
7545                    &enablebreaklist, "enable breakpoints ", 1, &enablelist);
7546
7547   add_cmd ("once", no_class, enable_once_command,
7548            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
7549 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
7550            &enablebreaklist);
7551
7552   add_cmd ("delete", no_class, enable_delete_command,
7553            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
7554 If a breakpoint is hit while enabled in this fashion, it is deleted.",
7555            &enablebreaklist);
7556
7557   add_cmd ("delete", no_class, enable_delete_command,
7558            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
7559 If a breakpoint is hit while enabled in this fashion, it is deleted.",
7560            &enablelist);
7561
7562   add_cmd ("once", no_class, enable_once_command,
7563            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
7564 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
7565            &enablelist);
7566
7567   add_prefix_cmd ("disable", class_breakpoint, disable_command,
7568                   "Disable some breakpoints.\n\
7569 Arguments are breakpoint numbers with spaces in between.\n\
7570 To disable all breakpoints, give no argument.\n\
7571 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
7572                   &disablelist, "disable ", 1, &cmdlist);
7573   add_com_alias ("dis", "disable", class_breakpoint, 1);
7574   add_com_alias ("disa", "disable", class_breakpoint, 1);
7575   if (xdb_commands)
7576     add_com ("sb", class_breakpoint, 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.");
7581
7582   add_cmd ("breakpoints", class_alias, disable_command,
7583            "Disable some breakpoints.\n\
7584 Arguments are breakpoint numbers with spaces in between.\n\
7585 To disable all breakpoints, give no argument.\n\
7586 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
7587 This command may be abbreviated \"disable\".",
7588            &disablelist);
7589
7590   add_prefix_cmd ("delete", class_breakpoint, delete_command,
7591                   "Delete some breakpoints or auto-display expressions.\n\
7592 Arguments are breakpoint numbers with spaces in between.\n\
7593 To delete all breakpoints, give no argument.\n\
7594 \n\
7595 Also a prefix command for deletion of other GDB objects.\n\
7596 The \"unset\" command is also an alias for \"delete\".",
7597                   &deletelist, "delete ", 1, &cmdlist);
7598   add_com_alias ("d", "delete", class_breakpoint, 1);
7599   if (xdb_commands)
7600     add_com ("db", class_breakpoint, delete_command,
7601              "Delete some breakpoints.\n\
7602 Arguments are breakpoint numbers with spaces in between.\n\
7603 To delete all breakpoints, give no argument.\n");
7604
7605   add_cmd ("breakpoints", class_alias, delete_command,
7606            "Delete some breakpoints or auto-display expressions.\n\
7607 Arguments are breakpoint numbers with spaces in between.\n\
7608 To delete all breakpoints, give no argument.\n\
7609 This command may be abbreviated \"delete\".",
7610            &deletelist);
7611
7612   add_com ("clear", class_breakpoint, clear_command,
7613            concat ("Clear breakpoint at specified line or function.\n\
7614 Argument may be line number, function name, or \"*\" and an address.\n\
7615 If line number is specified, all breakpoints in that line are cleared.\n\
7616 If function is specified, breakpoints at beginning of function are cleared.\n\
7617 If an address is specified, breakpoints at that address are cleared.\n\n",
7618                    "With no argument, clears all breakpoints in the line that the selected frame\n\
7619 is executing in.\n\
7620 \n\
7621 See also the \"delete\" command which clears breakpoints by number.", NULL));
7622
7623   c = add_com ("break", class_breakpoint, break_command,
7624                concat ("Set breakpoint at specified line or function.\n\
7625 Argument may be line number, function name, or \"*\" and an address.\n\
7626 If line number is specified, break at start of code for that line.\n\
7627 If function is specified, break at start of code for that function.\n\
7628 If an address is specified, break at that exact address.\n",
7629                    "With no arg, uses current execution address of selected stack frame.\n\
7630 This is useful for breaking on return to a stack frame.\n\
7631 \n\
7632 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
7633 \n\
7634 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
7635   set_cmd_completer (c, location_completer);
7636
7637   add_com_alias ("b", "break", class_run, 1);
7638   add_com_alias ("br", "break", class_run, 1);
7639   add_com_alias ("bre", "break", class_run, 1);
7640   add_com_alias ("brea", "break", class_run, 1);
7641
7642  if (xdb_commands)
7643     {
7644       add_com_alias ("ba", "break", class_breakpoint, 1);
7645       add_com_alias ("bu", "ubreak", class_breakpoint, 1);
7646     }
7647
7648   if (dbx_commands)
7649     {
7650       add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command,
7651         "Break in function/address or break at a line in the current file.",
7652                              &stoplist, "stop ", 1, &cmdlist);
7653       add_cmd ("in", class_breakpoint, stopin_command,
7654                "Break in function or address.\n", &stoplist);
7655       add_cmd ("at", class_breakpoint, stopat_command,
7656                "Break at a line in the current file.\n", &stoplist);
7657       add_com ("status", class_info, breakpoints_info,
7658                concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7659 The \"Type\" column indicates one of:\n\
7660 \tbreakpoint     - normal breakpoint\n\
7661 \twatchpoint     - watchpoint\n\
7662 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7663 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
7664 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
7665 address and file/line number respectively.\n\n",
7666                        "Convenience variable \"$_\" and default examine address for \"x\"\n\
7667 are set to the address of the last breakpoint listed.\n\n\
7668 Convenience variable \"$bpnum\" contains the number of the last\n\
7669 breakpoint set.", NULL));
7670     }
7671
7672   add_info ("breakpoints", breakpoints_info,
7673             concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7674 The \"Type\" column indicates one of:\n\
7675 \tbreakpoint     - normal breakpoint\n\
7676 \twatchpoint     - watchpoint\n\
7677 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7678 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
7679 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
7680 address and file/line number respectively.\n\n",
7681                     "Convenience variable \"$_\" and default examine address for \"x\"\n\
7682 are set to the address of the last breakpoint listed.\n\n\
7683 Convenience variable \"$bpnum\" contains the number of the last\n\
7684 breakpoint set.", NULL));
7685
7686   if (xdb_commands)
7687     add_com ("lb", class_breakpoint, breakpoints_info,
7688              concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7689 The \"Type\" column indicates one of:\n\
7690 \tbreakpoint     - normal breakpoint\n\
7691 \twatchpoint     - watchpoint\n\
7692 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7693 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
7694 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
7695 address and file/line number respectively.\n\n",
7696                      "Convenience variable \"$_\" and default examine address for \"x\"\n\
7697 are set to the address of the last breakpoint listed.\n\n\
7698 Convenience variable \"$bpnum\" contains the number of the last\n\
7699 breakpoint set.", NULL));
7700
7701   add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
7702            concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
7703 The \"Type\" column indicates one of:\n\
7704 \tbreakpoint     - normal breakpoint\n\
7705 \twatchpoint     - watchpoint\n\
7706 \tlongjmp        - internal breakpoint used to step through longjmp()\n\
7707 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
7708 \tuntil          - internal breakpoint used by the \"until\" command\n\
7709 \tfinish         - internal breakpoint used by the \"finish\" command\n",
7710                    "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7711 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
7712 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
7713 address and file/line number respectively.\n\n",
7714                    "Convenience variable \"$_\" and default examine address for \"x\"\n\
7715 are set to the address of the last breakpoint listed.\n\n\
7716 Convenience variable \"$bpnum\" contains the number of the last\n\
7717 breakpoint set.", NULL),
7718            &maintenanceinfolist);
7719
7720   add_com ("catch", class_breakpoint, catch_command,
7721            "Set catchpoints to catch events.\n\
7722 Raised signals may be caught:\n\
7723 \tcatch signal              - all signals\n\
7724 \tcatch signal <signame>    - a particular signal\n\
7725 Raised exceptions may be caught:\n\
7726 \tcatch throw               - all exceptions, when thrown\n\
7727 \tcatch throw <exceptname>  - a particular exception, when thrown\n\
7728 \tcatch catch               - all exceptions, when caught\n\
7729 \tcatch catch <exceptname>  - a particular exception, when caught\n\
7730 Thread or process events may be caught:\n\
7731 \tcatch thread_start        - any threads, just after creation\n\
7732 \tcatch thread_exit         - any threads, just before expiration\n\
7733 \tcatch thread_join         - any threads, just after joins\n\
7734 Process events may be caught:\n\
7735 \tcatch start               - any processes, just after creation\n\
7736 \tcatch exit                - any processes, just before expiration\n\
7737 \tcatch fork                - calls to fork()\n\
7738 \tcatch vfork               - calls to vfork()\n\
7739 \tcatch exec                - calls to exec()\n\
7740 Dynamically-linked library events may be caught:\n\
7741 \tcatch load                - loads of any library\n\
7742 \tcatch load <libname>      - loads of a particular library\n\
7743 \tcatch unload              - unloads of any library\n\
7744 \tcatch unload <libname>    - unloads of a particular library\n\
7745 The act of your program's execution stopping may also be caught:\n\
7746 \tcatch stop\n\n\
7747 C++ exceptions may be caught:\n\
7748 \tcatch throw               - all exceptions, when thrown\n\
7749 \tcatch catch               - all exceptions, when caught\n\
7750 \n\
7751 Do \"help set follow-fork-mode\" for info on debugging your program\n\
7752 after a fork or vfork is caught.\n\n\
7753 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
7754
7755   add_com ("tcatch", class_breakpoint, tcatch_command,
7756            "Set temporary catchpoints to catch events.\n\
7757 Args like \"catch\" command.\n\
7758 Like \"catch\" except the catchpoint is only temporary,\n\
7759 so it will be deleted when hit.  Equivalent to \"catch\" followed\n\
7760 by using \"enable delete\" on the catchpoint number.");
7761
7762   c = add_com ("watch", class_breakpoint, watch_command,
7763                "Set a watchpoint for an expression.\n\
7764 A watchpoint stops execution of your program whenever the value of\n\
7765 an expression changes.");
7766   set_cmd_completer (c, location_completer);
7767
7768   c = add_com ("rwatch", class_breakpoint, rwatch_command,
7769                "Set a read watchpoint for an expression.\n\
7770 A watchpoint stops execution of your program whenever the value of\n\
7771 an expression is read.");
7772   set_cmd_completer (c, location_completer);
7773
7774   c = add_com ("awatch", class_breakpoint, awatch_command,
7775                "Set a watchpoint for an expression.\n\
7776 A watchpoint stops execution of your program whenever the value of\n\
7777 an expression is either read or written.");
7778   set_cmd_completer (c, location_completer);
7779
7780   add_info ("watchpoints", breakpoints_info,
7781             "Synonym for ``info breakpoints''.");
7782
7783
7784   c = add_set_cmd ("can-use-hw-watchpoints", class_support, var_zinteger,
7785                    (char *) &can_use_hw_watchpoints,
7786                    "Set debugger's willingness to use watchpoint hardware.\n\
7787 If zero, gdb will not use hardware for new watchpoints, even if\n\
7788 such is available.  (However, any hardware watchpoints that were\n\
7789 created before setting this to nonzero, will continue to use watchpoint\n\
7790 hardware.)",
7791                    &setlist);
7792   add_show_from_set (c, &showlist);
7793
7794   can_use_hw_watchpoints = 1;
7795 }