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