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