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