OSDN Git Service

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