OSDN Git Service

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