OSDN Git Service

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