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