OSDN Git Service

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