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