Initial revision
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
CommitLineData
bd5635a1
RP
1/* Everything about breakpoints, for GDB.
2 Copyright (C) 1986, 1987, 1989, 1990 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
6GDB is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 1, or (at your option)
9any later version.
10
11GDB is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GDB; see the file COPYING. If not, write to
18the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20#include <stdio.h>
21#include <ctype.h>
22#include "defs.h"
23#include "param.h"
24#include "symtab.h"
25#include "frame.h"
26#include "breakpoint.h"
27#include "expression.h"
28#include "gdbcore.h"
29#include "gdbcmd.h"
30#include "value.h"
31#include "ctype.h"
32#include "command.h"
33#include "inferior.h"
34#include "target.h"
35#include <string.h>
36
37extern int addressprint; /* Print machine addresses? */
38extern int demangle; /* Print de-mangled symbol names? */
39
40extern int catch_errors ();
41extern void set_next_address (); /* ...for x/ command */
42
43/* Are we executing breakpoint commands? */
44static int executing_breakpoint_commands;
45
46/* States of enablement of breakpoint.
47 `temporary' means disable when hit.
48 `delete' means delete when hit. */
49
50enum enable { disabled, enabled, temporary, delete};
51
52/* Not that the ->silent field is not currently used by any commands
53 (though the code is in there if it was to be and set_raw_breakpoint
54 does set it to 0). I implemented it because I thought it would be
55 useful for a hack I had to put in; I'm going to leave it in because
56 I can see how there might be times when it would indeed be useful */
57
58/* This is for a breakpoint or a watchpoint. */
59
60struct breakpoint
61{
62 struct breakpoint *next;
63 /* Number assigned to distinguish breakpoints. */
64 int number;
65 /* Address to break at, or NULL if not a breakpoint. */
66 CORE_ADDR address;
67 /* Line number of this address. Redundant. Only matters if address
68 is non-NULL. */
69 int line_number;
70 /* Symtab of file of this address. Redundant. Only matters if address
71 is non-NULL. */
72 struct symtab *symtab;
73 /* Zero means disabled; remember the info but don't break here. */
74 enum enable enable;
75 /* Non-zero means a silent breakpoint (don't print frame info
76 if we stop here). */
77 unsigned char silent;
78 /* Number of stops at this breakpoint that should
79 be continued automatically before really stopping. */
80 int ignore_count;
81 /* "Real" contents of byte where breakpoint has been inserted.
82 Valid only when breakpoints are in the program. Under the complete
83 control of the target insert_breakpoint and remove_breakpoint routines.
84 No other code should assume anything about the value(s) here. */
85 char shadow_contents[BREAKPOINT_MAX];
86 /* Nonzero if this breakpoint is now inserted. Only matters if address
87 is non-NULL. */
88 char inserted;
89 /* Nonzero if this is not the first breakpoint in the list
90 for the given address. Only matters if address is non-NULL. */
91 char duplicate;
92 /* Chain of command lines to execute when this breakpoint is hit. */
93 struct command_line *commands;
94 /* Stack depth (address of frame). If nonzero, break only if fp
95 equals this. */
96 FRAME_ADDR frame;
97 /* Conditional. Break only if this expression's value is nonzero. */
98 struct expression *cond;
99
100 /* String we used to set the breakpoint (malloc'd). Only matters if
101 address is non-NULL. */
102 char *addr_string;
103 /* String form of the breakpoint condition (malloc'd), or NULL if there
104 is no condition. */
105 char *cond_string;
106
107 /* The expression we are watching, or NULL if not a watchpoint. */
108 struct expression *exp;
109 /* The largest block within which it is valid, or NULL if it is
110 valid anywhere (e.g. consists just of global symbols). */
111 struct block *exp_valid_block;
112 /* Value of the watchpoint the last time we checked it. */
113 value val;
114};
115
116#define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
117
118/* Chain of all breakpoints defined. */
119
120struct breakpoint *breakpoint_chain;
121
122/* Number of last breakpoint made. */
123
124static int breakpoint_count;
125
126/* Set breakpoint count to NUM. */
127static void
128set_breakpoint_count (num)
129 int num;
130{
131 breakpoint_count = num;
132 set_internalvar (lookup_internalvar ("bpnum"),
133 value_from_long (builtin_type_int, (LONGEST) num));
134}
135
136/* Default address, symtab and line to put a breakpoint at
137 for "break" command with no arg.
138 if default_breakpoint_valid is zero, the other three are
139 not valid, and "break" with no arg is an error.
140
141 This set by print_stack_frame, which calls set_default_breakpoint. */
142
143int default_breakpoint_valid;
144CORE_ADDR default_breakpoint_address;
145struct symtab *default_breakpoint_symtab;
146int default_breakpoint_line;
147
148static void delete_breakpoint ();
149void breakpoint_auto_delete ();
150
151/* Flag indicating extra verbosity for xgdb. */
152extern int xgdb_verbose;
153\f
154/* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
155 Advance *PP after the string and any trailing whitespace.
156
157 Currently the string can either be a number or "$" followed by the name
158 of a convenience variable. Making it an expression wouldn't work well
159 for map_breakpoint_numbers (e.g. "4 + 5 + 6"). */
160static int
161get_number (pp)
162 char **pp;
163{
164 int retval;
165 char *p = *pp;
166
167 if (p == NULL)
168 /* Empty line means refer to the last breakpoint. */
169 return breakpoint_count;
170 else if (*p == '$')
171 {
172 /* Make a copy of the name, so we can null-terminate it
173 to pass to lookup_internalvar(). */
174 char *varname;
175 char *start = ++p;
176 value val;
177
178 while (isalnum (*p) || *p == '_')
179 p++;
180 varname = (char *) alloca (p - start + 1);
181 strncpy (varname, start, p - start);
182 varname[p - start] = '\0';
183 val = value_of_internalvar (lookup_internalvar (varname));
184 if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
185 error (
186"Convenience variables used to specify breakpoints must have integer values."
187 );
188 retval = (int) value_as_long (val);
189 }
190 else
191 {
192 while (*p >= '0' && *p <= '9')
193 ++p;
194 if (p == *pp)
195 /* There is no number here. (e.g. "cond a == b"). */
196 error_no_arg ("breakpoint number");
197 retval = atoi (*pp);
198 }
199 if (!(isspace (*p) || *p == '\0'))
200 error ("breakpoint number expected");
201 while (isspace (*p))
202 p++;
203 *pp = p;
204 return retval;
205}
206\f
207/* condition N EXP -- set break condition of breakpoint N to EXP. */
208
209static void
210condition_command (arg, from_tty)
211 char *arg;
212 int from_tty;
213{
214 register struct breakpoint *b;
215 char *p;
216 register int bnum;
217
218 if (arg == 0)
219 error_no_arg ("breakpoint number");
220
221 p = arg;
222 bnum = get_number (&p);
223
224 ALL_BREAKPOINTS (b)
225 if (b->number == bnum)
226 {
227 if (b->cond)
228 {
229 free (b->cond);
230 b->cond = 0;
231 }
232 if (b->cond_string != NULL)
233 free (b->cond_string);
234
235 if (*p == 0)
236 {
237 b->cond = 0;
238 b->cond_string = NULL;
239 if (from_tty)
240 printf ("Breakpoint %d now unconditional.\n", bnum);
241 }
242 else
243 {
244 arg = p;
245 /* I don't know if it matters whether this is the string the user
246 typed in or the decompiled expression. */
247 b->cond_string = savestring (arg, strlen (arg));
248 b->cond = parse_c_1 (&arg, block_for_pc (b->address), 0);
249 if (*arg)
250 error ("Junk at end of expression");
251 }
252 return;
253 }
254
255 error ("No breakpoint number %d.", bnum);
256}
257
258static void
259commands_command (arg, from_tty)
260 char *arg;
261 int from_tty;
262{
263 register struct breakpoint *b;
264 char *p;
265 register int bnum;
266 struct command_line *l;
267
268 /* If we allowed this, we would have problems with when to
269 free the storage, if we change the commands currently
270 being read from. */
271
272 if (executing_breakpoint_commands)
273 error ("Can't use the \"commands\" command among a breakpoint's commands.");
274
275 p = arg;
276 bnum = get_number (&p);
277 if (p && *p)
278 error ("Unexpected extra arguments following breakpoint number.");
279
280 ALL_BREAKPOINTS (b)
281 if (b->number == bnum)
282 {
283 if (input_from_terminal_p ())
284 {
285 printf ("Type commands for when breakpoint %d is hit, one per line.\n\
286End with a line saying just \"end\".\n", bnum);
287 fflush (stdout);
288 }
289 l = read_command_lines ();
290 free_command_lines (&b->commands);
291 b->commands = l;
292 return;
293 }
294 error ("No breakpoint number %d.", bnum);
295}
296\f
297/* insert_breakpoints is used when starting or continuing the program.
298 remove_breakpoints is used when the program stops.
299 Both return zero if successful,
300 or an `errno' value if could not write the inferior. */
301
302int
303insert_breakpoints ()
304{
305 register struct breakpoint *b;
306 int val = 0;
307 int disabled_breaks = 0;
308
309 ALL_BREAKPOINTS (b)
310 if (b->address != NULL
311 && b->enable != disabled
312 && ! b->inserted
313 && ! b->duplicate)
314 {
315 val = target_insert_breakpoint(b->address, b->shadow_contents);
316 if (val)
317 {
318 /* Can't set the breakpoint. */
319#if defined (DISABLE_UNSETTABLE_BREAK)
320 if (DISABLE_UNSETTABLE_BREAK (b->address))
321 {
322 val = 0;
323 b->enable = disabled;
324 if (!disabled_breaks)
325 {
326 fprintf (stderr,
327 "Cannot insert breakpoint %d:\n", b->number);
328 printf_filtered ("Disabling shared library breakpoints:\n");
329 }
330 disabled_breaks = 1;
331 printf_filtered ("%d ", b->number);
332 }
333 else
334#endif
335 {
336 fprintf (stderr, "Cannot insert breakpoint %d:\n", b->number);
337 memory_error (val, b->address); /* which bombs us out */
338 }
339 }
340 else
341 b->inserted = 1;
342 }
343 if (disabled_breaks)
344 printf_filtered ("\n");
345 return val;
346}
347
348int
349remove_breakpoints ()
350{
351 register struct breakpoint *b;
352 int val;
353
354#ifdef BREAKPOINT_DEBUG
355 printf ("Removing breakpoints.\n");
356#endif /* BREAKPOINT_DEBUG */
357
358 ALL_BREAKPOINTS (b)
359 if (b->address != NULL && b->inserted)
360 {
361 val = target_remove_breakpoint(b->address, b->shadow_contents);
362 if (val)
363 return val;
364 b->inserted = 0;
365#ifdef BREAKPOINT_DEBUG
366 printf ("Removed breakpoint at 0x%x, shadow 0x%x, 0x%x.\n",
367 b->address, b->shadow_contents[0], b->shadow_contents[1]);
368#endif /* BREAKPOINT_DEBUG */
369 }
370
371 return 0;
372}
373
374/* Clear the "inserted" flag in all breakpoints.
375 This is done when the inferior is loaded. */
376
377void
378mark_breakpoints_out ()
379{
380 register struct breakpoint *b;
381
382 ALL_BREAKPOINTS (b)
383 b->inserted = 0;
384}
385
386/* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
387 When continuing from a location with a breakpoint,
388 we actually single step once before calling insert_breakpoints. */
389
390int
391breakpoint_here_p (pc)
392 CORE_ADDR pc;
393{
394 register struct breakpoint *b;
395
396 ALL_BREAKPOINTS (b)
397 if (b->enable != disabled && b->address == pc)
398 return 1;
399
400 return 0;
401}
402\f
403/* bpstat stuff. External routines' interfaces are documented
404 in breakpoint.h. */
405void
406bpstat_clear (bsp)
407 bpstat *bsp;
408{
409 bpstat p;
410 bpstat q;
411
412 if (bsp == 0)
413 return;
414 p = *bsp;
415 while (p != NULL)
416 {
417 q = p->next;
418 if (p->old_val != NULL)
419 value_free (p->old_val);
420 free (p);
421 p = q;
422 }
423 *bsp = NULL;
424}
425
426bpstat
427bpstat_copy (bs)
428 bpstat bs;
429{
430 bpstat p = NULL;
431 bpstat tmp;
432 bpstat retval;
433
434 if (bs == NULL)
435 return bs;
436
437 for (; bs != NULL; bs = bs->next)
438 {
439 tmp = (bpstat) xmalloc (sizeof (*tmp));
440 bcopy (bs, tmp, sizeof (*tmp));
441 if (p == NULL)
442 /* This is the first thing in the chain. */
443 retval = tmp;
444 else
445 p->next = tmp;
446 p = tmp;
447 }
448 p->next = NULL;
449 return retval;
450}
451
452int
453bpstat_num (bsp)
454 bpstat *bsp;
455{
456 struct breakpoint *b;
457
458 if ((*bsp) == NULL)
459 return 0; /* No more breakpoint values */
460 else
461 {
462 b = (*bsp)->breakpoint_at;
463 *bsp = (*bsp)->next;
464 if (b == NULL)
465 return -1; /* breakpoint that's been deleted since */
466 else
467 return b->number; /* We have its number */
468 }
469}
470
471void
472bpstat_clear_actions (bs)
473 bpstat bs;
474{
475 for (; bs != NULL; bs = bs->next)
476 {
477 bs->commands = NULL;
478 if (bs->old_val != NULL)
479 {
480 value_free (bs->old_val);
481 bs->old_val = NULL;
482 }
483 }
484}
485
486/* Execute all the commands associated with all the breakpoints at this
487 location. Any of these commands could cause the process to proceed
488 beyond this point, etc. We look out for such changes by checking
489 the global "breakpoint_proceeded" after each command. */
490void
491bpstat_do_actions (bsp)
492 bpstat *bsp;
493{
494 bpstat bs;
495
496top:
497 bs = *bsp;
498
499 executing_breakpoint_commands = 1;
500 breakpoint_proceeded = 0;
501 for (; bs != NULL; bs = bs->next)
502 {
503 while (bs->commands)
504 {
505 char *line = bs->commands->line;
506 bs->commands = bs->commands->next;
507 execute_command (line, 0);
508 /* If the inferior is proceeded by the command, bomb out now.
509 The bpstat chain has been blown away by wait_for_inferior.
510 But since execution has stopped again, there is a new bpstat
511 to look at, so start over. */
512 if (breakpoint_proceeded)
513 goto top;
514 }
515 }
516 clear_momentary_breakpoints ();
517
518 executing_breakpoint_commands = 0;
519}
520
521int
522bpstat_print (bs)
523 bpstat bs;
524{
525 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
526 which has since been deleted. */
527 if (bs == NULL || bs->breakpoint_at == NULL)
528 return 0;
529
530 /* If bpstat_stop_status says don't print, OK, we won't. An example
531 circumstance is when we single-stepped for both a watchpoint and
532 for a "stepi" instruction. The bpstat says that the watchpoint
533 explains the stop, but we shouldn't print because the watchpoint's
534 value didn't change -- and the real reason we are stopping here
535 rather than continuing to step (as the watchpoint would've had us do)
536 is because of the "stepi". */
537 if (!bs->print)
538 return 0;
539
540 if (bs->breakpoint_at->address != NULL)
541 {
542 /* I think the user probably only wants to see one breakpoint
543 number, not all of them. */
544 printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
545 return 0;
546 }
547
548 if (bs->old_val != NULL)
549 {
550 printf_filtered ("\nWatchpoint %d, ", bs->breakpoint_at->number);
551 print_expression (bs->breakpoint_at->exp, stdout);
552 printf_filtered ("\nOld value = ");
553 value_print (bs->old_val, stdout, 0, Val_pretty_default);
554 printf_filtered ("\nNew value = ");
555 value_print (bs->breakpoint_at->val, stdout, 0,
556 Val_pretty_default);
557 printf_filtered ("\n");
558 value_free (bs->old_val);
559 bs->old_val = NULL;
560 return 1;
561 }
562
563 fprintf_filtered (stderr, "gdb internal error: in bpstat_print\n");
564 return 0;
565}
566
567/* Evaluate the expression EXP and return 1 if value is zero.
568 This is used inside a catch_errors to evaluate the breakpoint condition.
569 The argument is a "struct expression *" that has been cast to int to
570 make it pass through catch_errors. */
571
572static int
573breakpoint_cond_eval (exp)
574 int exp;
575{
576 return value_zerop (evaluate_expression ((struct expression *)exp));
577}
578
579/* Allocate a new bpstat and chain it to the current one. */
580
581static bpstat
582bpstat_alloc (b, cbs)
583 register struct breakpoint *b;
584 bpstat cbs; /* Current "bs" value */
585{
586 bpstat bs;
587
588 bs = (bpstat) xmalloc (sizeof (*bs));
589 cbs->next = bs;
590 bs->breakpoint_at = b;
591 /* If the condition is false, etc., don't do the commands. */
592 bs->commands = NULL;
593 bs->momentary = b->number == -3;
594 bs->old_val = NULL;
595 return bs;
596}
597
598/* Determine whether we stopped at a breakpoint, etc, or whether we
599 don't understand this stop. Result is a chain of bpstat's such that:
600
601 if we don't understand the stop, the result is a null pointer.
602
603 if we understand why we stopped, the result is not null, and
604 the first element of the chain contains summary "stop" and
605 "print" flags for the whole chain.
606
607 Each element of the chain refers to a particular breakpoint or
608 watchpoint at which we have stopped. (We may have stopped for
609 several reasons.)
610
611 Each element of the chain has valid next, breakpoint_at,
612 commands, FIXME??? fields.
613
614 */
615
616
617bpstat
618bpstat_stop_status (pc, frame_address)
619 CORE_ADDR *pc;
620 FRAME_ADDR frame_address;
621{
622 register struct breakpoint *b;
623 int stop = 0;
624 int print = 0;
625 CORE_ADDR bp_addr;
626 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
627 int real_breakpoint = 0;
628 /* Root of the chain of bpstat's */
629 struct bpstat__struct root_bs[1];
630 /* Pointer to the last thing in the chain currently. */
631 bpstat bs = root_bs;
632
633 /* Get the address where the breakpoint would have been. */
634 bp_addr = *pc - DECR_PC_AFTER_BREAK;
635
636 ALL_BREAKPOINTS (b)
637 {
638 int this_bp_stop;
639 int this_bp_print;
640
641 if (b->enable == disabled)
642 continue;
643 if (b->address != NULL && b->address != bp_addr)
644 continue;
645
646 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
647
648 this_bp_stop = 1;
649 this_bp_print = 1;
650
651 if (b->exp != NULL) /* Watchpoint */
652 {
653 int within_current_scope;
654 if (b->exp_valid_block != NULL)
655 within_current_scope =
656 contained_in (get_selected_block (), b->exp_valid_block);
657 else
658 within_current_scope = 1;
659
660 if (within_current_scope)
661 {
662 value new_val = evaluate_expression (b->exp);
663 release_value (new_val);
664 if (!value_equal (b->val, new_val))
665 {
666 bs->old_val = b->val;
667 b->val = new_val;
668 /* We will stop here */
669 }
670 else
671 {
672 /* Nothing changed, don't do anything. */
673 value_free (new_val);
674 continue;
675 /* We won't stop here */
676 }
677 }
678 else
679 {
680 /* This seems like the only logical thing to do because
681 if we temporarily ignored the watchpoint, then when
682 we reenter the block in which it is valid it contains
683 garbage (in the case of a function, it may have two
684 garbage values, one before and one after the prologue).
685 So we can't even detect the first assignment to it and
686 watch after that (since the garbage may or may not equal
687 the first value assigned). */
688 b->enable = disabled;
689 printf_filtered ("\
690Watchpoint %d disabled because the program has left the block in\n\
691which its expression is valid.\n", b->number);
692 /* We won't stop here */
693 /* FIXME, maybe we should stop here!!! */
694 continue;
695 }
696 }
697 else
698 real_breakpoint = 1;
699
700 if (b->frame && b->frame != frame_address)
701 this_bp_stop = 0;
702 else
703 {
704 int value_zero;
705
706 if (b->cond)
707 {
708 /* Need to select the frame, with all that implies
709 so that the conditions will have the right context. */
710 select_frame (get_current_frame (), 0);
711 value_zero
712 = catch_errors (breakpoint_cond_eval, (int)(b->cond),
713 "Error occurred in testing breakpoint condition.");
714 free_all_values ();
715 }
716 if (b->cond && value_zero)
717 {
718 this_bp_stop = 0;
719 }
720 else if (b->ignore_count > 0)
721 {
722 b->ignore_count--;
723 this_bp_stop = 0;
724 }
725 else
726 {
727 /* We will stop here */
728 if (b->enable == temporary)
729 b->enable = disabled;
730 bs->commands = b->commands;
731 if (b->silent)
732 this_bp_print = 0;
733 if (bs->commands && !strcmp ("silent", bs->commands->line))
734 {
735 bs->commands = bs->commands->next;
736 this_bp_print = 0;
737 }
738 }
739 }
740 if (this_bp_stop)
741 stop = 1;
742 if (this_bp_print)
743 print = 1;
744 }
745
746 bs->next = NULL; /* Terminate the chain */
747 bs = root_bs->next; /* Re-grab the head of the chain */
748 if (bs)
749 {
750 bs->stop = stop;
751 bs->print = print;
752#if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
753 if (real_breakpoint)
754 {
755 *pc = bp_addr;
756#if defined (SHIFT_INST_REGS)
757 {
758 CORE_ADDR pc = read_register (PC_REGNUM);
759 CORE_ADDR npc = read_register (NPC_REGNUM);
760 if (pc != npc)
761 {
762 write_register (NNPC_REGNUM, npc);
763 write_register (NPC_REGNUM, pc);
764 }
765 }
766#else /* No SHIFT_INST_REGS. */
767 write_pc (bp_addr);
768#endif /* No SHIFT_INST_REGS. */
769 }
770#endif /* DECR_PC_AFTER_BREAK != 0. */
771 }
772 return bs;
773}
774
775int
776bpstat_should_step ()
777{
778 struct breakpoint *b;
779 ALL_BREAKPOINTS (b)
780 if (b->enable != disabled && b->exp != NULL)
781 return 1;
782 return 0;
783}
784\f
785/* Print information on breakpoint number BNUM, or -1 if all.
786 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
787 is nonzero, process only watchpoints. */
788
789static void
790breakpoint_1 (bnum, watchpoints)
791 int bnum;
792 int watchpoints;
793{
794 register struct breakpoint *b;
795 register struct command_line *l;
796 register struct symbol *sym;
797 CORE_ADDR last_addr = (CORE_ADDR)-1;
798 int header_printed = 0;
799
800 ALL_BREAKPOINTS (b)
801 if (bnum == -1 || bnum == b->number)
802 {
803 if (b->address == NULL && !watchpoints)
804 {
805 if (bnum == -1)
806 continue;
807 error ("That is a watchpoint, not a breakpoint.");
808 }
809 if (b->address != NULL && watchpoints)
810 {
811 if (bnum == -1)
812 continue;
813 error ("That is a breakpoint, not a watchpoint.");
814 }
815
816 if (!header_printed)
817 {
818 if (watchpoints)
819 printf_filtered (" Enb Expression\n");
820 else if (addressprint)
821 printf_filtered (" Enb Address Where\n");
822 else
823 printf_filtered (" Enb Where\n");
824 header_printed = 1;
825 }
826
827 printf_filtered ("#%-3d %c ", b->number, "nyod"[(int) b->enable]);
828 if (b->address == NULL)
829 print_expression (b->exp, stdout);
830 else
831 {
832 if (addressprint)
833 printf_filtered (" 0x%08x ", b->address);
834
835 last_addr = b->address;
836 if (b->symtab)
837 {
838 sym = find_pc_function (b->address);
839 if (sym)
840 {
841 fputs_filtered (" in ", stdout);
842 fputs_demangled (SYMBOL_NAME (sym), stdout, 1);
843 fputs_filtered (" at ", stdout);
844 }
845 fputs_filtered (b->symtab->filename, stdout);
846 printf_filtered (":%d", b->line_number);
847 }
848 else
849 print_address_symbolic (b->address, stdout, demangle);
850 }
851
852 printf_filtered ("\n");
853
854 if (b->frame)
855 printf_filtered ("\tstop only in stack frame at 0x%x\n", b->frame);
856 if (b->cond)
857 {
858 printf_filtered ("\tstop only if ");
859 print_expression (b->cond, stdout);
860 printf_filtered ("\n");
861 }
862 if (b->ignore_count)
863 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
864 if ((l = b->commands))
865 while (l)
866 {
867 fputs_filtered ("\t", stdout);
868 fputs_filtered (l->line, stdout);
869 fputs_filtered ("\n", stdout);
870 l = l->next;
871 }
872 }
873
874 if (!header_printed)
875 {
876 char *which = watchpoints ? "watch" : "break";
877 if (bnum == -1)
878 printf_filtered ("No %spoints.\n", which);
879 else
880 printf_filtered ("No %spoint numbered %d.\n", which, bnum);
881 }
882
883 /* Compare against (CORE_ADDR)-1 in case some compiler decides
884 that a comparison of an unsigned with -1 is always false. */
885 if (last_addr != (CORE_ADDR)-1)
886 set_next_address (last_addr);
887}
888
889static void
890breakpoints_info (bnum_exp, from_tty)
891 char *bnum_exp;
892 int from_tty;
893{
894 int bnum = -1;
895
896 if (bnum_exp)
897 bnum = parse_and_eval_address (bnum_exp);
898
899 breakpoint_1 (bnum, 0);
900}
901
902static void
903watchpoints_info (bnum_exp, from_tty)
904 char *bnum_exp;
905 int from_tty;
906{
907 int bnum = -1;
908
909 if (bnum_exp)
910 bnum = parse_and_eval_address (bnum_exp);
911
912 breakpoint_1 (bnum, 1);
913}
914
915/* Print a message describing any breakpoints set at PC. */
916
917static void
918describe_other_breakpoints (pc)
919 register CORE_ADDR pc;
920{
921 register int others = 0;
922 register struct breakpoint *b;
923
924 ALL_BREAKPOINTS (b)
925 if (b->address == pc)
926 others++;
927 if (others > 0)
928 {
929 printf ("Note: breakpoint%s ", (others > 1) ? "s" : "");
930 ALL_BREAKPOINTS (b)
931 if (b->address == pc)
932 {
933 others--;
934 printf ("%d%s%s ",
935 b->number,
936 (b->enable == disabled) ? " (disabled)" : "",
937 (others > 1) ? "," : ((others == 1) ? " and" : ""));
938 }
939 printf ("also set at pc 0x%x.\n", pc);
940 }
941}
942\f
943/* Set the default place to put a breakpoint
944 for the `break' command with no arguments. */
945
946void
947set_default_breakpoint (valid, addr, symtab, line)
948 int valid;
949 CORE_ADDR addr;
950 struct symtab *symtab;
951 int line;
952{
953 default_breakpoint_valid = valid;
954 default_breakpoint_address = addr;
955 default_breakpoint_symtab = symtab;
956 default_breakpoint_line = line;
957}
958
959/* Rescan breakpoints at address ADDRESS,
960 marking the first one as "first" and any others as "duplicates".
961 This is so that the bpt instruction is only inserted once. */
962
963static void
964check_duplicates (address)
965 CORE_ADDR address;
966{
967 register struct breakpoint *b;
968 register int count = 0;
969
970 ALL_BREAKPOINTS (b)
971 if (b->enable != disabled && b->address == address)
972 {
973 count++;
974 b->duplicate = count > 1;
975 }
976}
977
978/* Low level routine to set a breakpoint.
979 Takes as args the three things that every breakpoint must have.
980 Returns the breakpoint object so caller can set other things.
981 Does not set the breakpoint number!
982 Does not print anything. */
983
984static struct breakpoint *
985set_raw_breakpoint (sal)
986 struct symtab_and_line sal;
987{
988 register struct breakpoint *b, *b1;
989
990 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
991 bzero (b, sizeof *b);
992 b->address = sal.pc;
993 b->symtab = sal.symtab;
994 b->line_number = sal.line;
995 b->enable = enabled;
996 b->next = 0;
997 b->silent = 0;
998 b->ignore_count = 0;
999 b->commands = NULL;
1000 b->frame = NULL;
1001
1002 /* Add this breakpoint to the end of the chain
1003 so that a list of breakpoints will come out in order
1004 of increasing numbers. */
1005
1006 b1 = breakpoint_chain;
1007 if (b1 == 0)
1008 breakpoint_chain = b;
1009 else
1010 {
1011 while (b1->next)
1012 b1 = b1->next;
1013 b1->next = b;
1014 }
1015
1016 check_duplicates (sal.pc);
1017
1018 return b;
1019}
1020
1021/* Set a breakpoint that will evaporate an end of command
1022 at address specified by SAL.
1023 Restrict it to frame FRAME if FRAME is nonzero. */
1024
1025void
1026set_momentary_breakpoint (sal, frame)
1027 struct symtab_and_line sal;
1028 FRAME frame;
1029{
1030 register struct breakpoint *b;
1031 b = set_raw_breakpoint (sal);
1032 b->number = -3;
1033 b->enable = delete;
1034 b->frame = (frame ? FRAME_FP (frame) : 0);
1035}
1036
1037void
1038clear_momentary_breakpoints ()
1039{
1040 register struct breakpoint *b;
1041 ALL_BREAKPOINTS (b)
1042 if (b->number == -3)
1043 {
1044 delete_breakpoint (b);
1045 break;
1046 }
1047}
1048\f
1049/* Tell the user we have just set a breakpoint B. */
1050static void
1051mention (b)
1052 struct breakpoint *b;
1053{
1054 if (b->exp)
1055 {
1056 printf_filtered ("Watchpoint %d: ", b->number);
1057 print_expression (b->exp, stdout);
1058 }
1059 else
1060 {
1061 printf_filtered ("Breakpoint %d at 0x%x", b->number, b->address);
1062 if (b->symtab)
1063 printf_filtered (": file %s, line %d.",
1064 b->symtab->filename, b->line_number);
1065 }
1066 printf_filtered ("\n");
1067}
1068
1069#if 0
1070/* Nobody calls this currently. */
1071/* Set a breakpoint from a symtab and line.
1072 If TEMPFLAG is nonzero, it is a temporary breakpoint.
1073 ADDR_STRING is a malloc'd string holding the name of where we are
1074 setting the breakpoint. This is used later to re-set it after the
1075 program is relinked and symbols are reloaded.
1076 Print the same confirmation messages that the breakpoint command prints. */
1077
1078void
1079set_breakpoint (s, line, tempflag, addr_string)
1080 struct symtab *s;
1081 int line;
1082 int tempflag;
1083 char *addr_string;
1084{
1085 register struct breakpoint *b;
1086 struct symtab_and_line sal;
1087
1088 sal.symtab = s;
1089 sal.line = line;
1090 sal.pc = find_line_pc (sal.symtab, sal.line);
1091 if (sal.pc == 0)
1092 error ("No line %d in file \"%s\".\n", sal.line, sal.symtab->filename);
1093 else
1094 {
1095 describe_other_breakpoints (sal.pc);
1096
1097 b = set_raw_breakpoint (sal);
1098 set_breakpoint_count (breakpoint_count + 1);
1099 b->number = breakpoint_count;
1100 b->cond = 0;
1101 b->addr_string = addr_string;
1102 if (tempflag)
1103 b->enable = temporary;
1104
1105 mention (b);
1106 }
1107}
1108#endif
1109\f
1110/* Set a breakpoint according to ARG (function, linenum or *address)
1111 and make it temporary if TEMPFLAG is nonzero. */
1112
1113static void
1114break_command_1 (arg, tempflag, from_tty)
1115 char *arg;
1116 int tempflag, from_tty;
1117{
1118 struct symtabs_and_lines sals;
1119 struct symtab_and_line sal;
1120 register struct expression *cond = 0;
1121 register struct breakpoint *b;
1122
1123 /* Pointers in arg to the start, and one past the end, of the condition. */
1124 char *cond_start = NULL;
1125 char *cond_end;
1126 /* Pointers in arg to the start, and one past the end,
1127 of the address part. */
1128 char *addr_start = NULL;
1129 char *addr_end;
1130
1131 int i;
1132 CORE_ADDR pc;
1133
1134 sals.sals = NULL;
1135 sals.nelts = 0;
1136
1137 sal.line = sal.pc = sal.end = 0;
1138 sal.symtab = 0;
1139
1140 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
1141
1142 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
1143 && (arg[2] == ' ' || arg[2] == '\t')))
1144 {
1145 if (default_breakpoint_valid)
1146 {
1147 sals.sals = (struct symtab_and_line *)
1148 xmalloc (sizeof (struct symtab_and_line));
1149 sal.pc = default_breakpoint_address;
1150 sal.line = default_breakpoint_line;
1151 sal.symtab = default_breakpoint_symtab;
1152 sals.sals[0] = sal;
1153 sals.nelts = 1;
1154 }
1155 else
1156 error ("No default breakpoint address now.");
1157 }
1158 else
1159 {
1160 addr_start = arg;
1161
1162 /* Force almost all breakpoints to be in terms of the
1163 current_source_symtab (which is decode_line_1's default). This
1164 should produce the results we want almost all of the time while
1165 leaving default_breakpoint_* alone. */
1166 if (default_breakpoint_valid
1167 && (!current_source_symtab
1168 || (arg && (*arg == '+' || *arg == '-'))))
1169 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
1170 default_breakpoint_line);
1171 else
1172 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0);
1173
1174 addr_end = arg;
1175 }
1176
1177 if (! sals.nelts)
1178 return;
1179
1180 for (i = 0; i < sals.nelts; i++)
1181 {
1182 sal = sals.sals[i];
1183 if (sal.pc == 0 && sal.symtab != 0)
1184 {
1185 pc = find_line_pc (sal.symtab, sal.line);
1186 if (pc == 0)
1187 error ("No line %d in file \"%s\".",
1188 sal.line, sal.symtab->filename);
1189 }
1190 else
1191 pc = sal.pc;
1192
1193 while (arg && *arg)
1194 {
1195 if (arg[0] == 'i' && arg[1] == 'f'
1196 && (arg[2] == ' ' || arg[2] == '\t'))
1197 {
1198 arg += 2;
1199 cond_start = arg;
1200 cond = parse_c_1 (&arg, block_for_pc (pc), 0);
1201 cond_end = arg;
1202 }
1203 else
1204 error ("Junk at end of arguments.");
1205 }
1206 sals.sals[i].pc = pc;
1207 }
1208
1209 for (i = 0; i < sals.nelts; i++)
1210 {
1211 sal = sals.sals[i];
1212
1213 if (from_tty)
1214 describe_other_breakpoints (sal.pc);
1215
1216 b = set_raw_breakpoint (sal);
1217 set_breakpoint_count (breakpoint_count + 1);
1218 b->number = breakpoint_count;
1219 b->cond = cond;
1220
1221 if (addr_start)
1222 b->addr_string = savestring (addr_start, addr_end - addr_start);
1223 if (cond_start)
1224 b->cond_string = savestring (cond_start, cond_end - cond_start);
1225
1226 if (tempflag)
1227 b->enable = temporary;
1228
1229 mention (b);
1230 }
1231
1232 if (sals.nelts > 1)
1233 {
1234 printf ("Multiple breakpoints were set.\n");
1235 printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
1236 }
1237 free (sals.sals);
1238}
1239
1240void
1241break_command (arg, from_tty)
1242 char *arg;
1243 int from_tty;
1244{
1245 break_command_1 (arg, 0, from_tty);
1246}
1247
1248static void
1249tbreak_command (arg, from_tty)
1250 char *arg;
1251 int from_tty;
1252{
1253 break_command_1 (arg, 1, from_tty);
1254}
1255
1256static void
1257watch_command (arg, from_tty)
1258 char *arg;
1259 int from_tty;
1260{
1261 struct breakpoint *b;
1262 struct symtab_and_line sal;
1263
1264 sal.pc = NULL;
1265 sal.symtab = NULL;
1266 sal.line = 0;
1267
1268 b = set_raw_breakpoint (sal);
1269 set_breakpoint_count (breakpoint_count + 1);
1270 b->number = breakpoint_count;
1271 innermost_block = NULL;
1272 b->exp = parse_c_expression (arg);
1273 b->exp_valid_block = innermost_block;
1274 b->val = evaluate_expression (b->exp);
1275 release_value (b->val);
1276 b->cond = 0;
1277 b->cond_string = NULL;
1278 mention (b);
1279}
1280\f
1281/*
1282 * Helper routine for the until_command routine in infcmd.c. Here
1283 * because it uses the mechanisms of breakpoints.
1284 */
1285void
1286until_break_command (arg, from_tty)
1287 char *arg;
1288 int from_tty;
1289{
1290 struct symtabs_and_lines sals;
1291 struct symtab_and_line sal;
1292 FRAME prev_frame = get_prev_frame (selected_frame);
1293
1294 clear_proceed_status ();
1295
1296 /* Set a breakpoint where the user wants it and at return from
1297 this function */
1298
1299 if (default_breakpoint_valid)
1300 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
1301 default_breakpoint_line);
1302 else
1303 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0);
1304
1305 if (sals.nelts != 1)
1306 error ("Couldn't get information on specified line.");
1307
1308 sal = sals.sals[0];
1309 free (sals.sals); /* malloc'd, so freed */
1310
1311 if (*arg)
1312 error ("Junk at end of arguments.");
1313
1314 if (sal.pc == 0 && sal.symtab != 0)
1315 sal.pc = find_line_pc (sal.symtab, sal.line);
1316
1317 if (sal.pc == 0)
1318 error ("No line %d in file \"%s\".", sal.line, sal.symtab->filename);
1319
1320 set_momentary_breakpoint (sal, selected_frame);
1321
1322 /* Keep within the current frame */
1323
1324 if (prev_frame)
1325 {
1326 struct frame_info *fi;
1327
1328 fi = get_frame_info (prev_frame);
1329 sal = find_pc_line (fi->pc, 0);
1330 sal.pc = fi->pc;
1331 set_momentary_breakpoint (sal, prev_frame);
1332 }
1333
1334 proceed (-1, -1, 0);
1335}
1336\f
1337/* Set a breakpoint at the catch clause for NAME. */
1338static int
1339catch_breakpoint (name)
1340 char *name;
1341{
1342}
1343
1344static int
1345disable_catch_breakpoint ()
1346{
1347}
1348
1349static int
1350delete_catch_breakpoint ()
1351{
1352}
1353
1354static int
1355enable_catch_breakpoint ()
1356{
1357}
1358
1359struct sal_chain
1360{
1361 struct sal_chain *next;
1362 struct symtab_and_line sal;
1363};
1364
1365/* For each catch clause identified in ARGS, run FUNCTION
1366 with that clause as an argument. */
1367static struct symtabs_and_lines
1368map_catch_names (args, function)
1369 char *args;
1370 int (*function)();
1371{
1372 register char *p = args;
1373 register char *p1;
1374 struct symtabs_and_lines sals;
1375 struct sal_chain *sal_chain = 0;
1376
1377 if (p == 0)
1378 error_no_arg ("one or more catch names");
1379
1380 sals.nelts = 0;
1381 sals.sals = NULL;
1382
1383 while (*p)
1384 {
1385 p1 = p;
1386 /* Don't swallow conditional part. */
1387 if (p1[0] == 'i' && p1[1] == 'f'
1388 && (p1[2] == ' ' || p1[2] == '\t'))
1389 break;
1390
1391 if (isalpha (*p1))
1392 {
1393 p1++;
1394 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
1395 p1++;
1396 }
1397
1398 if (*p1 && *p1 != ' ' && *p1 != '\t')
1399 error ("Arguments must be catch names.");
1400
1401 *p1 = 0;
1402#if 0
1403 if (function (p))
1404 {
1405 struct sal_chain *next
1406 = (struct sal_chain *)alloca (sizeof (struct sal_chain));
1407 next->next = sal_chain;
1408 next->sal = get_catch_sal (p);
1409 sal_chain = next;
1410 goto win;
1411 }
1412#endif
1413 printf ("No catch clause for exception %s.\n", p);
1414 win:
1415 p = p1;
1416 while (*p == ' ' || *p == '\t') p++;
1417 }
1418}
1419
1420/* This shares a lot of code with `print_frame_label_vars' from stack.c. */
1421
1422static struct symtabs_and_lines
1423get_catch_sals (this_level_only)
1424 int this_level_only;
1425{
1426 extern struct blockvector *blockvector_for_pc ();
1427 register struct blockvector *bl;
1428 register struct block *block = get_frame_block (selected_frame);
1429 int index, have_default = 0;
1430 struct frame_info *fi = get_frame_info (selected_frame);
1431 CORE_ADDR pc = fi->pc;
1432 struct symtabs_and_lines sals;
1433 struct sal_chain *sal_chain = 0;
1434 char *blocks_searched;
1435
1436 sals.nelts = 0;
1437 sals.sals = NULL;
1438
1439 if (block == 0)
1440 error ("No symbol table info available.\n");
1441
1442 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
1443 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1444 bzero (blocks_searched, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1445
1446 while (block != 0)
1447 {
1448 CORE_ADDR end = BLOCK_END (block) - 4;
1449 int last_index;
1450
1451 if (bl != blockvector_for_pc (end, &index))
1452 error ("blockvector blotch");
1453 if (BLOCKVECTOR_BLOCK (bl, index) != block)
1454 error ("blockvector botch");
1455 last_index = BLOCKVECTOR_NBLOCKS (bl);
1456 index += 1;
1457
1458 /* Don't print out blocks that have gone by. */
1459 while (index < last_index
1460 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
1461 index++;
1462
1463 while (index < last_index
1464 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
1465 {
1466 if (blocks_searched[index] == 0)
1467 {
1468 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
1469 int nsyms;
1470 register int i;
1471 register struct symbol *sym;
1472
1473 nsyms = BLOCK_NSYMS (b);
1474
1475 for (i = 0; i < nsyms; i++)
1476 {
1477 sym = BLOCK_SYM (b, i);
1478 if (! strcmp (SYMBOL_NAME (sym), "default"))
1479 {
1480 if (have_default)
1481 continue;
1482 have_default = 1;
1483 }
1484 if (SYMBOL_CLASS (sym) == LOC_LABEL)
1485 {
1486 struct sal_chain *next = (struct sal_chain *)
1487 alloca (sizeof (struct sal_chain));
1488 next->next = sal_chain;
1489 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
1490 sal_chain = next;
1491 }
1492 }
1493 blocks_searched[index] = 1;
1494 }
1495 index++;
1496 }
1497 if (have_default)
1498 break;
1499 if (sal_chain && this_level_only)
1500 break;
1501
1502 /* After handling the function's top-level block, stop.
1503 Don't continue to its superblock, the block of
1504 per-file symbols. */
1505 if (BLOCK_FUNCTION (block))
1506 break;
1507 block = BLOCK_SUPERBLOCK (block);
1508 }
1509
1510 if (sal_chain)
1511 {
1512 struct sal_chain *tmp_chain;
1513
1514 /* Count the number of entries. */
1515 for (index = 0, tmp_chain = sal_chain; tmp_chain;
1516 tmp_chain = tmp_chain->next)
1517 index++;
1518
1519 sals.nelts = index;
1520 sals.sals = (struct symtab_and_line *)
1521 xmalloc (index * sizeof (struct symtab_and_line));
1522 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
1523 sals.sals[index] = sal_chain->sal;
1524 }
1525
1526 return sals;
1527}
1528
1529/* Commands to deal with catching exceptions. */
1530
1531void
1532catch_command_1 (arg, tempflag, from_tty)
1533 char *arg;
1534 int tempflag;
1535 int from_tty;
1536{
1537 /* First, translate ARG into something we can deal with in terms
1538 of breakpoints. */
1539
1540 struct symtabs_and_lines sals;
1541 struct symtab_and_line sal;
1542 register struct expression *cond = 0;
1543 register struct breakpoint *b;
1544 char *save_arg;
1545 int i;
1546 CORE_ADDR pc;
1547
1548 sal.line = sal.pc = sal.end = 0;
1549 sal.symtab = 0;
1550
1551 /* If no arg given, or if first arg is 'if ', all active catch clauses
1552 are breakpointed. */
1553
1554 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
1555 && (arg[2] == ' ' || arg[2] == '\t')))
1556 {
1557 /* Grab all active catch clauses. */
1558 sals = get_catch_sals (0);
1559 }
1560 else
1561 {
1562 /* Grab selected catch clauses. */
1563 error ("catch NAME not implemeneted");
1564 sals = map_catch_names (arg, catch_breakpoint);
1565 }
1566
1567 if (! sals.nelts)
1568 return;
1569
1570 save_arg = arg;
1571 for (i = 0; i < sals.nelts; i++)
1572 {
1573 sal = sals.sals[i];
1574 if (sal.pc == 0 && sal.symtab != 0)
1575 {
1576 pc = find_line_pc (sal.symtab, sal.line);
1577 if (pc == 0)
1578 error ("No line %d in file \"%s\".",
1579 sal.line, sal.symtab->filename);
1580 }
1581 else
1582 pc = sal.pc;
1583
1584 while (arg && *arg)
1585 {
1586 if (arg[0] == 'i' && arg[1] == 'f'
1587 && (arg[2] == ' ' || arg[2] == '\t'))
1588 cond = (struct expression *) parse_c_1 ((arg += 2, &arg),
1589 block_for_pc (pc), 0);
1590 else
1591 error ("Junk at end of arguments.");
1592 }
1593 arg = save_arg;
1594 sals.sals[i].pc = pc;
1595 }
1596
1597 for (i = 0; i < sals.nelts; i++)
1598 {
1599 sal = sals.sals[i];
1600
1601 if (from_tty)
1602 describe_other_breakpoints (sal.pc);
1603
1604 b = set_raw_breakpoint (sal);
1605 b->number = ++breakpoint_count;
1606 b->cond = cond;
1607 if (tempflag)
1608 b->enable = temporary;
1609
1610 printf ("Breakpoint %d at 0x%x", b->number, b->address);
1611 if (b->symtab)
1612 printf (": file %s, line %d.", b->symtab->filename, b->line_number);
1613 printf ("\n");
1614 }
1615
1616 if (sals.nelts > 1)
1617 {
1618 printf ("Multiple breakpoints were set.\n");
1619 printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
1620 }
1621 free (sals.sals);
1622}
1623
1624/* Disable breakpoints on all catch clauses described in ARGS. */
1625static void
1626disable_catch (args)
1627 char *args;
1628{
1629 /* Map the disable command to catch clauses described in ARGS. */
1630}
1631
1632/* Enable breakpoints on all catch clauses described in ARGS. */
1633static void
1634enable_catch (args)
1635 char *args;
1636{
1637 /* Map the disable command to catch clauses described in ARGS. */
1638}
1639
1640/* Delete breakpoints on all catch clauses in the active scope. */
1641static void
1642delete_catch (args)
1643 char *args;
1644{
1645 /* Map the delete command to catch clauses described in ARGS. */
1646}
1647
1648static void
1649catch_command (arg, from_tty)
1650 char *arg;
1651 int from_tty;
1652{
1653 catch_command_1 (arg, 0, from_tty);
1654}
1655\f
1656static void
1657clear_command (arg, from_tty)
1658 char *arg;
1659 int from_tty;
1660{
1661 register struct breakpoint *b, *b1;
1662 struct symtabs_and_lines sals;
1663 struct symtab_and_line sal;
1664 register struct breakpoint *found;
1665 int i;
1666
1667 if (arg)
1668 {
1669 sals = decode_line_spec (arg, 1);
1670 }
1671 else
1672 {
1673 sals.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
1674 sal.line = default_breakpoint_line;
1675 sal.symtab = default_breakpoint_symtab;
1676 sal.pc = 0;
1677 if (sal.symtab == 0)
1678 error ("No source file specified.");
1679
1680 sals.sals[0] = sal;
1681 sals.nelts = 1;
1682 }
1683
1684 for (i = 0; i < sals.nelts; i++)
1685 {
1686 /* If exact pc given, clear bpts at that pc.
1687 But if sal.pc is zero, clear all bpts on specified line. */
1688 sal = sals.sals[i];
1689 found = (struct breakpoint *) 0;
1690 while (breakpoint_chain
1691 && (sal.pc ? breakpoint_chain->address == sal.pc
1692 : (breakpoint_chain->symtab == sal.symtab
1693 && breakpoint_chain->line_number == sal.line)))
1694 {
1695 b1 = breakpoint_chain;
1696 breakpoint_chain = b1->next;
1697 b1->next = found;
1698 found = b1;
1699 }
1700
1701 ALL_BREAKPOINTS (b)
1702 while (b->next
1703 && b->next->address != NULL
1704 && (sal.pc ? b->next->address == sal.pc
1705 : (b->next->symtab == sal.symtab
1706 && b->next->line_number == sal.line)))
1707 {
1708 b1 = b->next;
1709 b->next = b1->next;
1710 b1->next = found;
1711 found = b1;
1712 }
1713
1714 if (found == 0)
1715 {
1716 if (arg)
1717 error ("No breakpoint at %s.", arg);
1718 else
1719 error ("No breakpoint at this line.");
1720 }
1721
1722 if (found->next) from_tty = 1; /* Always report if deleted more than one */
1723 if (from_tty) printf ("Deleted breakpoint%s ", found->next ? "s" : "");
1724 while (found)
1725 {
1726 if (from_tty) printf ("%d ", found->number);
1727 b1 = found->next;
1728 delete_breakpoint (found);
1729 found = b1;
1730 }
1731 if (from_tty) putchar ('\n');
1732 }
1733 free (sals.sals);
1734}
1735\f
1736/* Delete breakpoint in BS if they are `delete' breakpoints.
1737 This is called after any breakpoint is hit, or after errors. */
1738
1739void
1740breakpoint_auto_delete (bs)
1741 bpstat bs;
1742{
1743 for (; bs; bs = bs->next)
1744 if (bs->breakpoint_at && bs->breakpoint_at->enable == delete)
1745 delete_breakpoint (bs->breakpoint_at);
1746}
1747
1748/* Delete a breakpoint and clean up all traces of it in the data structures. */
1749
1750static void
1751delete_breakpoint (bpt)
1752 struct breakpoint *bpt;
1753{
1754 register struct breakpoint *b;
1755 register bpstat bs;
1756
1757 if (bpt->inserted)
1758 target_remove_breakpoint(bpt->address, bpt->shadow_contents);
1759
1760 if (breakpoint_chain == bpt)
1761 breakpoint_chain = bpt->next;
1762
1763 ALL_BREAKPOINTS (b)
1764 if (b->next == bpt)
1765 {
1766 b->next = bpt->next;
1767 break;
1768 }
1769
1770 check_duplicates (bpt->address);
1771
1772 free_command_lines (&bpt->commands);
1773 if (bpt->cond)
1774 free (bpt->cond);
1775 if (bpt->cond_string != NULL)
1776 free (bpt->cond_string);
1777 if (bpt->addr_string != NULL)
1778 free (bpt->addr_string);
1779
1780 if (xgdb_verbose && bpt->number >=0)
1781 printf ("breakpoint #%d deleted\n", bpt->number);
1782
1783 /* Be sure no bpstat's are pointing at it after it's been freed. */
1784 /* FIXME, how can we find all bpstat's? We just check stop_bpstat for now. */
1785 for (bs = stop_bpstat; bs; bs = bs->next)
1786 if (bs->breakpoint_at == bpt)
1787 bs->breakpoint_at = NULL;
1788 free (bpt);
1789}
1790
1791static void map_breakpoint_numbers ();
1792
1793static void
1794delete_command (arg, from_tty)
1795 char *arg;
1796 int from_tty;
1797{
1798
1799 if (arg == 0)
1800 {
1801 /* Ask user only if there are some breakpoints to delete. */
1802 if (!from_tty
1803 || (breakpoint_chain && query ("Delete all breakpoints? ", 0, 0)))
1804 {
1805 /* No arg; clear all breakpoints. */
1806 while (breakpoint_chain)
1807 delete_breakpoint (breakpoint_chain);
1808 }
1809 }
1810 else
1811 map_breakpoint_numbers (arg, delete_breakpoint);
1812}
1813
1814static void
1815breakpoint_re_set_one (bint)
1816 int bint;
1817{
1818 struct breakpoint *b = (struct breakpoint *)bint; /* get past catch_errs */
1819 int i;
1820 struct symtabs_and_lines sals;
1821 struct symtab_and_line sal;
1822 char *s;
1823
1824 if (b->address != NULL && b->addr_string != NULL)
1825 {
1826 s = b->addr_string;
1827 sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0);
1828 for (i = 0; i < sals.nelts; i++)
1829 {
1830 sal = sals.sals[i];
1831
1832 b->symtab = sal.symtab;
1833 b->line_number = sal.line;
1834 if (sal.pc == 0 && sal.symtab != 0)
1835 {
1836 sal.pc = find_line_pc (sal.symtab, sal.line);
1837 if (sal.pc == 0)
1838 error ("No line %d in file \"%s\".",
1839 sal.line, sal.symtab->filename);
1840 }
1841 b->address = sal.pc;
1842
1843 if (b->cond_string != NULL)
1844 {
1845 s = b->cond_string;
1846 b->cond = parse_c_1 (&s, block_for_pc (sal.pc), 0);
1847 }
1848
1849 check_duplicates (b->address);
1850
1851 mention (b);
1852 }
1853 free (sals.sals);
1854 }
1855 else
1856 {
1857 /* Anything without a string can't be re-set. */
1858 delete_breakpoint (b);
1859 }
1860}
1861
1862/* Re-set all breakpoints after symbols have been re-loaded. */
1863void
1864breakpoint_re_set ()
1865{
1866 struct breakpoint *b;
1867
1868 ALL_BREAKPOINTS (b)
1869 {
1870 b->symtab = 0; /* Be sure we don't point to old dead symtab */
1871 (void) catch_errors (breakpoint_re_set_one, (int) b,
1872 "Error in re-setting breakpoint");
1873 }
1874
1875 /* Blank line to finish off all those mention() messages we just printed. */
1876 printf_filtered ("\n");
1877}
1878\f
1879/* Set ignore-count of breakpoint number BPTNUM to COUNT.
1880 If from_tty is nonzero, it prints a message to that effect,
1881 which ends with a period (no newline). */
1882
1883void
1884set_ignore_count (bptnum, count, from_tty)
1885 int bptnum, count, from_tty;
1886{
1887 register struct breakpoint *b;
1888
1889 if (count < 0)
1890 count = 0;
1891
1892 ALL_BREAKPOINTS (b)
1893 if (b->number == bptnum)
1894 {
1895 b->ignore_count = count;
1896 if (!from_tty)
1897 return;
1898 else if (count == 0)
1899 printf ("Will stop next time breakpoint %d is reached.", bptnum);
1900 else if (count == 1)
1901 printf ("Will ignore next crossing of breakpoint %d.", bptnum);
1902 else
1903 printf ("Will ignore next %d crossings of breakpoint %d.",
1904 count, bptnum);
1905 return;
1906 }
1907
1908 error ("No breakpoint number %d.", bptnum);
1909}
1910
1911/* Clear the ignore counts of all breakpoints. */
1912void
1913breakpoint_clear_ignore_counts ()
1914{
1915 struct breakpoint *b;
1916
1917 ALL_BREAKPOINTS (b)
1918 b->ignore_count = 0;
1919}
1920
1921/* Command to set ignore-count of breakpoint N to COUNT. */
1922
1923static void
1924ignore_command (args, from_tty)
1925 char *args;
1926 int from_tty;
1927{
1928 char *p = args;
1929 register int num;
1930
1931 if (p == 0)
1932 error_no_arg ("a breakpoint number");
1933
1934 num = get_number (&p);
1935
1936 if (*p == 0)
1937 error ("Second argument (specified ignore-count) is missing.");
1938
1939 set_ignore_count (num, parse_and_eval_address (p), from_tty);
1940 printf ("\n");
1941}
1942\f
1943/* Call FUNCTION on each of the breakpoints
1944 whose numbers are given in ARGS. */
1945
1946static void
1947map_breakpoint_numbers (args, function)
1948 char *args;
1949 void (*function) ();
1950{
1951 register char *p = args;
1952 char *p1;
1953 register int num;
1954 register struct breakpoint *b;
1955
1956 if (p == 0)
1957 error_no_arg ("one or more breakpoint numbers");
1958
1959 while (*p)
1960 {
1961 p1 = p;
1962
1963 num = get_number (&p1);
1964
1965 ALL_BREAKPOINTS (b)
1966 if (b->number == num)
1967 {
1968 function (b);
1969 goto win;
1970 }
1971 printf ("No breakpoint number %d.\n", num);
1972 win:
1973 p = p1;
1974 }
1975}
1976
1977static void
1978enable_breakpoint (bpt)
1979 struct breakpoint *bpt;
1980{
1981 bpt->enable = enabled;
1982
1983 if (xgdb_verbose && bpt->number >= 0)
1984 printf ("breakpoint #%d enabled\n", bpt->number);
1985
1986 check_duplicates (bpt->address);
1987 if (bpt->val != NULL)
1988 {
1989 value_free (bpt->val);
1990
1991 bpt->val = evaluate_expression (bpt->exp);
1992 release_value (bpt->val);
1993 }
1994}
1995
1996static void
1997enable_command (args, from_tty)
1998 char *args;
1999 int from_tty;
2000{
2001 struct breakpoint *bpt;
2002 if (args == 0)
2003 ALL_BREAKPOINTS (bpt)
2004 enable_breakpoint (bpt);
2005 else
2006 map_breakpoint_numbers (args, enable_breakpoint);
2007}
2008
2009static void
2010disable_breakpoint (bpt)
2011 struct breakpoint *bpt;
2012{
2013 bpt->enable = disabled;
2014
2015 if (xgdb_verbose && bpt->number >= 0)
2016 printf ("breakpoint #%d disabled\n", bpt->number);
2017
2018 check_duplicates (bpt->address);
2019}
2020
2021static void
2022disable_command (args, from_tty)
2023 char *args;
2024 int from_tty;
2025{
2026 register struct breakpoint *bpt;
2027 if (args == 0)
2028 ALL_BREAKPOINTS (bpt)
2029 disable_breakpoint (bpt);
2030 else
2031 map_breakpoint_numbers (args, disable_breakpoint);
2032}
2033
2034static void
2035enable_once_breakpoint (bpt)
2036 struct breakpoint *bpt;
2037{
2038 bpt->enable = temporary;
2039
2040 check_duplicates (bpt->address);
2041}
2042
2043static void
2044enable_once_command (args, from_tty)
2045 char *args;
2046 int from_tty;
2047{
2048 map_breakpoint_numbers (args, enable_once_breakpoint);
2049}
2050
2051static void
2052enable_delete_breakpoint (bpt)
2053 struct breakpoint *bpt;
2054{
2055 bpt->enable = delete;
2056
2057 check_duplicates (bpt->address);
2058}
2059
2060static void
2061enable_delete_command (args, from_tty)
2062 char *args;
2063 int from_tty;
2064{
2065 map_breakpoint_numbers (args, enable_delete_breakpoint);
2066}
2067\f
2068/*
2069 * Use default_breakpoint_'s, or nothing if they aren't valid.
2070 */
2071struct symtabs_and_lines
2072decode_line_spec_1 (string, funfirstline)
2073 char *string;
2074 int funfirstline;
2075{
2076 struct symtabs_and_lines sals;
2077 if (string == 0)
2078 error ("Empty line specification.");
2079 if (default_breakpoint_valid)
2080 sals = decode_line_1 (&string, funfirstline,
2081 default_breakpoint_symtab, default_breakpoint_line);
2082 else
2083 sals = decode_line_1 (&string, funfirstline, (struct symtab *)NULL, 0);
2084 if (*string)
2085 error ("Junk at end of line specification: %s", string);
2086 return sals;
2087}
2088\f
2089
2090/* Chain containing all defined enable commands. */
2091
2092extern struct cmd_list_element
2093 *enablelist, *disablelist,
2094 *deletelist, *enablebreaklist;
2095
2096extern struct cmd_list_element *cmdlist;
2097
2098void
2099_initialize_breakpoint ()
2100{
2101 breakpoint_chain = 0;
2102 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
2103 before a breakpoint is set. */
2104 breakpoint_count = 0;
2105
2106 add_com ("ignore", class_breakpoint, ignore_command,
2107 "Set ignore-count of breakpoint number N to COUNT.");
2108
2109 add_com ("commands", class_breakpoint, commands_command,
2110 "Set commands to be executed when a breakpoint is hit.\n\
2111Give breakpoint number as argument after \"commands\".\n\
2112With no argument, the targeted breakpoint is the last one set.\n\
2113The commands themselves follow starting on the next line.\n\
2114Type a line containing \"end\" to indicate the end of them.\n\
2115Give \"silent\" as the first line to make the breakpoint silent;\n\
2116then no output is printed when it is hit, except what the commands print.");
2117
2118 add_com ("condition", class_breakpoint, condition_command,
2119 "Specify breakpoint number N to break only if COND is true.\n\
2120N is an integer; COND is a C expression to be evaluated whenever\n\
2121breakpoint N is reached. Actually break only when COND is nonzero.");
2122
2123 add_com ("tbreak", class_breakpoint, tbreak_command,
2124 "Set a temporary breakpoint. Args like \"break\" command.\n\
2125Like \"break\" except the breakpoint is only enabled temporarily,\n\
2126so it will be disabled when hit. Equivalent to \"break\" followed\n\
2127by using \"enable once\" on the breakpoint number.");
2128
2129 add_prefix_cmd ("enable", class_breakpoint, enable_command,
2130 "Enable some breakpoints.\n\
2131Give breakpoint numbers (separated by spaces) as arguments.\n\
2132With no subcommand, breakpoints are enabled until you command otherwise.\n\
2133This is used to cancel the effect of the \"disable\" command.\n\
2134With a subcommand you can enable temporarily.",
2135 &enablelist, "enable ", 1, &cmdlist);
2136
2137 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
2138 "Enable some breakpoints.\n\
2139Give breakpoint numbers (separated by spaces) as arguments.\n\
2140This is used to cancel the effect of the \"disable\" command.\n\
2141May be abbreviated to simply \"enable\".\n",
2142 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
2143
2144 add_cmd ("once", no_class, enable_once_command,
2145 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
2146If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
2147See the \"tbreak\" command which sets a breakpoint and enables it once.",
2148 &enablebreaklist);
2149
2150 add_cmd ("delete", no_class, enable_delete_command,
2151 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
2152If a breakpoint is hit while enabled in this fashion, it is deleted.",
2153 &enablebreaklist);
2154
2155 add_cmd ("delete", no_class, enable_delete_command,
2156 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
2157If a breakpoint is hit while enabled in this fashion, it is deleted.",
2158 &enablelist);
2159
2160 add_cmd ("once", no_class, enable_once_command,
2161 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
2162If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
2163See the \"tbreak\" command which sets a breakpoint and enables it once.",
2164 &enablelist);
2165
2166 add_prefix_cmd ("disable", class_breakpoint, disable_command,
2167 "Disable some breakpoints.\n\
2168Arguments are breakpoint numbers with spaces in between.\n\
2169To disable all breakpoints, give no argument.\n\
2170A disabled breakpoint is not forgotten, but has no effect until reenabled.",
2171 &disablelist, "disable ", 1, &cmdlist);
2172 add_com_alias ("dis", "disable", class_breakpoint, 1);
2173 add_com_alias ("disa", "disable", class_breakpoint, 1);
2174
2175 add_cmd ("breakpoints", class_alias, disable_command,
2176 "Disable some breakpoints.\n\
2177Arguments are breakpoint numbers with spaces in between.\n\
2178To disable all breakpoints, give no argument.\n\
2179A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
2180This command may be abbreviated \"disable\".",
2181 &disablelist);
2182
2183 add_prefix_cmd ("delete", class_breakpoint, delete_command,
2184 "Delete some breakpoints or auto-display expressions.\n\
2185Arguments are breakpoint numbers with spaces in between.\n\
2186To delete all breakpoints, give no argument.\n\
2187\n\
2188Also a prefix command for deletion of other GDB objects.\n\
2189The \"unset\" command is also an alias for \"delete\".",
2190 &deletelist, "delete ", 1, &cmdlist);
2191 add_com_alias ("d", "delete", class_breakpoint, 1);
2192 add_com_alias ("unset", "delete", class_alias, 1);
2193
2194 add_cmd ("breakpoints", class_alias, delete_command,
2195 "Delete some breakpoints or auto-display expressions.\n\
2196Arguments are breakpoint numbers with spaces in between.\n\
2197To delete all breakpoints, give no argument.\n\
2198This command may be abbreviated \"delete\".",
2199 &deletelist);
2200
2201 add_com ("clear", class_breakpoint, clear_command,
2202 "Clear breakpoint at specified line or function.\n\
2203Argument may be line number, function name, or \"*\" and an address.\n\
2204If line number is specified, all breakpoints in that line are cleared.\n\
2205If function is specified, breakpoints at beginning of function are cleared.\n\
2206If an address is specified, breakpoints at that address are cleared.\n\n\
2207With no argument, clears all breakpoints in the line that the selected frame\n\
2208is executing in.\n\
2209\n\
2210See also the \"delete\" command which clears breakpoints by number.");
2211
2212 add_com ("break", class_breakpoint, break_command,
2213 "Set breakpoint at specified line or function.\n\
2214Argument may be line number, function name, or \"*\" and an address.\n\
2215If line number is specified, break at start of code for that line.\n\
2216If function is specified, break at start of code for that function.\n\
2217If an address is specified, break at that exact address.\n\
2218With no arg, uses current execution address of selected stack frame.\n\
2219This is useful for breaking on return to a stack frame.\n\
2220\n\
2221Multiple breakpoints at one place are permitted, and useful if conditional.\n\
2222\n\
2223Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
2224 add_com_alias ("b", "break", class_run, 1);
2225 add_com_alias ("br", "break", class_run, 1);
2226 add_com_alias ("bre", "break", class_run, 1);
2227 add_com_alias ("brea", "break", class_run, 1);
2228
2229 add_info ("breakpoints", breakpoints_info,
2230 "Status of all breakpoints, or breakpoint number NUMBER.\n\
2231Second column is \"y\" for enabled breakpoint, \"n\" for disabled,\n\
2232\"o\" for enabled once (disable when hit), \"d\" for enable but delete when hit.\n\
2233Then come the address and the file/line number.\n\n\
2234Convenience variable \"$_\" and default examine address for \"x\"\n\
2235are set to the address of the last breakpoint listed.\n\n\
2236Convenience variable \"$bpnum\" contains the number of the last\n\
2237breakpoint set.");
2238
2239 add_com ("catch", class_breakpoint, catch_command,
2240 "Set breakpoints to catch exceptions that are raised.\n\
2241Argument may be a single exception to catch, multiple exceptions\n\
2242to catch, or the default exception \"default\". If no arguments\n\
2243are given, breakpoints are set at all exception handlers catch clauses\n\
2244within the current scope.\n\
2245\n\
2246A condition specified for the catch applies to all breakpoints set\n\
2247with this command\n\
2248\n\
2249Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
2250
2251 add_com ("watch", class_breakpoint, watch_command,
2252 "Set a watchpoint for an expression.\n\
2253A watchpoint stops execution of your program whenever the value of\n\
2254an expression changes.");
2255
2256 add_info ("watchpoints", watchpoints_info,
2257 "Status of all watchpoints, or watchpoint number NUMBER.\n\
2258Second column is \"y\" for enabled watchpoints, \"n\" for disabled.");
2259}
This page took 0.100292 seconds and 4 git commands to generate.