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