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