OSDN Git Service

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