gdb-3.5
[platform/upstream/binutils.git] / gdb / breakpoint.c
1 /* Everything about breakpoints, for GDB.
2    Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 GDB 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 1, or (at your option)
9 any later version.
10
11 GDB 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 GDB; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include <stdio.h>
21 #include "defs.h"
22 #include "param.h"
23 #include "symtab.h"
24 #include "frame.h"
25
26 /* This is the sequence of bytes we insert for a breakpoint.  */
27
28 static char break_insn[] = BREAKPOINT;
29
30 /* States of enablement of breakpoint.
31    `temporary' means disable when hit.
32    `delete' means delete when hit.  */
33
34 enum enable { disabled, enabled, temporary, delete};
35
36 /* Not that the ->silent field is not currently used by any commands
37    (though the code is in there if it was to be and set_raw_breakpoint
38    does set it to 0).  I implemented it because I thought it would be
39    useful for a hack I had to put in; I'm going to leave it in because
40    I can see how there might be times when it would indeed be useful */
41
42 struct breakpoint
43 {
44   struct breakpoint *next;
45   /* Number assigned to distinguish breakpoints.  */
46   int number;
47   /* Address to break at.  */
48   CORE_ADDR address;
49   /* Line number of this address.  Redundant.  */
50   int line_number;
51   /* Symtab of file of this address.  Redundant.  */
52   struct symtab *symtab;
53   /* Zero means disabled; remember the info but don't break here.  */
54   enum enable enable;
55   /* Non-zero means a silent breakpoint (don't print frame info
56      if we stop here). */
57   unsigned char silent;
58   /* Number of stops at this breakpoint that should
59      be continued automatically before really stopping.  */
60   int ignore_count;
61   /* "Real" contents of byte where breakpoint has been inserted.
62      Valid only when breakpoints are in the program.  */
63   char shadow_contents[sizeof break_insn];
64   /* Nonzero if this breakpoint is now inserted.  */
65   char inserted;
66   /* Nonzero if this is not the first breakpoint in the list
67      for the given address.  */
68   char duplicate;
69   /* Chain of command lines to execute when this breakpoint is hit.  */
70   struct command_line *commands;
71   /* Stack depth (address of frame).  If nonzero, break only if fp
72      equals this.  */
73   FRAME_ADDR frame;
74   /* Conditional.  Break only if this expression's value is nonzero.  */
75   struct expression *cond;
76 };
77
78 #define ALL_BREAKPOINTS(b)  for (b = breakpoint_chain; b; b = b->next)
79
80 /* Chain of all breakpoints defined.  */
81
82 struct breakpoint *breakpoint_chain;
83
84 /* Number of last breakpoint made.  */
85
86 static int breakpoint_count;
87
88 /* Default address, symtab and line to put a breakpoint at
89    for "break" command with no arg.
90    if default_breakpoint_valid is zero, the other three are
91    not valid, and "break" with no arg is an error.
92
93    This set by print_stack_frame, which calls set_default_breakpoint.  */
94
95 int default_breakpoint_valid;
96 CORE_ADDR default_breakpoint_address;
97 struct symtab *default_breakpoint_symtab;
98 int default_breakpoint_line;
99
100 /* Remaining commands (not yet executed)
101    of last breakpoint hit.  */
102
103 struct command_line *breakpoint_commands;
104
105 static void delete_breakpoint ();
106 void clear_momentary_breakpoints ();
107 void breakpoint_auto_delete ();
108
109 /* Flag indicating extra verbosity for xgdb.  */
110 extern int xgdb_verbose;
111 \f
112 /* condition N EXP -- set break condition of breakpoint N to EXP.  */
113
114 static void
115 condition_command (arg, from_tty)
116      char *arg;
117      int from_tty;
118 {
119   register struct breakpoint *b;
120   register char *p;
121   register int bnum;
122   register struct expression *expr;
123
124   if (arg == 0)
125     error_no_arg ("breakpoint number");
126
127   p = arg;
128   while (*p >= '0' && *p <= '9') p++;
129   if (p == arg)
130     /* There is no number here.  (e.g. "cond a == b").  */
131     error_no_arg ("breakpoint number");
132   bnum = atoi (arg);
133
134   ALL_BREAKPOINTS (b)
135     if (b->number == bnum)
136       {
137         if (b->cond)
138           free (b->cond);
139         if (*p == 0)
140           {
141             b->cond = 0;
142             if (from_tty)
143               printf ("Breakpoint %d now unconditional.\n", bnum);
144           }
145         else
146           {
147             if (*p != ' ' && *p != '\t')
148               error ("Arguments must be an integer (breakpoint number) and an expression.");
149
150             /* Find start of expression */
151             while (*p == ' ' || *p == '\t') p++;
152
153             arg = p;
154             b->cond = (struct expression *) parse_c_1 (&arg, block_for_pc (b->address), 0);
155             if (*arg)
156               error ("Junk at end of expression");
157           }
158         return;
159       }
160
161   error ("No breakpoint number %d.", bnum);
162 }
163
164 static void
165 commands_command (arg)
166      char *arg;
167 {
168   register struct breakpoint *b;
169   register char *p, *p1;
170   register int bnum;
171   struct command_line *l;
172
173   /* If we allowed this, we would have problems with when to
174      free the storage, if we change the commands currently
175      being read from.  */
176
177   if (breakpoint_commands)
178     error ("Can't use the \"commands\" command among a breakpoint's commands.");
179
180   /* Allow commands by itself to refer to the last breakpoint.  */
181   if (arg == 0)
182     bnum = breakpoint_count;
183   else
184     {
185       p = arg;
186       if (! (*p >= '0' && *p <= '9'))
187         error ("Argument must be integer (a breakpoint number).");
188       
189       while (*p >= '0' && *p <= '9') p++;
190       if (*p)
191         error ("Unexpected extra arguments following breakpoint number.");
192       
193       bnum = atoi (arg);
194     }
195
196   ALL_BREAKPOINTS (b)
197     if (b->number == bnum)
198       {
199         if (input_from_terminal_p ())
200           {
201             printf ("Type commands for when breakpoint %d is hit, one per line.\n\
202 End with a line saying just \"end\".\n", bnum);
203             fflush (stdout);
204           }
205         l = read_command_lines ();
206         free_command_lines (&b->commands);
207         b->commands = l;
208         return;
209       }
210   error ("No breakpoint number %d.", bnum);
211 }
212
213 /* Called from command loop to execute the commands
214    associated with the breakpoint we just stopped at.  */
215
216 void
217 do_breakpoint_commands ()
218 {
219   while (breakpoint_commands)
220     {
221       char *line = breakpoint_commands->line;
222       breakpoint_commands = breakpoint_commands->next;
223       execute_command (line, 0);
224       /* If command was "cont", breakpoint_commands is now 0,
225          of if we stopped at yet another breakpoint which has commands,
226          it is now the commands for the new breakpoint.  */
227     }
228   clear_momentary_breakpoints ();
229 }
230
231 /* Used when the program is proceeded, to eliminate any remaining
232    commands attached to the previous breakpoint we stopped at.  */
233
234 void
235 clear_breakpoint_commands ()
236 {
237   breakpoint_commands = 0;
238   breakpoint_auto_delete (0);
239 }
240
241 /* Functions to get and set the current list of pending
242    breakpoint commands.  These are used by run_stack_dummy
243    to preserve the commands around a function call.  */
244
245 struct command_line *
246 get_breakpoint_commands ()
247 {
248   return breakpoint_commands;
249 }
250
251 void
252 set_breakpoint_commands (cmds)
253      struct command_line *cmds;
254 {
255   breakpoint_commands = cmds;
256 }
257 \f
258 /* insert_breakpoints is used when starting or continuing the program.
259    remove_breakpoints is used when the program stops.
260    Both return zero if successful,
261    or an `errno' value if could not write the inferior.  */
262
263 int
264 insert_breakpoints ()
265 {
266   register struct breakpoint *b;
267   int val;
268
269 #ifdef BREAKPOINT_DEBUG
270   printf ("Inserting breakpoints.\n");
271 #endif /* BREAKPOINT_DEBUG */
272
273   ALL_BREAKPOINTS (b)
274     if (b->enable != disabled && ! b->inserted && ! b->duplicate)
275       {
276         read_memory (b->address, b->shadow_contents, sizeof break_insn);
277         val = write_memory (b->address, break_insn, sizeof break_insn);
278         if (val)
279           return val;
280 #ifdef BREAKPOINT_DEBUG
281         printf ("Inserted breakpoint at 0x%x, shadow 0x%x, 0x%x.\n",
282                 b->address, b->shadow_contents[0], b->shadow_contents[1]);
283 #endif /* BREAKPOINT_DEBUG */
284         b->inserted = 1;
285       }
286   return 0;
287 }
288
289 int
290 remove_breakpoints ()
291 {
292   register struct breakpoint *b;
293   int val;
294
295 #ifdef BREAKPOINT_DEBUG
296   printf ("Removing breakpoints.\n");
297 #endif /* BREAKPOINT_DEBUG */
298
299   ALL_BREAKPOINTS (b)
300     if (b->inserted)
301       {
302         val = write_memory (b->address, b->shadow_contents, sizeof break_insn);
303         if (val)
304           return val;
305         b->inserted = 0;
306 #ifdef BREAKPOINT_DEBUG
307         printf ("Removed breakpoint at 0x%x, shadow 0x%x, 0x%x.\n",
308                 b->address, b->shadow_contents[0], b->shadow_contents[1]);
309 #endif /* BREAKPOINT_DEBUG */
310       }
311
312   return 0;
313 }
314
315 /* Clear the "inserted" flag in all breakpoints.
316    This is done when the inferior is loaded.  */
317
318 void
319 mark_breakpoints_out ()
320 {
321   register struct breakpoint *b;
322
323   ALL_BREAKPOINTS (b)
324     b->inserted = 0;
325 }
326
327 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
328    When continuing from a location with a breakpoint,
329    we actually single step once before calling insert_breakpoints.  */
330
331 int
332 breakpoint_here_p (pc)
333      CORE_ADDR pc;
334 {
335   register struct breakpoint *b;
336
337   ALL_BREAKPOINTS (b)
338     if (b->enable != disabled && b->address == pc)
339       return 1;
340
341   return 0;
342 }
343
344 /* Evaluate the expression EXP and return 1 if value is zero.
345    This is used inside a catch_errors to evaluate the breakpoint condition.  */
346
347 int
348 breakpoint_cond_eval (exp)
349      struct expression *exp;
350 {
351   return value_zerop (evaluate_expression (exp));
352 }
353
354 /* Return 0 if PC is not the address just after a breakpoint,
355    or -1 if breakpoint says do not stop now,
356    or -2 if breakpoint says it has deleted itself and don't stop,
357    or -3 if hit a breakpoint number -3 (delete when program stops),
358    or else the number of the breakpoint,
359    with 0x1000000 added (or subtracted, for a negative return value) for
360    a silent breakpoint.  */
361
362 int
363 breakpoint_stop_status (pc, frame_address)
364      CORE_ADDR pc;
365      FRAME_ADDR frame_address;
366 {
367   register struct breakpoint *b;
368   register int cont = 0;
369
370   /* Get the address where the breakpoint would have been.  */
371   pc -= DECR_PC_AFTER_BREAK;
372
373   ALL_BREAKPOINTS (b)
374     if (b->enable != disabled && b->address == pc)
375       {
376         if (b->frame && b->frame != frame_address)
377           cont = -1;
378         else
379           {
380             int value_zero;
381             if (b->cond)
382               {
383                 /* Need to select the frame, with all that implies
384                    so that the conditions will have the right context.  */
385                 select_frame (get_current_frame (), 0);
386                 value_zero
387                   = catch_errors (breakpoint_cond_eval, b->cond,
388                                   "Error occurred in testing breakpoint condition.");
389                 free_all_values ();
390               }
391             if (b->cond && value_zero)
392               {
393                 cont = -1;
394               }
395             else if (b->ignore_count > 0)
396               {
397                 b->ignore_count--;
398                 cont = -1;
399               }
400             else
401               {
402                 if (b->enable == temporary)
403                   b->enable = disabled;
404                 breakpoint_commands = b->commands;
405                 if (b->silent
406                     || (breakpoint_commands
407                         && !strcmp ("silent", breakpoint_commands->line)))
408                   {
409                     if (breakpoint_commands)
410                       breakpoint_commands = breakpoint_commands->next;
411                     return (b->number > 0 ?
412                             0x1000000 + b->number :
413                             b->number - 0x1000000);
414                   }
415                 return b->number;
416               }
417           }
418       }
419
420   return cont;
421 }
422 \f
423 static void
424 breakpoint_1 (bnum)
425      int bnum;
426 {
427   register struct breakpoint *b;
428   register struct command_line *l;
429   register struct symbol *sym;
430   CORE_ADDR last_addr = (CORE_ADDR)-1;
431
432   ALL_BREAKPOINTS (b)
433     if (bnum == -1 || bnum == b->number)
434       {
435         printf_filtered ("#%-3d %c  0x%08x ", b->number,
436                 "nyod"[(int) b->enable],
437                 b->address);
438         last_addr = b->address;
439         if (b->symtab)
440           {
441             sym = find_pc_function (b->address);
442             if (sym)
443               printf_filtered (" in %s (%s line %d)", SYMBOL_NAME (sym),
444                                b->symtab->filename, b->line_number);
445             else
446               printf_filtered ("%s line %d", b->symtab->filename, b->line_number);
447           }
448         else
449           {
450             char *name;
451             int addr;
452
453             if (find_pc_partial_function (b->address, &name, &addr))
454               {
455                 if (b->address - addr)
456                   printf_filtered ("<%s+%d>", name, b->address - addr);
457                 else
458                   printf_filtered ("<%s>", name);
459               }
460           }
461               
462         printf_filtered ("\n");
463
464         if (b->ignore_count)
465           printf_filtered ("\tignore next %d hits\n", b->ignore_count);
466         if (b->frame)
467           printf_filtered ("\tstop only in stack frame at 0x%x\n", b->frame);
468         if (b->cond)
469           {
470             printf_filtered ("\tbreak only if ");
471             print_expression (b->cond, stdout);
472             printf_filtered ("\n");
473           }
474         if (l = b->commands)
475           while (l)
476             {
477               printf_filtered ("\t%s\n", l->line);
478               l = l->next;
479             }
480       }
481
482   /* Compare against (CORE_ADDR)-1 in case some compiler decides
483      that a comparison of an unsigned with -1 is always false.  */
484   if (last_addr != (CORE_ADDR)-1)
485     set_next_address (last_addr);
486 }
487
488 static void
489 breakpoints_info (bnum_exp)
490      char *bnum_exp;
491 {
492   int bnum = -1;
493
494   if (bnum_exp)
495     bnum = parse_and_eval_address (bnum_exp);
496   else if (breakpoint_chain == 0)
497     printf_filtered ("No breakpoints.\n");
498   else
499     printf_filtered ("Breakpoints:\n\
500 Num Enb   Address    Where\n");
501
502   breakpoint_1 (bnum);
503 }
504
505 /* Print a message describing any breakpoints set at PC.  */
506
507 static void
508 describe_other_breakpoints (pc)
509      register CORE_ADDR pc;
510 {
511   register int others = 0;
512   register struct breakpoint *b;
513
514   ALL_BREAKPOINTS (b)
515     if (b->address == pc)
516       others++;
517   if (others > 0)
518     {
519       printf ("Note: breakpoint%s ", (others > 1) ? "s" : "");
520       ALL_BREAKPOINTS (b)
521         if (b->address == pc)
522           {
523             others--;
524             printf ("%d%s%s ",
525                     b->number,
526                     (b->enable == disabled) ? " (disabled)" : "",
527                     (others > 1) ? "," : ((others == 1) ? " and" : ""));
528           }
529       printf ("also set at pc 0x%x.\n", pc);
530     }
531 }
532 \f
533 /* Set the default place to put a breakpoint
534    for the `break' command with no arguments.  */
535
536 void
537 set_default_breakpoint (valid, addr, symtab, line)
538      int valid;
539      CORE_ADDR addr;
540      struct symtab *symtab;
541      int line;
542 {
543   default_breakpoint_valid = valid;
544   default_breakpoint_address = addr;
545   default_breakpoint_symtab = symtab;
546   default_breakpoint_line = line;
547 }
548
549 /* Rescan breakpoints at address ADDRESS,
550    marking the first one as "first" and any others as "duplicates".
551    This is so that the bpt instruction is only inserted once.  */
552
553 static void
554 check_duplicates (address)
555      CORE_ADDR address;
556 {
557   register struct breakpoint *b;
558   register int count = 0;
559
560   ALL_BREAKPOINTS (b)
561     if (b->enable != disabled && b->address == address)
562       {
563         count++;
564         b->duplicate = count > 1;
565       }
566 }
567
568 /* Low level routine to set a breakpoint.
569    Takes as args the three things that every breakpoint must have.
570    Returns the breakpoint object so caller can set other things.
571    Does not set the breakpoint number!
572    Does not print anything.  */
573
574 static struct breakpoint *
575 set_raw_breakpoint (sal)
576      struct symtab_and_line sal;
577 {
578   register struct breakpoint *b, *b1;
579
580   b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
581   bzero (b, sizeof *b);
582   b->address = sal.pc;
583   b->symtab = sal.symtab;
584   b->line_number = sal.line;
585   b->enable = enabled;
586   b->next = 0;
587   b->silent = 0;
588
589   /* Add this breakpoint to the end of the chain
590      so that a list of breakpoints will come out in order
591      of increasing numbers.  */
592
593   b1 = breakpoint_chain;
594   if (b1 == 0)
595     breakpoint_chain = b;
596   else
597     {
598       while (b1->next)
599         b1 = b1->next;
600       b1->next = b;
601     }
602
603   check_duplicates (sal.pc);
604
605   return b;
606 }
607
608 /* Set a breakpoint that will evaporate an end of command
609    at address specified by SAL.
610    Restrict it to frame FRAME if FRAME is nonzero.  */
611
612 void
613 set_momentary_breakpoint (sal, frame)
614      struct symtab_and_line sal;
615      FRAME frame;
616 {
617   register struct breakpoint *b;
618   b = set_raw_breakpoint (sal);
619   b->number = -3;
620   b->enable = delete;
621   b->frame = (frame ? FRAME_FP (frame) : 0);
622 }
623
624 void
625 clear_momentary_breakpoints ()
626 {
627   register struct breakpoint *b;
628   ALL_BREAKPOINTS (b)
629     if (b->number == -3)
630       {
631         delete_breakpoint (b);
632         break;
633       }
634 }
635 \f
636 /* Set a breakpoint from a symtab and line.
637    If TEMPFLAG is nonzero, it is a temporary breakpoint.
638    Print the same confirmation messages that the breakpoint command prints.  */
639
640 void
641 set_breakpoint (s, line, tempflag)
642      struct symtab *s;
643      int line;
644      int tempflag;
645 {
646   register struct breakpoint *b;
647   struct symtab_and_line sal;
648   
649   sal.symtab = s;
650   sal.line = line;
651   sal.pc = find_line_pc (sal.symtab, sal.line);
652   if (sal.pc == 0)
653     error ("No line %d in file \"%s\".\n", sal.line, sal.symtab->filename);
654   else
655     {
656       describe_other_breakpoints (sal.pc);
657
658       b = set_raw_breakpoint (sal);
659       b->number = ++breakpoint_count;
660       b->cond = 0;
661       if (tempflag)
662         b->enable = temporary;
663
664       printf ("Breakpoint %d at 0x%x", b->number, b->address);
665       if (b->symtab)
666         printf (": file %s, line %d.", b->symtab->filename, b->line_number);
667       printf ("\n");
668     }
669 }
670 \f
671 /* Set a breakpoint according to ARG (function, linenum or *address)
672    and make it temporary if TEMPFLAG is nonzero. */
673
674 static void
675 break_command_1 (arg, tempflag, from_tty)
676      char *arg;
677      int tempflag, from_tty;
678 {
679   struct symtabs_and_lines sals;
680   struct symtab_and_line sal;
681   register struct expression *cond = 0;
682   register struct breakpoint *b;
683   char *save_arg;
684   int i;
685   CORE_ADDR pc;
686
687   sals.sals = NULL;
688   sals.nelts = 0;
689
690   sal.line = sal.pc = sal.end = 0;
691   sal.symtab = 0;
692
693   /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
694
695   if (!arg || (arg[0] == 'i' && arg[1] == 'f' 
696                && (arg[2] == ' ' || arg[2] == '\t')))
697     {
698       if (default_breakpoint_valid)
699         {
700           sals.sals = (struct symtab_and_line *) 
701             malloc (sizeof (struct symtab_and_line));
702           sal.pc = default_breakpoint_address;
703           sal.line = default_breakpoint_line;
704           sal.symtab = default_breakpoint_symtab;
705           sals.sals[0] = sal;
706           sals.nelts = 1;
707         }
708       else
709         error ("No default breakpoint address now.");
710     }
711   else
712     /* Force almost all breakpoints to be in terms of the
713        current_source_symtab (which is decode_line_1's default).  This
714        should produce the results we want almost all of the time while
715        leaving default_breakpoint_* alone.  */
716     if (default_breakpoint_valid
717         && (!current_source_symtab
718             || (arg && (*arg == '+' || *arg == '-'))))
719       sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
720                             default_breakpoint_line);
721     else
722       sals = decode_line_1 (&arg, 1, 0, 0);
723   
724   if (! sals.nelts) 
725     return;
726
727   save_arg = arg;
728   for (i = 0; i < sals.nelts; i++)
729     {
730       sal = sals.sals[i];
731       if (sal.pc == 0 && sal.symtab != 0)
732         {
733           pc = find_line_pc (sal.symtab, sal.line);
734           if (pc == 0)
735             error ("No line %d in file \"%s\".",
736                    sal.line, sal.symtab->filename);
737         }
738       else 
739         pc = sal.pc;
740       
741       while (arg && *arg)
742         {
743           if (arg[0] == 'i' && arg[1] == 'f'
744               && (arg[2] == ' ' || arg[2] == '\t'))
745             cond = (struct expression *) parse_c_1 ((arg += 2, &arg),
746                                                     block_for_pc (pc), 0);
747           else
748             error ("Junk at end of arguments.");
749         }
750       arg = save_arg;
751       sals.sals[i].pc = pc;
752     }
753
754   for (i = 0; i < sals.nelts; i++)
755     {
756       sal = sals.sals[i];
757
758       if (from_tty)
759         describe_other_breakpoints (sal.pc);
760
761       b = set_raw_breakpoint (sal);
762       b->number = ++breakpoint_count;
763       b->cond = cond;
764       if (tempflag)
765         b->enable = temporary;
766
767       printf ("Breakpoint %d at 0x%x", b->number, b->address);
768       if (b->symtab)
769         printf (": file %s, line %d.", b->symtab->filename, b->line_number);
770       printf ("\n");
771     }
772
773   if (sals.nelts > 1)
774     {
775       printf ("Multiple breakpoints were set.\n");
776       printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
777     }
778   free (sals.sals);
779 }
780
781 static void
782 break_command (arg, from_tty)
783      char *arg;
784      int from_tty;
785 {
786   break_command_1 (arg, 0, from_tty);
787 }
788
789 static void
790 tbreak_command (arg, from_tty)
791      char *arg;
792      int from_tty;
793 {
794   break_command_1 (arg, 1, from_tty);
795 }
796 \f
797 /*
798  * Helper routine for the until_command routine in infcmd.c.  Here
799  * because it uses the mechanisms of breakpoints.
800  */
801 void
802 until_break_command (arg, from_tty)
803      char *arg;
804      int from_tty;
805 {
806   struct symtabs_and_lines sals;
807   struct symtab_and_line sal;
808   FRAME prev_frame = get_prev_frame (selected_frame);
809
810   clear_proceed_status ();
811
812   /* Set a breakpoint where the user wants it and at return from
813      this function */
814   
815   if (default_breakpoint_valid)
816     sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
817                           default_breakpoint_line);
818   else
819     sals = decode_line_1 (&arg, 1, 0, 0);
820   
821   if (sals.nelts != 1)
822     error ("Couldn't get information on specified line.");
823   
824   sal = sals.sals[0];
825   free (sals.sals);             /* malloc'd, so freed */
826   
827   if (*arg)
828     error ("Junk at end of arguments.");
829   
830   if (sal.pc == 0 && sal.symtab != 0)
831     sal.pc = find_line_pc (sal.symtab, sal.line);
832   
833   if (sal.pc == 0)
834     error ("No line %d in file \"%s\".", sal.line, sal.symtab->filename);
835   
836   set_momentary_breakpoint (sal, selected_frame);
837   
838   /* Keep within the current frame */
839   
840   if (prev_frame)
841     {
842       struct frame_info *fi;
843       
844       fi = get_frame_info (prev_frame);
845       sal = find_pc_line (fi->pc, 0);
846       sal.pc = fi->pc;
847       set_momentary_breakpoint (sal, prev_frame);
848     }
849   
850   proceed (-1, -1, 0);
851 }
852 \f
853 static void
854 clear_command (arg, from_tty)
855      char *arg;
856      int from_tty;
857 {
858   register struct breakpoint *b, *b1;
859   struct symtabs_and_lines sals;
860   struct symtab_and_line sal;
861   register struct breakpoint *found;
862   int i;
863
864   if (arg)
865     {
866       sals = decode_line_spec (arg, 1);
867     }
868   else
869     {
870       sals.sals = (struct symtab_and_line *) malloc (sizeof (struct symtab_and_line));
871       sal.line = default_breakpoint_line;
872       sal.symtab = default_breakpoint_symtab;
873       sal.pc = 0;
874       if (sal.symtab == 0)
875         error ("No source file specified.");
876
877       sals.sals[0] = sal;
878       sals.nelts = 1;
879     }
880
881   for (i = 0; i < sals.nelts; i++)
882     {
883       /* If exact pc given, clear bpts at that pc.
884          But if sal.pc is zero, clear all bpts on specified line.  */
885       sal = sals.sals[i];
886       found = (struct breakpoint *) 0;
887       while (breakpoint_chain
888              && (sal.pc ? breakpoint_chain->address == sal.pc
889                  : (breakpoint_chain->symtab == sal.symtab
890                     && breakpoint_chain->line_number == sal.line)))
891         {
892           b1 = breakpoint_chain;
893           breakpoint_chain = b1->next;
894           b1->next = found;
895           found = b1;
896         }
897
898       ALL_BREAKPOINTS (b)
899         while (b->next
900                && (sal.pc ? b->next->address == sal.pc
901                    : (b->next->symtab == sal.symtab
902                       && b->next->line_number == sal.line)))
903           {
904             b1 = b->next;
905             b->next = b1->next;
906             b1->next = found;
907             found = b1;
908           }
909
910       if (found == 0)
911         error ("No breakpoint at %s.", arg);
912
913       if (found->next) from_tty = 1; /* Always report if deleted more than one */
914       if (from_tty) printf ("Deleted breakpoint%s ", found->next ? "s" : "");
915       while (found)
916         {
917           if (from_tty) printf ("%d ", found->number);
918           b1 = found->next;
919           delete_breakpoint (found);
920           found = b1;
921         }
922       if (from_tty) putchar ('\n');
923     }
924   free (sals.sals);
925 }
926 \f
927 /* Delete breakpoint number BNUM if it is a `delete' breakpoint.
928    This is called after breakpoint BNUM has been hit.
929    Also delete any breakpoint numbered -3 unless there are breakpoint
930    commands to be executed.  */
931
932 void
933 breakpoint_auto_delete (bnum)
934      int bnum;
935 {
936   register struct breakpoint *b;
937   if (bnum != 0)
938     ALL_BREAKPOINTS (b)
939       if (b->number == bnum)
940         {
941           if (b->enable == delete)
942             delete_breakpoint (b);
943           break;
944         }
945   if (breakpoint_commands == 0)
946     clear_momentary_breakpoints ();
947 }
948
949 static void
950 delete_breakpoint (bpt)
951      struct breakpoint *bpt;
952 {
953   register struct breakpoint *b;
954
955   if (bpt->inserted)
956     write_memory (bpt->address, bpt->shadow_contents, sizeof break_insn);
957
958   if (breakpoint_chain == bpt)
959     breakpoint_chain = bpt->next;
960
961   ALL_BREAKPOINTS (b)
962     if (b->next == bpt)
963       {
964         b->next = bpt->next;
965         break;
966       }
967
968   check_duplicates (bpt->address);
969
970   free_command_lines (&bpt->commands);
971   if (bpt->cond)
972     free (bpt->cond);
973
974   if (xgdb_verbose && bpt->number >=0)
975     printf ("breakpoint #%d deleted\n", bpt->number);
976
977   free (bpt);
978 }
979
980 static void map_breakpoint_numbers ();
981
982 static void
983 delete_command (arg, from_tty)
984      char *arg;
985      int from_tty;
986 {
987   register struct breakpoint *b, *b1;
988
989   if (arg == 0)
990     {
991       /* Ask user only if there are some breakpoints to delete.  */
992       if (!from_tty
993           || breakpoint_chain && query ("Delete all breakpoints? "))
994         {
995           /* No arg; clear all breakpoints.  */
996           while (breakpoint_chain)
997             delete_breakpoint (breakpoint_chain);
998         }
999     }
1000   else
1001     map_breakpoint_numbers (arg, delete_breakpoint);
1002 }
1003
1004 /* Delete all breakpoints.
1005    Done when new symtabs are loaded, since the break condition expressions
1006    may become invalid, and the breakpoints are probably wrong anyway.  */
1007
1008 void
1009 clear_breakpoints ()
1010 {
1011   delete_command (0, 0);
1012 }
1013 \f
1014 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
1015    If from_tty is nonzero, it prints a message to that effect,
1016    which ends with a period (no newline).  */
1017
1018 void
1019 set_ignore_count (bptnum, count, from_tty)
1020      int bptnum, count, from_tty;
1021 {
1022   register struct breakpoint *b;
1023
1024   if (count < 0)
1025     count = 0;
1026
1027   ALL_BREAKPOINTS (b)
1028     if (b->number == bptnum)
1029       {
1030         b->ignore_count = count;
1031         if (!from_tty)
1032           return;
1033         else if (count == 0)
1034           printf ("Will stop next time breakpoint %d is reached.", bptnum);
1035         else if (count == 1)
1036           printf ("Will ignore next crossing of breakpoint %d.", bptnum);
1037         else
1038           printf ("Will ignore next %d crossings of breakpoint %d.",
1039                   count, bptnum);
1040         return;
1041       }
1042
1043   error ("No breakpoint number %d.", bptnum);
1044 }
1045
1046 /* Clear the ignore counts of all breakpoints.  */
1047 void
1048 breakpoint_clear_ignore_counts ()
1049 {
1050   struct breakpoint *b;
1051
1052   ALL_BREAKPOINTS (b)
1053     b->ignore_count = 0;
1054 }
1055
1056 /* Command to set ignore-count of breakpoint N to COUNT.  */
1057
1058 static void
1059 ignore_command (args, from_tty)
1060      char *args;
1061      int from_tty;
1062 {
1063   register char *p = args;
1064   register int num;
1065
1066   if (p == 0)
1067     error_no_arg ("a breakpoint number");
1068   
1069   while (*p >= '0' && *p <= '9') p++;
1070   if (*p && *p != ' ' && *p != '\t')
1071     error ("First argument must be a breakpoint number.");
1072
1073   num = atoi (args);
1074
1075   if (*p == 0)
1076     error ("Second argument (specified ignore-count) is missing.");
1077
1078   set_ignore_count (num, parse_and_eval_address (p), from_tty);
1079   printf ("\n");
1080 }
1081 \f
1082 /* Call FUNCTION on each of the breakpoints
1083    whose numbers are given in ARGS.  */
1084
1085 static void
1086 map_breakpoint_numbers (args, function)
1087      char *args;
1088      void (*function) ();
1089 {
1090   register char *p = args;
1091   register char *p1;
1092   register int num;
1093   register struct breakpoint *b;
1094
1095   if (p == 0)
1096     error_no_arg ("one or more breakpoint numbers");
1097
1098   while (*p)
1099     {
1100       p1 = p;
1101       while (*p1 >= '0' && *p1 <= '9') p1++;
1102       if (*p1 && *p1 != ' ' && *p1 != '\t')
1103         error ("Arguments must be breakpoint numbers.");
1104
1105       num = atoi (p);
1106
1107       ALL_BREAKPOINTS (b)
1108         if (b->number == num)
1109           {
1110             function (b);
1111             goto win;
1112           }
1113       printf ("No breakpoint number %d.\n", num);
1114     win:
1115       p = p1;
1116       while (*p == ' ' || *p == '\t') p++;
1117     }
1118 }
1119
1120 static void
1121 enable_breakpoint (bpt)
1122      struct breakpoint *bpt;
1123 {
1124   bpt->enable = enabled;
1125
1126   if (xgdb_verbose && bpt->number >= 0)
1127     printf ("breakpoint #%d enabled\n", bpt->number);
1128
1129   check_duplicates (bpt->address);
1130 }
1131
1132 static void
1133 enable_command (args)
1134      char *args;
1135 {
1136   struct breakpoint *bpt;
1137   if (args == 0)
1138     ALL_BREAKPOINTS (bpt)
1139       enable_breakpoint (bpt);
1140   else
1141     map_breakpoint_numbers (args, enable_breakpoint);
1142 }
1143
1144 static void
1145 disable_breakpoint (bpt)
1146      struct breakpoint *bpt;
1147 {
1148   bpt->enable = disabled;
1149
1150   if (xgdb_verbose && bpt->number >= 0)
1151     printf ("breakpoint #%d disabled\n", bpt->number);
1152
1153   check_duplicates (bpt->address);
1154 }
1155
1156 static void
1157 disable_command (args)
1158      char *args;
1159 {
1160   register struct breakpoint *bpt;
1161   if (args == 0)
1162     ALL_BREAKPOINTS (bpt)
1163       disable_breakpoint (bpt);
1164   else
1165     map_breakpoint_numbers (args, disable_breakpoint);
1166 }
1167
1168 static void
1169 enable_once_breakpoint (bpt)
1170      struct breakpoint *bpt;
1171 {
1172   bpt->enable = temporary;
1173
1174   check_duplicates (bpt->address);
1175 }
1176
1177 static void
1178 enable_once_command (args)
1179      char *args;
1180 {
1181   map_breakpoint_numbers (args, enable_once_breakpoint);
1182 }
1183
1184 static void
1185 enable_delete_breakpoint (bpt)
1186      struct breakpoint *bpt;
1187 {
1188   bpt->enable = delete;
1189
1190   check_duplicates (bpt->address);
1191 }
1192
1193 static void
1194 enable_delete_command (args)
1195      char *args;
1196 {
1197   map_breakpoint_numbers (args, enable_delete_breakpoint);
1198 }
1199 \f
1200 /*
1201  * Use default_breakpoint_'s, or nothing if they aren't valid.
1202  */
1203 struct symtabs_and_lines
1204 decode_line_spec_1 (string, funfirstline)
1205      char *string;
1206      int funfirstline;
1207 {
1208   struct symtabs_and_lines sals;
1209   if (string == 0)
1210     error ("Empty line specification.");
1211   if (default_breakpoint_valid)
1212     sals = decode_line_1 (&string, funfirstline,
1213                           default_breakpoint_symtab, default_breakpoint_line);
1214   else
1215     sals = decode_line_1 (&string, funfirstline, 0, 0);
1216   if (*string)
1217     error ("Junk at end of line specification: %s", string);
1218   return sals;
1219 }
1220 \f
1221
1222 /* Chain containing all defined enable commands.  */
1223
1224 extern struct cmd_list_element 
1225   *enablelist, *disablelist,
1226   *deletelist, *enablebreaklist;
1227
1228 extern struct cmd_list_element *cmdlist;
1229
1230 void
1231 _initialize_breakpoint ()
1232 {
1233   breakpoint_chain = 0;
1234   breakpoint_count = 0;
1235
1236   add_com ("ignore", class_breakpoint, ignore_command,
1237            "Set ignore-count of breakpoint number N to COUNT.");
1238
1239   add_com ("commands", class_breakpoint, commands_command,
1240            "Set commands to be executed when a breakpoint is hit.\n\
1241 Give breakpoint number as argument after \"commands\".\n\
1242 With no argument, the targeted breakpoint is the last one set.\n\
1243 The commands themselves follow starting on the next line.\n\
1244 Type a line containing \"end\" to indicate the end of them.\n\
1245 Give \"silent\" as the first line to make the breakpoint silent;\n\
1246 then no output is printed when it is hit, except what the commands print.");
1247
1248   add_com ("condition", class_breakpoint, condition_command,
1249            "Specify breakpoint number N to break only if COND is true.\n\
1250 N is an integer; COND is a C expression to be evaluated whenever\n\
1251 breakpoint N is reached.  Actually break only when COND is nonzero.");
1252
1253   add_com ("tbreak", class_breakpoint, tbreak_command,
1254            "Set a temporary breakpoint.  Args like \"break\" command.\n\
1255 Like \"break\" except the breakpoint is only enabled temporarily,\n\
1256 so it will be disabled when hit.  Equivalent to \"break\" followed\n\
1257 by using \"enable once\" on the breakpoint number.");
1258
1259   add_prefix_cmd ("enable", class_breakpoint, enable_command,
1260                   "Enable some breakpoints or auto-display expressions.\n\
1261 Give breakpoint numbers (separated by spaces) as arguments.\n\
1262 With no subcommand, breakpoints are enabled until you command otherwise.\n\
1263 This is used to cancel the effect of the \"disable\" command.\n\
1264 With a subcommand you can enable temporarily.\n\
1265 \n\
1266 The \"display\" subcommand applies to auto-displays instead of breakpoints.",
1267                   &enablelist, "enable ", 1, &cmdlist);
1268
1269   add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
1270                   "Enable some breakpoints or auto-display expressions.\n\
1271 Give breakpoint numbers (separated by spaces) as arguments.\n\
1272 With no subcommand, breakpoints are enabled until you command otherwise.\n\
1273 This is used to cancel the effect of the \"disable\" command.\n\
1274 May be abbreviates to simply \"enable\".\n\
1275 With a subcommand you can enable temporarily.",
1276                   &enablebreaklist, "enable breakpoints ", 1, &enablelist);
1277
1278   add_cmd ("once", no_class, enable_once_command,
1279            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
1280 If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
1281 See the \"tbreak\" command which sets a breakpoint and enables it once.",
1282            &enablebreaklist);
1283
1284   add_cmd ("delete", no_class, enable_delete_command,
1285            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
1286 If a breakpoint is hit while enabled in this fashion, it is deleted.",
1287            &enablebreaklist);
1288
1289   add_cmd ("delete", no_class, enable_delete_command,
1290            "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
1291 If a breakpoint is hit while enabled in this fashion, it is deleted.",
1292            &enablelist);
1293
1294   add_cmd ("once", no_class, enable_once_command,
1295            "Enable breakpoints for one hit.  Give breakpoint numbers.\n\
1296 If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
1297 See the \"tbreak\" command which sets a breakpoint and enables it once.",
1298            &enablelist);
1299
1300   add_prefix_cmd ("disable", class_breakpoint, disable_command,
1301            "Disable some breakpoints or auto-display expressions.\n\
1302 Arguments are breakpoint numbers with spaces in between.\n\
1303 To disable all breakpoints, give no argument.\n\
1304 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
1305 \n\
1306 The \"display\" subcommand applies to auto-displays instead of breakpoints.",
1307                   &disablelist, "disable ", 1, &cmdlist);
1308   add_com_alias ("dis", "disable", class_breakpoint, 1);
1309   add_com_alias ("disa", "disable", class_breakpoint, 1);
1310
1311   add_abbrev_cmd ("breakpoints", class_breakpoint, disable_command,
1312            "Disable some breakpoints or auto-display expressions.\n\
1313 Arguments are breakpoint numbers with spaces in between.\n\
1314 To disable all breakpoints, give no argument.\n\
1315 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
1316 This command may be abbreviated \"disable\".",
1317            &disablelist);
1318
1319   add_prefix_cmd ("delete", class_breakpoint, delete_command,
1320            "Delete some breakpoints or auto-display expressions.\n\
1321 Arguments are breakpoint numbers with spaces in between.\n\
1322 To delete all breakpoints, give no argument.\n\
1323 \n\
1324 Also a prefix command for deletion of other GDB objects.\n\
1325 The \"unset\" command is also an alias for \"delete\".",
1326                   &deletelist, "delete ", 1, &cmdlist);
1327   add_com_alias ("d", "delete", class_breakpoint, 1);
1328   add_com_alias ("unset", "delete", class_alias, 1);
1329
1330   add_cmd ("breakpoints", class_alias, delete_command,
1331            "Delete some breakpoints or auto-display expressions.\n\
1332 Arguments are breakpoint numbers with spaces in between.\n\
1333 To delete all breakpoints, give no argument.\n\
1334 This command may be abbreviated \"delete\".",
1335            &deletelist);
1336
1337   add_com ("clear", class_breakpoint, clear_command,
1338            "Clear breakpoint at specified line or function.\n\
1339 Argument may be line number, function name, or \"*\" and an address.\n\
1340 If line number is specified, all breakpoints in that line are cleared.\n\
1341 If function is specified, breakpoints at beginning of function are cleared.\n\
1342 If an address is specified, breakpoints at that address are cleared.\n\n\
1343 With no argument, clears all breakpoints in the line that the selected frame\n\
1344 is executing in.\n\
1345 \n\
1346 See also the \"delete\" command which clears breakpoints by number.");
1347
1348   add_com ("break", class_breakpoint, break_command,
1349            "Set breakpoint at specified line or function.\n\
1350 Argument may be line number, function name, or \"*\" and an address.\n\
1351 If line number is specified, break at start of code for that line.\n\
1352 If function is specified, break at start of code for that function.\n\
1353 If an address is specified, break at that exact address.\n\
1354 With no arg, uses current execution address of selected stack frame.\n\
1355 This is useful for breaking on return to a stack frame.\n\
1356 \n\
1357 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
1358 \n\
1359 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
1360   add_com_alias ("b", "break", class_run, 1);
1361   add_com_alias ("br", "break", class_run, 1);
1362   add_com_alias ("bre", "break", class_run, 1);
1363   add_com_alias ("brea", "break", class_run, 1);
1364
1365   add_info ("breakpoints", breakpoints_info,
1366             "Status of all breakpoints, or breakpoint number NUMBER.\n\
1367 Second column is \"y\" for enabled breakpoint, \"n\" for disabled,\n\
1368 \"o\" for enabled once (disable when hit), \"d\" for enable but delete when hit.\n\
1369 Then come the address and the file/line number.\n\n\
1370 Convenience variable \"$_\" and default examine address for \"x\"\n\
1371 are set to the address of the last breakpoint listed.");
1372 }
1373