* breakpoint.c, breakpoint.h (breakpoint_init_inferior): New function
[platform/upstream/binutils.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2    Copyright 1986, 1987, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include "defs.h"
21 #include <ctype.h>
22 #include "symtab.h"
23 #include "frame.h"
24 #include "breakpoint.h"
25 #include "gdbtypes.h"
26 #include "expression.h"
27 #include "gdbcore.h"
28 #include "gdbcmd.h"
29 #include "value.h"
30 #include "ctype.h"
31 #include "command.h"
32 #include "inferior.h"
33 #include "target.h"
34 #include "language.h"
35 #include <string.h>
36 #include "demangle.h"
37
38 /* local function prototypes */
39
40 static void
41 catch_command_1 PARAMS ((char *, int, int));
42
43 static void
44 enable_delete_command PARAMS ((char *, int));
45
46 static void
47 enable_delete_breakpoint PARAMS ((struct breakpoint *));
48
49 static void
50 enable_once_command PARAMS ((char *, int));
51
52 static void
53 enable_once_breakpoint PARAMS ((struct breakpoint *));
54
55 static void
56 disable_command PARAMS ((char *, int));
57
58 static void
59 disable_breakpoint PARAMS ((struct breakpoint *));
60
61 static void
62 enable_command PARAMS ((char *, int));
63
64 static void
65 enable_breakpoint PARAMS ((struct breakpoint *));
66
67 static void
68 map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
69
70 static void
71 ignore_command PARAMS ((char *, int));
72
73 static int
74 breakpoint_re_set_one PARAMS ((char *));
75
76 static void
77 delete_command PARAMS ((char *, int));
78
79 static void
80 clear_command PARAMS ((char *, int));
81
82 static void
83 catch_command PARAMS ((char *, int));
84
85 static struct symtabs_and_lines
86 get_catch_sals PARAMS ((int));
87
88 static void
89 watch_command PARAMS ((char *, int));
90
91 static void
92 tbreak_command PARAMS ((char *, int));
93
94 static void
95 break_command_1 PARAMS ((char *, int, int));
96
97 static void
98 mention PARAMS ((struct breakpoint *));
99
100 static struct breakpoint *
101 set_raw_breakpoint PARAMS ((struct symtab_and_line));
102
103 static void
104 check_duplicates PARAMS ((CORE_ADDR));
105
106 static void
107 describe_other_breakpoints PARAMS ((CORE_ADDR));
108
109 static void
110 breakpoints_info PARAMS ((char *, int));
111
112 static void
113 breakpoint_1 PARAMS ((int, int));
114
115 static bpstat
116 bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
117
118 static int
119 breakpoint_cond_eval PARAMS ((char *));
120
121 static void
122 cleanup_executing_breakpoints PARAMS ((int));
123
124 static void
125 commands_command PARAMS ((char *, int));
126
127 static void
128 condition_command PARAMS ((char *, int));
129
130 static int
131 get_number PARAMS ((char **));
132
133 static void
134 set_breakpoint_count PARAMS ((int));
135
136
137 extern int addressprint;                /* Print machine addresses? */
138 extern int demangle;                    /* Print de-mangled symbol names? */
139
140 /* Are we executing breakpoint commands?  */
141 static int executing_breakpoint_commands;
142
143 /* Walk the following statement or block through all breakpoints.
144    ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
145    breakpoint.  */
146
147 #define ALL_BREAKPOINTS(b)  for (b = breakpoint_chain; b; b = b->next)
148
149 #define ALL_BREAKPOINTS_SAFE(b,tmp)     \
150         for (b = breakpoint_chain;      \
151              b? (tmp=b->next, 1): 0;    \
152              b = tmp)
153
154 /* Chain of all breakpoints defined.  */
155
156 struct breakpoint *breakpoint_chain;
157
158 /* Number of last breakpoint made.  */
159
160 static int breakpoint_count;
161
162 /* Set breakpoint count to NUM.  */
163 static void
164 set_breakpoint_count (num)
165      int num;
166 {
167   breakpoint_count = num;
168   set_internalvar (lookup_internalvar ("bpnum"),
169                    value_from_longest (builtin_type_int, (LONGEST) num));
170 }
171
172 /* Default address, symtab and line to put a breakpoint at
173    for "break" command with no arg.
174    if default_breakpoint_valid is zero, the other three are
175    not valid, and "break" with no arg is an error.
176
177    This set by print_stack_frame, which calls set_default_breakpoint.  */
178
179 int default_breakpoint_valid;
180 CORE_ADDR default_breakpoint_address;
181 struct symtab *default_breakpoint_symtab;
182 int default_breakpoint_line;
183
184 /* Flag indicating extra verbosity for xgdb.  */
185 extern int xgdb_verbose;
186 \f
187 /* *PP is a string denoting a breakpoint.  Get the number of the breakpoint.
188    Advance *PP after the string and any trailing whitespace.
189
190    Currently the string can either be a number or "$" followed by the name
191    of a convenience variable.  Making it an expression wouldn't work well
192    for map_breakpoint_numbers (e.g. "4 + 5 + 6").  */
193 static int
194 get_number (pp)
195      char **pp;
196 {
197   int retval;
198   char *p = *pp;
199
200   if (p == NULL)
201     /* Empty line means refer to the last breakpoint.  */
202     return breakpoint_count;
203   else if (*p == '$')
204     {
205       /* Make a copy of the name, so we can null-terminate it
206          to pass to lookup_internalvar().  */
207       char *varname;
208       char *start = ++p;
209       value val;
210
211       while (isalnum (*p) || *p == '_')
212         p++;
213       varname = (char *) alloca (p - start + 1);
214       strncpy (varname, start, p - start);
215       varname[p - start] = '\0';
216       val = value_of_internalvar (lookup_internalvar (varname));
217       if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
218         error (
219 "Convenience variables used to specify breakpoints must have integer values."
220                );
221       retval = (int) value_as_long (val);
222     }
223   else
224     {
225       if (*p == '-')
226         ++p;
227       while (*p >= '0' && *p <= '9')
228         ++p;
229       if (p == *pp)
230         /* There is no number here.  (e.g. "cond a == b").  */
231         error_no_arg ("breakpoint number");
232       retval = atoi (*pp);
233     }
234   if (!(isspace (*p) || *p == '\0'))
235     error ("breakpoint number expected");
236   while (isspace (*p))
237     p++;
238   *pp = p;
239   return retval;
240 }
241 \f
242 /* condition N EXP -- set break condition of breakpoint N to EXP.  */
243
244 static void
245 condition_command (arg, from_tty)
246      char *arg;
247      int from_tty;
248 {
249   register struct breakpoint *b;
250   char *p;
251   register int bnum;
252
253   if (arg == 0)
254     error_no_arg ("breakpoint number");
255
256   p = arg;
257   bnum = get_number (&p);
258
259   ALL_BREAKPOINTS (b)
260     if (b->number == bnum)
261       {
262         if (b->cond)
263           {
264             free ((PTR)b->cond);
265             b->cond = 0;
266           }
267         if (b->cond_string != NULL)
268           free ((PTR)b->cond_string);
269
270         if (*p == 0)
271           {
272             b->cond = 0;
273             b->cond_string = NULL;
274             if (from_tty)
275               printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
276           }
277         else
278           {
279             arg = p;
280             /* I don't know if it matters whether this is the string the user
281                typed in or the decompiled expression.  */
282             b->cond_string = savestring (arg, strlen (arg));
283             b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
284             if (*arg)
285               error ("Junk at end of expression");
286           }
287         return;
288       }
289
290   error ("No breakpoint number %d.", bnum);
291 }
292
293 /* ARGSUSED */
294 static void
295 commands_command (arg, from_tty)
296      char *arg;
297      int from_tty;
298 {
299   register struct breakpoint *b;
300   char *p;
301   register int bnum;
302   struct command_line *l;
303
304   /* If we allowed this, we would have problems with when to
305      free the storage, if we change the commands currently
306      being read from.  */
307
308   if (executing_breakpoint_commands)
309     error ("Can't use the \"commands\" command among a breakpoint's commands.");
310
311   p = arg;
312   bnum = get_number (&p);
313   if (p && *p)
314     error ("Unexpected extra arguments following breakpoint number.");
315       
316   ALL_BREAKPOINTS (b)
317     if (b->number == bnum)
318       {
319         if (from_tty && input_from_terminal_p ())
320           printf_filtered ("Type commands for when breakpoint %d is hit, one per line.\n\
321 End with a line saying just \"end\".\n", bnum);
322         l = read_command_lines ();
323         free_command_lines (&b->commands);
324         b->commands = l;
325         return;
326       }
327   error ("No breakpoint number %d.", bnum);
328 }
329 \f
330 extern int memory_breakpoint_size; /* from mem-break.c */
331
332 /* Like target_read_memory() but if breakpoints are inserted, return
333    the shadow contents instead of the breakpoints themselves.
334
335    Read "memory data" from whatever target or inferior we have. 
336    Returns zero if successful, errno value if not.  EIO is used
337    for address out of bounds.  If breakpoints are inserted, returns
338    shadow contents, not the breakpoints themselves.  From breakpoint.c.  */
339
340 int
341 read_memory_nobpt (memaddr, myaddr, len)
342      CORE_ADDR memaddr;
343      char *myaddr;
344      unsigned len;
345 {
346   int status;
347   struct breakpoint *b;
348
349   if (memory_breakpoint_size < 0)
350     /* No breakpoints on this machine.  FIXME: This should be
351        dependent on the debugging target.  Probably want
352        target_insert_breakpoint to return a size, saying how many
353        bytes of the shadow contents are used, or perhaps have
354        something like target_xfer_shadow.  */
355     return target_read_memory (memaddr, myaddr, len);
356   
357   ALL_BREAKPOINTS (b)
358     {
359       if (b->type == bp_watchpoint || !b->inserted)
360         continue;
361       else if (b->address + memory_breakpoint_size <= memaddr)
362         /* The breakpoint is entirely before the chunk of memory
363            we are reading.  */
364         continue;
365       else if (b->address >= memaddr + len)
366         /* The breakpoint is entirely after the chunk of memory we
367            are reading.  */
368         continue;
369       else
370         {
371           /* Copy the breakpoint from the shadow contents, and recurse
372              for the things before and after.  */
373           
374           /* Addresses and length of the part of the breakpoint that
375              we need to copy.  */
376           CORE_ADDR membpt = b->address;
377           unsigned int bptlen = memory_breakpoint_size;
378           /* Offset within shadow_contents.  */
379           int bptoffset = 0;
380           
381           if (membpt < memaddr)
382             {
383               /* Only copy the second part of the breakpoint.  */
384               bptlen -= memaddr - membpt;
385               bptoffset = memaddr - membpt;
386               membpt = memaddr;
387             }
388
389           if (membpt + bptlen > memaddr + len)
390             {
391               /* Only copy the first part of the breakpoint.  */
392               bptlen -= (membpt + bptlen) - (memaddr + len);
393             }
394
395           memcpy (myaddr + membpt - memaddr, 
396                   b->shadow_contents + bptoffset, bptlen);
397
398           if (membpt > memaddr)
399             {
400               /* Copy the section of memory before the breakpoint.  */
401               status = read_memory_nobpt (memaddr, myaddr, membpt - memaddr);
402               if (status != 0)
403                 return status;
404             }
405
406           if (membpt + bptlen < memaddr + len)
407             {
408               /* Copy the section of memory after the breakpoint.  */
409               status = read_memory_nobpt
410                 (membpt + bptlen,
411                  myaddr + membpt + bptlen - memaddr,
412                  memaddr + len - (membpt + bptlen));
413               if (status != 0)
414                 return status;
415             }
416           return 0;
417         }
418     }
419   /* Nothing overlaps.  Just call read_memory_noerr.  */
420   return target_read_memory (memaddr, myaddr, len);
421 }
422 \f
423 /* insert_breakpoints is used when starting or continuing the program.
424    remove_breakpoints is used when the program stops.
425    Both return zero if successful,
426    or an `errno' value if could not write the inferior.  */
427
428 int
429 insert_breakpoints ()
430 {
431   register struct breakpoint *b;
432   int val = 0;
433   int disabled_breaks = 0;
434
435   ALL_BREAKPOINTS (b)
436     if (b->type != bp_watchpoint
437         && b->enable != disabled
438         && ! b->inserted
439         && ! b->duplicate)
440       {
441         val = target_insert_breakpoint(b->address, b->shadow_contents);
442         if (val)
443           {
444             /* Can't set the breakpoint.  */
445 #if defined (DISABLE_UNSETTABLE_BREAK)
446             if (DISABLE_UNSETTABLE_BREAK (b->address))
447               {
448                 val = 0;
449                 b->enable = disabled;
450                 if (!disabled_breaks)
451                   {
452                     fprintf (stderr,
453                          "Cannot insert breakpoint %d:\n", b->number);
454                     printf_filtered ("Disabling shared library breakpoints:\n");
455                   }
456                 disabled_breaks = 1;
457                 printf_filtered ("%d ", b->number);
458               }
459             else
460 #endif
461               {
462                 fprintf (stderr, "Cannot insert breakpoint %d:\n", b->number);
463 #ifdef ONE_PROCESS_WRITETEXT
464                 fprintf (stderr,
465                   "The same program may be running in another process.\n");
466 #endif
467                 memory_error (val, b->address); /* which bombs us out */
468               }
469           }
470         else
471           b->inserted = 1;
472       }
473   if (disabled_breaks)
474     printf_filtered ("\n");
475   return val;
476 }
477
478 int
479 remove_breakpoints ()
480 {
481   register struct breakpoint *b;
482   int val;
483
484 #ifdef BREAKPOINT_DEBUG
485   printf ("Removing breakpoints.\n");
486 #endif /* BREAKPOINT_DEBUG */
487
488   ALL_BREAKPOINTS (b)
489     if (b->type != bp_watchpoint && b->inserted)
490       {
491         val = target_remove_breakpoint(b->address, b->shadow_contents);
492         if (val)
493           return val;
494         b->inserted = 0;
495 #ifdef BREAKPOINT_DEBUG
496         printf ("Removed breakpoint at %s",
497                 local_hex_string((unsigned long) b->address));
498         printf (", shadow %s",
499                 local_hex_string((unsigned long) b->shadow_contents[0]));
500         printf (", %s.\n",
501                 local_hex_string((unsigned long) b->shadow_contents[1]));
502 #endif /* BREAKPOINT_DEBUG */
503       }
504
505   return 0;
506 }
507
508 /* Clear the "inserted" flag in all breakpoints.  */
509
510 void
511 mark_breakpoints_out ()
512 {
513   register struct breakpoint *b;
514
515   ALL_BREAKPOINTS (b)
516     b->inserted = 0;
517 }
518
519 /* Clear the "inserted" flag in all breakpoints and delete any breakpoints
520    which should go away between runs of the program.  */
521
522 void
523 breakpoint_init_inferior ()
524 {
525   register struct breakpoint *b, *temp;
526
527   ALL_BREAKPOINTS_SAFE (b, temp)
528     {
529       b->inserted = 0;
530
531       /* If the call dummy breakpoint is at the entry point it will
532          cause problems when the inferior is rerun, so we better
533          get rid of it.  */
534       if (b->type == bp_call_dummy)
535         delete_breakpoint (b);
536     }
537 }
538
539 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
540    When continuing from a location with a breakpoint,
541    we actually single step once before calling insert_breakpoints.  */
542
543 int
544 breakpoint_here_p (pc)
545      CORE_ADDR pc;
546 {
547   register struct breakpoint *b;
548
549   ALL_BREAKPOINTS (b)
550     if (b->enable != disabled && b->address == pc)
551       return 1;
552
553   return 0;
554 }
555 \f
556 /* bpstat stuff.  External routines' interfaces are documented
557    in breakpoint.h.  */
558
559 /* Clear a bpstat so that it says we are not at any breakpoint.
560    Also free any storage that is part of a bpstat.  */
561
562 void
563 bpstat_clear (bsp)
564      bpstat *bsp;
565 {
566   bpstat p;
567   bpstat q;
568
569   if (bsp == 0)
570     return;
571   p = *bsp;
572   while (p != NULL)
573     {
574       q = p->next;
575       if (p->old_val != NULL)
576         value_free (p->old_val);
577       free ((PTR)p);
578       p = q;
579     }
580   *bsp = NULL;
581 }
582
583 /* Return a copy of a bpstat.  Like "bs1 = bs2" but all storage that
584    is part of the bpstat is copied as well.  */
585
586 bpstat
587 bpstat_copy (bs)
588      bpstat bs;
589 {
590   bpstat p = NULL;
591   bpstat tmp;
592   bpstat retval = NULL;
593
594   if (bs == NULL)
595     return bs;
596
597   for (; bs != NULL; bs = bs->next)
598     {
599       tmp = (bpstat) xmalloc (sizeof (*tmp));
600       memcpy (tmp, bs, sizeof (*tmp));
601       if (p == NULL)
602         /* This is the first thing in the chain.  */
603         retval = tmp;
604       else
605         p->next = tmp;
606       p = tmp;
607     }
608   p->next = NULL;
609   return retval;
610 }
611
612 /* Find the bpstat associated with this breakpoint */
613
614 bpstat
615 bpstat_find_breakpoint(bsp, breakpoint)
616      bpstat bsp;
617      struct breakpoint *breakpoint;
618 {
619   if (bsp == NULL) return NULL;
620
621   for (;bsp != NULL; bsp = bsp->next) {
622     if (bsp->breakpoint_at == breakpoint) return bsp;
623   }
624   return NULL;
625 }
626
627 /* Return the breakpoint number of the first breakpoint we are stopped
628    at.  *BSP upon return is a bpstat which points to the remaining
629    breakpoints stopped at (but which is not guaranteed to be good for
630    anything but further calls to bpstat_num).
631    Return 0 if passed a bpstat which does not indicate any breakpoints.  */
632
633 int
634 bpstat_num (bsp)
635      bpstat *bsp;
636 {
637   struct breakpoint *b;
638
639   if ((*bsp) == NULL)
640     return 0;                   /* No more breakpoint values */
641   else
642     {
643       b = (*bsp)->breakpoint_at;
644       *bsp = (*bsp)->next;
645       if (b == NULL)
646         return -1;              /* breakpoint that's been deleted since */
647       else
648         return b->number;       /* We have its number */
649     }
650 }
651
652 /* Modify BS so that the actions will not be performed.  */
653
654 void
655 bpstat_clear_actions (bs)
656      bpstat bs;
657 {
658   for (; bs != NULL; bs = bs->next)
659     {
660       bs->commands = NULL;
661       if (bs->old_val != NULL)
662         {
663           value_free (bs->old_val);
664           bs->old_val = NULL;
665         }
666     }
667 }
668
669 /* Stub for cleaning up our state if we error-out of a breakpoint command */
670 /* ARGSUSED */
671 static void
672 cleanup_executing_breakpoints (ignore)
673      int ignore;
674 {
675   executing_breakpoint_commands = 0;
676 }
677
678 /* Execute all the commands associated with all the breakpoints at this
679    location.  Any of these commands could cause the process to proceed
680    beyond this point, etc.  We look out for such changes by checking
681    the global "breakpoint_proceeded" after each command.  */
682
683 void
684 bpstat_do_actions (bsp)
685      bpstat *bsp;
686 {
687   bpstat bs;
688   struct cleanup *old_chain;
689
690   executing_breakpoint_commands = 1;
691   old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
692
693 top:
694   bs = *bsp;
695
696   breakpoint_proceeded = 0;
697   for (; bs != NULL; bs = bs->next)
698     {
699       while (bs->commands)
700         {
701           char *line = bs->commands->line;
702           bs->commands = bs->commands->next;
703           execute_command (line, 0);
704           /* If the inferior is proceeded by the command, bomb out now.
705              The bpstat chain has been blown away by wait_for_inferior.
706              But since execution has stopped again, there is a new bpstat
707              to look at, so start over.  */
708           if (breakpoint_proceeded)
709             goto top;
710         }
711     }
712
713   executing_breakpoint_commands = 0;
714   discard_cleanups (old_chain);
715 }
716
717 /* This is the normal print_it function for a bpstat.  In the future,
718    much of this logic could (should?) be moved to bpstat_stop_status,
719    by having it set different print_it functions.  */
720
721 static int
722 print_it_normal (bs)
723      bpstat bs;
724 {
725   /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
726      which has since been deleted.  */
727   if (bs->breakpoint_at == NULL
728       || (bs->breakpoint_at->type != bp_breakpoint
729           && bs->breakpoint_at->type != bp_watchpoint))
730     return 0;
731
732   if (bs->breakpoint_at->type == bp_breakpoint)
733     {
734       /* I think the user probably only wants to see one breakpoint
735          number, not all of them.  */
736       printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
737       return 0;
738     }
739       
740   if (bs->old_val != NULL)
741     {
742       printf_filtered ("\nWatchpoint %d, ", bs->breakpoint_at->number);
743       print_expression (bs->breakpoint_at->exp, stdout);
744       printf_filtered ("\nOld value = ");
745       value_print (bs->old_val, stdout, 0, Val_pretty_default);
746       printf_filtered ("\nNew value = ");
747       value_print (bs->breakpoint_at->val, stdout, 0,
748                    Val_pretty_default);
749       printf_filtered ("\n");
750       value_free (bs->old_val);
751       bs->old_val = NULL;
752       return 0;
753     }
754   /* We can't deal with it.  Maybe another member of the bpstat chain can.  */
755   return -1;
756 }
757
758 /* Print a message indicating what happened.  Returns nonzero to
759    say that only the source line should be printed after this (zero
760    return means print the frame as well as the source line).  */
761 /* Currently we always return zero.  */
762 int
763 bpstat_print (bs)
764      bpstat bs;
765 {
766   int val;
767   
768   if (bs == NULL)
769     return 0;
770
771   val = (*bs->print_it) (bs);
772   if (val >= 0)
773     return val;
774   
775   /* Maybe another breakpoint in the chain caused us to stop.
776      (Currently all watchpoints go on the bpstat whether hit or
777      not.  That probably could (should) be changed, provided care is taken
778      with respect to bpstat_explains_signal).  */
779   if (bs->next)
780     return bpstat_print (bs->next);
781
782   /* We reached the end of the chain without printing anything.  */
783   return 0;
784 }
785
786 /* Evaluate the expression EXP and return 1 if value is zero.
787    This is used inside a catch_errors to evaluate the breakpoint condition. 
788    The argument is a "struct expression *" that has been cast to char * to 
789    make it pass through catch_errors.  */
790
791 static int
792 breakpoint_cond_eval (exp)
793      char *exp;
794 {
795   return !value_true (evaluate_expression ((struct expression *)exp));
796 }
797
798 /* Allocate a new bpstat and chain it to the current one.  */
799
800 static bpstat
801 bpstat_alloc (b, cbs)
802      register struct breakpoint *b;
803      bpstat cbs;                        /* Current "bs" value */
804 {
805   bpstat bs;
806
807   bs = (bpstat) xmalloc (sizeof (*bs));
808   cbs->next = bs;
809   bs->breakpoint_at = b;
810   /* If the condition is false, etc., don't do the commands.  */
811   bs->commands = NULL;
812   bs->old_val = NULL;
813   bs->print_it = print_it_normal;
814   return bs;
815 }
816 \f
817 /* Return the frame which we can use to evaluate the expression
818    whose valid block is valid_block, or NULL if not in scope.
819
820    This whole concept is probably not the way to do things (it is incredibly
821    slow being the main reason, not to mention fragile (e.g. the sparc
822    frame pointer being fetched as 0 bug causes it to stop)).  Instead,
823    introduce a version of "struct frame" which survives over calls to the
824    inferior, but which is better than FRAME_ADDR in the sense that it lets
825    us evaluate expressions relative to that frame (on some machines, it
826    can just be a FRAME_ADDR).  Save one of those instead of (or in addition
827    to) the exp_valid_block, and then use it to evaluate the watchpoint
828    expression, with no need to do all this backtracing every time.
829
830    Or better yet, what if it just copied the struct frame and its next
831    frame?  Off the top of my head, I would think that would work
832    because things like (a29k) rsize and msize, or (sparc) bottom just
833    depend on the frame, and aren't going to be different just because
834    the inferior has done something.  Trying to recalculate them
835    strikes me as a lot of work, possibly even impossible.  Saving the
836    next frame is needed at least on a29k, where get_saved_register
837    uses fi->next->saved_msp.  For figuring out whether that frame is
838    still on the stack, I guess this needs to be machine-specific (e.g.
839    a29k) but I think
840
841       read_fp () INNER_THAN watchpoint_frame->frame
842
843    would generally work.
844
845    Of course the scope of the expression could be less than a whole
846    function; perhaps if the innermost frame is the one which the
847    watchpoint is relative to (another machine-specific thing, usually
848
849       FRAMELESS_FUNCTION_INVOCATION (get_current_frame(), fromleaf)
850       read_fp () == wp_frame->frame
851       && !fromleaf
852
853    ), *then* it could do a
854
855       contained_in (get_current_block (), wp->exp_valid_block).
856
857       */
858
859 FRAME
860 within_scope (valid_block)
861      struct block *valid_block;
862 {
863   FRAME fr = get_current_frame ();
864   struct frame_info *fi = get_frame_info (fr);
865   CORE_ADDR func_start;
866
867   /* If caller_pc_valid is true, we are stepping through
868      a function prologue, which is bounded by callee_func_start
869      (inclusive) and callee_prologue_end (exclusive).
870      caller_pc is the pc of the caller.
871
872      Yes, this is hairy.  */
873   static int caller_pc_valid = 0;
874   static CORE_ADDR caller_pc;
875   static CORE_ADDR callee_func_start;
876   static CORE_ADDR callee_prologue_end;
877   
878   find_pc_partial_function (fi->pc, (PTR)NULL, &func_start, (CORE_ADDR *)NULL);
879   func_start += FUNCTION_START_OFFSET;
880   if (fi->pc == func_start)
881     {
882       /* We just called a function.  The only other case I
883          can think of where the pc would equal the pc of the
884          start of a function is a frameless function (i.e.
885          no prologue) where we branch back to the start
886          of the function.  In that case, SKIP_PROLOGUE won't
887          find one, and we'll clear caller_pc_valid a few lines
888          down.  */
889       caller_pc_valid = 1;
890       caller_pc = SAVED_PC_AFTER_CALL (fr);
891       callee_func_start = func_start;
892       SKIP_PROLOGUE (func_start);
893       callee_prologue_end = func_start;
894     }
895   if (caller_pc_valid)
896     {
897       if (fi->pc < callee_func_start
898           || fi->pc >= callee_prologue_end)
899         caller_pc_valid = 0;
900     }
901           
902   if (contained_in (block_for_pc (caller_pc_valid
903                                   ? caller_pc
904                                   : fi->pc),
905                     valid_block))
906     {
907       return fr;
908     }
909   fr = get_prev_frame (fr);
910           
911   /* If any active frame is in the exp_valid_block, then it's
912      OK.  Note that this might not be the same invocation of
913      the exp_valid_block that we were watching a little while
914      ago, or the same one as when the watchpoint was set (e.g.
915      we are watching a local variable in a recursive function.
916      When we return from a recursive invocation, then we are
917      suddenly watching a different instance of the variable).
918
919      At least for now I am going to consider this a feature.  */
920   for (; fr != NULL; fr = get_prev_frame (fr))
921     {
922       fi = get_frame_info (fr);
923       if (contained_in (block_for_pc (fi->pc),
924                         valid_block))
925         {
926           return fr;
927         }
928     }
929   return NULL;
930 }
931
932 /* Possible return values for watchpoint_check (this can't be an enum
933    because of check_errors).  */
934 /* The watchpoint has been disabled.  */
935 #define WP_DISABLED 1
936 /* The value has changed.  */
937 #define WP_VALUE_CHANGED 2
938 /* The value has not changed.  */
939 #define WP_VALUE_NOT_CHANGED 3
940
941 /* Check watchpoint condition.  */
942 static int
943 watchpoint_check (p)
944      char *p;
945 {
946   bpstat bs = (bpstat) p;
947   FRAME fr;
948
949   int within_current_scope;
950   if (bs->breakpoint_at->exp_valid_block == NULL)
951     within_current_scope = 1;
952   else
953     {
954       fr = within_scope (bs->breakpoint_at->exp_valid_block);
955       within_current_scope = fr != NULL;
956       if (within_current_scope)
957         /* If we end up stopping, the current frame will get selected
958            in normal_stop.  So this call to select_frame won't affect
959            the user.  */
960         select_frame (fr, -1);
961     }
962       
963   if (within_current_scope)
964     {
965       /* We use value_{,free_to_}mark because it could be a
966          *long* time before we return to the command level and
967          call free_all_values.  We can't call free_all_values because
968          we might be in the middle of evaluating a function call.  */
969
970       value mark = value_mark ();
971       value new_val = evaluate_expression (bs->breakpoint_at->exp);
972       if (!value_equal (bs->breakpoint_at->val, new_val))
973         {
974           release_value (new_val);
975           value_free_to_mark (mark);
976           bs->old_val = bs->breakpoint_at->val;
977           bs->breakpoint_at->val = new_val;
978           /* We will stop here */
979           return WP_VALUE_CHANGED;
980         }
981       else
982         {
983           /* Nothing changed, don't do anything.  */
984           value_free_to_mark (mark);
985           /* We won't stop here */
986           return WP_VALUE_NOT_CHANGED;
987         }
988     }
989   else
990     {
991       /* This seems like the only logical thing to do because
992          if we temporarily ignored the watchpoint, then when
993          we reenter the block in which it is valid it contains
994          garbage (in the case of a function, it may have two
995          garbage values, one before and one after the prologue).
996          So we can't even detect the first assignment to it and
997          watch after that (since the garbage may or may not equal
998          the first value assigned).  */
999       bs->breakpoint_at->enable = disabled;
1000       printf_filtered ("\
1001 Watchpoint %d disabled because the program has left the block in\n\
1002 which its expression is valid.\n", bs->breakpoint_at->number);
1003       return WP_DISABLED;
1004     }
1005 }
1006
1007 /* This is used when everything which needs to be printed has
1008    already been printed.  But we still want to print the frame.  */
1009 static int
1010 print_it_done (bs)
1011      bpstat bs;
1012 {
1013   return 0;
1014 }
1015
1016 /* This is used when nothing should be printed for this bpstat entry.  */
1017
1018 static int
1019 print_it_noop (bs)
1020      bpstat bs;
1021 {
1022   return -1;
1023 }
1024
1025 /* Get a bpstat associated with having just stopped at address *PC
1026    and frame address FRAME_ADDRESS.  Update *PC to point at the
1027    breakpoint (if we hit a breakpoint).  NOT_A_BREAKPOINT is nonzero
1028    if this is known to not be a real breakpoint (it could still be a
1029    watchpoint, though).  */
1030
1031 /* Determine whether we stopped at a breakpoint, etc, or whether we
1032    don't understand this stop.  Result is a chain of bpstat's such that:
1033
1034         if we don't understand the stop, the result is a null pointer.
1035
1036         if we understand why we stopped, the result is not null.
1037
1038         Each element of the chain refers to a particular breakpoint or
1039         watchpoint at which we have stopped.  (We may have stopped for
1040         several reasons concurrently.)
1041
1042         Each element of the chain has valid next, breakpoint_at,
1043         commands, FIXME??? fields.
1044
1045  */
1046
1047 bpstat
1048 bpstat_stop_status (pc, frame_address, not_a_breakpoint)
1049      CORE_ADDR *pc;
1050      FRAME_ADDR frame_address;
1051      int not_a_breakpoint;
1052 {
1053   register struct breakpoint *b;
1054   CORE_ADDR bp_addr;
1055 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1056   /* True if we've hit a breakpoint (as opposed to a watchpoint).  */
1057   int real_breakpoint = 0;
1058 #endif
1059   /* Root of the chain of bpstat's */
1060   struct bpstat root_bs[1];
1061   /* Pointer to the last thing in the chain currently.  */
1062   bpstat bs = root_bs;
1063
1064   /* Get the address where the breakpoint would have been.  */
1065   bp_addr = *pc - DECR_PC_AFTER_BREAK;
1066
1067   ALL_BREAKPOINTS (b)
1068     {
1069       if (b->enable == disabled)
1070         continue;
1071
1072       if (b->type != bp_watchpoint && b->address != bp_addr)
1073         continue;
1074
1075       if (b->type != bp_watchpoint && not_a_breakpoint)
1076         continue;
1077
1078       /* Come here if it's a watchpoint, or if the break address matches */
1079
1080       bs = bpstat_alloc (b, bs);        /* Alloc a bpstat to explain stop */
1081
1082       bs->stop = 1;
1083       bs->print = 1;
1084
1085       if (b->type == bp_watchpoint)
1086         {
1087           static char message1[] =
1088             "Error evaluating expression for watchpoint %d\n";
1089           char message[sizeof (message1) + 30 /* slop */];
1090           sprintf (message, message1, b->number);
1091           switch (catch_errors (watchpoint_check, (char *) bs, message,
1092                                 RETURN_MASK_ALL))
1093             {
1094             case WP_DISABLED:
1095               /* We've already printed what needs to be printed.  */
1096               bs->print_it = print_it_done;
1097               /* Stop.  */
1098               break;
1099             case WP_VALUE_CHANGED:
1100               /* Stop.  */
1101               break;
1102             case WP_VALUE_NOT_CHANGED:
1103               /* Don't stop.  */
1104               bs->print_it = print_it_noop;
1105               bs->stop = 0;
1106               continue;
1107             default:
1108               /* Can't happen.  */
1109               /* FALLTHROUGH */
1110             case 0:
1111               /* Error from catch_errors.  */
1112               b->enable = disabled;
1113               printf_filtered ("Watchpoint %d disabled.\n", b->number);
1114               /* We've already printed what needs to be printed.  */
1115               bs->print_it = print_it_done;
1116               /* Stop.  */
1117               break;
1118             }
1119         }
1120 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1121       else
1122         real_breakpoint = 1;
1123 #endif
1124
1125       if (b->frame && b->frame != frame_address)
1126         bs->stop = 0;
1127       else
1128         {
1129           int value_is_zero = 0;
1130
1131           if (b->cond)
1132             {
1133               /* Need to select the frame, with all that implies
1134                  so that the conditions will have the right context.  */
1135               select_frame (get_current_frame (), 0);
1136               value_is_zero
1137                 = catch_errors (breakpoint_cond_eval, (char *)(b->cond),
1138                                 "Error in testing breakpoint condition:\n",
1139                                 RETURN_MASK_ALL);
1140                                 /* FIXME-someday, should give breakpoint # */
1141               free_all_values ();
1142             }
1143           if (b->cond && value_is_zero)
1144             {
1145               bs->stop = 0;
1146             }
1147           else if (b->ignore_count > 0)
1148             {
1149               b->ignore_count--;
1150               bs->stop = 0;
1151             }
1152           else
1153             {
1154               /* We will stop here */
1155               if (b->disposition == disable)
1156                 b->enable = disabled;
1157               bs->commands = b->commands;
1158               if (b->silent)
1159                 bs->print = 0;
1160               if (bs->commands && STREQ ("silent", bs->commands->line))
1161                 {
1162                   bs->commands = bs->commands->next;
1163                   bs->print = 0;
1164                 }
1165             }
1166         }
1167       /* Print nothing for this entry if we dont stop or if we dont print.  */
1168       if (bs->stop == 0 || bs->print == 0)
1169         bs->print_it = print_it_noop;
1170     }
1171
1172   bs->next = NULL;              /* Terminate the chain */
1173   bs = root_bs->next;           /* Re-grab the head of the chain */
1174 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1175   if (bs)
1176     {
1177       if (real_breakpoint)
1178         {
1179           *pc = bp_addr;
1180 #if defined (SHIFT_INST_REGS)
1181           SHIFT_INST_REGS();
1182 #else /* No SHIFT_INST_REGS.  */
1183           write_pc (bp_addr);
1184 #endif /* No SHIFT_INST_REGS.  */
1185         }
1186     }
1187 #endif /* DECR_PC_AFTER_BREAK != 0.  */
1188   return bs;
1189 }
1190 \f
1191 /* Tell what to do about this bpstat.  */
1192 struct bpstat_what
1193 bpstat_what (bs)
1194      bpstat bs;
1195 {
1196   /* Classify each bpstat as one of the following.  */
1197   enum class {
1198     /* This bpstat element has no effect on the main_action.  */
1199     no_effect = 0,
1200
1201     /* There was a watchpoint, stop but don't print.  */
1202     wp_silent,
1203
1204     /* There was a watchpoint, stop and print.  */
1205     wp_noisy,
1206
1207     /* There was a breakpoint but we're not stopping.  */
1208     bp_nostop,
1209
1210     /* There was a breakpoint, stop but don't print.  */
1211     bp_silent,
1212
1213     /* There was a breakpoint, stop and print.  */
1214     bp_noisy,
1215
1216     /* We hit the longjmp breakpoint.  */
1217     long_jump,
1218
1219     /* We hit the longjmp_resume breakpoint.  */
1220     long_resume,
1221
1222     /* This is just used to count how many enums there are.  */
1223     class_last
1224     };
1225
1226   /* Here is the table which drives this routine.  So that we can
1227      format it pretty, we define some abbreviations for the
1228      enum bpstat_what codes.  */
1229 #define keep_c BPSTAT_WHAT_KEEP_CHECKING
1230 #define stop_s BPSTAT_WHAT_STOP_SILENT
1231 #define stop_n BPSTAT_WHAT_STOP_NOISY
1232 #define single BPSTAT_WHAT_SINGLE
1233 #define setlr BPSTAT_WHAT_SET_LONGJMP_RESUME
1234 #define clrlr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
1235 #define clrlrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
1236 /* "Can't happen."  Might want to print an error message.
1237    abort() is not out of the question, but chances are GDB is just
1238    a bit confused, not unusable.  */
1239 #define err BPSTAT_WHAT_STOP_NOISY
1240
1241   /* Given an old action and a class, come up with a new action.  */
1242   /* One interesting property of this table is that wp_silent is the same
1243      as bp_silent and wp_noisy is the same as bp_noisy.  That is because
1244      after stopping, the check for whether to step over a breakpoint
1245      (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
1246      reference to how we stopped.  We retain separate wp_silent and bp_silent
1247      codes in case we want to change that someday.  */
1248   static const enum bpstat_what_main_action
1249     table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
1250       {
1251         /*                              old action */
1252         /*       keep_c  stop_s  stop_n  single  setlr   clrlr   clrlrs */
1253
1254 /*no_effect*/   {keep_c, stop_s, stop_n, single, setlr , clrlr , clrlrs},
1255 /*wp_silent*/   {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s},
1256 /*wp_noisy*/    {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n},
1257 /*bp_nostop*/   {single, stop_s, stop_n, single, setlr , clrlrs, clrlrs},
1258 /*bp_silent*/   {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s},
1259 /*bp_noisy*/    {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n},
1260 /*long_jump*/   {setlr , stop_s, stop_n, setlr , err   , err   , err   },
1261 /*long_resume*/ {clrlr , stop_s, stop_n, clrlrs, err   , err   , err   }
1262               };
1263 #undef keep_c
1264 #undef stop_s
1265 #undef stop_n
1266 #undef single
1267 #undef setlr
1268 #undef clrlr
1269 #undef clrlrs
1270 #undef err
1271   enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
1272   struct bpstat_what retval;
1273
1274   retval.call_dummy = 0;
1275   retval.step_resume = 0;
1276   for (; bs != NULL; bs = bs->next)
1277     {
1278       enum class bs_class = no_effect;
1279       if (bs->breakpoint_at == NULL)
1280         /* I suspect this can happen if it was a momentary breakpoint
1281            which has since been deleted.  */
1282         continue;
1283       switch (bs->breakpoint_at->type)
1284         {
1285         case bp_breakpoint:
1286         case bp_until:
1287         case bp_finish:
1288           if (bs->stop)
1289             {
1290               if (bs->print)
1291                 bs_class = bp_noisy;
1292               else
1293                 bs_class = bp_silent;
1294             }
1295           else
1296             bs_class = bp_nostop;
1297           break;
1298         case bp_watchpoint:
1299           if (bs->stop)
1300             {
1301               if (bs->print)
1302                 bs_class = wp_noisy;
1303               else
1304                 bs_class = wp_silent;
1305             }
1306           else
1307             /* There was a watchpoint, but we're not stopping.  This requires
1308                no further action.  */
1309             bs_class = no_effect;
1310           break;
1311         case bp_longjmp:
1312           bs_class = long_jump;
1313           break;
1314         case bp_longjmp_resume:
1315           bs_class = long_resume;
1316           break;
1317         case bp_step_resume:
1318 #if 0
1319           /* Need to temporarily disable this until we can fix the bug
1320              with nexting over a breakpoint with ->stop clear causing
1321              an infinite loop.  For now, treat the breakpoint as having
1322              been hit even if the frame is wrong.  */
1323           if (bs->stop)
1324             {
1325 #endif
1326               retval.step_resume = 1;
1327               /* We don't handle this via the main_action.  */
1328               bs_class = no_effect;
1329 #if 0
1330             }
1331           else
1332             /* It is for the wrong frame.  */
1333             bs_class = bp_nostop;
1334 #endif
1335           break;
1336         case bp_call_dummy:
1337           /* Make sure the action is stop (silent or noisy), so infrun.c
1338              pops the dummy frame.  */
1339           bs_class = bp_silent;
1340           retval.call_dummy = 1;
1341           break;
1342         }
1343       current_action = table[(int)bs_class][(int)current_action];
1344     }
1345   retval.main_action = current_action;
1346   return retval;
1347 }
1348
1349 /* Nonzero if we should step constantly (e.g. watchpoints on machines
1350    without hardware support).  This isn't related to a specific bpstat,
1351    just to things like whether watchpoints are set.  */
1352
1353 int 
1354 bpstat_should_step ()
1355 {
1356   struct breakpoint *b;
1357   ALL_BREAKPOINTS (b)
1358     if (b->enable == enabled && b->type == bp_watchpoint)
1359       return 1;
1360   return 0;
1361 }
1362 \f
1363 /* Print information on breakpoint number BNUM, or -1 if all.
1364    If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
1365    is nonzero, process only watchpoints.  */
1366
1367 static void
1368 breakpoint_1 (bnum, allflag)
1369      int bnum;
1370      int allflag;
1371 {
1372   register struct breakpoint *b;
1373   register struct command_line *l;
1374   register struct symbol *sym;
1375   CORE_ADDR last_addr = (CORE_ADDR)-1;
1376   int found_a_breakpoint = 0;
1377   static char *bptypes[] = {"breakpoint", "until", "finish", "watchpoint",
1378                               "longjmp", "longjmp resume", "step resume",
1379                               "call dummy" };
1380   static char *bpdisps[] = {"del", "dis", "keep"};
1381   static char bpenables[] = "ny";
1382   char wrap_indent[80];
1383
1384   ALL_BREAKPOINTS (b)
1385     if (bnum == -1
1386         || bnum == b->number)
1387       {
1388 /*  We only print out user settable breakpoints unless the allflag is set. */
1389         if (!allflag
1390             && b->type != bp_breakpoint
1391             && b->type != bp_watchpoint)
1392           continue;
1393
1394         if (!found_a_breakpoint++)
1395           printf_filtered ("Num Type           Disp Enb %sWhat\n",
1396                            addressprint ? "Address    " : "");
1397
1398         printf_filtered ("%-3d %-14s %-4s %-3c ",
1399                          b->number,
1400                          bptypes[(int)b->type],
1401                          bpdisps[(int)b->disposition],
1402                          bpenables[(int)b->enable]);
1403         strcpy (wrap_indent, "                           ");
1404         if (addressprint)
1405           strcat (wrap_indent, "           ");
1406         switch (b->type)
1407           {
1408           case bp_watchpoint:
1409             print_expression (b->exp, stdout);
1410             break;
1411
1412           case bp_breakpoint:
1413           case bp_until:
1414           case bp_finish:
1415           case bp_longjmp:
1416           case bp_longjmp_resume:
1417           case bp_step_resume:
1418           case bp_call_dummy:
1419             if (addressprint)
1420               printf_filtered ("%s ", local_hex_string_custom ((unsigned long) b->address, "08l"));
1421
1422             last_addr = b->address;
1423             if (b->source_file)
1424               {
1425                 sym = find_pc_function (b->address);
1426                 if (sym)
1427                   {
1428                     fputs_filtered ("in ", stdout);
1429                     fputs_filtered (SYMBOL_SOURCE_NAME (sym), stdout);
1430                     wrap_here (wrap_indent);
1431                     fputs_filtered (" at ", stdout);
1432                   }
1433                 fputs_filtered (b->source_file, stdout);
1434                 printf_filtered (":%d", b->line_number);
1435               }
1436             else
1437               print_address_symbolic (b->address, stdout, demangle, " ");
1438             break;
1439           }
1440
1441         printf_filtered ("\n");
1442
1443         if (b->frame)
1444           printf_filtered ("\tstop only in stack frame at %s\n",
1445                            local_hex_string((unsigned long) b->frame));
1446         if (b->cond)
1447           {
1448             printf_filtered ("\tstop only if ");
1449             print_expression (b->cond, stdout);
1450             printf_filtered ("\n");
1451           }
1452         if (b->ignore_count)
1453           printf_filtered ("\tignore next %d hits\n", b->ignore_count);
1454         if ((l = b->commands))
1455           while (l)
1456             {
1457               fputs_filtered ("\t", stdout);
1458               fputs_filtered (l->line, stdout);
1459               fputs_filtered ("\n", stdout);
1460               l = l->next;
1461             }
1462       }
1463
1464   if (!found_a_breakpoint)
1465     {
1466       if (bnum == -1)
1467         printf_filtered ("No breakpoints or watchpoints.\n");
1468       else
1469         printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
1470     }
1471   else
1472     /* Compare against (CORE_ADDR)-1 in case some compiler decides
1473        that a comparison of an unsigned with -1 is always false.  */
1474     if (last_addr != (CORE_ADDR)-1)
1475       set_next_address (last_addr);
1476 }
1477
1478 /* ARGSUSED */
1479 static void
1480 breakpoints_info (bnum_exp, from_tty)
1481      char *bnum_exp;
1482      int from_tty;
1483 {
1484   int bnum = -1;
1485
1486   if (bnum_exp)
1487     bnum = parse_and_eval_address (bnum_exp);
1488
1489   breakpoint_1 (bnum, 0);
1490 }
1491
1492 #if MAINTENANCE_CMDS
1493
1494 /* ARGSUSED */
1495 static void
1496 maintenance_info_breakpoints (bnum_exp, from_tty)
1497      char *bnum_exp;
1498      int from_tty;
1499 {
1500   int bnum = -1;
1501
1502   if (bnum_exp)
1503     bnum = parse_and_eval_address (bnum_exp);
1504
1505   breakpoint_1 (bnum, 1);
1506 }
1507
1508 #endif
1509
1510 /* Print a message describing any breakpoints set at PC.  */
1511
1512 static void
1513 describe_other_breakpoints (pc)
1514      register CORE_ADDR pc;
1515 {
1516   register int others = 0;
1517   register struct breakpoint *b;
1518
1519   ALL_BREAKPOINTS (b)
1520     if (b->address == pc)
1521       others++;
1522   if (others > 0)
1523     {
1524       printf ("Note: breakpoint%s ", (others > 1) ? "s" : "");
1525       ALL_BREAKPOINTS (b)
1526         if (b->address == pc)
1527           {
1528             others--;
1529             printf ("%d%s%s ",
1530                     b->number,
1531                     (b->enable == disabled) ? " (disabled)" : "",
1532                     (others > 1) ? "," : ((others == 1) ? " and" : ""));
1533           }
1534       printf ("also set at pc %s.\n", local_hex_string((unsigned long) pc));
1535     }
1536 }
1537 \f
1538 /* Set the default place to put a breakpoint
1539    for the `break' command with no arguments.  */
1540
1541 void
1542 set_default_breakpoint (valid, addr, symtab, line)
1543      int valid;
1544      CORE_ADDR addr;
1545      struct symtab *symtab;
1546      int line;
1547 {
1548   default_breakpoint_valid = valid;
1549   default_breakpoint_address = addr;
1550   default_breakpoint_symtab = symtab;
1551   default_breakpoint_line = line;
1552 }
1553
1554 /* Rescan breakpoints at address ADDRESS,
1555    marking the first one as "first" and any others as "duplicates".
1556    This is so that the bpt instruction is only inserted once.  */
1557
1558 static void
1559 check_duplicates (address)
1560      CORE_ADDR address;
1561 {
1562   register struct breakpoint *b;
1563   register int count = 0;
1564
1565   if (address == 0)             /* Watchpoints are uninteresting */
1566     return;
1567
1568   ALL_BREAKPOINTS (b)
1569     if (b->enable != disabled && b->address == address)
1570       {
1571         count++;
1572         b->duplicate = count > 1;
1573       }
1574 }
1575
1576 /* Low level routine to set a breakpoint.
1577    Takes as args the three things that every breakpoint must have.
1578    Returns the breakpoint object so caller can set other things.
1579    Does not set the breakpoint number!
1580    Does not print anything.
1581
1582    ==> This routine should not be called if there is a chance of later
1583    error(); otherwise it leaves a bogus breakpoint on the chain.  Validate
1584    your arguments BEFORE calling this routine!  */
1585
1586 static struct breakpoint *
1587 set_raw_breakpoint (sal)
1588      struct symtab_and_line sal;
1589 {
1590   register struct breakpoint *b, *b1;
1591
1592   b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
1593   memset (b, 0, sizeof (*b));
1594   b->address = sal.pc;
1595   if (sal.symtab == NULL)
1596     b->source_file = NULL;
1597   else
1598     b->source_file = savestring (sal.symtab->filename,
1599                                  strlen (sal.symtab->filename));
1600   b->line_number = sal.line;
1601   b->enable = enabled;
1602   b->next = 0;
1603   b->silent = 0;
1604   b->ignore_count = 0;
1605   b->commands = NULL;
1606   b->frame = 0;
1607
1608   /* Add this breakpoint to the end of the chain
1609      so that a list of breakpoints will come out in order
1610      of increasing numbers.  */
1611
1612   b1 = breakpoint_chain;
1613   if (b1 == 0)
1614     breakpoint_chain = b;
1615   else
1616     {
1617       while (b1->next)
1618         b1 = b1->next;
1619       b1->next = b;
1620     }
1621
1622   check_duplicates (sal.pc);
1623
1624   return b;
1625 }
1626
1627 static void
1628 create_longjmp_breakpoint(func_name)
1629      char *func_name;
1630 {
1631   struct symtab_and_line sal;
1632   struct breakpoint *b;
1633   static int internal_breakpoint_number = -1;
1634
1635   if (func_name != NULL)
1636     {
1637       struct minimal_symbol *m;
1638
1639       m = lookup_minimal_symbol(func_name, (struct objfile *)NULL);
1640       if (m)
1641         sal.pc = SYMBOL_VALUE_ADDRESS (m);
1642       else
1643         return;
1644     }
1645   else
1646     sal.pc = 0;
1647
1648   sal.symtab = NULL;
1649   sal.line = 0;
1650
1651   b = set_raw_breakpoint(sal);
1652   if (!b) return;
1653
1654   b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
1655   b->disposition = donttouch;
1656   b->enable = disabled;
1657   b->silent = 1;
1658   if (func_name)
1659     b->addr_string = strsave(func_name);
1660   b->number = internal_breakpoint_number--;
1661 }
1662
1663 /* Call this routine when stepping and nexting to enable a breakpoint if we do
1664    a longjmp().  When we hit that breakpoint, call
1665    set_longjmp_resume_breakpoint() to figure out where we are going. */
1666
1667 void
1668 enable_longjmp_breakpoint()
1669 {
1670   register struct breakpoint *b;
1671
1672   ALL_BREAKPOINTS (b)
1673     if (b->type == bp_longjmp)
1674       {
1675         b->enable = enabled;
1676         check_duplicates (b->address);
1677       }
1678 }
1679
1680 void
1681 disable_longjmp_breakpoint()
1682 {
1683   register struct breakpoint *b;
1684
1685   ALL_BREAKPOINTS (b)
1686     if (   b->type == bp_longjmp
1687         || b->type == bp_longjmp_resume)
1688       {
1689         b->enable = disabled;
1690         check_duplicates (b->address);
1691       }
1692 }
1693
1694 /* Call this after hitting the longjmp() breakpoint.  Use this to set a new
1695    breakpoint at the target of the jmp_buf.
1696
1697    FIXME - This ought to be done by setting a temporary breakpoint that gets
1698    deleted automatically...
1699 */
1700
1701 void
1702 set_longjmp_resume_breakpoint(pc, frame)
1703      CORE_ADDR pc;
1704      FRAME frame;
1705 {
1706   register struct breakpoint *b;
1707
1708   ALL_BREAKPOINTS (b)
1709     if (b->type == bp_longjmp_resume)
1710       {
1711         b->address = pc;
1712         b->enable = enabled;
1713         if (frame != NULL)
1714           b->frame = FRAME_FP(frame);
1715         else
1716           b->frame = 0;
1717         check_duplicates (b->address);
1718         return;
1719       }
1720 }
1721
1722 /* Set a breakpoint that will evaporate an end of command
1723    at address specified by SAL.
1724    Restrict it to frame FRAME if FRAME is nonzero.  */
1725
1726 struct breakpoint *
1727 set_momentary_breakpoint (sal, frame, type)
1728      struct symtab_and_line sal;
1729      FRAME frame;
1730      enum bptype type;
1731 {
1732   register struct breakpoint *b;
1733   b = set_raw_breakpoint (sal);
1734   b->type = type;
1735   b->enable = enabled;
1736   b->disposition = donttouch;
1737   b->frame = (frame ? FRAME_FP (frame) : 0);
1738   return b;
1739 }
1740
1741 #if 0
1742 void
1743 clear_momentary_breakpoints ()
1744 {
1745   register struct breakpoint *b;
1746   ALL_BREAKPOINTS (b)
1747     if (b->disposition == delete)
1748       {
1749         delete_breakpoint (b);
1750         break;
1751       }
1752 }
1753 #endif
1754 \f
1755 /* Tell the user we have just set a breakpoint B.  */
1756 static void
1757 mention (b)
1758      struct breakpoint *b;
1759 {
1760   switch (b->type)
1761     {
1762     case bp_watchpoint:
1763       printf_filtered ("Watchpoint %d: ", b->number);
1764       print_expression (b->exp, stdout);
1765       break;
1766     case bp_breakpoint:
1767       printf_filtered ("Breakpoint %d at %s", b->number,
1768                        local_hex_string((unsigned long) b->address));
1769       if (b->source_file)
1770         printf_filtered (": file %s, line %d.",
1771                          b->source_file, b->line_number);
1772       break;
1773     case bp_until:
1774     case bp_finish:
1775     case bp_longjmp:
1776     case bp_longjmp_resume:
1777     case bp_step_resume:
1778       break;
1779     }
1780   printf_filtered ("\n");
1781 }
1782
1783 #if 0
1784 /* Nobody calls this currently. */
1785 /* Set a breakpoint from a symtab and line.
1786    If TEMPFLAG is nonzero, it is a temporary breakpoint.
1787    ADDR_STRING is a malloc'd string holding the name of where we are
1788    setting the breakpoint.  This is used later to re-set it after the
1789    program is relinked and symbols are reloaded.
1790    Print the same confirmation messages that the breakpoint command prints.  */
1791
1792 void
1793 set_breakpoint (s, line, tempflag, addr_string)
1794      struct symtab *s;
1795      int line;
1796      int tempflag;
1797      char *addr_string;
1798 {
1799   register struct breakpoint *b;
1800   struct symtab_and_line sal;
1801   
1802   sal.symtab = s;
1803   sal.line = line;
1804   sal.pc = 0;
1805   resolve_sal_pc (&sal);                        /* Might error out */
1806   describe_other_breakpoints (sal.pc);
1807
1808   b = set_raw_breakpoint (sal);
1809   set_breakpoint_count (breakpoint_count + 1);
1810   b->number = breakpoint_count;
1811   b->type = bp_breakpoint;
1812   b->cond = 0;
1813   b->addr_string = addr_string;
1814   b->enable = enabled;
1815   b->disposition = tempflag ? delete : donttouch;
1816
1817   mention (b);
1818 }
1819 #endif /* 0 */
1820 \f
1821 /* Set a breakpoint according to ARG (function, linenum or *address)
1822    and make it temporary if TEMPFLAG is nonzero. */
1823
1824 static void
1825 break_command_1 (arg, tempflag, from_tty)
1826      char *arg;
1827      int tempflag, from_tty;
1828 {
1829   struct symtabs_and_lines sals;
1830   struct symtab_and_line sal;
1831   register struct expression *cond = 0;
1832   register struct breakpoint *b;
1833
1834   /* Pointers in arg to the start, and one past the end, of the condition.  */
1835   char *cond_start = NULL;
1836   char *cond_end = NULL;
1837   /* Pointers in arg to the start, and one past the end,
1838      of the address part.  */
1839   char *addr_start = NULL;
1840   char *addr_end = NULL;
1841   struct cleanup *old_chain;
1842   struct cleanup *canonical_strings_chain = NULL;
1843   char **canonical = (char **)NULL;
1844   
1845   int i;
1846
1847   sals.sals = NULL;
1848   sals.nelts = 0;
1849
1850   sal.line = sal.pc = sal.end = 0;
1851   sal.symtab = 0;
1852
1853   /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
1854
1855   if (!arg || (arg[0] == 'i' && arg[1] == 'f' 
1856                && (arg[2] == ' ' || arg[2] == '\t')))
1857     {
1858       if (default_breakpoint_valid)
1859         {
1860           sals.sals = (struct symtab_and_line *) 
1861             xmalloc (sizeof (struct symtab_and_line));
1862           sal.pc = default_breakpoint_address;
1863           sal.line = default_breakpoint_line;
1864           sal.symtab = default_breakpoint_symtab;
1865           sals.sals[0] = sal;
1866           sals.nelts = 1;
1867         }
1868       else
1869         error ("No default breakpoint address now.");
1870     }
1871   else
1872     {
1873       addr_start = arg;
1874
1875       /* Force almost all breakpoints to be in terms of the
1876          current_source_symtab (which is decode_line_1's default).  This
1877          should produce the results we want almost all of the time while
1878          leaving default_breakpoint_* alone.  */
1879       if (default_breakpoint_valid
1880           && (!current_source_symtab
1881               || (arg && (*arg == '+' || *arg == '-'))))
1882         sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
1883                               default_breakpoint_line, &canonical);
1884       else
1885         sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, &canonical);
1886
1887       addr_end = arg;
1888     }
1889   
1890   if (! sals.nelts) 
1891     return;
1892
1893   /* Make sure that all storage allocated in decode_line_1 gets freed in case
1894      the following `for' loop errors out.  */
1895   old_chain = make_cleanup (free, sals.sals);
1896   if (canonical != (char **)NULL)
1897     {
1898       make_cleanup (free, canonical);
1899       canonical_strings_chain = make_cleanup (null_cleanup, 0);
1900       for (i = 0; i < sals.nelts; i++)
1901         {
1902           if (canonical[i] != NULL)
1903             make_cleanup (free, canonical[i]);
1904         }
1905     }
1906
1907   /* Resolve all line numbers to PC's, and verify that conditions
1908      can be parsed, before setting any breakpoints.  */
1909   for (i = 0; i < sals.nelts; i++)
1910     {
1911       resolve_sal_pc (&sals.sals[i]);
1912       
1913       while (arg && *arg)
1914         {
1915           if (arg[0] == 'i' && arg[1] == 'f'
1916               && (arg[2] == ' ' || arg[2] == '\t'))
1917             {
1918               arg += 2;
1919               cond_start = arg;
1920               cond = parse_exp_1 (&arg, block_for_pc (sals.sals[i].pc), 0);
1921               cond_end = arg;
1922             }
1923           else
1924             error ("Junk at end of arguments.");
1925         }
1926     }
1927
1928   /* Remove the canonical strings from the cleanup, they are needed below.  */
1929   if (canonical != (char **)NULL)
1930     discard_cleanups (canonical_strings_chain);
1931
1932   /* Now set all the breakpoints.  */
1933   for (i = 0; i < sals.nelts; i++)
1934     {
1935       sal = sals.sals[i];
1936
1937       if (from_tty)
1938         describe_other_breakpoints (sal.pc);
1939
1940       b = set_raw_breakpoint (sal);
1941       set_breakpoint_count (breakpoint_count + 1);
1942       b->number = breakpoint_count;
1943       b->type = bp_breakpoint;
1944       b->cond = cond;
1945
1946       /* If a canonical line spec is needed use that instead of the
1947          command string.  */
1948       if (canonical != (char **)NULL && canonical[i] != NULL)
1949         b->addr_string = canonical[i];
1950       else if (addr_start)
1951         b->addr_string = savestring (addr_start, addr_end - addr_start);
1952       if (cond_start)
1953         b->cond_string = savestring (cond_start, cond_end - cond_start);
1954                                      
1955       b->enable = enabled;
1956       b->disposition = tempflag ? delete : donttouch;
1957
1958       mention (b);
1959     }
1960
1961   if (sals.nelts > 1)
1962     {
1963       printf ("Multiple breakpoints were set.\n");
1964       printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
1965     }
1966   do_cleanups (old_chain);
1967 }
1968
1969 /* Helper function for break_command_1 and disassemble_command.  */
1970
1971 void
1972 resolve_sal_pc (sal)
1973      struct symtab_and_line *sal;
1974 {
1975   CORE_ADDR pc;
1976
1977   if (sal->pc == 0 && sal->symtab != 0)
1978     {
1979       pc = find_line_pc (sal->symtab, sal->line);
1980       if (pc == 0)
1981         error ("No line %d in file \"%s\".",
1982                sal->line, sal->symtab->filename);
1983       sal->pc = pc;
1984     }
1985 }
1986
1987 void
1988 break_command (arg, from_tty)
1989      char *arg;
1990      int from_tty;
1991 {
1992   break_command_1 (arg, 0, from_tty);
1993 }
1994
1995 static void
1996 tbreak_command (arg, from_tty)
1997      char *arg;
1998      int from_tty;
1999 {
2000   break_command_1 (arg, 1, from_tty);
2001 }
2002
2003 /* ARGSUSED */
2004 static void
2005 watch_command (arg, from_tty)
2006      char *arg;
2007      int from_tty;
2008 {
2009   struct breakpoint *b;
2010   struct symtab_and_line sal;
2011   struct expression *exp;
2012   struct block *exp_valid_block;
2013   struct value *val;
2014
2015   sal.pc = 0;
2016   sal.symtab = NULL;
2017   sal.line = 0;
2018   
2019   /* Parse arguments.  */
2020   innermost_block = NULL;
2021   exp = parse_expression (arg);
2022   exp_valid_block = innermost_block;
2023   val = evaluate_expression (exp);
2024   release_value (val);
2025   if (VALUE_LAZY (val))
2026     value_fetch_lazy (val);
2027
2028   /* Now set up the breakpoint.  */
2029   b = set_raw_breakpoint (sal);
2030   set_breakpoint_count (breakpoint_count + 1);
2031   b->number = breakpoint_count;
2032   b->type = bp_watchpoint;
2033   b->disposition = donttouch;
2034   b->exp = exp;
2035   b->exp_valid_block = exp_valid_block;
2036   b->val = val;
2037   b->cond = 0;
2038   b->cond_string = NULL;
2039   b->exp_string = savestring (arg, strlen (arg));
2040   mention (b);
2041 }
2042 \f
2043 /*
2044  * Helper routine for the until_command routine in infcmd.c.  Here
2045  * because it uses the mechanisms of breakpoints.
2046  */
2047 /* ARGSUSED */
2048 void
2049 until_break_command (arg, from_tty)
2050      char *arg;
2051      int from_tty;
2052 {
2053   struct symtabs_and_lines sals;
2054   struct symtab_and_line sal;
2055   FRAME prev_frame = get_prev_frame (selected_frame);
2056   struct breakpoint *breakpoint;
2057   struct cleanup *old_chain;
2058
2059   clear_proceed_status ();
2060
2061   /* Set a breakpoint where the user wants it and at return from
2062      this function */
2063   
2064   if (default_breakpoint_valid)
2065     sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
2066                           default_breakpoint_line, (char ***)NULL);
2067   else
2068     sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, (char ***)NULL);
2069   
2070   if (sals.nelts != 1)
2071     error ("Couldn't get information on specified line.");
2072   
2073   sal = sals.sals[0];
2074   free ((PTR)sals.sals);                /* malloc'd, so freed */
2075   
2076   if (*arg)
2077     error ("Junk at end of arguments.");
2078   
2079   resolve_sal_pc (&sal);
2080   
2081   breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
2082   
2083   old_chain = make_cleanup(delete_breakpoint, breakpoint);
2084
2085   /* Keep within the current frame */
2086   
2087   if (prev_frame)
2088     {
2089       struct frame_info *fi;
2090       
2091       fi = get_frame_info (prev_frame);
2092       sal = find_pc_line (fi->pc, 0);
2093       sal.pc = fi->pc;
2094       breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
2095       make_cleanup(delete_breakpoint, breakpoint);
2096     }
2097   
2098   proceed (-1, -1, 0);
2099   do_cleanups(old_chain);
2100 }
2101 \f
2102 #if 0
2103 /* These aren't used; I don't konw what they were for.  */
2104 /* Set a breakpoint at the catch clause for NAME.  */
2105 static int
2106 catch_breakpoint (name)
2107      char *name;
2108 {
2109 }
2110
2111 static int
2112 disable_catch_breakpoint ()
2113 {
2114 }
2115
2116 static int
2117 delete_catch_breakpoint ()
2118 {
2119 }
2120
2121 static int
2122 enable_catch_breakpoint ()
2123 {
2124 }
2125 #endif /* 0 */
2126
2127 struct sal_chain
2128 {
2129   struct sal_chain *next;
2130   struct symtab_and_line sal;
2131 };
2132
2133 #if 0
2134 /* This isn't used; I don't know what it was for.  */
2135 /* For each catch clause identified in ARGS, run FUNCTION
2136    with that clause as an argument.  */
2137 static struct symtabs_and_lines
2138 map_catch_names (args, function)
2139      char *args;
2140      int (*function)();
2141 {
2142   register char *p = args;
2143   register char *p1;
2144   struct symtabs_and_lines sals;
2145 #if 0
2146   struct sal_chain *sal_chain = 0;
2147 #endif
2148
2149   if (p == 0)
2150     error_no_arg ("one or more catch names");
2151
2152   sals.nelts = 0;
2153   sals.sals = NULL;
2154
2155   while (*p)
2156     {
2157       p1 = p;
2158       /* Don't swallow conditional part.  */
2159       if (p1[0] == 'i' && p1[1] == 'f'
2160           && (p1[2] == ' ' || p1[2] == '\t'))
2161         break;
2162
2163       if (isalpha (*p1))
2164         {
2165           p1++;
2166           while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
2167             p1++;
2168         }
2169
2170       if (*p1 && *p1 != ' ' && *p1 != '\t')
2171         error ("Arguments must be catch names.");
2172
2173       *p1 = 0;
2174 #if 0
2175       if (function (p))
2176         {
2177           struct sal_chain *next
2178             = (struct sal_chain *)alloca (sizeof (struct sal_chain));
2179           next->next = sal_chain;
2180           next->sal = get_catch_sal (p);
2181           sal_chain = next;
2182           goto win;
2183         }
2184 #endif
2185       printf ("No catch clause for exception %s.\n", p);
2186 #if 0
2187     win:
2188 #endif
2189       p = p1;
2190       while (*p == ' ' || *p == '\t') p++;
2191     }
2192 }
2193 #endif /* 0 */
2194
2195 /* This shares a lot of code with `print_frame_label_vars' from stack.c.  */
2196
2197 static struct symtabs_and_lines
2198 get_catch_sals (this_level_only)
2199      int this_level_only;
2200 {
2201   register struct blockvector *bl;
2202   register struct block *block;
2203   int index, have_default = 0;
2204   struct frame_info *fi;
2205   CORE_ADDR pc;
2206   struct symtabs_and_lines sals;
2207   struct sal_chain *sal_chain = 0;
2208   char *blocks_searched;
2209
2210   /* Not sure whether an error message is always the correct response,
2211      but it's better than a core dump.  */
2212   if (selected_frame == NULL)
2213     error ("No selected frame.");
2214   block = get_frame_block (selected_frame);
2215   fi = get_frame_info (selected_frame);
2216   pc = fi->pc;
2217
2218   sals.nelts = 0;
2219   sals.sals = NULL;
2220
2221   if (block == 0)
2222     error ("No symbol table info available.\n");
2223
2224   bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
2225   blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2226   memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2227
2228   while (block != 0)
2229     {
2230       CORE_ADDR end = BLOCK_END (block) - 4;
2231       int last_index;
2232
2233       if (bl != blockvector_for_pc (end, &index))
2234         error ("blockvector blotch");
2235       if (BLOCKVECTOR_BLOCK (bl, index) != block)
2236         error ("blockvector botch");
2237       last_index = BLOCKVECTOR_NBLOCKS (bl);
2238       index += 1;
2239
2240       /* Don't print out blocks that have gone by.  */
2241       while (index < last_index
2242              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
2243         index++;
2244
2245       while (index < last_index
2246              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
2247         {
2248           if (blocks_searched[index] == 0)
2249             {
2250               struct block *b = BLOCKVECTOR_BLOCK (bl, index);
2251               int nsyms;
2252               register int i;
2253               register struct symbol *sym;
2254
2255               nsyms = BLOCK_NSYMS (b);
2256
2257               for (i = 0; i < nsyms; i++)
2258                 {
2259                   sym = BLOCK_SYM (b, i);
2260                   if (STREQ (SYMBOL_NAME (sym), "default"))
2261                     {
2262                       if (have_default)
2263                         continue;
2264                       have_default = 1;
2265                     }
2266                   if (SYMBOL_CLASS (sym) == LOC_LABEL)
2267                     {
2268                       struct sal_chain *next = (struct sal_chain *)
2269                         alloca (sizeof (struct sal_chain));
2270                       next->next = sal_chain;
2271                       next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
2272                       sal_chain = next;
2273                     }
2274                 }
2275               blocks_searched[index] = 1;
2276             }
2277           index++;
2278         }
2279       if (have_default)
2280         break;
2281       if (sal_chain && this_level_only)
2282         break;
2283
2284       /* After handling the function's top-level block, stop.
2285          Don't continue to its superblock, the block of
2286          per-file symbols.  */
2287       if (BLOCK_FUNCTION (block))
2288         break;
2289       block = BLOCK_SUPERBLOCK (block);
2290     }
2291
2292   if (sal_chain)
2293     {
2294       struct sal_chain *tmp_chain;
2295
2296       /* Count the number of entries.  */
2297       for (index = 0, tmp_chain = sal_chain; tmp_chain;
2298            tmp_chain = tmp_chain->next)
2299         index++;
2300
2301       sals.nelts = index;
2302       sals.sals = (struct symtab_and_line *)
2303         xmalloc (index * sizeof (struct symtab_and_line));
2304       for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
2305         sals.sals[index] = sal_chain->sal;
2306     }
2307
2308   return sals;
2309 }
2310
2311 /* Commands to deal with catching exceptions.  */
2312
2313 static void
2314 catch_command_1 (arg, tempflag, from_tty)
2315      char *arg;
2316      int tempflag;
2317      int from_tty;
2318 {
2319   /* First, translate ARG into something we can deal with in terms
2320      of breakpoints.  */
2321
2322   struct symtabs_and_lines sals;
2323   struct symtab_and_line sal;
2324   register struct expression *cond = 0;
2325   register struct breakpoint *b;
2326   char *save_arg;
2327   int i;
2328
2329   sal.line = sal.pc = sal.end = 0;
2330   sal.symtab = 0;
2331
2332   /* If no arg given, or if first arg is 'if ', all active catch clauses
2333      are breakpointed. */
2334
2335   if (!arg || (arg[0] == 'i' && arg[1] == 'f' 
2336                && (arg[2] == ' ' || arg[2] == '\t')))
2337     {
2338       /* Grab all active catch clauses.  */
2339       sals = get_catch_sals (0);
2340     }
2341   else
2342     {
2343       /* Grab selected catch clauses.  */
2344       error ("catch NAME not implemented");
2345 #if 0
2346       /* This isn't used; I don't know what it was for.  */
2347       sals = map_catch_names (arg, catch_breakpoint);
2348 #endif
2349     }
2350
2351   if (! sals.nelts) 
2352     return;
2353
2354   save_arg = arg;
2355   for (i = 0; i < sals.nelts; i++)
2356     {
2357       resolve_sal_pc (&sals.sals[i]);
2358       
2359       while (arg && *arg)
2360         {
2361           if (arg[0] == 'i' && arg[1] == 'f'
2362               && (arg[2] == ' ' || arg[2] == '\t'))
2363             cond = parse_exp_1 ((arg += 2, &arg), 
2364                                 block_for_pc (sals.sals[i].pc), 0);
2365           else
2366             error ("Junk at end of arguments.");
2367         }
2368       arg = save_arg;
2369     }
2370
2371   for (i = 0; i < sals.nelts; i++)
2372     {
2373       sal = sals.sals[i];
2374
2375       if (from_tty)
2376         describe_other_breakpoints (sal.pc);
2377
2378       b = set_raw_breakpoint (sal);
2379       set_breakpoint_count (breakpoint_count + 1);
2380       b->number = breakpoint_count;
2381       b->type = bp_breakpoint;
2382       b->cond = cond;
2383       b->enable = enabled;
2384       b->disposition = tempflag ? delete : donttouch;
2385
2386       mention (b);
2387     }
2388
2389   if (sals.nelts > 1)
2390     {
2391       printf ("Multiple breakpoints were set.\n");
2392       printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
2393     }
2394   free ((PTR)sals.sals);
2395 }
2396
2397 #if 0
2398 /* These aren't used; I don't know what they were for.  */
2399 /* Disable breakpoints on all catch clauses described in ARGS.  */
2400 static void
2401 disable_catch (args)
2402      char *args;
2403 {
2404   /* Map the disable command to catch clauses described in ARGS.  */
2405 }
2406
2407 /* Enable breakpoints on all catch clauses described in ARGS.  */
2408 static void
2409 enable_catch (args)
2410      char *args;
2411 {
2412   /* Map the disable command to catch clauses described in ARGS.  */
2413 }
2414
2415 /* Delete breakpoints on all catch clauses in the active scope.  */
2416 static void
2417 delete_catch (args)
2418      char *args;
2419 {
2420   /* Map the delete command to catch clauses described in ARGS.  */
2421 }
2422 #endif /* 0 */
2423
2424 static void
2425 catch_command (arg, from_tty)
2426      char *arg;
2427      int from_tty;
2428 {
2429   catch_command_1 (arg, 0, from_tty);
2430 }
2431 \f
2432 static void
2433 clear_command (arg, from_tty)
2434      char *arg;
2435      int from_tty;
2436 {
2437   register struct breakpoint *b, *b1;
2438   struct symtabs_and_lines sals;
2439   struct symtab_and_line sal;
2440   register struct breakpoint *found;
2441   int i;
2442
2443   if (arg)
2444     {
2445       sals = decode_line_spec (arg, 1);
2446     }
2447   else
2448     {
2449       sals.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
2450       sal.line = default_breakpoint_line;
2451       sal.symtab = default_breakpoint_symtab;
2452       sal.pc = 0;
2453       if (sal.symtab == 0)
2454         error ("No source file specified.");
2455
2456       sals.sals[0] = sal;
2457       sals.nelts = 1;
2458     }
2459
2460   for (i = 0; i < sals.nelts; i++)
2461     {
2462       /* If exact pc given, clear bpts at that pc.
2463          But if sal.pc is zero, clear all bpts on specified line.  */
2464       sal = sals.sals[i];
2465       found = (struct breakpoint *) 0;
2466       while (breakpoint_chain
2467              && (sal.pc
2468                  ? breakpoint_chain->address == sal.pc
2469                  : (breakpoint_chain->source_file != NULL
2470                     && sal.symtab != NULL
2471                     && STREQ (breakpoint_chain->source_file,
2472                               sal.symtab->filename)
2473                     && breakpoint_chain->line_number == sal.line)))
2474         {
2475           b1 = breakpoint_chain;
2476           breakpoint_chain = b1->next;
2477           b1->next = found;
2478           found = b1;
2479         }
2480
2481       ALL_BREAKPOINTS (b)
2482         while (b->next
2483                && b->next->type != bp_watchpoint
2484                && (sal.pc
2485                    ? b->next->address == sal.pc
2486                    : (b->next->source_file != NULL
2487                       && sal.symtab != NULL
2488                       && STREQ (b->next->source_file, sal.symtab->filename)
2489                       && b->next->line_number == sal.line)))
2490           {
2491             b1 = b->next;
2492             b->next = b1->next;
2493             b1->next = found;
2494             found = b1;
2495           }
2496
2497       if (found == 0)
2498         {
2499           if (arg)
2500             error ("No breakpoint at %s.", arg);
2501           else
2502             error ("No breakpoint at this line.");
2503         }
2504
2505       if (found->next) from_tty = 1; /* Always report if deleted more than one */
2506       if (from_tty) printf ("Deleted breakpoint%s ", found->next ? "s" : "");
2507       while (found)
2508         {
2509           if (from_tty) printf ("%d ", found->number);
2510           b1 = found->next;
2511           delete_breakpoint (found);
2512           found = b1;
2513         }
2514       if (from_tty) putchar ('\n');
2515     }
2516   free ((PTR)sals.sals);
2517 }
2518 \f
2519 /* Delete breakpoint in BS if they are `delete' breakpoints.
2520    This is called after any breakpoint is hit, or after errors.  */
2521
2522 void
2523 breakpoint_auto_delete (bs)
2524      bpstat bs;
2525 {
2526   for (; bs; bs = bs->next)
2527     if (bs->breakpoint_at && bs->breakpoint_at->disposition == delete
2528         && bs->stop)
2529       delete_breakpoint (bs->breakpoint_at);
2530 }
2531
2532 /* Delete a breakpoint and clean up all traces of it in the data structures. */
2533
2534 void
2535 delete_breakpoint (bpt)
2536      struct breakpoint *bpt;
2537 {
2538   register struct breakpoint *b;
2539   register bpstat bs;
2540
2541   if (bpt->inserted)
2542     target_remove_breakpoint(bpt->address, bpt->shadow_contents);
2543
2544   if (breakpoint_chain == bpt)
2545     breakpoint_chain = bpt->next;
2546
2547   ALL_BREAKPOINTS (b)
2548     if (b->next == bpt)
2549       {
2550         b->next = bpt->next;
2551         break;
2552       }
2553
2554   check_duplicates (bpt->address);
2555   /* If this breakpoint was inserted, and there is another breakpoint
2556      at the same address, we need to insert the other breakpoint.  */
2557   if (bpt->inserted)
2558     {
2559       ALL_BREAKPOINTS (b)
2560         if (b->address == bpt->address
2561             && !b->duplicate
2562             && b->enable != disabled)
2563           {
2564             int val;
2565             val = target_insert_breakpoint (b->address, b->shadow_contents);
2566             if (val != 0)
2567               {
2568                 fprintf (stderr, "Cannot insert breakpoint %d:\n", b->number);
2569                 memory_error (val, b->address); /* which bombs us out */
2570               }
2571             else
2572               b->inserted = 1;
2573           }
2574     }
2575
2576   free_command_lines (&bpt->commands);
2577   if (bpt->cond)
2578     free (bpt->cond);
2579   if (bpt->cond_string != NULL)
2580     free (bpt->cond_string);
2581   if (bpt->addr_string != NULL)
2582     free (bpt->addr_string);
2583   if (bpt->exp_string != NULL)
2584     free (bpt->exp_string);
2585   if (bpt->source_file != NULL)
2586     free (bpt->source_file);
2587
2588   if (xgdb_verbose && bpt->type == bp_breakpoint)
2589     printf ("breakpoint #%d deleted\n", bpt->number);
2590
2591   /* Be sure no bpstat's are pointing at it after it's been freed.  */
2592   /* FIXME, how can we find all bpstat's?  We just check stop_bpstat for now. */
2593   for (bs = stop_bpstat; bs; bs = bs->next)
2594     if (bs->breakpoint_at == bpt)
2595       bs->breakpoint_at = NULL;
2596   free ((PTR)bpt);
2597 }
2598
2599 static void
2600 delete_command (arg, from_tty)
2601      char *arg;
2602      int from_tty;
2603 {
2604
2605   if (arg == 0)
2606     {
2607       /* Ask user only if there are some breakpoints to delete.  */
2608       if (!from_tty
2609           || (breakpoint_chain && query ("Delete all breakpoints? ", 0, 0)))
2610         {
2611           /* No arg; clear all breakpoints.  */
2612           while (breakpoint_chain)
2613             delete_breakpoint (breakpoint_chain);
2614         }
2615     }
2616   else
2617     map_breakpoint_numbers (arg, delete_breakpoint);
2618 }
2619
2620 /* Reset a breakpoint given it's struct breakpoint * BINT.
2621    The value we return ends up being the return value from catch_errors.
2622    Unused in this case.  */
2623
2624 static int
2625 breakpoint_re_set_one (bint)
2626      char *bint;
2627 {
2628   struct breakpoint *b = (struct breakpoint *)bint;  /* get past catch_errs */
2629   int i;
2630   struct symtabs_and_lines sals;
2631   char *s;
2632   enum enable save_enable;
2633
2634   switch (b->type)
2635     {
2636     case bp_breakpoint:
2637       if (b->addr_string == NULL)
2638         {
2639           /* Anything without a string can't be re-set. */
2640           delete_breakpoint (b);
2641           return 0;
2642         }
2643       /* In case we have a problem, disable this breakpoint.  We'll restore
2644          its status if we succeed.  */
2645       save_enable = b->enable;
2646       b->enable = disabled;
2647
2648       s = b->addr_string;
2649       sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0, (char ***)NULL);
2650       for (i = 0; i < sals.nelts; i++)
2651         {
2652           resolve_sal_pc (&sals.sals[i]);
2653
2654           /* Reparse conditions, they might contain references to the
2655              old symtab.  */
2656           if (b->cond_string != NULL)
2657             {
2658               s = b->cond_string;
2659               if (b->cond)
2660                 free ((PTR)b->cond);
2661               b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
2662             }
2663
2664           /* We need to re-set the breakpoint if the address changes...*/
2665           if (b->address != sals.sals[i].pc
2666               /* ...or new and old breakpoints both have source files, and
2667                  the source file name or the line number changes...  */
2668               || (b->source_file != NULL
2669                   && sals.sals[i].symtab != NULL
2670                   && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
2671                       || b->line_number != sals.sals[i].line)
2672                   )
2673               /* ...or we switch between having a source file and not having
2674                  one.  */
2675               || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
2676               )
2677             {
2678               if (b->source_file != NULL)
2679                 free (b->source_file);
2680               if (sals.sals[i].symtab == NULL)
2681                 b->source_file = NULL;
2682               else
2683                 b->source_file =
2684                   savestring (sals.sals[i].symtab->filename,
2685                               strlen (sals.sals[i].symtab->filename));
2686               b->line_number = sals.sals[i].line;
2687               b->address = sals.sals[i].pc;
2688           
2689               check_duplicates (b->address);
2690
2691               mention (b);
2692             }
2693           b->enable = save_enable;      /* Restore it, this worked. */
2694         }
2695       free ((PTR)sals.sals);
2696       break;
2697
2698     case bp_watchpoint:
2699       innermost_block = NULL;
2700       /* The issue arises of what context to evaluate this in.  The same
2701          one as when it was set, but what does that mean when symbols have
2702          been re-read?  We could save the filename and functionname, but
2703          if the context is more local than that, the best we could do would
2704          be something like how many levels deep and which index at that
2705          particular level, but that's going to be less stable than filenames
2706          or functionnames.  */
2707       /* So for now, just use a global context.  */
2708       b->exp = parse_expression (b->exp_string);
2709       b->exp_valid_block = innermost_block;
2710       b->val = evaluate_expression (b->exp);
2711       release_value (b->val);
2712       if (VALUE_LAZY (b->val))
2713         value_fetch_lazy (b->val);
2714
2715       if (b->cond_string != NULL)
2716         {
2717           s = b->cond_string;
2718           b->cond = parse_exp_1 (&s, (struct block *)0, 0);
2719         }
2720       if (b->enable == enabled)
2721         mention (b);
2722       break;
2723
2724     default:
2725       printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
2726       /* fall through */
2727     case bp_until:
2728     case bp_finish:
2729     case bp_longjmp:
2730     case bp_longjmp_resume:
2731     case bp_call_dummy:
2732       delete_breakpoint (b);
2733       break;
2734     }
2735
2736   return 0;
2737 }
2738
2739 /* Re-set all breakpoints after symbols have been re-loaded.  */
2740 void
2741 breakpoint_re_set ()
2742 {
2743   struct breakpoint *b, *temp;
2744   static char message1[] = "Error in re-setting breakpoint %d:\n";
2745   char message[sizeof (message1) + 30 /* slop */];
2746   
2747   ALL_BREAKPOINTS_SAFE (b, temp)
2748     {
2749       sprintf (message, message1, b->number);   /* Format possible error msg */
2750       catch_errors (breakpoint_re_set_one, (char *) b, message,
2751                     RETURN_MASK_ALL);
2752     }
2753
2754   create_longjmp_breakpoint("longjmp");
2755   create_longjmp_breakpoint("_longjmp");
2756   create_longjmp_breakpoint("siglongjmp");
2757   create_longjmp_breakpoint(NULL);
2758
2759 #if 0
2760   /* Took this out (temporaliy at least), since it produces an extra 
2761      blank line at startup. This messes up the gdbtests. -PB */
2762   /* Blank line to finish off all those mention() messages we just printed.  */
2763   printf_filtered ("\n");
2764 #endif
2765 }
2766 \f
2767 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
2768    If from_tty is nonzero, it prints a message to that effect,
2769    which ends with a period (no newline).  */
2770
2771 void
2772 set_ignore_count (bptnum, count, from_tty)
2773      int bptnum, count, from_tty;
2774 {
2775   register struct breakpoint *b;
2776
2777   if (count < 0)
2778     count = 0;
2779
2780   ALL_BREAKPOINTS (b)
2781     if (b->number == bptnum)
2782       {
2783         b->ignore_count = count;
2784         if (!from_tty)
2785           return;
2786         else if (count == 0)
2787           printf_filtered ("Will stop next time breakpoint %d is reached.",
2788                            bptnum);
2789         else if (count == 1)
2790           printf_filtered ("Will ignore next crossing of breakpoint %d.",
2791                            bptnum);
2792         else
2793           printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
2794                   count, bptnum);
2795         return;
2796       }
2797
2798   error ("No breakpoint number %d.", bptnum);
2799 }
2800
2801 /* Clear the ignore counts of all breakpoints.  */
2802 void
2803 breakpoint_clear_ignore_counts ()
2804 {
2805   struct breakpoint *b;
2806
2807   ALL_BREAKPOINTS (b)
2808     b->ignore_count = 0;
2809 }
2810
2811 /* Command to set ignore-count of breakpoint N to COUNT.  */
2812
2813 static void
2814 ignore_command (args, from_tty)
2815      char *args;
2816      int from_tty;
2817 {
2818   char *p = args;
2819   register int num;
2820
2821   if (p == 0)
2822     error_no_arg ("a breakpoint number");
2823   
2824   num = get_number (&p);
2825
2826   if (*p == 0)
2827     error ("Second argument (specified ignore-count) is missing.");
2828
2829   set_ignore_count (num,
2830                     longest_to_int (value_as_long (parse_and_eval (p))),
2831                     from_tty);
2832   printf_filtered ("\n");
2833 }
2834 \f
2835 /* Call FUNCTION on each of the breakpoints
2836    whose numbers are given in ARGS.  */
2837
2838 static void
2839 map_breakpoint_numbers (args, function)
2840      char *args;
2841      void (*function) PARAMS ((struct breakpoint *));
2842 {
2843   register char *p = args;
2844   char *p1;
2845   register int num;
2846   register struct breakpoint *b;
2847
2848   if (p == 0)
2849     error_no_arg ("one or more breakpoint numbers");
2850
2851   while (*p)
2852     {
2853       p1 = p;
2854       
2855       num = get_number (&p1);
2856
2857       ALL_BREAKPOINTS (b)
2858         if (b->number == num)
2859           {
2860             function (b);
2861             goto win;
2862           }
2863       printf ("No breakpoint number %d.\n", num);
2864     win:
2865       p = p1;
2866     }
2867 }
2868
2869 static void
2870 enable_breakpoint (bpt)
2871      struct breakpoint *bpt;
2872 {
2873   FRAME save_selected_frame = NULL;
2874   int save_selected_frame_level = -1;
2875   
2876   bpt->enable = enabled;
2877
2878   if (xgdb_verbose && bpt->type == bp_breakpoint)
2879     printf ("breakpoint #%d enabled\n", bpt->number);
2880
2881   check_duplicates (bpt->address);
2882   if (bpt->type == bp_watchpoint)
2883     {
2884       if (bpt->exp_valid_block != NULL)
2885         {
2886           FRAME fr = within_scope (bpt->exp_valid_block);
2887           if (fr == NULL)
2888             {
2889               printf_filtered ("\
2890 Cannot enable watchpoint %d because the block in which its expression\n\
2891 is valid is not currently in scope.\n", bpt->number);
2892               bpt->enable = disabled;
2893               return;
2894             }
2895           save_selected_frame = selected_frame;
2896           save_selected_frame_level = selected_frame_level;
2897           select_frame (fr, -1);
2898         }
2899
2900       value_free (bpt->val);
2901
2902       bpt->val = evaluate_expression (bpt->exp);
2903       release_value (bpt->val);
2904       if (VALUE_LAZY (bpt->val))
2905         value_fetch_lazy (bpt->val);
2906
2907       if (save_selected_frame_level >= 0)
2908         select_frame (save_selected_frame, save_selected_frame_level);
2909     }
2910 }
2911
2912 /* ARGSUSED */
2913 static void
2914 enable_command (args, from_tty)
2915      char *args;
2916      int from_tty;
2917 {
2918   struct breakpoint *bpt;
2919   if (args == 0)
2920     ALL_BREAKPOINTS (bpt)
2921       switch (bpt->type)
2922         {
2923         case bp_breakpoint:
2924         case bp_watchpoint:
2925           enable_breakpoint (bpt);
2926         default:
2927           continue;
2928         }
2929   else
2930     map_breakpoint_numbers (args, enable_breakpoint);
2931 }
2932
2933 static void
2934 disable_breakpoint (bpt)
2935      struct breakpoint *bpt;
2936 {
2937   bpt->enable = disabled;
2938
2939   if (xgdb_verbose && bpt->type == bp_breakpoint)
2940     printf_filtered ("breakpoint #%d disabled\n", bpt->number);
2941
2942   check_duplicates (bpt->address);
2943 }
2944
2945 /* ARGSUSED */
2946 static void
2947 disable_command (args, from_tty)
2948      char *args;
2949      int from_tty;
2950 {
2951   register struct breakpoint *bpt;
2952   if (args == 0)
2953     ALL_BREAKPOINTS (bpt)
2954       switch (bpt->type)
2955         {
2956         case bp_breakpoint:
2957         case bp_watchpoint:
2958           disable_breakpoint (bpt);
2959         default:
2960           continue;
2961         }
2962   else
2963     map_breakpoint_numbers (args, disable_breakpoint);
2964 }
2965
2966 static void
2967 enable_once_breakpoint (bpt)
2968      struct breakpoint *bpt;
2969 {
2970   bpt->enable = enabled;
2971   bpt->disposition = disable;
2972
2973   check_duplicates (bpt->address);
2974 }
2975
2976 /* ARGSUSED */
2977 static void
2978 enable_once_command (args, from_tty)
2979      char *args;
2980      int from_tty;
2981 {
2982   map_breakpoint_numbers (args, enable_once_breakpoint);
2983 }
2984
2985 static void
2986 enable_delete_breakpoint (bpt)
2987      struct breakpoint *bpt;
2988 {
2989   bpt->enable = enabled;
2990   bpt->disposition = delete;
2991
2992   check_duplicates (bpt->address);
2993 }
2994
2995 /* ARGSUSED */
2996 static void
2997 enable_delete_command (args, from_tty)
2998      char *args;
2999      int from_tty;
3000 {
3001   map_breakpoint_numbers (args, enable_delete_breakpoint);
3002 }
3003 \f
3004 /*
3005  * Use default_breakpoint_'s, or nothing if they aren't valid.
3006  */
3007 struct symtabs_and_lines
3008 decode_line_spec_1 (string, funfirstline)
3009      char *string;
3010      int funfirstline;
3011 {
3012   struct symtabs_and_lines sals;
3013   if (string == 0)
3014     error ("Empty line specification.");
3015   if (default_breakpoint_valid)
3016     sals = decode_line_1 (&string, funfirstline,
3017                           default_breakpoint_symtab, default_breakpoint_line,
3018                           (char ***)NULL);
3019   else
3020     sals = decode_line_1 (&string, funfirstline,
3021                           (struct symtab *)NULL, 0, (char ***)NULL);
3022   if (*string)
3023     error ("Junk at end of line specification: %s", string);
3024   return sals;
3025 }
3026 \f
3027 void
3028 _initialize_breakpoint ()
3029 {
3030   breakpoint_chain = 0;
3031   /* Don't bother to call set_breakpoint_count.  $bpnum isn't useful
3032      before a breakpoint is set.  */
3033   breakpoint_count = 0;
3034
3035   add_com ("ignore", class_breakpoint, ignore_command,
3036            "Set ignore-count of breakpoint number N to COUNT.");
3037
3038   add_com ("commands", class_breakpoint, commands_command,
3039            "Set commands to be executed when a breakpoint is hit.\n\
3040 Give breakpoint number as argument after \"commands\".\n\
3041 With no argument, the targeted breakpoint is the last one set.\n\
3042 The commands themselves follow starting on the next line.\n\
3043 Type a line containing \"end\" to indicate the end of them.\n\
3044 Give \"silent\" as the first line to make the breakpoint silent;\n\
3045 then no output is printed when it is hit, except what the commands print.");
3046
3047   add_com ("condition", class_breakpoint, condition_command,
3048            "Specify breakpoint number N to break only if COND is true.\n\
3049 N is an integer; COND is an expression to be evaluated whenever\n\
3050 breakpoint N is reached.  ");
3051
3052   add_com ("tbreak", class_breakpoint, tbreak_command,
3053            "Set a temporary breakpoint.  Args like \"break\" command.\n\
3054 Like \"break\" except the breakpoint is only enabled temporarily,\n\
3055 so it will be disabled when hit.  Equivalent to \"break\" followed\n\
3056 by using \"enable once\" on the breakpoint number.");
3057
3058   add_prefix_cmd ("enable", class_breakpoint, enable_command,
3059                   "Enable some breakpoints.\n\
3060 Give breakpoint numbers (separated by spaces) as arguments.\n\
3061 With no subcommand, breakpoints are enabled until you command otherwise.\n\
3062 This is used to cancel the effect of the \"disable\" command.\n\
3063 With a subcommand you can enable temporarily.",
3064                   &enablelist, "enable ", 1, &cmdlist);
3065
3066   add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
3067                   "Enable some breakpoints.\n\
3068 Give breakpoint numbers (separated by spaces) as arguments.\n\
3069 This is used to cancel the effect of the \"disable\" command.\n\
3070 May be abbreviated to simply \"enable\".\n",
3071                   &enablebreaklist, "enable breakpoints ", 1, &enablelist);
3072
3073   add_cmd ("once", no_class, enable_once_command,
3074            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
3075 If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
3076 See the \"tbreak\" command which sets a breakpoint and enables it once.",
3077            &enablebreaklist);
3078
3079   add_cmd ("delete", no_class, enable_delete_command,
3080            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
3081 If a breakpoint is hit while enabled in this fashion, it is deleted.",
3082            &enablebreaklist);
3083
3084   add_cmd ("delete", no_class, enable_delete_command,
3085            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
3086 If a breakpoint is hit while enabled in this fashion, it is deleted.",
3087            &enablelist);
3088
3089   add_cmd ("once", no_class, enable_once_command,
3090            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
3091 If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
3092 See the \"tbreak\" command which sets a breakpoint and enables it once.",
3093            &enablelist);
3094
3095   add_prefix_cmd ("disable", class_breakpoint, disable_command,
3096            "Disable some breakpoints.\n\
3097 Arguments are breakpoint numbers with spaces in between.\n\
3098 To disable all breakpoints, give no argument.\n\
3099 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
3100                   &disablelist, "disable ", 1, &cmdlist);
3101   add_com_alias ("dis", "disable", class_breakpoint, 1);
3102   add_com_alias ("disa", "disable", class_breakpoint, 1);
3103
3104   add_cmd ("breakpoints", class_alias, disable_command,
3105            "Disable some breakpoints.\n\
3106 Arguments are breakpoint numbers with spaces in between.\n\
3107 To disable all breakpoints, give no argument.\n\
3108 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
3109 This command may be abbreviated \"disable\".",
3110            &disablelist);
3111
3112   add_prefix_cmd ("delete", class_breakpoint, delete_command,
3113            "Delete some breakpoints or auto-display expressions.\n\
3114 Arguments are breakpoint numbers with spaces in between.\n\
3115 To delete all breakpoints, give no argument.\n\
3116 \n\
3117 Also a prefix command for deletion of other GDB objects.\n\
3118 The \"unset\" command is also an alias for \"delete\".",
3119                   &deletelist, "delete ", 1, &cmdlist);
3120   add_com_alias ("d", "delete", class_breakpoint, 1);
3121
3122   add_cmd ("breakpoints", class_alias, delete_command,
3123            "Delete some breakpoints or auto-display expressions.\n\
3124 Arguments are breakpoint numbers with spaces in between.\n\
3125 To delete all breakpoints, give no argument.\n\
3126 This command may be abbreviated \"delete\".",
3127            &deletelist);
3128
3129   add_com ("clear", class_breakpoint, clear_command,
3130            "Clear breakpoint at specified line or function.\n\
3131 Argument may be line number, function name, or \"*\" and an address.\n\
3132 If line number is specified, all breakpoints in that line are cleared.\n\
3133 If function is specified, breakpoints at beginning of function are cleared.\n\
3134 If an address is specified, breakpoints at that address are cleared.\n\n\
3135 With no argument, clears all breakpoints in the line that the selected frame\n\
3136 is executing in.\n\
3137 \n\
3138 See also the \"delete\" command which clears breakpoints by number.");
3139
3140   add_com ("break", class_breakpoint, break_command,
3141            "Set breakpoint at specified line or function.\n\
3142 Argument may be line number, function name, or \"*\" and an address.\n\
3143 If line number is specified, break at start of code for that line.\n\
3144 If function is specified, break at start of code for that function.\n\
3145 If an address is specified, break at that exact address.\n\
3146 With no arg, uses current execution address of selected stack frame.\n\
3147 This is useful for breaking on return to a stack frame.\n\
3148 \n\
3149 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
3150 \n\
3151 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
3152   add_com_alias ("b", "break", class_run, 1);
3153   add_com_alias ("br", "break", class_run, 1);
3154   add_com_alias ("bre", "break", class_run, 1);
3155   add_com_alias ("brea", "break", class_run, 1);
3156
3157   add_info ("breakpoints", breakpoints_info,
3158             "Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
3159 The \"Type\" column indicates one of:\n\
3160 \tbreakpoint     - normal breakpoint\n\
3161 \twatchpoint     - watchpoint\n\
3162 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
3163 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
3164 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
3165 address and file/line number respectively.\n\n\
3166 Convenience variable \"$_\" and default examine address for \"x\"\n\
3167 are set to the address of the last breakpoint listed.\n\n\
3168 Convenience variable \"$bpnum\" contains the number of the last\n\
3169 breakpoint set.");
3170
3171 #if MAINTENANCE_CMDS
3172
3173   add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
3174             "Status of all breakpoints, or breakpoint number NUMBER.\n\
3175 The \"Type\" column indicates one of:\n\
3176 \tbreakpoint     - normal breakpoint\n\
3177 \twatchpoint     - watchpoint\n\
3178 \tlongjmp        - internal breakpoint used to step through longjmp()\n\
3179 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
3180 \tuntil          - internal breakpoint used by the \"until\" command\n\
3181 \tfinish         - internal breakpoint used by the \"finish\" command\n\
3182 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
3183 the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
3184 breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
3185 address and file/line number respectively.\n\n\
3186 Convenience variable \"$_\" and default examine address for \"x\"\n\
3187 are set to the address of the last breakpoint listed.\n\n\
3188 Convenience variable \"$bpnum\" contains the number of the last\n\
3189 breakpoint set.",
3190            &maintenanceinfolist);
3191
3192 #endif  /* MAINTENANCE_CMDS */
3193
3194   add_com ("catch", class_breakpoint, catch_command,
3195          "Set breakpoints to catch exceptions that are raised.\n\
3196 Argument may be a single exception to catch, multiple exceptions\n\
3197 to catch, or the default exception \"default\".  If no arguments\n\
3198 are given, breakpoints are set at all exception handlers catch clauses\n\
3199 within the current scope.\n\
3200 \n\
3201 A condition specified for the catch applies to all breakpoints set\n\
3202 with this command\n\
3203 \n\
3204 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
3205
3206   add_com ("watch", class_breakpoint, watch_command,
3207            "Set a watchpoint for an expression.\n\
3208 A watchpoint stops execution of your program whenever the value of\n\
3209 an expression changes.");
3210
3211   add_info ("watchpoints", breakpoints_info,
3212             "Synonym for ``info breakpoints''.");
3213 }
3214
3215 /* OK, when we call objfile_relocate, we need to relocate breakpoints
3216    too.  breakpoint_re_set is not a good choice--for example, if
3217    addr_string contains just a line number without a file name the
3218    breakpoint might get set in a different file.  In general, there is
3219    no need to go all the way back to the user's string (though this might
3220    work if some effort were made to canonicalize it), since symtabs and
3221    everything except addresses are still valid.
3222
3223    Probably the best way to solve this is to have each breakpoint save
3224    the objfile and the section number that was used to set it (if set
3225    by "*addr", probably it is best to use find_pc_line to get a symtab
3226    and use the objfile and block_line_section for that symtab).  Then
3227    objfile_relocate can call fixup_breakpoints with the objfile and
3228    the new_offsets, and it can relocate only the appropriate breakpoints.  */
3229
3230 #ifdef IBM6000_TARGET
3231 /* But for now, just kludge it based on the concept that before an
3232    objfile is relocated the breakpoint is below 0x10000000, and afterwards
3233    it is higher, so that way we only relocate each breakpoint once.  */
3234
3235 void
3236 fixup_breakpoints (low, high, delta)
3237   CORE_ADDR low;
3238   CORE_ADDR high;
3239   CORE_ADDR delta;
3240 {
3241   struct breakpoint *b;
3242
3243   ALL_BREAKPOINTS (b)
3244     {
3245      if (b->address >= low && b->address <= high)
3246        b->address += delta;
3247     }
3248 }
3249 #endif