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