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