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