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