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