OSDN Git Service

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