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