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