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