* breakpoint.c (TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT): Delete
[external/binutils.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2
3    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
4    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23
24 #include "defs.h"
25 #include <ctype.h>
26 #include "symtab.h"
27 #include "frame.h"
28 #include "breakpoint.h"
29 #include "gdbtypes.h"
30 #include "expression.h"
31 #include "gdbcore.h"
32 #include "gdbcmd.h"
33 #include "value.h"
34 #include "command.h"
35 #include "inferior.h"
36 #include "gdbthread.h"
37 #include "target.h"
38 #include "language.h"
39 #include "gdb_string.h"
40 #include "demangle.h"
41 #include "annotate.h"
42 #include "symfile.h"
43 #include "objfiles.h"
44 #include "source.h"
45 #include "linespec.h"
46 #include "completer.h"
47 #include "gdb.h"
48 #include "ui-out.h"
49 #include "cli/cli-script.h"
50 #include "gdb_assert.h"
51 #include "block.h"
52
53 #include "gdb-events.h"
54
55 /* Prototypes for local functions. */
56
57 static void until_break_command_continuation (struct continuation_arg *arg);
58
59 static void catch_command_1 (char *, int, int);
60
61 static void enable_delete_command (char *, int);
62
63 static void enable_delete_breakpoint (struct breakpoint *);
64
65 static void enable_once_command (char *, int);
66
67 static void enable_once_breakpoint (struct breakpoint *);
68
69 static void disable_command (char *, int);
70
71 static void enable_command (char *, int);
72
73 static void map_breakpoint_numbers (char *, void (*)(struct breakpoint *));
74
75 static void ignore_command (char *, int);
76
77 static int breakpoint_re_set_one (void *);
78
79 static void clear_command (char *, int);
80
81 static void catch_command (char *, int);
82
83 static void watch_command (char *, int);
84
85 static int can_use_hardware_watchpoint (struct value *);
86
87 extern void break_at_finish_command (char *, int);
88 extern void break_at_finish_at_depth_command (char *, int);
89
90 extern void tbreak_at_finish_command (char *, int);
91
92 static int break_command_1 (char *, int, int, struct breakpoint *);
93
94 static void mention (struct breakpoint *);
95
96 struct breakpoint *set_raw_breakpoint (struct symtab_and_line, enum bptype);
97
98 static void check_duplicates (struct breakpoint *);
99
100 static void breakpoint_adjustment_warning (CORE_ADDR, CORE_ADDR, int, int);
101
102 static CORE_ADDR adjust_breakpoint_address (CORE_ADDR bpaddr);
103
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_OK_FOR_HW_WATCHPOINT)
5898 #define TARGET_REGION_OK_FOR_HW_WATCHPOINT(ADDR,LEN) \
5899      (TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(LEN))
5900 #endif
5901
5902 static int
5903 can_use_hardware_watchpoint (struct value *v)
5904 {
5905   int found_memory_cnt = 0;
5906   struct value *head = v;
5907
5908   /* Did the user specifically forbid us to use hardware watchpoints? */
5909   if (!can_use_hw_watchpoints)
5910     return 0;
5911
5912   /* Make sure that the value of the expression depends only upon
5913      memory contents, and values computed from them within GDB.  If we
5914      find any register references or function calls, we can't use a
5915      hardware watchpoint.
5916
5917      The idea here is that evaluating an expression generates a series
5918      of values, one holding the value of every subexpression.  (The
5919      expression a*b+c has five subexpressions: a, b, a*b, c, and
5920      a*b+c.)  GDB's values hold almost enough information to establish
5921      the criteria given above --- they identify memory lvalues,
5922      register lvalues, computed values, etcetera.  So we can evaluate
5923      the expression, and then scan the chain of values that leaves
5924      behind to decide whether we can detect any possible change to the
5925      expression's final value using only hardware watchpoints.
5926
5927      However, I don't think that the values returned by inferior
5928      function calls are special in any way.  So this function may not
5929      notice that an expression involving an inferior function call
5930      can't be watched with hardware watchpoints.  FIXME.  */
5931   for (; v; v = v->next)
5932     {
5933       if (VALUE_LVAL (v) == lval_memory)
5934         {
5935           if (VALUE_LAZY (v))
5936             /* A lazy memory lvalue is one that GDB never needed to fetch;
5937                we either just used its address (e.g., `a' in `a.b') or
5938                we never needed it at all (e.g., `a' in `a,b').  */
5939             ;
5940           else
5941             {
5942               /* Ahh, memory we actually used!  Check if we can cover
5943                  it with hardware watchpoints.  */
5944               struct type *vtype = check_typedef (VALUE_TYPE (v));
5945
5946               /* We only watch structs and arrays if user asked for it
5947                  explicitly, never if they just happen to appear in a
5948                  middle of some value chain.  */
5949               if (v == head
5950                   || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
5951                       && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
5952                 {
5953                   CORE_ADDR vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
5954                   int       len   = TYPE_LENGTH (VALUE_TYPE (v));
5955
5956                   if (!TARGET_REGION_OK_FOR_HW_WATCHPOINT (vaddr, len))
5957                     return 0;
5958                   else
5959                     found_memory_cnt++;
5960                 }
5961             }
5962         }
5963       else if (v->lval != not_lval && v->modifiable == 0)
5964         return 0;       /* ??? What does this represent? */
5965       else if (v->lval == lval_register)
5966         return 0;       /* cannot watch a register with a HW watchpoint */
5967     }
5968
5969   /* The expression itself looks suitable for using a hardware
5970      watchpoint, but give the target machine a chance to reject it.  */
5971   return found_memory_cnt;
5972 }
5973
5974 void
5975 watch_command_wrapper (char *arg, int from_tty)
5976 {
5977   watch_command (arg, from_tty);
5978 }
5979
5980 static void
5981 watch_command (char *arg, int from_tty)
5982 {
5983   watch_command_1 (arg, hw_write, from_tty);
5984 }
5985
5986 void
5987 rwatch_command_wrapper (char *arg, int from_tty)
5988 {
5989   rwatch_command (arg, from_tty);
5990 }
5991
5992 static void
5993 rwatch_command (char *arg, int from_tty)
5994 {
5995   watch_command_1 (arg, hw_read, from_tty);
5996 }
5997
5998 void
5999 awatch_command_wrapper (char *arg, int from_tty)
6000 {
6001   awatch_command (arg, from_tty);
6002 }
6003
6004 static void
6005 awatch_command (char *arg, int from_tty)
6006 {
6007   watch_command_1 (arg, hw_access, from_tty);
6008 }
6009 \f
6010
6011 /* Helper routines for the until_command routine in infcmd.c.  Here
6012    because it uses the mechanisms of breakpoints.  */
6013
6014 /* This function is called by fetch_inferior_event via the
6015    cmd_continuation pointer, to complete the until command. It takes
6016    care of cleaning up the temporary breakpoints set up by the until
6017    command. */
6018 static void
6019 until_break_command_continuation (struct continuation_arg *arg)
6020 {
6021   struct cleanup *cleanups;
6022
6023   cleanups = (struct cleanup *) arg->data.pointer;
6024   do_exec_cleanups (cleanups);
6025 }
6026
6027 void
6028 until_break_command (char *arg, int from_tty, int anywhere)
6029 {
6030   struct symtabs_and_lines sals;
6031   struct symtab_and_line sal;
6032   struct frame_info *prev_frame = get_prev_frame (deprecated_selected_frame);
6033   struct breakpoint *breakpoint;
6034   struct cleanup *old_chain;
6035   struct continuation_arg *arg1;
6036
6037
6038   clear_proceed_status ();
6039
6040   /* Set a breakpoint where the user wants it and at return from
6041      this function */
6042
6043   if (default_breakpoint_valid)
6044     sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
6045                           default_breakpoint_line, (char ***) NULL, NULL);
6046   else
6047     sals = decode_line_1 (&arg, 1, (struct symtab *) NULL, 
6048                           0, (char ***) NULL, NULL);
6049
6050   if (sals.nelts != 1)
6051     error ("Couldn't get information on specified line.");
6052
6053   sal = sals.sals[0];
6054   xfree (sals.sals);    /* malloc'd, so freed */
6055
6056   if (*arg)
6057     error ("Junk at end of arguments.");
6058
6059   resolve_sal_pc (&sal);
6060
6061   if (anywhere)
6062     /* If the user told us to continue until a specified location,
6063        we don't specify a frame at which we need to stop.  */
6064     breakpoint = set_momentary_breakpoint (sal, null_frame_id, bp_until);
6065   else
6066     /* Otherwise, specify the current frame, because we want to stop only
6067        at the very same frame.  */
6068     breakpoint = set_momentary_breakpoint (sal,
6069                                            get_frame_id (deprecated_selected_frame),
6070                                            bp_until);
6071
6072   if (!event_loop_p || !target_can_async_p ())
6073     old_chain = make_cleanup_delete_breakpoint (breakpoint);
6074   else
6075     old_chain = make_exec_cleanup_delete_breakpoint (breakpoint);
6076
6077   /* If we are running asynchronously, and the target supports async
6078      execution, we are not waiting for the target to stop, in the call
6079      tp proceed, below. This means that we cannot delete the
6080      brekpoints until the target has actually stopped. The only place
6081      where we get a chance to do that is in fetch_inferior_event, so
6082      we must set things up for that. */
6083
6084   if (event_loop_p && target_can_async_p ())
6085     {
6086       /* In this case the arg for the continuation is just the point
6087          in the exec_cleanups chain from where to start doing
6088          cleanups, because all the continuation does is the cleanups in
6089          the exec_cleanup_chain. */
6090       arg1 =
6091         (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
6092       arg1->next         = NULL;
6093       arg1->data.pointer = old_chain;
6094
6095       add_continuation (until_break_command_continuation, arg1);
6096     }
6097
6098   /* Keep within the current frame, or in frames called by the current
6099      one.  */
6100   if (prev_frame)
6101     {
6102       sal = find_pc_line (get_frame_pc (prev_frame), 0);
6103       sal.pc = get_frame_pc (prev_frame);
6104       breakpoint = set_momentary_breakpoint (sal, get_frame_id (prev_frame),
6105                                              bp_until);
6106       if (!event_loop_p || !target_can_async_p ())
6107         make_cleanup_delete_breakpoint (breakpoint);
6108       else
6109         make_exec_cleanup_delete_breakpoint (breakpoint);
6110     }
6111
6112   proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
6113   /* Do the cleanups now, anly if we are not running asynchronously,
6114      of if we are, but the target is still synchronous. */
6115   if (!event_loop_p || !target_can_async_p ())
6116     do_cleanups (old_chain);
6117 }
6118
6119 static void
6120 ep_skip_leading_whitespace (char **s)
6121 {
6122   if ((s == NULL) || (*s == NULL))
6123     return;
6124   while (isspace (**s))
6125     *s += 1;
6126 }
6127
6128 /* This function examines a string, and attempts to find a token
6129    that might be an event name in the leading characters.  If a
6130    possible match is found, a pointer to the last character of
6131    the token is returned.  Else, NULL is returned. */
6132
6133 static char *
6134 ep_find_event_name_end (char *arg)
6135 {
6136   char *s = arg;
6137   char *event_name_end = NULL;
6138
6139   /* If we could depend upon the presense of strrpbrk, we'd use that... */
6140   if (arg == NULL)
6141     return NULL;
6142
6143   /* We break out of the loop when we find a token delimiter.
6144      Basically, we're looking for alphanumerics and underscores;
6145      anything else delimites the token. */
6146   while (*s != '\0')
6147     {
6148       if (!isalnum (*s) && (*s != '_'))
6149         break;
6150       event_name_end = s;
6151       s++;
6152     }
6153
6154   return event_name_end;
6155 }
6156
6157
6158 /* This function attempts to parse an optional "if <cond>" clause
6159    from the arg string.  If one is not found, it returns NULL.
6160
6161    Else, it returns a pointer to the condition string.  (It does not
6162    attempt to evaluate the string against a particular block.)  And,
6163    it updates arg to point to the first character following the parsed
6164    if clause in the arg string. */
6165
6166 static char *
6167 ep_parse_optional_if_clause (char **arg)
6168 {
6169   char *cond_string;
6170
6171   if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
6172     return NULL;
6173
6174   /* Skip the "if" keyword. */
6175   (*arg) += 2;
6176
6177   /* Skip any extra leading whitespace, and record the start of the
6178      condition string. */
6179   ep_skip_leading_whitespace (arg);
6180   cond_string = *arg;
6181
6182   /* Assume that the condition occupies the remainder of the arg string. */
6183   (*arg) += strlen (cond_string);
6184
6185   return cond_string;
6186 }
6187
6188 /* This function attempts to parse an optional filename from the arg
6189    string.  If one is not found, it returns NULL.
6190
6191    Else, it returns a pointer to the parsed filename.  (This function
6192    makes no attempt to verify that a file of that name exists, or is
6193    accessible.)  And, it updates arg to point to the first character
6194    following the parsed filename in the arg string.
6195
6196    Note that clients needing to preserve the returned filename for
6197    future access should copy it to their own buffers. */
6198 static char *
6199 ep_parse_optional_filename (char **arg)
6200 {
6201   static char filename[1024];
6202   char *arg_p = *arg;
6203   int i;
6204   char c;
6205
6206   if ((*arg_p == '\0') || isspace (*arg_p))
6207     return NULL;
6208
6209   for (i = 0;; i++)
6210     {
6211       c = *arg_p;
6212       if (isspace (c))
6213         c = '\0';
6214       filename[i] = c;
6215       if (c == '\0')
6216         break;
6217       arg_p++;
6218     }
6219   *arg = arg_p;
6220
6221   return filename;
6222 }
6223
6224 /* Commands to deal with catching events, such as signals, exceptions,
6225    process start/exit, etc.  */
6226
6227 typedef enum
6228 {
6229   catch_fork, catch_vfork
6230 }
6231 catch_fork_kind;
6232
6233 static void
6234 catch_fork_command_1 (catch_fork_kind fork_kind, char *arg, int tempflag,
6235                       int from_tty)
6236 {
6237   char *cond_string = NULL;
6238
6239   ep_skip_leading_whitespace (&arg);
6240
6241   /* The allowed syntax is:
6242      catch [v]fork
6243      catch [v]fork if <cond>
6244
6245      First, check if there's an if clause. */
6246   cond_string = ep_parse_optional_if_clause (&arg);
6247
6248   if ((*arg != '\0') && !isspace (*arg))
6249     error ("Junk at end of arguments.");
6250
6251   /* If this target supports it, create a fork or vfork catchpoint
6252      and enable reporting of such events. */
6253   switch (fork_kind)
6254     {
6255     case catch_fork:
6256       create_fork_event_catchpoint (tempflag, cond_string);
6257       break;
6258     case catch_vfork:
6259       create_vfork_event_catchpoint (tempflag, cond_string);
6260       break;
6261     default:
6262       error ("unsupported or unknown fork kind; cannot catch it");
6263       break;
6264     }
6265 }
6266
6267 static void
6268 catch_exec_command_1 (char *arg, int tempflag, int from_tty)
6269 {
6270   char *cond_string = NULL;
6271
6272   ep_skip_leading_whitespace (&arg);
6273
6274   /* The allowed syntax is:
6275      catch exec
6276      catch exec if <cond>
6277
6278      First, check if there's an if clause. */
6279   cond_string = ep_parse_optional_if_clause (&arg);
6280
6281   if ((*arg != '\0') && !isspace (*arg))
6282     error ("Junk at end of arguments.");
6283
6284   /* If this target supports it, create an exec catchpoint
6285      and enable reporting of such events. */
6286   create_exec_event_catchpoint (tempflag, cond_string);
6287 }
6288
6289 static void
6290 catch_load_command_1 (char *arg, int tempflag, int from_tty)
6291 {
6292   char *dll_pathname = NULL;
6293   char *cond_string = NULL;
6294
6295   ep_skip_leading_whitespace (&arg);
6296
6297   /* The allowed syntax is:
6298      catch load
6299      catch load if <cond>
6300      catch load <filename>
6301      catch load <filename> if <cond>
6302
6303      The user is not allowed to specify the <filename> after an
6304      if clause.
6305
6306      We'll ignore the pathological case of a file named "if".
6307
6308      First, check if there's an if clause.  If so, then there
6309      cannot be a filename. */
6310   cond_string = ep_parse_optional_if_clause (&arg);
6311
6312   /* If there was an if clause, then there cannot be a filename.
6313      Else, there might be a filename and an if clause. */
6314   if (cond_string == NULL)
6315     {
6316       dll_pathname = ep_parse_optional_filename (&arg);
6317       ep_skip_leading_whitespace (&arg);
6318       cond_string = ep_parse_optional_if_clause (&arg);
6319     }
6320
6321   if ((*arg != '\0') && !isspace (*arg))
6322     error ("Junk at end of arguments.");
6323
6324   /* Create a load breakpoint that only triggers when a load of
6325      the specified dll (or any dll, if no pathname was specified)
6326      occurs. */
6327   SOLIB_CREATE_CATCH_LOAD_HOOK (PIDGET (inferior_ptid), tempflag, 
6328                                 dll_pathname, cond_string);
6329 }
6330
6331 static void
6332 catch_unload_command_1 (char *arg, int tempflag, int from_tty)
6333 {
6334   char *dll_pathname = NULL;
6335   char *cond_string = NULL;
6336
6337   ep_skip_leading_whitespace (&arg);
6338
6339   /* The allowed syntax is:
6340      catch unload
6341      catch unload if <cond>
6342      catch unload <filename>
6343      catch unload <filename> if <cond>
6344
6345      The user is not allowed to specify the <filename> after an
6346      if clause.
6347
6348      We'll ignore the pathological case of a file named "if".
6349
6350      First, check if there's an if clause.  If so, then there
6351      cannot be a filename. */
6352   cond_string = ep_parse_optional_if_clause (&arg);
6353
6354   /* If there was an if clause, then there cannot be a filename.
6355      Else, there might be a filename and an if clause. */
6356   if (cond_string == NULL)
6357     {
6358       dll_pathname = ep_parse_optional_filename (&arg);
6359       ep_skip_leading_whitespace (&arg);
6360       cond_string = ep_parse_optional_if_clause (&arg);
6361     }
6362
6363   if ((*arg != '\0') && !isspace (*arg))
6364     error ("Junk at end of arguments.");
6365
6366   /* Create an unload breakpoint that only triggers when an unload of
6367      the specified dll (or any dll, if no pathname was specified)
6368      occurs. */
6369   SOLIB_CREATE_CATCH_UNLOAD_HOOK (PIDGET (inferior_ptid), tempflag, 
6370                                   dll_pathname, cond_string);
6371 }
6372
6373 /* Commands to deal with catching exceptions.  */
6374
6375 /* Set a breakpoint at the specified callback routine for an
6376    exception event callback */
6377
6378 static void
6379 create_exception_catchpoint (int tempflag, char *cond_string,
6380                              enum exception_event_kind ex_event,
6381                              struct symtab_and_line *sal)
6382 {
6383   struct breakpoint *b;
6384   int thread = -1;              /* All threads. */
6385   enum bptype bptype;
6386
6387   if (!sal)                     /* no exception support? */
6388     return;
6389
6390   switch (ex_event)
6391     {
6392     case EX_EVENT_THROW:
6393       bptype = bp_catch_throw;
6394       break;
6395     case EX_EVENT_CATCH:
6396       bptype = bp_catch_catch;
6397       break;
6398     default:                    /* error condition */
6399       error ("Internal error -- invalid catchpoint kind");
6400     }
6401
6402   b = set_raw_breakpoint (*sal, bptype);
6403   set_breakpoint_count (breakpoint_count + 1);
6404   b->number = breakpoint_count;
6405   b->cond = NULL;
6406   b->cond_string = (cond_string == NULL) ? 
6407     NULL : savestring (cond_string, strlen (cond_string));
6408   b->thread = thread;
6409   b->addr_string = NULL;
6410   b->enable_state = bp_enabled;
6411   b->disposition = tempflag ? disp_del : disp_donttouch;
6412   mention (b);
6413 }
6414
6415 static enum print_stop_action
6416 print_exception_catchpoint (struct breakpoint *b)
6417 {
6418   annotate_catchpoint (b->number);
6419
6420   if (strstr (b->addr_string, "throw") != NULL)
6421     printf_filtered ("\nCatchpoint %d (exception thrown)\n",
6422                      b->number);
6423   else
6424     printf_filtered ("\nCatchpoint %d (exception caught)\n",
6425                      b->number);
6426
6427   return PRINT_SRC_AND_LOC;
6428 }
6429
6430 static void
6431 print_one_exception_catchpoint (struct breakpoint *b, CORE_ADDR *last_addr)
6432 {
6433   if (addressprint)
6434     {
6435       annotate_field (4);
6436       ui_out_field_core_addr (uiout, "addr", b->loc->address);
6437     }
6438   annotate_field (5);
6439   *last_addr = b->loc->address;
6440   if (strstr (b->addr_string, "throw") != NULL)
6441     ui_out_field_string (uiout, "what", "exception throw");
6442   else
6443     ui_out_field_string (uiout, "what", "exception catch");
6444 }
6445
6446 static void
6447 print_mention_exception_catchpoint (struct breakpoint *b)
6448 {
6449   if (strstr (b->addr_string, "throw") != NULL)
6450     printf_filtered ("Catchpoint %d (throw)", b->number);
6451   else
6452     printf_filtered ("Catchpoint %d (catch)", b->number);
6453 }
6454
6455 static struct breakpoint_ops gnu_v3_exception_catchpoint_ops = {
6456   print_exception_catchpoint,
6457   print_one_exception_catchpoint,
6458   print_mention_exception_catchpoint
6459 };
6460
6461 static int
6462 handle_gnu_v3_exceptions (int tempflag, char *cond_string,
6463                           enum exception_event_kind ex_event, int from_tty)
6464 {
6465   char *trigger_func_name, *nameptr;
6466   struct symtabs_and_lines sals;
6467   struct breakpoint *b;
6468
6469   if (ex_event == EX_EVENT_CATCH)
6470     trigger_func_name = xstrdup ("__cxa_begin_catch");
6471   else
6472     trigger_func_name = xstrdup ("__cxa_throw");
6473
6474   nameptr = trigger_func_name;
6475   sals = decode_line_1 (&nameptr, 1, NULL, 0, NULL, NULL);
6476   if (sals.nelts == 0)
6477     {
6478       xfree (trigger_func_name);
6479       return 0;
6480     }
6481
6482   b = set_raw_breakpoint (sals.sals[0], bp_breakpoint);
6483   set_breakpoint_count (breakpoint_count + 1);
6484   b->number = breakpoint_count;
6485   b->cond = NULL;
6486   b->cond_string = (cond_string == NULL) ? 
6487     NULL : savestring (cond_string, strlen (cond_string));
6488   b->thread = -1;
6489   b->addr_string = trigger_func_name;
6490   b->enable_state = bp_enabled;
6491   b->disposition = tempflag ? disp_del : disp_donttouch;
6492   b->ops = &gnu_v3_exception_catchpoint_ops;
6493
6494   xfree (sals.sals);
6495   mention (b);
6496   return 1;
6497 }
6498
6499 /* Deal with "catch catch" and "catch throw" commands */
6500
6501 static void
6502 catch_exception_command_1 (enum exception_event_kind ex_event, char *arg,
6503                            int tempflag, int from_tty)
6504 {
6505   char *cond_string = NULL;
6506   struct symtab_and_line *sal = NULL;
6507
6508   ep_skip_leading_whitespace (&arg);
6509
6510   cond_string = ep_parse_optional_if_clause (&arg);
6511
6512   if ((*arg != '\0') && !isspace (*arg))
6513     error ("Junk at end of arguments.");
6514
6515   if ((ex_event != EX_EVENT_THROW) &&
6516       (ex_event != EX_EVENT_CATCH))
6517     error ("Unsupported or unknown exception event; cannot catch it");
6518
6519   if (handle_gnu_v3_exceptions (tempflag, cond_string, ex_event, from_tty))
6520     return;
6521
6522   /* See if we can find a callback routine */
6523   sal = target_enable_exception_callback (ex_event, 1);
6524
6525   if (sal)
6526     {
6527       /* We have callbacks from the runtime system for exceptions.
6528          Set a breakpoint on the sal found, if no errors */
6529       if (sal != (struct symtab_and_line *) -1)
6530         create_exception_catchpoint (tempflag, cond_string, ex_event, sal);
6531       else
6532         return;         /* something went wrong with setting up callbacks */
6533     }
6534
6535   warning ("Unsupported with this platform/compiler combination.");
6536 }
6537
6538 /* Cover routine to allow wrapping target_enable_exception_catchpoints
6539    inside a catch_errors */
6540
6541 static int
6542 cover_target_enable_exception_callback (void *arg)
6543 {
6544   args_for_catchpoint_enable *args = arg;
6545   struct symtab_and_line *sal;
6546   sal = target_enable_exception_callback (args->kind, args->enable_p);
6547   if (sal == NULL)
6548     return 0;
6549   else if (sal == (struct symtab_and_line *) -1)
6550     return -1;
6551   else
6552     return 1;                   /*is valid */
6553 }
6554
6555 static void
6556 catch_command_1 (char *arg, int tempflag, int from_tty)
6557 {
6558
6559   /* The first argument may be an event name, such as "start" or "load".
6560      If so, then handle it as such.  If it doesn't match an event name,
6561      then attempt to interpret it as an exception name.  (This latter is
6562      the v4.16-and-earlier GDB meaning of the "catch" command.)
6563
6564      First, try to find the bounds of what might be an event name. */
6565   char *arg1_start = arg;
6566   char *arg1_end;
6567   int arg1_length;
6568
6569   if (arg1_start == NULL)
6570     {
6571       /* Old behaviour was to use pre-v-4.16 syntax */
6572       /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
6573       /* return; */
6574       /* Now, this is not allowed */
6575       error ("Catch requires an event name.");
6576
6577     }
6578   arg1_end = ep_find_event_name_end (arg1_start);
6579   if (arg1_end == NULL)
6580     error ("catch requires an event");
6581   arg1_length = arg1_end + 1 - arg1_start;
6582
6583   /* Try to match what we found against known event names. */
6584   if (strncmp (arg1_start, "signal", arg1_length) == 0)
6585     {
6586       error ("Catch of signal not yet implemented");
6587     }
6588   else if (strncmp (arg1_start, "catch", arg1_length) == 0)
6589     {
6590       catch_exception_command_1 (EX_EVENT_CATCH, arg1_end + 1, 
6591                                  tempflag, from_tty);
6592     }
6593   else if (strncmp (arg1_start, "throw", arg1_length) == 0)
6594     {
6595       catch_exception_command_1 (EX_EVENT_THROW, arg1_end + 1, 
6596                                  tempflag, from_tty);
6597     }
6598   else if (strncmp (arg1_start, "thread_start", arg1_length) == 0)
6599     {
6600       error ("Catch of thread_start not yet implemented");
6601     }
6602   else if (strncmp (arg1_start, "thread_exit", arg1_length) == 0)
6603     {
6604       error ("Catch of thread_exit not yet implemented");
6605     }
6606   else if (strncmp (arg1_start, "thread_join", arg1_length) == 0)
6607     {
6608       error ("Catch of thread_join not yet implemented");
6609     }
6610   else if (strncmp (arg1_start, "start", arg1_length) == 0)
6611     {
6612       error ("Catch of start not yet implemented");
6613     }
6614   else if (strncmp (arg1_start, "exit", arg1_length) == 0)
6615     {
6616       error ("Catch of exit not yet implemented");
6617     }
6618   else if (strncmp (arg1_start, "fork", arg1_length) == 0)
6619     {
6620       catch_fork_command_1 (catch_fork, arg1_end + 1, tempflag, from_tty);
6621     }
6622   else if (strncmp (arg1_start, "vfork", arg1_length) == 0)
6623     {
6624       catch_fork_command_1 (catch_vfork, arg1_end + 1, tempflag, from_tty);
6625     }
6626   else if (strncmp (arg1_start, "exec", arg1_length) == 0)
6627     {
6628       catch_exec_command_1 (arg1_end + 1, tempflag, from_tty);
6629     }
6630   else if (strncmp (arg1_start, "load", arg1_length) == 0)
6631     {
6632       catch_load_command_1 (arg1_end + 1, tempflag, from_tty);
6633     }
6634   else if (strncmp (arg1_start, "unload", arg1_length) == 0)
6635     {
6636       catch_unload_command_1 (arg1_end + 1, tempflag, from_tty);
6637     }
6638   else if (strncmp (arg1_start, "stop", arg1_length) == 0)
6639     {
6640       error ("Catch of stop not yet implemented");
6641     }
6642
6643   /* This doesn't appear to be an event name */
6644
6645   else
6646     {
6647       /* Pre-v.4.16 behaviour was to treat the argument
6648          as the name of an exception */
6649       /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
6650       /* Now this is not allowed */
6651       error ("Unknown event kind specified for catch");
6652
6653     }
6654 }
6655
6656 /* Used by the gui, could be made a worker for other things. */
6657
6658 struct breakpoint *
6659 set_breakpoint_sal (struct symtab_and_line sal)
6660 {
6661   struct breakpoint *b;
6662   b = set_raw_breakpoint (sal, bp_breakpoint);
6663   set_breakpoint_count (breakpoint_count + 1);
6664   b->number = breakpoint_count;
6665   b->cond = 0;
6666   b->thread = -1;
6667   return b;
6668 }
6669
6670 static void
6671 catch_command (char *arg, int from_tty)
6672 {
6673   catch_command_1 (arg, 0, from_tty);
6674 }
6675 \f
6676
6677 static void
6678 tcatch_command (char *arg, int from_tty)
6679 {
6680   catch_command_1 (arg, 1, from_tty);
6681 }
6682
6683 /* Delete breakpoints by address or line.  */
6684
6685 static void
6686 clear_command (char *arg, int from_tty)
6687 {
6688   struct breakpoint *b, *tmp, *prev, *found;
6689   int default_match;
6690   struct symtabs_and_lines sals;
6691   struct symtab_and_line sal;
6692   int i;
6693
6694   if (arg)
6695     {
6696       sals = decode_line_spec (arg, 1);
6697       default_match = 0;
6698     }
6699   else
6700     {
6701       sals.sals = (struct symtab_and_line *)
6702         xmalloc (sizeof (struct symtab_and_line));
6703       make_cleanup (xfree, sals.sals);
6704       init_sal (&sal);          /* initialize to zeroes */
6705       sal.line = default_breakpoint_line;
6706       sal.symtab = default_breakpoint_symtab;
6707       sal.pc = default_breakpoint_address;
6708       if (sal.symtab == 0)
6709         error ("No source file specified.");
6710
6711       sals.sals[0] = sal;
6712       sals.nelts = 1;
6713
6714       default_match = 1;
6715     }
6716
6717   /* For each line spec given, delete bps which correspond
6718      to it.  Do it in two passes, solely to preserve the current
6719      behavior that from_tty is forced true if we delete more than
6720      one breakpoint.  */
6721
6722   found = NULL;
6723   for (i = 0; i < sals.nelts; i++)
6724     {
6725       /* If exact pc given, clear bpts at that pc.
6726          If line given (pc == 0), clear all bpts on specified line.
6727          If defaulting, clear all bpts on default line
6728          or at default pc.
6729
6730          defaulting    sal.pc != 0    tests to do
6731
6732          0              1             pc
6733          1              1             pc _and_ line
6734          0              0             line
6735          1              0             <can't happen> */
6736
6737       sal = sals.sals[i];
6738       prev = NULL;
6739
6740       /* Find all matching breakpoints, remove them from the
6741          breakpoint chain, and add them to the 'found' chain.  */
6742       ALL_BREAKPOINTS_SAFE (b, tmp)
6743         {
6744           /* Are we going to delete b? */
6745           if (b->type != bp_none
6746               && b->type != bp_watchpoint
6747               && b->type != bp_hardware_watchpoint
6748               && b->type != bp_read_watchpoint
6749               && b->type != bp_access_watchpoint
6750               /* Not if b is a watchpoint of any sort... */
6751               && (((sal.pc && (b->loc->address == sal.pc)) 
6752                    && (!section_is_overlay (b->loc->section)
6753                        || b->loc->section == sal.section))
6754                   /* Yes, if sal.pc matches b (modulo overlays).  */
6755                   || ((default_match || (0 == sal.pc))
6756                       && b->source_file != NULL
6757                       && sal.symtab != NULL
6758                       && strcmp (b->source_file, sal.symtab->filename) == 0
6759                       && b->line_number == sal.line)))
6760             /* Yes, if sal source file and line matches b.  */
6761             {
6762               /* Remove it from breakpoint_chain...  */
6763               if (b == breakpoint_chain)
6764                 {
6765                   /* b is at the head of the list */
6766                   breakpoint_chain = b->next;
6767                 }
6768               else
6769                 {
6770                   prev->next = b->next;
6771                 }
6772               /* And add it to 'found' chain.  */
6773               b->next = found;
6774               found = b;
6775             }
6776           else
6777             {
6778               /* Keep b, and keep a pointer to it.  */
6779               prev = b;
6780             }
6781         }
6782     }
6783   /* Now go thru the 'found' chain and delete them.  */
6784   if (found == 0)
6785     {
6786       if (arg)
6787         error ("No breakpoint at %s.", arg);
6788       else
6789         error ("No breakpoint at this line.");
6790     }
6791
6792   if (found->next)
6793     from_tty = 1;               /* Always report if deleted more than one */
6794   if (from_tty)
6795     printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
6796   breakpoints_changed ();
6797   while (found)
6798     {
6799       if (from_tty)
6800         printf_unfiltered ("%d ", found->number);
6801       tmp = found->next;
6802       delete_breakpoint (found);
6803       found = tmp;
6804     }
6805   if (from_tty)
6806     putchar_unfiltered ('\n');
6807 }
6808 \f
6809 /* Delete breakpoint in BS if they are `delete' breakpoints and
6810    all breakpoints that are marked for deletion, whether hit or not.
6811    This is called after any breakpoint is hit, or after errors.  */
6812
6813 void
6814 breakpoint_auto_delete (bpstat bs)
6815 {
6816   struct breakpoint *b, *temp;
6817
6818   for (; bs; bs = bs->next)
6819     if (bs->breakpoint_at && bs->breakpoint_at->disposition == disp_del
6820         && bs->stop)
6821       delete_breakpoint (bs->breakpoint_at);
6822
6823   ALL_BREAKPOINTS_SAFE (b, temp)
6824   {
6825     if (b->disposition == disp_del_at_next_stop)
6826       delete_breakpoint (b);
6827   }
6828 }
6829
6830 /* Delete a breakpoint and clean up all traces of it in the data
6831    structures. */
6832
6833 void
6834 delete_breakpoint (struct breakpoint *bpt)
6835 {
6836   struct breakpoint *b;
6837   bpstat bs;
6838   struct bp_location *loc;
6839
6840   if (bpt == NULL)
6841     error ("Internal error (attempted to delete a NULL breakpoint)");
6842
6843
6844   /* Has this bp already been deleted?  This can happen because multiple
6845      lists can hold pointers to bp's.  bpstat lists are especial culprits.
6846
6847      One example of this happening is a watchpoint's scope bp.  When the
6848      scope bp triggers, we notice that the watchpoint is out of scope, and
6849      delete it.  We also delete its scope bp.  But the scope bp is marked
6850      "auto-deleting", and is already on a bpstat.  That bpstat is then
6851      checked for auto-deleting bp's, which are deleted.
6852
6853      A real solution to this problem might involve reference counts in bp's,
6854      and/or giving them pointers back to their referencing bpstat's, and
6855      teaching delete_breakpoint to only free a bp's storage when no more
6856      references were extent.  A cheaper bandaid was chosen. */
6857   if (bpt->type == bp_none)
6858     return;
6859
6860   if (delete_breakpoint_hook)
6861     delete_breakpoint_hook (bpt);
6862   breakpoint_delete_event (bpt->number);
6863
6864   if (bpt->loc->inserted)
6865     remove_breakpoint (bpt->loc, mark_inserted);
6866
6867   if (breakpoint_chain == bpt)
6868     breakpoint_chain = bpt->next;
6869
6870   if (bp_location_chain == bpt->loc)
6871     bp_location_chain = bpt->loc->next;
6872
6873   /* If we have callback-style exception catchpoints, don't go through
6874      the adjustments to the C++ runtime library etc. if the inferior
6875      isn't actually running.  target_enable_exception_callback for a
6876      null target ops vector gives an undesirable error message, so we
6877      check here and avoid it. Since currently (1997-09-17) only HP-UX aCC's
6878      exceptions are supported in this way, it's OK for now. FIXME */
6879   if (ep_is_exception_catchpoint (bpt) && target_has_execution)
6880     {
6881       /* Format possible error msg */
6882       char *message = xstrprintf ("Error in deleting catchpoint %d:\n",
6883                                   bpt->number);
6884       struct cleanup *cleanups = make_cleanup (xfree, message);
6885       args_for_catchpoint_enable args;
6886       args.kind = bpt->type == bp_catch_catch ? 
6887         EX_EVENT_CATCH : EX_EVENT_THROW;
6888       args.enable_p = 0;
6889       catch_errors (cover_target_enable_exception_callback, &args,
6890                     message, RETURN_MASK_ALL);
6891       do_cleanups (cleanups);
6892     }
6893
6894
6895   ALL_BREAKPOINTS (b)
6896     if (b->next == bpt)
6897     {
6898       b->next = bpt->next;
6899       break;
6900     }
6901
6902   ALL_BP_LOCATIONS (loc)
6903     if (loc->next == bpt->loc)
6904       {
6905         loc->next = bpt->loc->next;
6906         break;
6907       }
6908
6909   check_duplicates (bpt);
6910   /* If this breakpoint was inserted, and there is another breakpoint
6911      at the same address, we need to insert the other breakpoint.  */
6912   if (bpt->loc->inserted
6913       && bpt->type != bp_hardware_watchpoint
6914       && bpt->type != bp_read_watchpoint
6915       && bpt->type != bp_access_watchpoint
6916       && bpt->type != bp_catch_fork
6917       && bpt->type != bp_catch_vfork
6918       && bpt->type != bp_catch_exec)
6919     {
6920       ALL_BREAKPOINTS (b)
6921         if (b->loc->address == bpt->loc->address
6922             && b->loc->section == bpt->loc->section
6923             && !b->loc->duplicate
6924             && b->enable_state != bp_disabled
6925             && b->enable_state != bp_shlib_disabled
6926             && !b->pending
6927             && b->enable_state != bp_call_disabled)
6928         {
6929           int val;
6930
6931           /* We should never reach this point if there is a permanent
6932              breakpoint at the same address as the one being deleted.
6933              If there is a permanent breakpoint somewhere, it should
6934              always be the only one inserted.  */
6935           if (b->enable_state == bp_permanent)
6936             internal_error (__FILE__, __LINE__,
6937                             "another breakpoint was inserted on top of "
6938                             "a permanent breakpoint");
6939
6940           if (b->type == bp_hardware_breakpoint)
6941             val = target_insert_hw_breakpoint (b->loc->address, b->loc->shadow_contents);
6942           else
6943             val = target_insert_breakpoint (b->loc->address, b->loc->shadow_contents);
6944
6945           /* If there was an error in the insert, print a message, then stop execution.  */
6946           if (val != 0)
6947             {
6948               struct ui_file *tmp_error_stream = mem_fileopen ();
6949               make_cleanup_ui_file_delete (tmp_error_stream);
6950              
6951
6952               if (b->type == bp_hardware_breakpoint)
6953                 {
6954                   fprintf_unfiltered (tmp_error_stream, 
6955                                         "Cannot insert hardware breakpoint %d.\n"
6956                                       "You may have requested too many hardware breakpoints.\n",
6957                                         b->number);
6958                   }
6959                 else
6960                   {
6961                     fprintf_unfiltered (tmp_error_stream, "Cannot insert breakpoint %d.\n", b->number);
6962                     fprintf_filtered (tmp_error_stream, "Error accessing memory address ");
6963                     print_address_numeric (b->loc->address, 1, tmp_error_stream);
6964                     fprintf_filtered (tmp_error_stream, ": %s.\n",
6965                                       safe_strerror (val));
6966                   }
6967               
6968               fprintf_unfiltered (tmp_error_stream,"The same program may be running in another process.");
6969               target_terminal_ours_for_output ();
6970               error_stream(tmp_error_stream); 
6971             }
6972           else
6973             b->loc->inserted = 1;
6974         }
6975     }
6976
6977   free_command_lines (&bpt->commands);
6978   if (bpt->cond)
6979     xfree (bpt->cond);
6980   if (bpt->cond_string != NULL)
6981     xfree (bpt->cond_string);
6982   if (bpt->addr_string != NULL)
6983     xfree (bpt->addr_string);
6984   if (bpt->exp != NULL)
6985     xfree (bpt->exp);
6986   if (bpt->exp_string != NULL)
6987     xfree (bpt->exp_string);
6988   if (bpt->val != NULL)
6989     value_free (bpt->val);
6990   if (bpt->source_file != NULL)
6991     xfree (bpt->source_file);
6992   if (bpt->dll_pathname != NULL)
6993     xfree (bpt->dll_pathname);
6994   if (bpt->triggered_dll_pathname != NULL)
6995     xfree (bpt->triggered_dll_pathname);
6996   if (bpt->exec_pathname != NULL)
6997     xfree (bpt->exec_pathname);
6998
6999   /* Be sure no bpstat's are pointing at it after it's been freed.  */
7000   /* FIXME, how can we find all bpstat's?
7001      We just check stop_bpstat for now.  */
7002   for (bs = stop_bpstat; bs; bs = bs->next)
7003     if (bs->breakpoint_at == bpt)
7004       {
7005         bs->breakpoint_at = NULL;
7006         bs->old_val = NULL;
7007         /* bs->commands will be freed later.  */
7008       }
7009   /* On the chance that someone will soon try again to delete this same
7010      bp, we mark it as deleted before freeing its storage. */
7011   bpt->type = bp_none;
7012
7013   xfree (bpt->loc);
7014   xfree (bpt);
7015 }
7016
7017 static void
7018 do_delete_breakpoint_cleanup (void *b)
7019 {
7020   delete_breakpoint (b);
7021 }
7022
7023 struct cleanup *
7024 make_cleanup_delete_breakpoint (struct breakpoint *b)
7025 {
7026   return make_cleanup (do_delete_breakpoint_cleanup, b);
7027 }
7028
7029 struct cleanup *
7030 make_exec_cleanup_delete_breakpoint (struct breakpoint *b)
7031 {
7032   return make_exec_cleanup (do_delete_breakpoint_cleanup, b);
7033 }
7034
7035 void
7036 delete_command (char *arg, int from_tty)
7037 {
7038   struct breakpoint *b, *temp;
7039
7040   dont_repeat ();
7041
7042   if (arg == 0)
7043     {
7044       int breaks_to_delete = 0;
7045
7046       /* Delete all breakpoints if no argument.
7047          Do not delete internal or call-dummy breakpoints, these
7048          have to be deleted with an explicit breakpoint number argument.  */
7049       ALL_BREAKPOINTS (b)
7050       {
7051         if (b->type != bp_call_dummy &&
7052             b->type != bp_shlib_event &&
7053             b->type != bp_thread_event &&
7054             b->type != bp_overlay_event &&
7055             b->number >= 0)
7056           breaks_to_delete = 1;
7057       }
7058
7059       /* Ask user only if there are some breakpoints to delete.  */
7060       if (!from_tty
7061           || (breaks_to_delete && query ("Delete all breakpoints? ")))
7062         {
7063           ALL_BREAKPOINTS_SAFE (b, temp)
7064           {
7065             if (b->type != bp_call_dummy &&
7066                 b->type != bp_shlib_event &&
7067                 b->type != bp_thread_event &&
7068                 b->type != bp_overlay_event &&
7069                 b->number >= 0)
7070               delete_breakpoint (b);
7071           }
7072         }
7073     }
7074   else
7075     map_breakpoint_numbers (arg, delete_breakpoint);
7076 }
7077
7078 /* Reset a breakpoint given it's struct breakpoint * BINT.
7079    The value we return ends up being the return value from catch_errors.
7080    Unused in this case.  */
7081
7082 static int
7083 breakpoint_re_set_one (void *bint)
7084 {
7085   /* get past catch_errs */
7086   struct breakpoint *b = (struct breakpoint *) bint;
7087   struct value *mark;
7088   int i;
7089   struct symtabs_and_lines sals;
7090   char *s;
7091   enum enable_state save_enable;
7092
7093   switch (b->type)
7094     {
7095     case bp_none:
7096       warning ("attempted to reset apparently deleted breakpoint #%d?",
7097                b->number);
7098       return 0;
7099     case bp_breakpoint:
7100     case bp_hardware_breakpoint:
7101     case bp_catch_load:
7102     case bp_catch_unload:
7103       if (b->addr_string == NULL)
7104         {
7105           /* Anything without a string can't be re-set. */
7106           delete_breakpoint (b);
7107           return 0;
7108         }
7109       /* HACK: cagney/2001-11-11: kettenis/2001-11-11: MarkK wrote:
7110
7111          ``And a hack it is, although Apple's Darwin version of GDB
7112          contains an almost identical hack to implement a "future
7113          break" command.  It seems to work in many real world cases,
7114          but it is easy to come up with a test case where the patch
7115          doesn't help at all.''
7116
7117          ``It seems that the way GDB implements breakpoints - in -
7118          shared - libraries was designed for a.out shared library
7119          systems (SunOS 4) where shared libraries were loaded at a
7120          fixed address in memory.  Since ELF shared libraries can (and
7121          will) be loaded at any address in memory, things break.
7122          Fixing this is not trivial.  Therefore, I'm not sure whether
7123          we should add this hack to the branch only.  I cannot
7124          guarantee that things will be fixed on the trunk in the near
7125          future.''
7126
7127          In case we have a problem, disable this breakpoint.  We'll
7128          restore its status if we succeed.  Don't disable a
7129          shlib_disabled breakpoint though.  There's a fair chance we
7130          can't re-set it if the shared library it's in hasn't been
7131          loaded yet.  */
7132
7133       if (b->pending)
7134         break;
7135
7136       save_enable = b->enable_state;
7137       if (b->enable_state != bp_shlib_disabled)
7138         b->enable_state = bp_disabled;
7139
7140       set_language (b->language);
7141       input_radix = b->input_radix;
7142       s = b->addr_string;
7143       sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, (char ***) NULL, NULL);
7144       for (i = 0; i < sals.nelts; i++)
7145         {
7146           resolve_sal_pc (&sals.sals[i]);
7147
7148           /* Reparse conditions, they might contain references to the
7149              old symtab.  */
7150           if (b->cond_string != NULL)
7151             {
7152               s = b->cond_string;
7153               if (b->cond)
7154                 {
7155                   xfree (b->cond);
7156                   /* Avoid re-freeing b->exp if an error during the call
7157                      to parse_exp_1.  */
7158                   b->cond = NULL;
7159                 }
7160               b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
7161             }
7162
7163           /* We need to re-set the breakpoint if the address changes... */
7164           if (b->loc->address != sals.sals[i].pc
7165           /* ...or new and old breakpoints both have source files, and
7166              the source file name or the line number changes...  */
7167               || (b->source_file != NULL
7168                   && sals.sals[i].symtab != NULL
7169                   && (strcmp (b->source_file, sals.sals[i].symtab->filename) != 0
7170                       || b->line_number != sals.sals[i].line)
7171               )
7172           /* ...or we switch between having a source file and not having
7173              one.  */
7174               || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
7175             )
7176             {
7177               if (b->source_file != NULL)
7178                 xfree (b->source_file);
7179               if (sals.sals[i].symtab == NULL)
7180                 b->source_file = NULL;
7181               else
7182                 b->source_file =
7183                   savestring (sals.sals[i].symtab->filename,
7184                               strlen (sals.sals[i].symtab->filename));
7185               b->line_number = sals.sals[i].line;
7186               b->loc->requested_address = sals.sals[i].pc;
7187               b->loc->address
7188                 = adjust_breakpoint_address (b->loc->requested_address);
7189
7190               /* Used to check for duplicates here, but that can
7191                  cause trouble, as it doesn't check for disabled
7192                  breakpoints. */
7193
7194               mention (b);
7195
7196               /* Might be better to do this just once per breakpoint_re_set,
7197                  rather than once for every breakpoint.  */
7198               breakpoints_changed ();
7199             }
7200           b->loc->section = sals.sals[i].section;
7201           b->enable_state = save_enable;        /* Restore it, this worked. */
7202
7203
7204           /* Now that this is re-enabled, check_duplicates
7205              can be used. */
7206           check_duplicates (b);
7207
7208         }
7209       xfree (sals.sals);
7210       break;
7211
7212     case bp_watchpoint:
7213     case bp_hardware_watchpoint:
7214     case bp_read_watchpoint:
7215     case bp_access_watchpoint:
7216       innermost_block = NULL;
7217       /* The issue arises of what context to evaluate this in.  The
7218          same one as when it was set, but what does that mean when
7219          symbols have been re-read?  We could save the filename and
7220          functionname, but if the context is more local than that, the
7221          best we could do would be something like how many levels deep
7222          and which index at that particular level, but that's going to
7223          be less stable than filenames or function names.  */
7224
7225       /* So for now, just use a global context.  */
7226       if (b->exp)
7227         {
7228           xfree (b->exp);
7229           /* Avoid re-freeing b->exp if an error during the call to
7230              parse_expression.  */
7231           b->exp = NULL;
7232         }
7233       b->exp = parse_expression (b->exp_string);
7234       b->exp_valid_block = innermost_block;
7235       mark = value_mark ();
7236       if (b->val)
7237         {
7238           value_free (b->val);
7239           /* Avoid re-freeing b->val if an error during the call to
7240              evaluate_expression.  */
7241           b->val = NULL;
7242         }
7243       b->val = evaluate_expression (b->exp);
7244       release_value (b->val);
7245       if (VALUE_LAZY (b->val) && breakpoint_enabled (b))
7246         value_fetch_lazy (b->val);
7247
7248       if (b->cond_string != NULL)
7249         {
7250           s = b->cond_string;
7251           if (b->cond)
7252             {
7253               xfree (b->cond);
7254               /* Avoid re-freeing b->exp if an error during the call
7255                  to parse_exp_1.  */
7256               b->cond = NULL;
7257             }
7258           b->cond = parse_exp_1 (&s, (struct block *) 0, 0);
7259         }
7260       if (breakpoint_enabled (b))
7261         mention (b);
7262       value_free_to_mark (mark);
7263       break;
7264     case bp_catch_catch:
7265     case bp_catch_throw:
7266       break;
7267       /* We needn't really do anything to reset these, since the mask
7268          that requests them is unaffected by e.g., new libraries being
7269          loaded. */
7270     case bp_catch_fork:
7271     case bp_catch_vfork:
7272     case bp_catch_exec:
7273       break;
7274
7275     default:
7276       printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
7277       /* fall through */
7278       /* Delete longjmp and overlay event breakpoints; they will be
7279          reset later by breakpoint_re_set.  */
7280     case bp_longjmp:
7281     case bp_longjmp_resume:
7282     case bp_overlay_event:
7283       delete_breakpoint (b);
7284       break;
7285
7286       /* This breakpoint is special, it's set up when the inferior
7287          starts and we really don't want to touch it.  */
7288     case bp_shlib_event:
7289
7290       /* Like bp_shlib_event, this breakpoint type is special.
7291          Once it is set up, we do not want to touch it.  */
7292     case bp_thread_event:
7293
7294       /* Keep temporary breakpoints, which can be encountered when we step
7295          over a dlopen call and SOLIB_ADD is resetting the breakpoints.
7296          Otherwise these should have been blown away via the cleanup chain
7297          or by breakpoint_init_inferior when we rerun the executable.  */
7298     case bp_until:
7299     case bp_finish:
7300     case bp_watchpoint_scope:
7301     case bp_call_dummy:
7302     case bp_step_resume:
7303       break;
7304     }
7305
7306   return 0;
7307 }
7308
7309 /* Re-set all breakpoints after symbols have been re-loaded.  */
7310 void
7311 breakpoint_re_set (void)
7312 {
7313   struct breakpoint *b, *temp;
7314   enum language save_language;
7315   int save_input_radix;
7316
7317   save_language = current_language->la_language;
7318   save_input_radix = input_radix;
7319   ALL_BREAKPOINTS_SAFE (b, temp)
7320   {
7321     /* Format possible error msg */
7322     char *message = xstrprintf ("Error in re-setting breakpoint %d:\n",
7323                                 b->number);
7324     struct cleanup *cleanups = make_cleanup (xfree, message);
7325     catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
7326     do_cleanups (cleanups);
7327   }
7328   set_language (save_language);
7329   input_radix = save_input_radix;
7330
7331   if (GET_LONGJMP_TARGET_P ())
7332     {
7333       create_longjmp_breakpoint ("longjmp");
7334       create_longjmp_breakpoint ("_longjmp");
7335       create_longjmp_breakpoint ("siglongjmp");
7336       create_longjmp_breakpoint ("_siglongjmp");
7337       create_longjmp_breakpoint (NULL);
7338     }
7339   
7340   create_overlay_event_breakpoint ("_ovly_debug_event");
7341 }
7342 \f
7343 /* Reset the thread number of this breakpoint:
7344
7345    - If the breakpoint is for all threads, leave it as-is.
7346    - Else, reset it to the current thread for inferior_ptid. */
7347 void
7348 breakpoint_re_set_thread (struct breakpoint *b)
7349 {
7350   if (b->thread != -1)
7351     {
7352       if (in_thread_list (inferior_ptid))
7353         b->thread = pid_to_thread_id (inferior_ptid);
7354     }
7355 }
7356
7357 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
7358    If from_tty is nonzero, it prints a message to that effect,
7359    which ends with a period (no newline).  */
7360
7361 void
7362 set_ignore_count (int bptnum, int count, int from_tty)
7363 {
7364   struct breakpoint *b;
7365
7366   if (count < 0)
7367     count = 0;
7368
7369   ALL_BREAKPOINTS (b)
7370     if (b->number == bptnum)
7371     {
7372       b->ignore_count = count;
7373       if (from_tty)
7374         {
7375           if (count == 0)
7376             printf_filtered ("Will stop next time breakpoint %d is reached.",
7377                              bptnum);
7378           else if (count == 1)
7379             printf_filtered ("Will ignore next crossing of breakpoint %d.",
7380                              bptnum);
7381           else
7382             printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
7383                              count, bptnum);
7384         }
7385       breakpoints_changed ();
7386       breakpoint_modify_event (b->number);
7387       return;
7388     }
7389
7390   error ("No breakpoint number %d.", bptnum);
7391 }
7392
7393 /* Clear the ignore counts of all breakpoints.  */
7394 void
7395 breakpoint_clear_ignore_counts (void)
7396 {
7397   struct breakpoint *b;
7398
7399   ALL_BREAKPOINTS (b)
7400     b->ignore_count = 0;
7401 }
7402
7403 /* Command to set ignore-count of breakpoint N to COUNT.  */
7404
7405 static void
7406 ignore_command (char *args, int from_tty)
7407 {
7408   char *p = args;
7409   int num;
7410
7411   if (p == 0)
7412     error_no_arg ("a breakpoint number");
7413
7414   num = get_number (&p);
7415   if (num == 0)
7416     error ("bad breakpoint number: '%s'", args);
7417   if (*p == 0)
7418     error ("Second argument (specified ignore-count) is missing.");
7419
7420   set_ignore_count (num,
7421                     longest_to_int (value_as_long (parse_and_eval (p))),
7422                     from_tty);
7423   if (from_tty)
7424     printf_filtered ("\n");
7425 }
7426 \f
7427 /* Call FUNCTION on each of the breakpoints
7428    whose numbers are given in ARGS.  */
7429
7430 static void
7431 map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *))
7432 {
7433   char *p = args;
7434   char *p1;
7435   int num;
7436   struct breakpoint *b, *tmp;
7437   int match;
7438
7439   if (p == 0)
7440     error_no_arg ("one or more breakpoint numbers");
7441
7442   while (*p)
7443     {
7444       match = 0;
7445       p1 = p;
7446
7447       num = get_number_or_range (&p1);
7448       if (num == 0)
7449         {
7450           warning ("bad breakpoint number at or near '%s'", p);
7451         }
7452       else
7453         {
7454           ALL_BREAKPOINTS_SAFE (b, tmp)
7455             if (b->number == num)
7456               {
7457                 struct breakpoint *related_breakpoint = b->related_breakpoint;
7458                 match = 1;
7459                 function (b);
7460                 if (related_breakpoint)
7461                   function (related_breakpoint);
7462                 break;
7463               }
7464           if (match == 0)
7465             printf_unfiltered ("No breakpoint number %d.\n", num);
7466         }
7467       p = p1;
7468     }
7469 }
7470
7471 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
7472    If from_tty is nonzero, it prints a message to that effect,
7473    which ends with a period (no newline).  */
7474
7475 void
7476 disable_breakpoint (struct breakpoint *bpt)
7477 {
7478   /* Never disable a watchpoint scope breakpoint; we want to
7479      hit them when we leave scope so we can delete both the
7480      watchpoint and its scope breakpoint at that time.  */
7481   if (bpt->type == bp_watchpoint_scope)
7482     return;
7483
7484   /* You can't disable permanent breakpoints.  */
7485   if (bpt->enable_state == bp_permanent)
7486     return;
7487
7488   bpt->enable_state = bp_disabled;
7489
7490   check_duplicates (bpt);
7491
7492   if (modify_breakpoint_hook)
7493     modify_breakpoint_hook (bpt);
7494   breakpoint_modify_event (bpt->number);
7495 }
7496
7497 static void
7498 disable_command (char *args, int from_tty)
7499 {
7500   struct breakpoint *bpt;
7501   if (args == 0)
7502     ALL_BREAKPOINTS (bpt)
7503       switch (bpt->type)
7504       {
7505       case bp_none:
7506         warning ("attempted to disable apparently deleted breakpoint #%d?",
7507                  bpt->number);
7508         continue;
7509       case bp_breakpoint:
7510       case bp_catch_load:
7511       case bp_catch_unload:
7512       case bp_catch_fork:
7513       case bp_catch_vfork:
7514       case bp_catch_exec:
7515       case bp_catch_catch:
7516       case bp_catch_throw:
7517       case bp_hardware_breakpoint:
7518       case bp_watchpoint:
7519       case bp_hardware_watchpoint:
7520       case bp_read_watchpoint:
7521       case bp_access_watchpoint:
7522         disable_breakpoint (bpt);
7523       default:
7524         continue;
7525       }
7526   else
7527     map_breakpoint_numbers (args, disable_breakpoint);
7528 }
7529
7530 static void
7531 do_enable_breakpoint (struct breakpoint *bpt, enum bpdisp disposition)
7532 {
7533   struct frame_info *save_selected_frame = NULL;
7534   int save_selected_frame_level = -1;
7535   int target_resources_ok, other_type_used;
7536   struct value *mark;
7537
7538   if (bpt->type == bp_hardware_breakpoint)
7539     {
7540       int i;
7541       i = hw_breakpoint_used_count ();
7542       target_resources_ok = 
7543         TARGET_CAN_USE_HARDWARE_WATCHPOINT (bp_hardware_breakpoint, 
7544                                             i + 1, 0);
7545       if (target_resources_ok == 0)
7546         error ("No hardware breakpoint support in the target.");
7547       else if (target_resources_ok < 0)
7548         error ("Hardware breakpoints used exceeds limit.");
7549     }
7550
7551   if (bpt->pending)
7552     {
7553       if (bpt->enable_state != bp_enabled)
7554         {
7555           /* When enabling a pending breakpoint, we need to check if the breakpoint
7556              is resolvable since shared libraries could have been loaded
7557              after the breakpoint was disabled.  */
7558           breakpoints_changed ();
7559           if (resolve_pending_breakpoint (bpt) == GDB_RC_OK)
7560             {
7561               delete_breakpoint (bpt);
7562               return;
7563             }
7564           bpt->enable_state = bp_enabled;
7565           bpt->disposition = disposition;
7566         }
7567     }
7568   else  /* Not a pending breakpoint.  */
7569     {
7570       if (bpt->enable_state != bp_permanent)
7571         bpt->enable_state = bp_enabled;
7572       bpt->disposition = disposition;
7573       check_duplicates (bpt);
7574       breakpoints_changed ();
7575       
7576       if (bpt->type == bp_watchpoint || 
7577           bpt->type == bp_hardware_watchpoint ||
7578           bpt->type == bp_read_watchpoint || 
7579           bpt->type == bp_access_watchpoint)
7580         {
7581           if (bpt->exp_valid_block != NULL)
7582             {
7583               struct frame_info *fr =
7584                 fr = frame_find_by_id (bpt->watchpoint_frame);
7585               if (fr == NULL)
7586                 {
7587                   printf_filtered ("\
7588 Cannot enable watchpoint %d because the block in which its expression\n\
7589 is valid is not currently in scope.\n", bpt->number);
7590                   bpt->enable_state = bp_disabled;
7591                   return;
7592                 }
7593               
7594               save_selected_frame = deprecated_selected_frame;
7595               save_selected_frame_level = frame_relative_level (deprecated_selected_frame);
7596               select_frame (fr);
7597             }
7598           
7599           value_free (bpt->val);
7600           mark = value_mark ();
7601           bpt->val = evaluate_expression (bpt->exp);
7602           release_value (bpt->val);
7603           if (VALUE_LAZY (bpt->val))
7604             value_fetch_lazy (bpt->val);
7605           
7606           if (bpt->type == bp_hardware_watchpoint ||
7607               bpt->type == bp_read_watchpoint ||
7608               bpt->type == bp_access_watchpoint)
7609             {
7610               int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
7611               int mem_cnt = can_use_hardware_watchpoint (bpt->val);
7612               
7613               /* Hack around 'unused var' error for some targets here */
7614               (void) mem_cnt, i;
7615               target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
7616                                                                         bpt->type, i + mem_cnt, other_type_used);
7617               /* we can consider of type is bp_hardware_watchpoint, convert to 
7618                  bp_watchpoint in the following condition */
7619               if (target_resources_ok < 0)
7620                 {
7621                   printf_filtered ("\
7622 Cannot enable watchpoint %d because target watch resources\n\
7623 have been allocated for other watchpoints.\n", bpt->number);
7624                   bpt->enable_state = bp_disabled;
7625                   value_free_to_mark (mark);
7626                   return;
7627                 }
7628             }
7629           
7630           if (save_selected_frame_level >= 0)
7631             select_frame (save_selected_frame);
7632           value_free_to_mark (mark);
7633         }
7634     }
7635
7636   if (modify_breakpoint_hook)
7637     modify_breakpoint_hook (bpt);
7638   breakpoint_modify_event (bpt->number);
7639 }
7640
7641 void
7642 enable_breakpoint (struct breakpoint *bpt)
7643 {
7644   do_enable_breakpoint (bpt, bpt->disposition);
7645 }
7646
7647 /* The enable command enables the specified breakpoints (or all defined
7648    breakpoints) so they once again become (or continue to be) effective
7649    in stopping the inferior. */
7650
7651 static void
7652 enable_command (char *args, int from_tty)
7653 {
7654   struct breakpoint *bpt;
7655   if (args == 0)
7656     ALL_BREAKPOINTS (bpt)
7657       switch (bpt->type)
7658       {
7659       case bp_none:
7660         warning ("attempted to enable apparently deleted breakpoint #%d?",
7661                  bpt->number);
7662         continue;
7663       case bp_breakpoint:
7664       case bp_catch_load:
7665       case bp_catch_unload:
7666       case bp_catch_fork:
7667       case bp_catch_vfork:
7668       case bp_catch_exec:
7669       case bp_catch_catch:
7670       case bp_catch_throw:
7671       case bp_hardware_breakpoint:
7672       case bp_watchpoint:
7673       case bp_hardware_watchpoint:
7674       case bp_read_watchpoint:
7675       case bp_access_watchpoint:
7676         enable_breakpoint (bpt);
7677       default:
7678         continue;
7679       }
7680   else
7681     map_breakpoint_numbers (args, enable_breakpoint);
7682 }
7683
7684 static void
7685 enable_once_breakpoint (struct breakpoint *bpt)
7686 {
7687   do_enable_breakpoint (bpt, disp_disable);
7688 }
7689
7690 static void
7691 enable_once_command (char *args, int from_tty)
7692 {
7693   map_breakpoint_numbers (args, enable_once_breakpoint);
7694 }
7695
7696 static void
7697 enable_delete_breakpoint (struct breakpoint *bpt)
7698 {
7699   do_enable_breakpoint (bpt, disp_del);
7700 }
7701
7702 static void
7703 enable_delete_command (char *args, int from_tty)
7704 {
7705   map_breakpoint_numbers (args, enable_delete_breakpoint);
7706 }
7707 \f
7708 static void
7709 set_breakpoint_cmd (char *args, int from_tty)
7710 {
7711 }
7712
7713 static void
7714 show_breakpoint_cmd (char *args, int from_tty)
7715 {
7716 }
7717
7718 /* Use default_breakpoint_'s, or nothing if they aren't valid.  */
7719
7720 struct symtabs_and_lines
7721 decode_line_spec_1 (char *string, int funfirstline)
7722 {
7723   struct symtabs_and_lines sals;
7724   if (string == 0)
7725     error ("Empty line specification.");
7726   if (default_breakpoint_valid)
7727     sals = decode_line_1 (&string, funfirstline,
7728                           default_breakpoint_symtab,
7729                           default_breakpoint_line,
7730                           (char ***) NULL, NULL);
7731   else
7732     sals = decode_line_1 (&string, funfirstline,
7733                           (struct symtab *) NULL, 0, (char ***) NULL, NULL);
7734   if (*string)
7735     error ("Junk at end of line specification: %s", string);
7736   return sals;
7737 }
7738 \f
7739 void
7740 _initialize_breakpoint (void)
7741 {
7742   static struct cmd_list_element *breakpoint_set_cmdlist;
7743   static struct cmd_list_element *breakpoint_show_cmdlist;
7744   struct cmd_list_element *c;
7745
7746   breakpoint_chain = 0;
7747   /* Don't bother to call set_breakpoint_count.  $bpnum isn't useful
7748      before a breakpoint is set.  */
7749   breakpoint_count = 0;
7750
7751   add_com ("ignore", class_breakpoint, ignore_command,
7752            "Set ignore-count of breakpoint number N to COUNT.\n\
7753 Usage is `ignore N COUNT'.");
7754   if (xdb_commands)
7755     add_com_alias ("bc", "ignore", class_breakpoint, 1);
7756
7757   add_com ("commands", class_breakpoint, commands_command,
7758            "Set commands to be executed when a breakpoint is hit.\n\
7759 Give breakpoint number as argument after \"commands\".\n\
7760 With no argument, the targeted breakpoint is the last one set.\n\
7761 The commands themselves follow starting on the next line.\n\
7762 Type a line containing \"end\" to indicate the end of them.\n\
7763 Give \"silent\" as the first line to make the breakpoint silent;\n\
7764 then no output is printed when it is hit, except what the commands print.");
7765
7766   add_com ("condition", class_breakpoint, condition_command,
7767            "Specify breakpoint number N to break only if COND is true.\n\
7768 Usage is `condition N COND', where N is an integer and COND is an\n\
7769 expression to be evaluated whenever breakpoint N is reached.");
7770
7771   c = add_com ("tbreak", class_breakpoint, tbreak_command,
7772                "Set a temporary breakpoint.  Args like \"break\" command.\n\
7773 Like \"break\" except the breakpoint is only temporary,\n\
7774 so it will be deleted when hit.  Equivalent to \"break\" followed\n\
7775 by using \"enable delete\" on the breakpoint number.");
7776   set_cmd_completer (c, location_completer);
7777
7778   c = add_com ("hbreak", class_breakpoint, hbreak_command,
7779                "Set a hardware assisted  breakpoint. Args like \"break\" command.\n\
7780 Like \"break\" except the breakpoint requires hardware support,\n\
7781 some target hardware may not have this support.");
7782   set_cmd_completer (c, location_completer);
7783
7784   c = add_com ("thbreak", class_breakpoint, thbreak_command,
7785                "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
7786 Like \"hbreak\" except the breakpoint is only temporary,\n\
7787 so it will be deleted when hit.");
7788   set_cmd_completer (c, location_completer);
7789
7790   add_prefix_cmd ("enable", class_breakpoint, enable_command,
7791                   "Enable some breakpoints.\n\
7792 Give breakpoint numbers (separated by spaces) as arguments.\n\
7793 With no subcommand, breakpoints are enabled until you command otherwise.\n\
7794 This is used to cancel the effect of the \"disable\" command.\n\
7795 With a subcommand you can enable temporarily.",
7796                   &enablelist, "enable ", 1, &cmdlist);
7797   if (xdb_commands)
7798     add_com ("ab", class_breakpoint, enable_command,
7799              "Enable some breakpoints.\n\
7800 Give breakpoint numbers (separated by spaces) as arguments.\n\
7801 With no subcommand, breakpoints are enabled until you command otherwise.\n\
7802 This is used to cancel the effect of the \"disable\" command.\n\
7803 With a subcommand you can enable temporarily.");
7804
7805   add_com_alias ("en", "enable", class_breakpoint, 1);
7806
7807   add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
7808                          "Enable some breakpoints.\n\
7809 Give breakpoint numbers (separated by spaces) as arguments.\n\
7810 This is used to cancel the effect of the \"disable\" command.\n\
7811 May be abbreviated to simply \"enable\".\n",
7812                    &enablebreaklist, "enable breakpoints ", 1, &enablelist);
7813
7814   add_cmd ("once", no_class, enable_once_command,
7815            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
7816 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
7817            &enablebreaklist);
7818
7819   add_cmd ("delete", no_class, enable_delete_command,
7820            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
7821 If a breakpoint is hit while enabled in this fashion, it is deleted.",
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            &enablelist);
7828
7829   add_cmd ("once", no_class, enable_once_command,
7830            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
7831 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
7832            &enablelist);
7833
7834   add_prefix_cmd ("disable", class_breakpoint, disable_command,
7835                   "Disable some breakpoints.\n\
7836 Arguments are breakpoint numbers with spaces in between.\n\
7837 To disable all breakpoints, give no argument.\n\
7838 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
7839                   &disablelist, "disable ", 1, &cmdlist);
7840   add_com_alias ("dis", "disable", class_breakpoint, 1);
7841   add_com_alias ("disa", "disable", class_breakpoint, 1);
7842   if (xdb_commands)
7843     add_com ("sb", class_breakpoint, disable_command,
7844              "Disable some breakpoints.\n\
7845 Arguments are breakpoint numbers with spaces in between.\n\
7846 To disable all breakpoints, give no argument.\n\
7847 A disabled breakpoint is not forgotten, but has no effect until reenabled.");
7848
7849   add_cmd ("breakpoints", class_alias, disable_command,
7850            "Disable some breakpoints.\n\
7851 Arguments are breakpoint numbers with spaces in between.\n\
7852 To disable all breakpoints, give no argument.\n\
7853 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
7854 This command may be abbreviated \"disable\".",
7855            &disablelist);
7856
7857   add_prefix_cmd ("delete", class_breakpoint, delete_command,
7858                   "Delete some breakpoints or auto-display expressions.\n\
7859 Arguments are breakpoint numbers with spaces in between.\n\
7860 To delete all breakpoints, give no argument.\n\
7861 \n\
7862 Also a prefix command for deletion of other GDB objects.\n\
7863 The \"unset\" command is also an alias for \"delete\".",
7864                   &deletelist, "delete ", 1, &cmdlist);
7865   add_com_alias ("d", "delete", class_breakpoint, 1);
7866   if (xdb_commands)
7867     add_com ("db", class_breakpoint, delete_command,
7868              "Delete some breakpoints.\n\
7869 Arguments are breakpoint numbers with spaces in between.\n\
7870 To delete all breakpoints, give no argument.\n");
7871
7872   add_cmd ("breakpoints", class_alias, delete_command,
7873            "Delete some breakpoints or auto-display expressions.\n\
7874 Arguments are breakpoint numbers with spaces in between.\n\
7875 To delete all breakpoints, give no argument.\n\
7876 This command may be abbreviated \"delete\".",
7877            &deletelist);
7878
7879   add_com ("clear", class_breakpoint, clear_command,
7880            concat ("Clear breakpoint at specified line or function.\n\
7881 Argument may be line number, function name, or \"*\" and an address.\n\
7882 If line number is specified, all breakpoints in that line are cleared.\n\
7883 If function is specified, breakpoints at beginning of function are cleared.\n\
7884 If an address is specified, breakpoints at that address are cleared.\n\n",
7885                    "With no argument, clears all breakpoints in the line that the selected frame\n\
7886 is executing in.\n\
7887 \n\
7888 See also the \"delete\" command which clears breakpoints by number.", NULL));
7889
7890   c = add_com ("break", class_breakpoint, break_command,
7891                concat ("Set breakpoint at specified line or function.\n\
7892 Argument may be line number, function name, or \"*\" and an address.\n\
7893 If line number is specified, break at start of code for that line.\n\
7894 If function is specified, break at start of code for that function.\n\
7895 If an address is specified, break at that exact address.\n",
7896                    "With no arg, uses current execution address of selected stack frame.\n\
7897 This is useful for breaking on return to a stack frame.\n\
7898 \n\
7899 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
7900 \n\
7901 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
7902   set_cmd_completer (c, location_completer);
7903
7904   add_com_alias ("b", "break", class_run, 1);
7905   add_com_alias ("br", "break", class_run, 1);
7906   add_com_alias ("bre", "break", class_run, 1);
7907   add_com_alias ("brea", "break", class_run, 1);
7908
7909  if (xdb_commands)
7910     {
7911       add_com_alias ("ba", "break", class_breakpoint, 1);
7912       add_com_alias ("bu", "ubreak", class_breakpoint, 1);
7913     }
7914
7915   if (dbx_commands)
7916     {
7917       add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command,
7918         "Break in function/address or break at a line in the current file.",
7919                              &stoplist, "stop ", 1, &cmdlist);
7920       add_cmd ("in", class_breakpoint, stopin_command,
7921                "Break in function or address.\n", &stoplist);
7922       add_cmd ("at", class_breakpoint, stopat_command,
7923                "Break at a line in the current file.\n", &stoplist);
7924       add_com ("status", class_info, breakpoints_info,
7925                concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7926 The \"Type\" column indicates one of:\n\
7927 \tbreakpoint     - normal breakpoint\n\
7928 \twatchpoint     - watchpoint\n\
7929 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7930 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
7931 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
7932 address and file/line number respectively.\n\n",
7933                        "Convenience variable \"$_\" and default examine address for \"x\"\n\
7934 are set to the address of the last breakpoint listed.\n\n\
7935 Convenience variable \"$bpnum\" contains the number of the last\n\
7936 breakpoint set.", NULL));
7937     }
7938
7939   add_info ("breakpoints", breakpoints_info,
7940             concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7941 The \"Type\" column indicates one of:\n\
7942 \tbreakpoint     - normal breakpoint\n\
7943 \twatchpoint     - watchpoint\n\
7944 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7945 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
7946 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
7947 address and file/line number respectively.\n\n",
7948                     "Convenience variable \"$_\" and default examine address for \"x\"\n\
7949 are set to the address of the last breakpoint listed.\n\n\
7950 Convenience variable \"$bpnum\" contains the number of the last\n\
7951 breakpoint set.", NULL));
7952
7953   if (xdb_commands)
7954     add_com ("lb", class_breakpoint, breakpoints_info,
7955              concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
7956 The \"Type\" column indicates one of:\n\
7957 \tbreakpoint     - normal breakpoint\n\
7958 \twatchpoint     - watchpoint\n\
7959 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7960 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
7961 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
7962 address and file/line number respectively.\n\n",
7963                      "Convenience variable \"$_\" and default examine address for \"x\"\n\
7964 are set to the address of the last breakpoint listed.\n\n\
7965 Convenience variable \"$bpnum\" contains the number of the last\n\
7966 breakpoint set.", NULL));
7967
7968   add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
7969            concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
7970 The \"Type\" column indicates one of:\n\
7971 \tbreakpoint     - normal breakpoint\n\
7972 \twatchpoint     - watchpoint\n\
7973 \tlongjmp        - internal breakpoint used to step through longjmp()\n\
7974 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
7975 \tuntil          - internal breakpoint used by the \"until\" command\n\
7976 \tfinish         - internal breakpoint used by the \"finish\" command\n",
7977                    "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
7978 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
7979 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
7980 address and file/line number respectively.\n\n",
7981                    "Convenience variable \"$_\" and default examine address for \"x\"\n\
7982 are set to the address of the last breakpoint listed.\n\n\
7983 Convenience variable \"$bpnum\" contains the number of the last\n\
7984 breakpoint set.", NULL),
7985            &maintenanceinfolist);
7986
7987   add_com ("catch", class_breakpoint, catch_command,
7988            "Set catchpoints to catch events.\n\
7989 Raised signals may be caught:\n\
7990 \tcatch signal              - all signals\n\
7991 \tcatch signal <signame>    - a particular signal\n\
7992 Raised exceptions may be caught:\n\
7993 \tcatch throw               - all exceptions, when thrown\n\
7994 \tcatch throw <exceptname>  - a particular exception, when thrown\n\
7995 \tcatch catch               - all exceptions, when caught\n\
7996 \tcatch catch <exceptname>  - a particular exception, when caught\n\
7997 Thread or process events may be caught:\n\
7998 \tcatch thread_start        - any threads, just after creation\n\
7999 \tcatch thread_exit         - any threads, just before expiration\n\
8000 \tcatch thread_join         - any threads, just after joins\n\
8001 Process events may be caught:\n\
8002 \tcatch start               - any processes, just after creation\n\
8003 \tcatch exit                - any processes, just before expiration\n\
8004 \tcatch fork                - calls to fork()\n\
8005 \tcatch vfork               - calls to vfork()\n\
8006 \tcatch exec                - calls to exec()\n\
8007 Dynamically-linked library events may be caught:\n\
8008 \tcatch load                - loads of any library\n\
8009 \tcatch load <libname>      - loads of a particular library\n\
8010 \tcatch unload              - unloads of any library\n\
8011 \tcatch unload <libname>    - unloads of a particular library\n\
8012 The act of your program's execution stopping may also be caught:\n\
8013 \tcatch stop\n\n\
8014 C++ exceptions may be caught:\n\
8015 \tcatch throw               - all exceptions, when thrown\n\
8016 \tcatch catch               - all exceptions, when caught\n\
8017 \n\
8018 Do \"help set follow-fork-mode\" for info on debugging your program\n\
8019 after a fork or vfork is caught.\n\n\
8020 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
8021
8022   add_com ("tcatch", class_breakpoint, tcatch_command,
8023            "Set temporary catchpoints to catch events.\n\
8024 Args like \"catch\" command.\n\
8025 Like \"catch\" except the catchpoint is only temporary,\n\
8026 so it will be deleted when hit.  Equivalent to \"catch\" followed\n\
8027 by using \"enable delete\" on the catchpoint number.");
8028
8029   c = add_com ("watch", class_breakpoint, watch_command,
8030                "Set a watchpoint for an expression.\n\
8031 A watchpoint stops execution of your program whenever the value of\n\
8032 an expression changes.");
8033   set_cmd_completer (c, location_completer);
8034
8035   c = add_com ("rwatch", class_breakpoint, rwatch_command,
8036                "Set a read watchpoint for an expression.\n\
8037 A watchpoint stops execution of your program whenever the value of\n\
8038 an expression is read.");
8039   set_cmd_completer (c, location_completer);
8040
8041   c = add_com ("awatch", class_breakpoint, awatch_command,
8042                "Set a watchpoint for an expression.\n\
8043 A watchpoint stops execution of your program whenever the value of\n\
8044 an expression is either read or written.");
8045   set_cmd_completer (c, location_completer);
8046
8047   add_info ("watchpoints", breakpoints_info,
8048             "Synonym for ``info breakpoints''.");
8049
8050
8051   c = add_set_cmd ("can-use-hw-watchpoints", class_support, var_zinteger,
8052                    (char *) &can_use_hw_watchpoints,
8053                    "Set debugger's willingness to use watchpoint hardware.\n\
8054 If zero, gdb will not use hardware for new watchpoints, even if\n\
8055 such is available.  (However, any hardware watchpoints that were\n\
8056 created before setting this to nonzero, will continue to use watchpoint\n\
8057 hardware.)",
8058                    &setlist);
8059   add_show_from_set (c, &showlist);
8060
8061   can_use_hw_watchpoints = 1;
8062
8063   add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, "\
8064 Breakpoint specific settings\n\
8065 Configure various breakpoint-specific variables such as\n\
8066 pending breakpoint behavior",
8067                   &breakpoint_set_cmdlist, "set breakpoint ",
8068                   0/*allow-unknown*/, &setlist);
8069   add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, "\
8070 Breakpoint specific settings\n\
8071 Configure various breakpoint-specific variables such as\n\
8072 pending breakpoint behavior",
8073                   &breakpoint_show_cmdlist, "show breakpoint ",
8074                   0/*allow-unknown*/, &showlist);
8075
8076   add_setshow_auto_boolean_cmd ("pending", no_class, &pending_break_support, "\
8077 Set debugger's behavior regarding pending breakpoints.\n\
8078 If on, an unrecognized breakpoint location will cause gdb to create a\n\
8079 pending breakpoint.  If off, an unrecognized breakpoint location results in\n\
8080 an error.  If auto, an unrecognized breakpoint location results in a\n\
8081 user-query to see if a pending breakpoint should be created.","\
8082 Show 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                                 NULL, NULL,
8088                                 &breakpoint_set_cmdlist,
8089                                 &breakpoint_show_cmdlist);
8090
8091   pending_break_support = AUTO_BOOLEAN_AUTO;
8092 }