OSDN Git Service

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