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