1 /* Everything about breakpoints, for GDB.
2 Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
3 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
25 #include "breakpoint.h"
27 #include "expression.h"
33 #include "gdbthread.h"
36 #include "gdb_string.h"
40 /* local function prototypes */
43 catch_command_1 PARAMS ((char *, int, int));
46 enable_delete_command PARAMS ((char *, int));
49 enable_delete_breakpoint PARAMS ((struct breakpoint *));
52 enable_once_command PARAMS ((char *, int));
55 enable_once_breakpoint PARAMS ((struct breakpoint *));
58 disable_command PARAMS ((char *, int));
61 enable_command PARAMS ((char *, int));
64 map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
67 ignore_command PARAMS ((char *, int));
70 breakpoint_re_set_one PARAMS ((char *));
73 delete_command PARAMS ((char *, int));
76 clear_command PARAMS ((char *, int));
79 catch_command PARAMS ((char *, int));
81 static struct symtabs_and_lines
82 get_catch_sals PARAMS ((int));
85 watch_command PARAMS ((char *, int));
88 can_use_hardware_watchpoint PARAMS ((struct value *));
91 tbreak_command PARAMS ((char *, int));
94 break_command_1 PARAMS ((char *, int, int));
97 mention PARAMS ((struct breakpoint *));
99 static struct breakpoint *
100 set_raw_breakpoint PARAMS ((struct symtab_and_line));
103 check_duplicates PARAMS ((CORE_ADDR));
106 describe_other_breakpoints PARAMS ((CORE_ADDR));
109 breakpoints_info PARAMS ((char *, int));
112 breakpoint_1 PARAMS ((int, int));
115 bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
118 breakpoint_cond_eval PARAMS ((char *));
121 cleanup_executing_breakpoints PARAMS ((int));
124 commands_command PARAMS ((char *, int));
127 condition_command PARAMS ((char *, int));
130 get_number PARAMS ((char **));
133 set_breakpoint_count PARAMS ((int));
136 remove_breakpoint PARAMS ((struct breakpoint *));
138 extern int addressprint; /* Print machine addresses? */
140 /* Are we executing breakpoint commands? */
141 static int executing_breakpoint_commands;
143 /* Walk the following statement or block through all breakpoints.
144 ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
147 #define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
149 #define ALL_BREAKPOINTS_SAFE(b,tmp) \
150 for (b = breakpoint_chain; \
151 b? (tmp=b->next, 1): 0; \
154 /* True if breakpoint hit counts should be displayed in breakpoint info. */
156 int show_breakpoint_hit_counts = 1;
158 /* Chain of all breakpoints defined. */
160 struct breakpoint *breakpoint_chain;
162 /* Number of last breakpoint made. */
164 static int breakpoint_count;
166 /* Set breakpoint count to NUM. */
169 set_breakpoint_count (num)
172 breakpoint_count = num;
173 set_internalvar (lookup_internalvar ("bpnum"),
174 value_from_longest (builtin_type_int, (LONGEST) num));
177 /* Used in run_command to zero the hit count when a new run starts. */
180 clear_breakpoint_hit_counts ()
182 struct breakpoint *b;
188 /* Default address, symtab and line to put a breakpoint at
189 for "break" command with no arg.
190 if default_breakpoint_valid is zero, the other three are
191 not valid, and "break" with no arg is an error.
193 This set by print_stack_frame, which calls set_default_breakpoint. */
195 int default_breakpoint_valid;
196 CORE_ADDR default_breakpoint_address;
197 struct symtab *default_breakpoint_symtab;
198 int default_breakpoint_line;
200 /* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
201 Advance *PP after the string and any trailing whitespace.
203 Currently the string can either be a number or "$" followed by the name
204 of a convenience variable. Making it an expression wouldn't work well
205 for map_breakpoint_numbers (e.g. "4 + 5 + 6"). */
214 /* Empty line means refer to the last breakpoint. */
215 return breakpoint_count;
218 /* Make a copy of the name, so we can null-terminate it
219 to pass to lookup_internalvar(). */
224 while (isalnum (*p) || *p == '_')
226 varname = (char *) alloca (p - start + 1);
227 strncpy (varname, start, p - start);
228 varname[p - start] = '\0';
229 val = value_of_internalvar (lookup_internalvar (varname));
230 if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
232 "Convenience variables used to specify breakpoints must have integer values."
234 retval = (int) value_as_long (val);
240 while (*p >= '0' && *p <= '9')
243 /* There is no number here. (e.g. "cond a == b"). */
244 error_no_arg ("breakpoint number");
247 if (!(isspace (*p) || *p == '\0'))
248 error ("breakpoint number expected");
255 /* condition N EXP -- set break condition of breakpoint N to EXP. */
258 condition_command (arg, from_tty)
262 register struct breakpoint *b;
267 error_no_arg ("breakpoint number");
270 bnum = get_number (&p);
273 if (b->number == bnum)
280 if (b->cond_string != NULL)
281 free ((PTR)b->cond_string);
286 b->cond_string = NULL;
288 printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
293 /* I don't know if it matters whether this is the string the user
294 typed in or the decompiled expression. */
295 b->cond_string = savestring (arg, strlen (arg));
296 b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
298 error ("Junk at end of expression");
300 breakpoints_changed ();
304 error ("No breakpoint number %d.", bnum);
309 commands_command (arg, from_tty)
313 register struct breakpoint *b;
316 struct command_line *l;
318 /* If we allowed this, we would have problems with when to
319 free the storage, if we change the commands currently
322 if (executing_breakpoint_commands)
323 error ("Can't use the \"commands\" command among a breakpoint's commands.");
326 bnum = get_number (&p);
328 error ("Unexpected extra arguments following breakpoint number.");
331 if (b->number == bnum)
334 sprintf (tmpbuf, "Type commands for when breakpoint %d is hit, one per line.", bnum);
335 l = read_command_lines (tmpbuf, from_tty);
336 free_command_lines (&b->commands);
338 breakpoints_changed ();
341 error ("No breakpoint number %d.", bnum);
344 extern int memory_breakpoint_size; /* from mem-break.c */
346 /* Like target_read_memory() but if breakpoints are inserted, return
347 the shadow contents instead of the breakpoints themselves.
349 Read "memory data" from whatever target or inferior we have.
350 Returns zero if successful, errno value if not. EIO is used
351 for address out of bounds. If breakpoints are inserted, returns
352 shadow contents, not the breakpoints themselves. From breakpoint.c. */
355 read_memory_nobpt (memaddr, myaddr, len)
361 struct breakpoint *b;
363 if (memory_breakpoint_size < 0)
364 /* No breakpoints on this machine. FIXME: This should be
365 dependent on the debugging target. Probably want
366 target_insert_breakpoint to return a size, saying how many
367 bytes of the shadow contents are used, or perhaps have
368 something like target_xfer_shadow. */
369 return target_read_memory (memaddr, myaddr, len);
373 if (b->type == bp_watchpoint
374 || b->type == bp_hardware_watchpoint
375 || b->type == bp_read_watchpoint
376 || b->type == bp_access_watchpoint
379 else if (b->address + memory_breakpoint_size <= memaddr)
380 /* The breakpoint is entirely before the chunk of memory
383 else if (b->address >= memaddr + len)
384 /* The breakpoint is entirely after the chunk of memory we
389 /* Copy the breakpoint from the shadow contents, and recurse
390 for the things before and after. */
392 /* Addresses and length of the part of the breakpoint that
394 CORE_ADDR membpt = b->address;
395 unsigned int bptlen = memory_breakpoint_size;
396 /* Offset within shadow_contents. */
399 if (membpt < memaddr)
401 /* Only copy the second part of the breakpoint. */
402 bptlen -= memaddr - membpt;
403 bptoffset = memaddr - membpt;
407 if (membpt + bptlen > memaddr + len)
409 /* Only copy the first part of the breakpoint. */
410 bptlen -= (membpt + bptlen) - (memaddr + len);
413 memcpy (myaddr + membpt - memaddr,
414 b->shadow_contents + bptoffset, bptlen);
416 if (membpt > memaddr)
418 /* Copy the section of memory before the breakpoint. */
419 status = read_memory_nobpt (memaddr, myaddr, membpt - memaddr);
424 if (membpt + bptlen < memaddr + len)
426 /* Copy the section of memory after the breakpoint. */
427 status = read_memory_nobpt
429 myaddr + membpt + bptlen - memaddr,
430 memaddr + len - (membpt + bptlen));
437 /* Nothing overlaps. Just call read_memory_noerr. */
438 return target_read_memory (memaddr, myaddr, len);
441 /* insert_breakpoints is used when starting or continuing the program.
442 remove_breakpoints is used when the program stops.
443 Both return zero if successful,
444 or an `errno' value if could not write the inferior. */
447 insert_breakpoints ()
449 register struct breakpoint *b, *temp;
451 int disabled_breaks = 0;
453 ALL_BREAKPOINTS_SAFE (b, temp)
454 if (b->type != bp_watchpoint
455 && b->type != bp_hardware_watchpoint
456 && b->type != bp_read_watchpoint
457 && b->type != bp_access_watchpoint
458 && b->enable != disabled
459 && b->enable != shlib_disabled
463 if (b->type == bp_hardware_breakpoint)
464 val = target_insert_hw_breakpoint(b->address, b->shadow_contents);
466 val = target_insert_breakpoint(b->address, b->shadow_contents);
469 /* Can't set the breakpoint. */
470 #if defined (DISABLE_UNSETTABLE_BREAK)
471 if (DISABLE_UNSETTABLE_BREAK (b->address))
474 b->enable = shlib_disabled;
475 if (!disabled_breaks)
477 target_terminal_ours_for_output ();
478 fprintf_unfiltered (gdb_stderr,
479 "Cannot insert breakpoint %d:\n", b->number);
480 printf_filtered ("Temporarily disabling shared library breakpoints:\n");
483 printf_filtered ("%d ", b->number);
488 target_terminal_ours_for_output ();
489 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
490 #ifdef ONE_PROCESS_WRITETEXT
491 fprintf_unfiltered (gdb_stderr,
492 "The same program may be running in another process.\n");
494 memory_error (val, b->address); /* which bombs us out */
500 else if ((b->type == bp_hardware_watchpoint ||
501 b->type == bp_read_watchpoint ||
502 b->type == bp_access_watchpoint)
503 && b->enable == enabled
507 struct frame_info *saved_frame;
508 int saved_level, within_current_scope;
509 value_ptr mark = value_mark ();
512 /* Save the current frame and level so we can restore it after
513 evaluating the watchpoint expression on its own frame. */
514 saved_frame = selected_frame;
515 saved_level = selected_frame_level;
517 /* Determine if the watchpoint is within scope. */
518 if (b->exp_valid_block == NULL)
519 within_current_scope = 1;
522 struct frame_info *fi =
523 find_frame_addr_in_frame_chain (b->watchpoint_frame);
524 within_current_scope = (fi != NULL);
525 if (within_current_scope)
526 select_frame (fi, -1);
529 if (within_current_scope)
531 /* Evaluate the expression and cut the chain of values
532 produced off from the value chain. */
533 v = evaluate_expression (b->exp);
534 value_release_to_mark (mark);
539 /* Look at each value on the value chain. */
540 for ( ; v; v=v->next)
542 /* If it's a memory location, then we must watch it. */
543 if (v->lval == lval_memory)
547 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
548 len = TYPE_LENGTH (VALUE_TYPE (v));
550 if (b->type == bp_read_watchpoint)
552 else if (b->type == bp_access_watchpoint)
555 val = target_insert_watchpoint (addr, len, type);
564 /* Failure to insert a watchpoint on any memory value in the
565 value chain brings us here. */
567 warning ("Hardware watchpoint %d: Could not insert watchpoint\n",
573 Hardware watchpoint %d deleted because the program has left the block in\n\
574 which its expression is valid.\n", b->number);
575 if (b->related_breakpoint)
577 b->related_breakpoint->enable = disable;
578 b->related_breakpoint->disposition = del_at_next_stop;
581 b->disposition = del_at_next_stop;
584 /* Restore the frame and level. */
585 select_frame (saved_frame, saved_level);
588 printf_filtered ("\n");
594 remove_breakpoints ()
596 register struct breakpoint *b;
603 val = remove_breakpoint (b);
613 remove_breakpoint (b)
614 struct breakpoint *b;
618 if (b->type != bp_watchpoint
619 && b->type != bp_hardware_watchpoint
620 && b->type != bp_read_watchpoint
621 && b->type != bp_access_watchpoint)
623 if (b->type == bp_hardware_breakpoint)
624 val = target_remove_hw_breakpoint(b->address, b->shadow_contents);
626 val = target_remove_breakpoint(b->address, b->shadow_contents);
631 else if ((b->type == bp_hardware_watchpoint ||
632 b->type == bp_read_watchpoint ||
633 b->type == bp_access_watchpoint)
634 && b->enable == enabled
640 /* Walk down the saved value chain. */
641 for (v = b->val_chain; v; v = v->next)
643 /* For each memory reference remove the watchpoint
645 if (v->lval == lval_memory)
649 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
650 len = TYPE_LENGTH (VALUE_TYPE (v));
651 val = target_remove_watchpoint (addr, len, b->type);
657 /* Failure to remove any of the hardware watchpoints comes here. */
659 warning ("Hardware watchpoint %d: Could not remove watchpoint\n",
662 /* Free the saved value chain. We will construct a new one
663 the next time the watchpoint is inserted. */
664 for (v = b->val_chain; v; v = n)
674 /* Clear the "inserted" flag in all breakpoints. */
677 mark_breakpoints_out ()
679 register struct breakpoint *b;
685 /* Clear the "inserted" flag in all breakpoints and delete any breakpoints
686 which should go away between runs of the program. */
689 breakpoint_init_inferior ()
691 register struct breakpoint *b, *temp;
693 ALL_BREAKPOINTS_SAFE (b, temp)
700 case bp_watchpoint_scope:
702 /* If the call dummy breakpoint is at the entry point it will
703 cause problems when the inferior is rerun, so we better
706 Also get rid of scope breakpoints. */
707 delete_breakpoint (b);
711 case bp_hardware_watchpoint:
712 case bp_read_watchpoint:
713 case bp_access_watchpoint:
715 /* Likewise for watchpoints on local expressions. */
716 if (b->exp_valid_block != NULL)
717 delete_breakpoint (b);
726 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
727 When continuing from a location with a breakpoint,
728 we actually single step once before calling insert_breakpoints. */
731 breakpoint_here_p (pc)
734 register struct breakpoint *b;
737 if (b->enable != disabled
738 && b->enable != shlib_disabled
745 /* Return nonzero if FRAME is a dummy frame. We can't use PC_IN_CALL_DUMMY
746 because figuring out the saved SP would take too much time, at least using
747 get_saved_register on the 68k. This means that for this function to
748 work right a port must use the bp_call_dummy breakpoint. */
751 frame_in_dummy (frame)
752 struct frame_info *frame;
754 struct breakpoint *b;
759 static unsigned LONGEST dummy[] = CALL_DUMMY;
761 if (b->type == bp_call_dummy
762 && b->frame == frame->frame
764 /* We need to check the PC as well as the frame on the sparc,
765 for signals.exp in the testsuite. */
768 - sizeof (dummy) / sizeof (LONGEST) * REGISTER_SIZE))
769 && frame->pc <= b->address)
772 #endif /* CALL_DUMMY */
776 /* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
777 is valid for process/thread PID. */
780 breakpoint_thread_match (pc, pid)
784 struct breakpoint *b;
787 thread = pid_to_thread_id (pid);
790 if (b->enable != disabled
791 && b->enable != shlib_disabled
793 && (b->thread == -1 || b->thread == thread))
800 /* bpstat stuff. External routines' interfaces are documented
803 /* Clear a bpstat so that it says we are not at any breakpoint.
804 Also free any storage that is part of a bpstat. */
819 if (p->old_val != NULL)
820 value_free (p->old_val);
827 /* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
828 is part of the bpstat is copied as well. */
836 bpstat retval = NULL;
841 for (; bs != NULL; bs = bs->next)
843 tmp = (bpstat) xmalloc (sizeof (*tmp));
844 memcpy (tmp, bs, sizeof (*tmp));
846 /* This is the first thing in the chain. */
856 /* Find the bpstat associated with this breakpoint */
859 bpstat_find_breakpoint(bsp, breakpoint)
861 struct breakpoint *breakpoint;
863 if (bsp == NULL) return NULL;
865 for (;bsp != NULL; bsp = bsp->next) {
866 if (bsp->breakpoint_at == breakpoint) return bsp;
871 /* Return the breakpoint number of the first breakpoint we are stopped
872 at. *BSP upon return is a bpstat which points to the remaining
873 breakpoints stopped at (but which is not guaranteed to be good for
874 anything but further calls to bpstat_num).
875 Return 0 if passed a bpstat which does not indicate any breakpoints. */
881 struct breakpoint *b;
884 return 0; /* No more breakpoint values */
887 b = (*bsp)->breakpoint_at;
890 return -1; /* breakpoint that's been deleted since */
892 return b->number; /* We have its number */
896 /* Modify BS so that the actions will not be performed. */
899 bpstat_clear_actions (bs)
902 for (; bs != NULL; bs = bs->next)
905 if (bs->old_val != NULL)
907 value_free (bs->old_val);
913 /* Stub for cleaning up our state if we error-out of a breakpoint command */
916 cleanup_executing_breakpoints (ignore)
919 executing_breakpoint_commands = 0;
922 /* Execute all the commands associated with all the breakpoints at this
923 location. Any of these commands could cause the process to proceed
924 beyond this point, etc. We look out for such changes by checking
925 the global "breakpoint_proceeded" after each command. */
928 bpstat_do_actions (bsp)
932 struct cleanup *old_chain;
933 struct command_line *cmd;
935 /* Avoid endless recursion if a `source' command is contained
937 if (executing_breakpoint_commands)
940 executing_breakpoint_commands = 1;
941 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
946 breakpoint_proceeded = 0;
947 for (; bs != NULL; bs = bs->next)
952 execute_control_command (cmd);
955 if (breakpoint_proceeded)
956 /* The inferior is proceeded by the command; bomb out now.
957 The bpstat chain has been blown away by wait_for_inferior.
958 But since execution has stopped again, there is a new bpstat
959 to look at, so start over. */
965 executing_breakpoint_commands = 0;
966 discard_cleanups (old_chain);
969 /* This is the normal print_it function for a bpstat. In the future,
970 much of this logic could (should?) be moved to bpstat_stop_status,
971 by having it set different print_it functions. */
977 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
978 which has since been deleted. */
979 if (bs->breakpoint_at == NULL
980 || (bs->breakpoint_at->type != bp_breakpoint
981 && bs->breakpoint_at->type != bp_hardware_breakpoint
982 && bs->breakpoint_at->type != bp_watchpoint
983 && bs->breakpoint_at->type != bp_read_watchpoint
984 && bs->breakpoint_at->type != bp_access_watchpoint
985 && bs->breakpoint_at->type != bp_hardware_watchpoint))
988 if (bs->breakpoint_at->type == bp_breakpoint ||
989 bs->breakpoint_at->type == bp_hardware_breakpoint)
991 /* I think the user probably only wants to see one breakpoint
992 number, not all of them. */
993 annotate_breakpoint (bs->breakpoint_at->number);
994 printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
997 else if ((bs->old_val != NULL) &&
998 (bs->breakpoint_at->type == bp_watchpoint ||
999 bs->breakpoint_at->type == bp_access_watchpoint ||
1000 bs->breakpoint_at->type == bp_hardware_watchpoint))
1002 annotate_watchpoint (bs->breakpoint_at->number);
1003 mention (bs->breakpoint_at);
1004 printf_filtered ("\nOld value = ");
1005 value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
1006 printf_filtered ("\nNew value = ");
1007 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1008 Val_pretty_default);
1009 printf_filtered ("\n");
1010 value_free (bs->old_val);
1012 /* More than one watchpoint may have been triggered. */
1015 else if (bs->breakpoint_at->type == bp_access_watchpoint ||
1016 bs->breakpoint_at->type == bp_read_watchpoint)
1018 mention (bs->breakpoint_at);
1019 printf_filtered ("\nValue = ");
1020 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1021 Val_pretty_default);
1022 printf_filtered ("\n");
1025 /* We can't deal with it. Maybe another member of the bpstat chain can. */
1029 /* Print a message indicating what happened. Returns nonzero to
1030 say that only the source line should be printed after this (zero
1031 return means print the frame as well as the source line). */
1032 /* Currently we always return zero. */
1042 val = (*bs->print_it) (bs);
1046 /* Maybe another breakpoint in the chain caused us to stop.
1047 (Currently all watchpoints go on the bpstat whether hit or
1048 not. That probably could (should) be changed, provided care is taken
1049 with respect to bpstat_explains_signal). */
1051 return bpstat_print (bs->next);
1053 /* We reached the end of the chain without printing anything. */
1057 /* Evaluate the expression EXP and return 1 if value is zero.
1058 This is used inside a catch_errors to evaluate the breakpoint condition.
1059 The argument is a "struct expression *" that has been cast to char * to
1060 make it pass through catch_errors. */
1063 breakpoint_cond_eval (exp)
1066 value_ptr mark = value_mark ();
1067 int i = !value_true (evaluate_expression ((struct expression *)exp));
1068 value_free_to_mark (mark);
1072 /* Allocate a new bpstat and chain it to the current one. */
1075 bpstat_alloc (b, cbs)
1076 register struct breakpoint *b;
1077 bpstat cbs; /* Current "bs" value */
1081 bs = (bpstat) xmalloc (sizeof (*bs));
1083 bs->breakpoint_at = b;
1084 /* If the condition is false, etc., don't do the commands. */
1085 bs->commands = NULL;
1087 bs->print_it = print_it_normal;
1091 /* Possible return values for watchpoint_check (this can't be an enum
1092 because of check_errors). */
1093 /* The watchpoint has been deleted. */
1094 #define WP_DELETED 1
1095 /* The value has changed. */
1096 #define WP_VALUE_CHANGED 2
1097 /* The value has not changed. */
1098 #define WP_VALUE_NOT_CHANGED 3
1100 #define BP_TEMPFLAG 1
1101 #define BP_HARDWAREFLAG 2
1103 /* Check watchpoint condition. */
1106 watchpoint_check (p)
1109 bpstat bs = (bpstat) p;
1110 struct breakpoint *b;
1111 struct frame_info *fr;
1112 int within_current_scope;
1114 b = bs->breakpoint_at;
1116 if (b->exp_valid_block == NULL)
1117 within_current_scope = 1;
1120 /* There is no current frame at this moment. If we're going to have
1121 any chance of handling watchpoints on local variables, we'll need
1122 the frame chain (so we can determine if we're in scope). */
1123 reinit_frame_cache();
1124 fr = find_frame_addr_in_frame_chain (b->watchpoint_frame);
1125 within_current_scope = (fr != NULL);
1126 if (within_current_scope)
1127 /* If we end up stopping, the current frame will get selected
1128 in normal_stop. So this call to select_frame won't affect
1130 select_frame (fr, -1);
1133 if (within_current_scope)
1135 /* We use value_{,free_to_}mark because it could be a
1136 *long* time before we return to the command level and
1137 call free_all_values. We can't call free_all_values because
1138 we might be in the middle of evaluating a function call. */
1140 value_ptr mark = value_mark ();
1141 value_ptr new_val = evaluate_expression (bs->breakpoint_at->exp);
1142 if (!value_equal (b->val, new_val))
1144 release_value (new_val);
1145 value_free_to_mark (mark);
1146 bs->old_val = b->val;
1148 /* We will stop here */
1149 return WP_VALUE_CHANGED;
1153 /* Nothing changed, don't do anything. */
1154 value_free_to_mark (mark);
1155 /* We won't stop here */
1156 return WP_VALUE_NOT_CHANGED;
1161 /* This seems like the only logical thing to do because
1162 if we temporarily ignored the watchpoint, then when
1163 we reenter the block in which it is valid it contains
1164 garbage (in the case of a function, it may have two
1165 garbage values, one before and one after the prologue).
1166 So we can't even detect the first assignment to it and
1167 watch after that (since the garbage may or may not equal
1168 the first value assigned). */
1170 Watchpoint %d deleted because the program has left the block in\n\
1171 which its expression is valid.\n", bs->breakpoint_at->number);
1172 if (b->related_breakpoint)
1174 b->related_breakpoint->enable = disable;
1175 b->related_breakpoint->disposition = del_at_next_stop;
1177 b->enable = disable;
1178 b->disposition = del_at_next_stop;
1184 /* This is used when everything which needs to be printed has
1185 already been printed. But we still want to print the frame. */
1193 /* This is used when nothing should be printed for this bpstat entry. */
1202 /* Get a bpstat associated with having just stopped at address *PC
1203 and frame address CORE_ADDRESS. Update *PC to point at the
1204 breakpoint (if we hit a breakpoint). NOT_A_BREAKPOINT is nonzero
1205 if this is known to not be a real breakpoint (it could still be a
1206 watchpoint, though). */
1208 /* Determine whether we stopped at a breakpoint, etc, or whether we
1209 don't understand this stop. Result is a chain of bpstat's such that:
1211 if we don't understand the stop, the result is a null pointer.
1213 if we understand why we stopped, the result is not null.
1215 Each element of the chain refers to a particular breakpoint or
1216 watchpoint at which we have stopped. (We may have stopped for
1217 several reasons concurrently.)
1219 Each element of the chain has valid next, breakpoint_at,
1220 commands, FIXME??? fields.
1225 bpstat_stop_status (pc, not_a_breakpoint)
1227 int not_a_breakpoint;
1229 register struct breakpoint *b, *temp;
1231 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1232 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
1233 int real_breakpoint = 0;
1235 /* Root of the chain of bpstat's */
1236 struct bpstats root_bs[1];
1237 /* Pointer to the last thing in the chain currently. */
1238 bpstat bs = root_bs;
1239 static char message1[] =
1240 "Error evaluating expression for watchpoint %d\n";
1241 char message[sizeof (message1) + 30 /* slop */];
1243 /* Get the address where the breakpoint would have been. */
1244 bp_addr = *pc - DECR_PC_AFTER_BREAK;
1246 ALL_BREAKPOINTS_SAFE (b, temp)
1248 if (b->enable == disabled
1249 || b->enable == shlib_disabled)
1252 if (b->type != bp_watchpoint
1253 && b->type != bp_hardware_watchpoint
1254 && b->type != bp_read_watchpoint
1255 && b->type != bp_access_watchpoint
1256 && b->type != bp_hardware_breakpoint
1257 && b->address != bp_addr)
1260 if (b->type == bp_hardware_breakpoint
1261 && b->address != (bp_addr - DECR_PC_AFTER_HW_BREAK))
1264 if (b->type != bp_watchpoint
1265 && b->type != bp_hardware_watchpoint
1266 && b->type != bp_read_watchpoint
1267 && b->type != bp_access_watchpoint
1268 && not_a_breakpoint)
1271 /* Come here if it's a watchpoint, or if the break address matches */
1275 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
1280 sprintf (message, message1, b->number);
1281 if (b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
1283 switch (catch_errors (watchpoint_check, (char *) bs, message,
1287 /* We've already printed what needs to be printed. */
1288 bs->print_it = print_it_done;
1291 case WP_VALUE_CHANGED:
1294 case WP_VALUE_NOT_CHANGED:
1296 bs->print_it = print_it_noop;
1303 /* Error from catch_errors. */
1304 printf_filtered ("Watchpoint %d deleted.\n", b->number);
1305 if (b->related_breakpoint)
1307 b->related_breakpoint->enable = disable;
1308 b->related_breakpoint->disposition = del_at_next_stop;
1310 b->enable = disable;
1311 b->disposition = del_at_next_stop;
1312 /* We've already printed what needs to be printed. */
1313 bs->print_it = print_it_done;
1319 else if (b->type == bp_read_watchpoint || b->type == bp_access_watchpoint)
1325 addr = target_stopped_data_address();
1326 if (addr == 0) continue;
1327 for (v = b->val_chain; v; v = v->next)
1329 if (v->lval == lval_memory)
1333 vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1339 switch (catch_errors (watchpoint_check, (char *) bs, message,
1343 /* We've already printed what needs to be printed. */
1344 bs->print_it = print_it_done;
1347 case WP_VALUE_CHANGED:
1348 case WP_VALUE_NOT_CHANGED:
1354 /* Error from catch_errors. */
1355 printf_filtered ("Watchpoint %d deleted.\n", b->number);
1356 if (b->related_breakpoint)
1358 b->related_breakpoint->enable = disable;
1359 b->related_breakpoint->disposition = del_at_next_stop;
1361 b->enable = disable;
1362 b->disposition = del_at_next_stop;
1363 /* We've already printed what needs to be printed. */
1364 bs->print_it = print_it_done;
1368 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1370 real_breakpoint = 1;
1373 if (b->frame && b->frame != (get_current_frame ())->frame)
1377 int value_is_zero = 0;
1381 /* Need to select the frame, with all that implies
1382 so that the conditions will have the right context. */
1383 select_frame (get_current_frame (), 0);
1385 = catch_errors (breakpoint_cond_eval, (char *)(b->cond),
1386 "Error in testing breakpoint condition:\n",
1388 /* FIXME-someday, should give breakpoint # */
1391 if (b->cond && value_is_zero)
1395 else if (b->ignore_count > 0)
1402 /* We will stop here */
1403 if (b->disposition == disable)
1404 b->enable = disabled;
1405 bs->commands = b->commands;
1408 if (bs->commands && STREQ ("silent", bs->commands->line))
1410 bs->commands = bs->commands->next;
1415 /* Print nothing for this entry if we dont stop or if we dont print. */
1416 if (bs->stop == 0 || bs->print == 0)
1417 bs->print_it = print_it_noop;
1420 bs->next = NULL; /* Terminate the chain */
1421 bs = root_bs->next; /* Re-grab the head of the chain */
1422 #if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
1425 if (real_breakpoint)
1428 #if defined (SHIFT_INST_REGS)
1430 #else /* No SHIFT_INST_REGS. */
1432 #endif /* No SHIFT_INST_REGS. */
1435 #endif /* DECR_PC_AFTER_BREAK != 0. */
1437 /* The value of a hardware watchpoint hasn't changed, but the
1438 intermediate memory locations we are watching may have. */
1439 if (bs && ! bs->stop &&
1440 (bs->breakpoint_at->type == bp_hardware_watchpoint ||
1441 bs->breakpoint_at->type == bp_read_watchpoint ||
1442 bs->breakpoint_at->type == bp_access_watchpoint))
1444 remove_breakpoints ();
1445 insert_breakpoints ();
1450 /* Tell what to do about this bpstat. */
1455 /* Classify each bpstat as one of the following. */
1457 /* This bpstat element has no effect on the main_action. */
1460 /* There was a watchpoint, stop but don't print. */
1463 /* There was a watchpoint, stop and print. */
1466 /* There was a breakpoint but we're not stopping. */
1469 /* There was a breakpoint, stop but don't print. */
1472 /* There was a breakpoint, stop and print. */
1475 /* We hit the longjmp breakpoint. */
1478 /* We hit the longjmp_resume breakpoint. */
1481 /* We hit the step_resume breakpoint. */
1484 /* We hit the through_sigtramp breakpoint. */
1487 /* We hit the shared library event breakpoint. */
1490 /* This is just used to count how many enums there are. */
1494 /* Here is the table which drives this routine. So that we can
1495 format it pretty, we define some abbreviations for the
1496 enum bpstat_what codes. */
1497 #define kc BPSTAT_WHAT_KEEP_CHECKING
1498 #define ss BPSTAT_WHAT_STOP_SILENT
1499 #define sn BPSTAT_WHAT_STOP_NOISY
1500 #define sgl BPSTAT_WHAT_SINGLE
1501 #define slr BPSTAT_WHAT_SET_LONGJMP_RESUME
1502 #define clr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
1503 #define clrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
1504 #define sr BPSTAT_WHAT_STEP_RESUME
1505 #define ts BPSTAT_WHAT_THROUGH_SIGTRAMP
1506 #define shl BPSTAT_WHAT_CHECK_SHLIBS
1508 /* "Can't happen." Might want to print an error message.
1509 abort() is not out of the question, but chances are GDB is just
1510 a bit confused, not unusable. */
1511 #define err BPSTAT_WHAT_STOP_NOISY
1513 /* Given an old action and a class, come up with a new action. */
1514 /* One interesting property of this table is that wp_silent is the same
1515 as bp_silent and wp_noisy is the same as bp_noisy. That is because
1516 after stopping, the check for whether to step over a breakpoint
1517 (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
1518 reference to how we stopped. We retain separate wp_silent and bp_silent
1519 codes in case we want to change that someday. */
1521 /* step_resume entries: a step resume breakpoint overrides another
1522 breakpoint of signal handling (see comment in wait_for_inferior
1523 at first IN_SIGTRAMP where we set the step_resume breakpoint). */
1524 /* We handle the through_sigtramp_breakpoint the same way; having both
1525 one of those and a step_resume_breakpoint is probably very rare (?). */
1527 static const enum bpstat_what_main_action
1528 table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
1531 /* kc ss sn sgl slr clr clrs sr ts shl
1533 /*no_effect*/ {kc, ss, sn, sgl, slr, clr, clrs, sr, ts, shl},
1534 /*wp_silent*/ {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl},
1535 /*wp_noisy*/ {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl},
1536 /*bp_nostop*/ {sgl, ss, sn, sgl, slr, clrs, clrs, sr, ts, shl},
1537 /*bp_silent*/ {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl},
1538 /*bp_noisy*/ {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl},
1539 /*long_jump*/ {slr, ss, sn, slr, err, err, err, sr, ts, shl},
1540 /*long_resume*/ {clr, ss, sn, clrs, err, err, err, sr, ts, shl},
1541 /*step_resume*/ {sr, sr, sr, sr, sr, sr, sr, sr, ts, shl},
1542 /*through_sig*/ {ts, ts, ts, ts, ts, ts, ts, ts, ts, shl},
1543 /*shlib*/ {shl, shl, shl, shl, shl, shl, shl, shl, ts, shl}
1556 enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
1557 struct bpstat_what retval;
1559 retval.call_dummy = 0;
1560 for (; bs != NULL; bs = bs->next)
1562 enum class bs_class = no_effect;
1563 if (bs->breakpoint_at == NULL)
1564 /* I suspect this can happen if it was a momentary breakpoint
1565 which has since been deleted. */
1567 switch (bs->breakpoint_at->type)
1570 case bp_hardware_breakpoint:
1576 bs_class = bp_noisy;
1578 bs_class = bp_silent;
1581 bs_class = bp_nostop;
1584 case bp_hardware_watchpoint:
1585 case bp_read_watchpoint:
1586 case bp_access_watchpoint:
1590 bs_class = wp_noisy;
1592 bs_class = wp_silent;
1595 /* There was a watchpoint, but we're not stopping. This requires
1596 no further action. */
1597 bs_class = no_effect;
1600 bs_class = long_jump;
1602 case bp_longjmp_resume:
1603 bs_class = long_resume;
1605 case bp_step_resume:
1608 bs_class = step_resume;
1611 /* It is for the wrong frame. */
1612 bs_class = bp_nostop;
1614 case bp_through_sigtramp:
1615 bs_class = through_sig;
1617 case bp_watchpoint_scope:
1618 bs_class = bp_nostop;
1620 case bp_shlib_event:
1621 bs_class = shlib_event;
1624 /* Make sure the action is stop (silent or noisy), so infrun.c
1625 pops the dummy frame. */
1626 bs_class = bp_silent;
1627 retval.call_dummy = 1;
1630 current_action = table[(int)bs_class][(int)current_action];
1632 retval.main_action = current_action;
1636 /* Nonzero if we should step constantly (e.g. watchpoints on machines
1637 without hardware support). This isn't related to a specific bpstat,
1638 just to things like whether watchpoints are set. */
1641 bpstat_should_step ()
1643 struct breakpoint *b;
1645 if (b->enable == enabled && b->type == bp_watchpoint)
1650 /* Print information on breakpoint number BNUM, or -1 if all.
1651 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
1652 is nonzero, process only watchpoints. */
1655 breakpoint_1 (bnum, allflag)
1659 register struct breakpoint *b;
1660 register struct command_line *l;
1661 register struct symbol *sym;
1662 CORE_ADDR last_addr = (CORE_ADDR)-1;
1663 int found_a_breakpoint = 0;
1664 static char *bptypes[] = {"breakpoint", "hw breakpoint",
1665 "until", "finish", "watchpoint",
1666 "hw watchpoint", "read watchpoint",
1667 "acc watchpoint", "longjmp",
1668 "longjmp resume", "step resume",
1670 "watchpoint scope", "call dummy",
1672 static char *bpdisps[] = {"del", "dstp", "dis", "keep"};
1673 static char bpenables[] = "nyn";
1674 char wrap_indent[80];
1678 || bnum == b->number)
1680 /* We only print out user settable breakpoints unless the allflag is set. */
1682 && b->type != bp_breakpoint
1683 && b->type != bp_hardware_breakpoint
1684 && b->type != bp_watchpoint
1685 && b->type != bp_read_watchpoint
1686 && b->type != bp_access_watchpoint
1687 && b->type != bp_hardware_watchpoint)
1690 if (!found_a_breakpoint++)
1692 annotate_breakpoints_headers ();
1695 printf_filtered ("Num ");
1697 printf_filtered ("Type ");
1699 printf_filtered ("Disp ");
1701 printf_filtered ("Enb ");
1705 printf_filtered ("Address ");
1708 printf_filtered ("What\n");
1710 annotate_breakpoints_table ();
1715 printf_filtered ("%-3d ", b->number);
1717 printf_filtered ("%-14s ", bptypes[(int)b->type]);
1719 printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
1721 printf_filtered ("%-3c ", bpenables[(int)b->enable]);
1723 strcpy (wrap_indent, " ");
1725 strcat (wrap_indent, " ");
1729 case bp_hardware_watchpoint:
1730 case bp_read_watchpoint:
1731 case bp_access_watchpoint:
1732 /* Field 4, the address, is omitted (which makes the columns
1733 not line up too nicely with the headers, but the effect
1734 is relatively readable). */
1736 print_expression (b->exp, gdb_stdout);
1740 case bp_hardware_breakpoint:
1744 case bp_longjmp_resume:
1745 case bp_step_resume:
1746 case bp_through_sigtramp:
1747 case bp_watchpoint_scope:
1749 case bp_shlib_event:
1753 /* FIXME-32x64: need a print_address_numeric with
1757 local_hex_string_custom
1758 ((unsigned long) b->address, "08l"));
1763 last_addr = b->address;
1766 sym = find_pc_function (b->address);
1769 fputs_filtered ("in ", gdb_stdout);
1770 fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
1771 wrap_here (wrap_indent);
1772 fputs_filtered (" at ", gdb_stdout);
1774 fputs_filtered (b->source_file, gdb_stdout);
1775 printf_filtered (":%d", b->line_number);
1778 print_address_symbolic (b->address, gdb_stdout, demangle, " ");
1782 printf_filtered ("\n");
1788 printf_filtered ("\tstop only in stack frame at ");
1789 print_address_numeric (b->frame, 1, gdb_stdout);
1790 printf_filtered ("\n");
1797 printf_filtered ("\tstop only if ");
1798 print_expression (b->cond, gdb_stdout);
1799 printf_filtered ("\n");
1802 if (b->thread != -1)
1804 /* FIXME should make an annotation for this */
1805 printf_filtered ("\tstop only in thread %d\n", b->thread);
1808 if (show_breakpoint_hit_counts && b->hit_count)
1810 /* FIXME should make an annotation for this */
1812 printf_filtered ("\tbreakpoint already hit %d time%s\n",
1813 b->hit_count, (b->hit_count == 1 ? "" : "s"));
1816 if (b->ignore_count)
1820 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
1823 if ((l = b->commands))
1829 print_command_line (l, 4);
1835 if (!found_a_breakpoint)
1838 printf_filtered ("No breakpoints or watchpoints.\n");
1840 printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
1843 /* Compare against (CORE_ADDR)-1 in case some compiler decides
1844 that a comparison of an unsigned with -1 is always false. */
1845 if (last_addr != (CORE_ADDR)-1)
1846 set_next_address (last_addr);
1848 annotate_breakpoints_table_end ();
1853 breakpoints_info (bnum_exp, from_tty)
1860 bnum = parse_and_eval_address (bnum_exp);
1862 breakpoint_1 (bnum, 0);
1865 #if MAINTENANCE_CMDS
1869 maintenance_info_breakpoints (bnum_exp, from_tty)
1876 bnum = parse_and_eval_address (bnum_exp);
1878 breakpoint_1 (bnum, 1);
1883 /* Print a message describing any breakpoints set at PC. */
1886 describe_other_breakpoints (pc)
1887 register CORE_ADDR pc;
1889 register int others = 0;
1890 register struct breakpoint *b;
1893 if (b->address == pc)
1897 printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
1899 if (b->address == pc)
1905 ((b->enable == disabled || b->enable == shlib_disabled)
1906 ? " (disabled)" : ""),
1907 (others > 1) ? "," : ((others == 1) ? " and" : ""));
1909 printf_filtered ("also set at pc ");
1910 print_address_numeric (pc, 1, gdb_stdout);
1911 printf_filtered (".\n");
1915 /* Set the default place to put a breakpoint
1916 for the `break' command with no arguments. */
1919 set_default_breakpoint (valid, addr, symtab, line)
1922 struct symtab *symtab;
1925 default_breakpoint_valid = valid;
1926 default_breakpoint_address = addr;
1927 default_breakpoint_symtab = symtab;
1928 default_breakpoint_line = line;
1931 /* Rescan breakpoints at address ADDRESS,
1932 marking the first one as "first" and any others as "duplicates".
1933 This is so that the bpt instruction is only inserted once. */
1936 check_duplicates (address)
1939 register struct breakpoint *b;
1940 register int count = 0;
1942 if (address == 0) /* Watchpoints are uninteresting */
1946 if (b->enable != disabled
1947 && b->enable != shlib_disabled
1948 && b->address == address)
1951 b->duplicate = count > 1;
1955 /* Low level routine to set a breakpoint.
1956 Takes as args the three things that every breakpoint must have.
1957 Returns the breakpoint object so caller can set other things.
1958 Does not set the breakpoint number!
1959 Does not print anything.
1961 ==> This routine should not be called if there is a chance of later
1962 error(); otherwise it leaves a bogus breakpoint on the chain. Validate
1963 your arguments BEFORE calling this routine! */
1965 static struct breakpoint *
1966 set_raw_breakpoint (sal)
1967 struct symtab_and_line sal;
1969 register struct breakpoint *b, *b1;
1971 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
1972 memset (b, 0, sizeof (*b));
1973 b->address = sal.pc;
1974 if (sal.symtab == NULL)
1975 b->source_file = NULL;
1977 b->source_file = savestring (sal.symtab->filename,
1978 strlen (sal.symtab->filename));
1979 b->language = current_language->la_language;
1980 b->input_radix = input_radix;
1982 b->line_number = sal.line;
1983 b->enable = enabled;
1986 b->ignore_count = 0;
1990 /* Add this breakpoint to the end of the chain
1991 so that a list of breakpoints will come out in order
1992 of increasing numbers. */
1994 b1 = breakpoint_chain;
1996 breakpoint_chain = b;
2004 check_duplicates (sal.pc);
2005 breakpoints_changed ();
2010 static int internal_breakpoint_number = -1;
2012 #ifdef GET_LONGJMP_TARGET
2015 create_longjmp_breakpoint (func_name)
2018 struct symtab_and_line sal;
2019 struct breakpoint *b;
2021 if (func_name != NULL)
2023 struct minimal_symbol *m;
2025 m = lookup_minimal_symbol_text (func_name, NULL, (struct objfile *)NULL);
2027 sal.pc = SYMBOL_VALUE_ADDRESS (m);
2037 b = set_raw_breakpoint (sal);
2040 b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
2041 b->disposition = donttouch;
2042 b->enable = disabled;
2045 b->addr_string = strsave(func_name);
2046 b->number = internal_breakpoint_number--;
2049 #endif /* #ifdef GET_LONGJMP_TARGET */
2051 /* Call this routine when stepping and nexting to enable a breakpoint if we do
2052 a longjmp(). When we hit that breakpoint, call
2053 set_longjmp_resume_breakpoint() to figure out where we are going. */
2056 enable_longjmp_breakpoint()
2058 register struct breakpoint *b;
2061 if (b->type == bp_longjmp)
2063 b->enable = enabled;
2064 check_duplicates (b->address);
2069 disable_longjmp_breakpoint()
2071 register struct breakpoint *b;
2074 if ( b->type == bp_longjmp
2075 || b->type == bp_longjmp_resume)
2077 b->enable = disabled;
2078 check_duplicates (b->address);
2084 remove_solib_event_breakpoints ()
2086 register struct breakpoint *b, *temp;
2088 ALL_BREAKPOINTS_SAFE (b, temp)
2089 if (b->type == bp_shlib_event)
2090 delete_breakpoint (b);
2094 create_solib_event_breakpoint (address)
2097 struct breakpoint *b;
2098 struct symtab_and_line sal;
2103 b = set_raw_breakpoint (sal);
2104 b->number = internal_breakpoint_number--;
2105 b->disposition = donttouch;
2106 b->type = bp_shlib_event;
2109 /* Try to reenable any breakpoints in shared libraries. */
2111 re_enable_breakpoints_in_shlibs ()
2113 struct breakpoint *b;
2116 if (b->enable == shlib_disabled)
2120 /* Do not reenable the breakpoint if the shared library
2121 is still not mapped in. */
2122 if (target_read_memory (b->address, buf, 1) == 0)
2123 b->enable = enabled;
2130 hw_breakpoint_used_count()
2132 register struct breakpoint *b;
2137 if (b->type == bp_hardware_breakpoint && b->enable == enabled)
2145 hw_watchpoint_used_count(type, other_type_used)
2147 int *other_type_used;
2149 register struct breakpoint *b;
2152 *other_type_used = 0;
2155 if (b->enable == enabled)
2157 if (b->type == type) i++;
2158 else if ((b->type == bp_hardware_watchpoint ||
2159 b->type == bp_read_watchpoint ||
2160 b->type == bp_access_watchpoint)
2161 && b->enable == enabled)
2162 *other_type_used = 1;
2168 /* Call this after hitting the longjmp() breakpoint. Use this to set a new
2169 breakpoint at the target of the jmp_buf.
2171 FIXME - This ought to be done by setting a temporary breakpoint that gets
2172 deleted automatically...
2176 set_longjmp_resume_breakpoint(pc, frame)
2178 struct frame_info *frame;
2180 register struct breakpoint *b;
2183 if (b->type == bp_longjmp_resume)
2186 b->enable = enabled;
2188 b->frame = frame->frame;
2191 check_duplicates (b->address);
2196 /* Set a breakpoint that will evaporate an end of command
2197 at address specified by SAL.
2198 Restrict it to frame FRAME if FRAME is nonzero. */
2201 set_momentary_breakpoint (sal, frame, type)
2202 struct symtab_and_line sal;
2203 struct frame_info *frame;
2206 register struct breakpoint *b;
2207 b = set_raw_breakpoint (sal);
2209 b->enable = enabled;
2210 b->disposition = donttouch;
2211 b->frame = (frame ? frame->frame : 0);
2213 /* If we're debugging a multi-threaded program, then we
2214 want momentary breakpoints to be active in only a
2215 single thread of control. */
2216 if (in_thread_list (inferior_pid))
2217 b->thread = pid_to_thread_id (inferior_pid);
2223 /* Tell the user we have just set a breakpoint B. */
2227 struct breakpoint *b;
2231 /* FIXME: This is misplaced; mention() is called by things (like hitting a
2232 watchpoint) other than breakpoint creation. It should be possible to
2233 clean this up and at the same time replace the random calls to
2234 breakpoint_changed with this hook, as has already been done for
2235 delete_breakpoint_hook and so on. */
2236 if (create_breakpoint_hook)
2237 create_breakpoint_hook (b);
2242 printf_filtered ("Watchpoint %d: ", b->number);
2243 print_expression (b->exp, gdb_stdout);
2245 case bp_hardware_watchpoint:
2246 printf_filtered ("Hardware watchpoint %d: ", b->number);
2247 print_expression (b->exp, gdb_stdout);
2249 case bp_read_watchpoint:
2250 printf_filtered ("Hardware read watchpoint %d: ", b->number);
2251 print_expression (b->exp, gdb_stdout);
2253 case bp_access_watchpoint:
2254 printf_filtered ("Hardware access(read/write) watchpoint %d: ",b->number);
2255 print_expression (b->exp, gdb_stdout);
2258 printf_filtered ("Breakpoint %d", b->number);
2261 case bp_hardware_breakpoint:
2262 printf_filtered ("Hardware assisted breakpoint %d", b->number);
2268 case bp_longjmp_resume:
2269 case bp_step_resume:
2270 case bp_through_sigtramp:
2272 case bp_watchpoint_scope:
2273 case bp_shlib_event:
2278 if (addressprint || b->source_file == NULL)
2280 printf_filtered (" at ");
2281 print_address_numeric (b->address, 1, gdb_stdout);
2284 printf_filtered (": file %s, line %d.",
2285 b->source_file, b->line_number);
2287 printf_filtered ("\n");
2291 /* Set a breakpoint according to ARG (function, linenum or *address)
2292 flag: first bit : 0 non-temporary, 1 temporary.
2293 second bit : 0 normal breakpoint, 1 hardware breakpoint. */
2296 break_command_1 (arg, flag, from_tty)
2300 int tempflag, hardwareflag;
2301 struct symtabs_and_lines sals;
2302 struct symtab_and_line sal;
2303 register struct expression *cond = 0;
2304 register struct breakpoint *b;
2306 /* Pointers in arg to the start, and one past the end, of the condition. */
2307 char *cond_start = NULL;
2308 char *cond_end = NULL;
2309 /* Pointers in arg to the start, and one past the end,
2310 of the address part. */
2311 char *addr_start = NULL;
2312 char *addr_end = NULL;
2313 struct cleanup *old_chain;
2314 struct cleanup *canonical_strings_chain = NULL;
2315 char **canonical = (char **)NULL;
2319 hardwareflag = flag & BP_HARDWAREFLAG;
2320 tempflag = flag & BP_TEMPFLAG;
2325 sal.line = sal.pc = sal.end = 0;
2328 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
2330 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
2331 && (arg[2] == ' ' || arg[2] == '\t')))
2333 if (default_breakpoint_valid)
2335 sals.sals = (struct symtab_and_line *)
2336 xmalloc (sizeof (struct symtab_and_line));
2337 sal.pc = default_breakpoint_address;
2338 sal.line = default_breakpoint_line;
2339 sal.symtab = default_breakpoint_symtab;
2344 error ("No default breakpoint address now.");
2350 /* Force almost all breakpoints to be in terms of the
2351 current_source_symtab (which is decode_line_1's default). This
2352 should produce the results we want almost all of the time while
2353 leaving default_breakpoint_* alone. */
2354 if (default_breakpoint_valid
2355 && (!current_source_symtab
2356 || (arg && (*arg == '+' || *arg == '-'))))
2357 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
2358 default_breakpoint_line, &canonical);
2360 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, &canonical);
2368 /* Make sure that all storage allocated in decode_line_1 gets freed in case
2369 the following `for' loop errors out. */
2370 old_chain = make_cleanup (free, sals.sals);
2371 if (canonical != (char **)NULL)
2373 make_cleanup (free, canonical);
2374 canonical_strings_chain = make_cleanup (null_cleanup, 0);
2375 for (i = 0; i < sals.nelts; i++)
2377 if (canonical[i] != NULL)
2378 make_cleanup (free, canonical[i]);
2382 thread = -1; /* No specific thread yet */
2384 /* Resolve all line numbers to PC's, and verify that conditions
2385 can be parsed, before setting any breakpoints. */
2386 for (i = 0; i < sals.nelts; i++)
2388 char *tok, *end_tok;
2391 resolve_sal_pc (&sals.sals[i]);
2397 while (*tok == ' ' || *tok == '\t')
2402 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
2405 toklen = end_tok - tok;
2407 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
2409 tok = cond_start = end_tok + 1;
2410 cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
2413 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
2419 thread = strtol (tok, &tok, 0);
2421 error ("Junk after thread keyword.");
2422 if (!valid_thread_id (thread))
2423 error ("Unknown thread %d\n", thread);
2426 error ("Junk at end of arguments.");
2431 int i, target_resources_ok;
2433 i = hw_breakpoint_used_count ();
2434 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
2435 bp_hardware_breakpoint, i + sals.nelts, 0);
2436 if (target_resources_ok == 0)
2437 error ("No hardware breakpoint support in the target.");
2438 else if (target_resources_ok < 0)
2439 error ("Hardware breakpoints used exceeds limit.");
2442 /* Remove the canonical strings from the cleanup, they are needed below. */
2443 if (canonical != (char **)NULL)
2444 discard_cleanups (canonical_strings_chain);
2446 /* Now set all the breakpoints. */
2447 for (i = 0; i < sals.nelts; i++)
2452 describe_other_breakpoints (sal.pc);
2454 b = set_raw_breakpoint (sal);
2455 set_breakpoint_count (breakpoint_count + 1);
2456 b->number = breakpoint_count;
2457 b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
2461 /* If a canonical line spec is needed use that instead of the
2463 if (canonical != (char **)NULL && canonical[i] != NULL)
2464 b->addr_string = canonical[i];
2465 else if (addr_start)
2466 b->addr_string = savestring (addr_start, addr_end - addr_start);
2468 b->cond_string = savestring (cond_start, cond_end - cond_start);
2470 b->enable = enabled;
2471 b->disposition = tempflag ? del : donttouch;
2478 printf_filtered ("Multiple breakpoints were set.\n");
2479 printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
2481 do_cleanups (old_chain);
2484 /* Helper function for break_command_1 and disassemble_command. */
2487 resolve_sal_pc (sal)
2488 struct symtab_and_line *sal;
2492 if (sal->pc == 0 && sal->symtab != 0)
2494 pc = find_line_pc (sal->symtab, sal->line);
2496 error ("No line %d in file \"%s\".",
2497 sal->line, sal->symtab->filename);
2503 break_command (arg, from_tty)
2507 break_command_1 (arg, 0, from_tty);
2511 tbreak_command (arg, from_tty)
2515 break_command_1 (arg, BP_TEMPFLAG, from_tty);
2519 hbreak_command (arg, from_tty)
2523 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
2527 thbreak_command (arg, from_tty)
2531 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
2535 /* accessflag: 0: watch write, 1: watch read, 2: watch access(read or write)
2538 watch_command_1 (arg, accessflag, from_tty)
2543 struct breakpoint *b;
2544 struct symtab_and_line sal;
2545 struct expression *exp;
2546 struct block *exp_valid_block;
2547 struct value *val, *mark;
2548 struct frame_info *frame, *prev_frame;
2549 char *exp_start = NULL;
2550 char *exp_end = NULL;
2551 char *tok, *end_tok;
2553 char *cond_start = NULL;
2554 char *cond_end = NULL;
2555 struct expression *cond = NULL;
2556 int i, other_type_used, target_resources_ok;
2557 enum bptype bp_type;
2564 /* Parse arguments. */
2565 innermost_block = NULL;
2567 exp = parse_exp_1 (&arg, 0, 0);
2569 exp_valid_block = innermost_block;
2570 mark = value_mark ();
2571 val = evaluate_expression (exp);
2572 release_value (val);
2573 if (VALUE_LAZY (val))
2574 value_fetch_lazy (val);
2577 while (*tok == ' ' || *tok == '\t')
2581 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
2584 toklen = end_tok - tok;
2585 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
2587 tok = cond_start = end_tok + 1;
2588 cond = parse_exp_1 (&tok, 0, 0);
2592 error("Junk at end of command.");
2594 if (accessflag == 1) bp_type = bp_read_watchpoint;
2595 else if (accessflag == 2) bp_type = bp_access_watchpoint;
2596 else bp_type = bp_hardware_watchpoint;
2598 mem_cnt = can_use_hardware_watchpoint (val);
2599 if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
2600 error ("Expression cannot be implemented with read/access watchpoint.");
2602 i = hw_watchpoint_used_count (bp_type, &other_type_used);
2603 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
2604 bp_type, i + mem_cnt, other_type_used);
2605 if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
2606 error ("Target does not have this type of hardware watchpoint support.");
2607 if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
2608 error ("Target resources have been allocated for other types of watchpoints.");
2611 /* Now set up the breakpoint. */
2612 b = set_raw_breakpoint (sal);
2613 set_breakpoint_count (breakpoint_count + 1);
2614 b->number = breakpoint_count;
2615 b->disposition = donttouch;
2617 b->exp_valid_block = exp_valid_block;
2618 b->exp_string = savestring (exp_start, exp_end - exp_start);
2622 b->cond_string = savestring (cond_start, cond_end - cond_start);
2626 frame = block_innermost_frame (exp_valid_block);
2629 prev_frame = get_prev_frame (frame);
2630 b->watchpoint_frame = frame->frame;
2633 b->watchpoint_frame = (CORE_ADDR)0;
2635 if (mem_cnt && target_resources_ok > 0)
2638 b->type = bp_watchpoint;
2640 /* If the expression is "local", then set up a "watchpoint scope"
2641 breakpoint at the point where we've left the scope of the watchpoint
2643 if (innermost_block)
2645 struct breakpoint *scope_breakpoint;
2646 struct symtab_and_line scope_sal;
2650 scope_sal.pc = get_frame_pc (prev_frame);
2651 scope_sal.symtab = NULL;
2654 scope_breakpoint = set_raw_breakpoint (scope_sal);
2655 set_breakpoint_count (breakpoint_count + 1);
2656 scope_breakpoint->number = breakpoint_count;
2658 scope_breakpoint->type = bp_watchpoint_scope;
2659 scope_breakpoint->enable = enabled;
2661 /* Automatically delete the breakpoint when it hits. */
2662 scope_breakpoint->disposition = del;
2664 /* Only break in the proper frame (help with recursion). */
2665 scope_breakpoint->frame = prev_frame->frame;
2667 /* Set the address at which we will stop. */
2668 scope_breakpoint->address = get_frame_pc (prev_frame);
2670 /* The scope breakpoint is related to the watchpoint. We
2671 will need to act on them together. */
2672 b->related_breakpoint = scope_breakpoint;
2675 value_free_to_mark (mark);
2679 /* Return count of locations need to be watched and can be handled
2680 in hardware. If the watchpoint can not be handled
2681 in hardware return zero. */
2684 can_use_hardware_watchpoint (v)
2687 int found_memory_cnt = 0;
2689 /* Make sure all the intermediate values are in memory. Also make sure
2690 we found at least one memory expression. Guards against watch 0x12345,
2691 which is meaningless, but could cause errors if one tries to insert a
2692 hardware watchpoint for the constant expression. */
2693 for ( ; v; v = v->next)
2695 if (v->lval == lval_memory)
2697 if (TYPE_LENGTH (VALUE_TYPE (v)) <= REGISTER_SIZE)
2700 else if (v->lval != not_lval && v->modifiable == 0)
2704 /* The expression itself looks suitable for using a hardware
2705 watchpoint, but give the target machine a chance to reject it. */
2706 return found_memory_cnt;
2709 static void watch_command (arg, from_tty)
2713 watch_command_1 (arg, 0, from_tty);
2716 static void rwatch_command (arg, from_tty)
2720 watch_command_1 (arg, 1, from_tty);
2723 static void awatch_command (arg, from_tty)
2727 watch_command_1 (arg, 2, from_tty);
2731 /* Helper routine for the until_command routine in infcmd.c. Here
2732 because it uses the mechanisms of breakpoints. */
2736 until_break_command (arg, from_tty)
2740 struct symtabs_and_lines sals;
2741 struct symtab_and_line sal;
2742 struct frame_info *prev_frame = get_prev_frame (selected_frame);
2743 struct breakpoint *breakpoint;
2744 struct cleanup *old_chain;
2746 clear_proceed_status ();
2748 /* Set a breakpoint where the user wants it and at return from
2751 if (default_breakpoint_valid)
2752 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
2753 default_breakpoint_line, (char ***)NULL);
2755 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, (char ***)NULL);
2757 if (sals.nelts != 1)
2758 error ("Couldn't get information on specified line.");
2761 free ((PTR)sals.sals); /* malloc'd, so freed */
2764 error ("Junk at end of arguments.");
2766 resolve_sal_pc (&sal);
2768 breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
2770 old_chain = make_cleanup(delete_breakpoint, breakpoint);
2772 /* Keep within the current frame */
2776 sal = find_pc_line (prev_frame->pc, 0);
2777 sal.pc = prev_frame->pc;
2778 breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
2779 make_cleanup(delete_breakpoint, breakpoint);
2782 proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
2783 do_cleanups(old_chain);
2787 /* These aren't used; I don't konw what they were for. */
2788 /* Set a breakpoint at the catch clause for NAME. */
2790 catch_breakpoint (name)
2796 disable_catch_breakpoint ()
2801 delete_catch_breakpoint ()
2806 enable_catch_breakpoint ()
2813 struct sal_chain *next;
2814 struct symtab_and_line sal;
2818 /* This isn't used; I don't know what it was for. */
2819 /* For each catch clause identified in ARGS, run FUNCTION
2820 with that clause as an argument. */
2821 static struct symtabs_and_lines
2822 map_catch_names (args, function)
2826 register char *p = args;
2828 struct symtabs_and_lines sals;
2830 struct sal_chain *sal_chain = 0;
2834 error_no_arg ("one or more catch names");
2842 /* Don't swallow conditional part. */
2843 if (p1[0] == 'i' && p1[1] == 'f'
2844 && (p1[2] == ' ' || p1[2] == '\t'))
2850 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
2854 if (*p1 && *p1 != ' ' && *p1 != '\t')
2855 error ("Arguments must be catch names.");
2861 struct sal_chain *next
2862 = (struct sal_chain *)alloca (sizeof (struct sal_chain));
2863 next->next = sal_chain;
2864 next->sal = get_catch_sal (p);
2869 printf_unfiltered ("No catch clause for exception %s.\n", p);
2874 while (*p == ' ' || *p == '\t') p++;
2879 /* This shares a lot of code with `print_frame_label_vars' from stack.c. */
2881 static struct symtabs_and_lines
2882 get_catch_sals (this_level_only)
2883 int this_level_only;
2885 register struct blockvector *bl;
2886 register struct block *block;
2887 int index, have_default = 0;
2889 struct symtabs_and_lines sals;
2890 struct sal_chain *sal_chain = 0;
2891 char *blocks_searched;
2893 /* Not sure whether an error message is always the correct response,
2894 but it's better than a core dump. */
2895 if (selected_frame == NULL)
2896 error ("No selected frame.");
2897 block = get_frame_block (selected_frame);
2898 pc = selected_frame->pc;
2904 error ("No symbol table info available.\n");
2906 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
2907 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2908 memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
2912 CORE_ADDR end = BLOCK_END (block) - 4;
2915 if (bl != blockvector_for_pc (end, &index))
2916 error ("blockvector blotch");
2917 if (BLOCKVECTOR_BLOCK (bl, index) != block)
2918 error ("blockvector botch");
2919 last_index = BLOCKVECTOR_NBLOCKS (bl);
2922 /* Don't print out blocks that have gone by. */
2923 while (index < last_index
2924 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
2927 while (index < last_index
2928 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
2930 if (blocks_searched[index] == 0)
2932 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
2935 register struct symbol *sym;
2937 nsyms = BLOCK_NSYMS (b);
2939 for (i = 0; i < nsyms; i++)
2941 sym = BLOCK_SYM (b, i);
2942 if (STREQ (SYMBOL_NAME (sym), "default"))
2948 if (SYMBOL_CLASS (sym) == LOC_LABEL)
2950 struct sal_chain *next = (struct sal_chain *)
2951 alloca (sizeof (struct sal_chain));
2952 next->next = sal_chain;
2953 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
2957 blocks_searched[index] = 1;
2963 if (sal_chain && this_level_only)
2966 /* After handling the function's top-level block, stop.
2967 Don't continue to its superblock, the block of
2968 per-file symbols. */
2969 if (BLOCK_FUNCTION (block))
2971 block = BLOCK_SUPERBLOCK (block);
2976 struct sal_chain *tmp_chain;
2978 /* Count the number of entries. */
2979 for (index = 0, tmp_chain = sal_chain; tmp_chain;
2980 tmp_chain = tmp_chain->next)
2984 sals.sals = (struct symtab_and_line *)
2985 xmalloc (index * sizeof (struct symtab_and_line));
2986 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
2987 sals.sals[index] = sal_chain->sal;
2993 /* Commands to deal with catching exceptions. */
2996 catch_command_1 (arg, tempflag, from_tty)
3001 /* First, translate ARG into something we can deal with in terms
3004 struct symtabs_and_lines sals;
3005 struct symtab_and_line sal;
3006 register struct expression *cond = 0;
3007 register struct breakpoint *b;
3011 sal.line = sal.pc = sal.end = 0;
3014 /* If no arg given, or if first arg is 'if ', all active catch clauses
3015 are breakpointed. */
3017 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
3018 && (arg[2] == ' ' || arg[2] == '\t')))
3020 /* Grab all active catch clauses. */
3021 sals = get_catch_sals (0);
3025 /* Grab selected catch clauses. */
3026 error ("catch NAME not implemented");
3028 /* This isn't used; I don't know what it was for. */
3029 sals = map_catch_names (arg, catch_breakpoint);
3037 for (i = 0; i < sals.nelts; i++)
3039 resolve_sal_pc (&sals.sals[i]);
3043 if (arg[0] == 'i' && arg[1] == 'f'
3044 && (arg[2] == ' ' || arg[2] == '\t'))
3045 cond = parse_exp_1 ((arg += 2, &arg),
3046 block_for_pc (sals.sals[i].pc), 0);
3048 error ("Junk at end of arguments.");
3053 for (i = 0; i < sals.nelts; i++)
3058 describe_other_breakpoints (sal.pc);
3060 b = set_raw_breakpoint (sal);
3061 set_breakpoint_count (breakpoint_count + 1);
3062 b->number = breakpoint_count;
3063 b->type = bp_breakpoint;
3065 b->enable = enabled;
3066 b->disposition = tempflag ? del : donttouch;
3073 printf_unfiltered ("Multiple breakpoints were set.\n");
3074 printf_unfiltered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
3076 free ((PTR)sals.sals);
3079 /* Used by the gui, could be made a worker for other things. */
3082 set_breakpoint_sal (sal)
3083 struct symtab_and_line sal;
3085 struct breakpoint *b;
3086 b = set_raw_breakpoint (sal);
3087 set_breakpoint_count (breakpoint_count + 1);
3088 b->number = breakpoint_count;
3089 b->type = bp_breakpoint;
3096 /* These aren't used; I don't know what they were for. */
3097 /* Disable breakpoints on all catch clauses described in ARGS. */
3099 disable_catch (args)
3102 /* Map the disable command to catch clauses described in ARGS. */
3105 /* Enable breakpoints on all catch clauses described in ARGS. */
3110 /* Map the disable command to catch clauses described in ARGS. */
3113 /* Delete breakpoints on all catch clauses in the active scope. */
3118 /* Map the delete command to catch clauses described in ARGS. */
3123 catch_command (arg, from_tty)
3127 catch_command_1 (arg, 0, from_tty);
3131 clear_command (arg, from_tty)
3135 register struct breakpoint *b, *b1;
3136 struct symtabs_and_lines sals;
3137 struct symtab_and_line sal;
3138 register struct breakpoint *found;
3143 sals = decode_line_spec (arg, 1);
3147 sals.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
3148 sal.line = default_breakpoint_line;
3149 sal.symtab = default_breakpoint_symtab;
3151 if (sal.symtab == 0)
3152 error ("No source file specified.");
3158 for (i = 0; i < sals.nelts; i++)
3160 /* If exact pc given, clear bpts at that pc.
3161 But if sal.pc is zero, clear all bpts on specified line. */
3163 found = (struct breakpoint *) 0;
3164 while (breakpoint_chain
3166 ? breakpoint_chain->address == sal.pc
3167 : (breakpoint_chain->source_file != NULL
3168 && sal.symtab != NULL
3169 && STREQ (breakpoint_chain->source_file,
3170 sal.symtab->filename)
3171 && breakpoint_chain->line_number == sal.line)))
3173 b1 = breakpoint_chain;
3174 breakpoint_chain = b1->next;
3181 && b->next->type != bp_watchpoint
3182 && b->next->type != bp_hardware_watchpoint
3183 && b->next->type != bp_read_watchpoint
3184 && b->next->type != bp_access_watchpoint
3186 ? b->next->address == sal.pc
3187 : (b->next->source_file != NULL
3188 && sal.symtab != NULL
3189 && STREQ (b->next->source_file, sal.symtab->filename)
3190 && b->next->line_number == sal.line)))
3201 error ("No breakpoint at %s.", arg);
3203 error ("No breakpoint at this line.");
3206 if (found->next) from_tty = 1; /* Always report if deleted more than one */
3207 if (from_tty) printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
3208 breakpoints_changed ();
3211 if (from_tty) printf_unfiltered ("%d ", found->number);
3213 delete_breakpoint (found);
3216 if (from_tty) putchar_unfiltered ('\n');
3218 free ((PTR)sals.sals);
3221 /* Delete breakpoint in BS if they are `delete' breakpoints and
3222 all breakpoints that are marked for deletion, whether hit or not.
3223 This is called after any breakpoint is hit, or after errors. */
3226 breakpoint_auto_delete (bs)
3229 struct breakpoint *b, *temp;
3231 for (; bs; bs = bs->next)
3232 if (bs->breakpoint_at && bs->breakpoint_at->disposition == del
3234 delete_breakpoint (bs->breakpoint_at);
3236 ALL_BREAKPOINTS_SAFE (b, temp)
3238 if (b->disposition == del_at_next_stop)
3239 delete_breakpoint (b);
3243 /* Delete a breakpoint and clean up all traces of it in the data structures. */
3246 delete_breakpoint (bpt)
3247 struct breakpoint *bpt;
3249 register struct breakpoint *b;
3252 if (delete_breakpoint_hook)
3253 delete_breakpoint_hook (bpt);
3256 remove_breakpoint (bpt);
3258 if (breakpoint_chain == bpt)
3259 breakpoint_chain = bpt->next;
3264 b->next = bpt->next;
3268 check_duplicates (bpt->address);
3269 /* If this breakpoint was inserted, and there is another breakpoint
3270 at the same address, we need to insert the other breakpoint. */
3272 && bpt->type != bp_hardware_watchpoint
3273 && bpt->type != bp_read_watchpoint
3274 && bpt->type != bp_access_watchpoint)
3277 if (b->address == bpt->address
3279 && b->enable != disabled
3280 && b->enable != shlib_disabled)
3283 val = target_insert_breakpoint (b->address, b->shadow_contents);
3286 target_terminal_ours_for_output ();
3287 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
3288 memory_error (val, b->address); /* which bombs us out */
3295 free_command_lines (&bpt->commands);
3298 if (bpt->cond_string != NULL)
3299 free (bpt->cond_string);
3300 if (bpt->addr_string != NULL)
3301 free (bpt->addr_string);
3302 if (bpt->exp != NULL)
3304 if (bpt->exp_string != NULL)
3305 free (bpt->exp_string);
3306 if (bpt->val != NULL)
3307 value_free (bpt->val);
3308 if (bpt->source_file != NULL)
3309 free (bpt->source_file);
3311 /* Be sure no bpstat's are pointing at it after it's been freed. */
3312 /* FIXME, how can we find all bpstat's?
3313 We just check stop_bpstat for now. */
3314 for (bs = stop_bpstat; bs; bs = bs->next)
3315 if (bs->breakpoint_at == bpt)
3316 bs->breakpoint_at = NULL;
3321 delete_command (arg, from_tty)
3328 /* Ask user only if there are some breakpoints to delete. */
3330 || (breakpoint_chain && query ("Delete all breakpoints? ")))
3332 /* No arg; clear all breakpoints. */
3333 while (breakpoint_chain)
3334 delete_breakpoint (breakpoint_chain);
3338 map_breakpoint_numbers (arg, delete_breakpoint);
3341 /* Reset a breakpoint given it's struct breakpoint * BINT.
3342 The value we return ends up being the return value from catch_errors.
3343 Unused in this case. */
3346 breakpoint_re_set_one (bint)
3349 struct breakpoint *b = (struct breakpoint *)bint; /* get past catch_errs */
3352 struct symtabs_and_lines sals;
3354 enum enable save_enable;
3359 case bp_hardware_breakpoint:
3360 if (b->addr_string == NULL)
3362 /* Anything without a string can't be re-set. */
3363 delete_breakpoint (b);
3366 /* In case we have a problem, disable this breakpoint. We'll restore
3367 its status if we succeed. */
3368 save_enable = b->enable;
3369 b->enable = disabled;
3371 set_language (b->language);
3372 input_radix = b->input_radix;
3374 sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0, (char ***)NULL);
3375 for (i = 0; i < sals.nelts; i++)
3377 resolve_sal_pc (&sals.sals[i]);
3379 /* Reparse conditions, they might contain references to the
3381 if (b->cond_string != NULL)
3385 free ((PTR)b->cond);
3386 b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
3389 /* We need to re-set the breakpoint if the address changes...*/
3390 if (b->address != sals.sals[i].pc
3391 /* ...or new and old breakpoints both have source files, and
3392 the source file name or the line number changes... */
3393 || (b->source_file != NULL
3394 && sals.sals[i].symtab != NULL
3395 && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
3396 || b->line_number != sals.sals[i].line)
3398 /* ...or we switch between having a source file and not having
3400 || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
3403 if (b->source_file != NULL)
3404 free (b->source_file);
3405 if (sals.sals[i].symtab == NULL)
3406 b->source_file = NULL;
3409 savestring (sals.sals[i].symtab->filename,
3410 strlen (sals.sals[i].symtab->filename));
3411 b->line_number = sals.sals[i].line;
3412 b->address = sals.sals[i].pc;
3414 check_duplicates (b->address);
3418 /* Might be better to do this just once per breakpoint_re_set,
3419 rather than once for every breakpoint. */
3420 breakpoints_changed ();
3422 b->enable = save_enable; /* Restore it, this worked. */
3424 free ((PTR)sals.sals);
3428 case bp_hardware_watchpoint:
3429 case bp_read_watchpoint:
3430 case bp_access_watchpoint:
3431 innermost_block = NULL;
3432 /* The issue arises of what context to evaluate this in. The same
3433 one as when it was set, but what does that mean when symbols have
3434 been re-read? We could save the filename and functionname, but
3435 if the context is more local than that, the best we could do would
3436 be something like how many levels deep and which index at that
3437 particular level, but that's going to be less stable than filenames
3438 or functionnames. */
3439 /* So for now, just use a global context. */
3442 b->exp = parse_expression (b->exp_string);
3443 b->exp_valid_block = innermost_block;
3444 mark = value_mark ();
3446 value_free (b->val);
3447 b->val = evaluate_expression (b->exp);
3448 release_value (b->val);
3449 if (VALUE_LAZY (b->val))
3450 value_fetch_lazy (b->val);
3452 if (b->cond_string != NULL)
3456 free ((PTR)b->cond);
3457 b->cond = parse_exp_1 (&s, (struct block *)0, 0);
3459 if (b->enable == enabled)
3461 value_free_to_mark (mark);
3465 printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
3467 /* Delete longjmp breakpoints, they will be reset later by
3468 breakpoint_re_set. */
3470 case bp_longjmp_resume:
3471 delete_breakpoint (b);
3474 /* This breakpoint is special, it's set up when the inferior
3475 starts and we really don't want to touch it. */
3476 case bp_shlib_event:
3478 /* Keep temporary breakpoints, which can be encountered when we step
3479 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
3480 Otherwise these should have been blown away via the cleanup chain
3481 or by breakpoint_init_inferior when we rerun the executable. */
3484 case bp_watchpoint_scope:
3486 case bp_step_resume:
3493 /* Re-set all breakpoints after symbols have been re-loaded. */
3495 breakpoint_re_set ()
3497 struct breakpoint *b, *temp;
3498 enum language save_language;
3499 int save_input_radix;
3500 static char message1[] = "Error in re-setting breakpoint %d:\n";
3501 char message[sizeof (message1) + 30 /* slop */];
3503 save_language = current_language->la_language;
3504 save_input_radix = input_radix;
3505 ALL_BREAKPOINTS_SAFE (b, temp)
3507 sprintf (message, message1, b->number); /* Format possible error msg */
3508 catch_errors (breakpoint_re_set_one, (char *) b, message,
3511 set_language (save_language);
3512 input_radix = save_input_radix;
3514 #ifdef GET_LONGJMP_TARGET
3515 create_longjmp_breakpoint ("longjmp");
3516 create_longjmp_breakpoint ("_longjmp");
3517 create_longjmp_breakpoint ("siglongjmp");
3518 create_longjmp_breakpoint (NULL);
3522 /* Took this out (temporarily at least), since it produces an extra
3523 blank line at startup. This messes up the gdbtests. -PB */
3524 /* Blank line to finish off all those mention() messages we just printed. */
3525 printf_filtered ("\n");
3529 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
3530 If from_tty is nonzero, it prints a message to that effect,
3531 which ends with a period (no newline). */
3534 set_ignore_count (bptnum, count, from_tty)
3535 int bptnum, count, from_tty;
3537 register struct breakpoint *b;
3543 if (b->number == bptnum)
3545 b->ignore_count = count;
3548 else if (count == 0)
3549 printf_filtered ("Will stop next time breakpoint %d is reached.",
3551 else if (count == 1)
3552 printf_filtered ("Will ignore next crossing of breakpoint %d.",
3555 printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
3557 breakpoints_changed ();
3561 error ("No breakpoint number %d.", bptnum);
3564 /* Clear the ignore counts of all breakpoints. */
3566 breakpoint_clear_ignore_counts ()
3568 struct breakpoint *b;
3571 b->ignore_count = 0;
3574 /* Command to set ignore-count of breakpoint N to COUNT. */
3577 ignore_command (args, from_tty)
3585 error_no_arg ("a breakpoint number");
3587 num = get_number (&p);
3590 error ("Second argument (specified ignore-count) is missing.");
3592 set_ignore_count (num,
3593 longest_to_int (value_as_long (parse_and_eval (p))),
3595 printf_filtered ("\n");
3596 breakpoints_changed ();
3599 /* Call FUNCTION on each of the breakpoints
3600 whose numbers are given in ARGS. */
3603 map_breakpoint_numbers (args, function)
3605 void (*function) PARAMS ((struct breakpoint *));
3607 register char *p = args;
3610 register struct breakpoint *b;
3613 error_no_arg ("one or more breakpoint numbers");
3619 num = get_number (&p1);
3622 if (b->number == num)
3624 struct breakpoint *related_breakpoint = b->related_breakpoint;
3626 if (related_breakpoint)
3627 function (related_breakpoint);
3630 printf_unfiltered ("No breakpoint number %d.\n", num);
3637 disable_breakpoint (bpt)
3638 struct breakpoint *bpt;
3640 /* Never disable a watchpoint scope breakpoint; we want to
3641 hit them when we leave scope so we can delete both the
3642 watchpoint and its scope breakpoint at that time. */
3643 if (bpt->type == bp_watchpoint_scope)
3646 bpt->enable = disabled;
3648 check_duplicates (bpt->address);
3650 if (modify_breakpoint_hook)
3651 modify_breakpoint_hook (bpt);
3656 disable_command (args, from_tty)
3660 register struct breakpoint *bpt;
3662 ALL_BREAKPOINTS (bpt)
3666 case bp_hardware_breakpoint:
3668 case bp_hardware_watchpoint:
3669 case bp_read_watchpoint:
3670 case bp_access_watchpoint:
3671 disable_breakpoint (bpt);
3676 map_breakpoint_numbers (args, disable_breakpoint);
3680 do_enable_breakpoint (bpt, disposition)
3681 struct breakpoint *bpt;
3682 enum bpdisp disposition;
3684 struct frame_info *save_selected_frame = NULL;
3685 int save_selected_frame_level = -1;
3686 int target_resources_ok, other_type_used;
3689 if (bpt->type == bp_hardware_breakpoint)
3692 i = hw_breakpoint_used_count();
3693 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
3694 bp_hardware_breakpoint, i+1, 0);
3695 if (target_resources_ok == 0)
3696 error ("No hardware breakpoint support in the target.");
3697 else if (target_resources_ok < 0)
3698 error ("Hardware breakpoints used exceeds limit.");
3701 bpt->enable = enabled;
3702 bpt->disposition = disposition;
3703 check_duplicates (bpt->address);
3704 breakpoints_changed ();
3706 if (bpt->type == bp_watchpoint || bpt->type == bp_hardware_watchpoint ||
3707 bpt->type == bp_read_watchpoint || bpt->type == bp_access_watchpoint)
3709 if (bpt->exp_valid_block != NULL)
3711 struct frame_info *fr =
3712 find_frame_addr_in_frame_chain (bpt->watchpoint_frame);
3716 Cannot enable watchpoint %d because the block in which its expression\n\
3717 is valid is not currently in scope.\n", bpt->number);
3718 bpt->enable = disabled;
3722 save_selected_frame = selected_frame;
3723 save_selected_frame_level = selected_frame_level;
3724 select_frame (fr, -1);
3727 value_free (bpt->val);
3728 mark = value_mark ();
3729 bpt->val = evaluate_expression (bpt->exp);
3730 release_value (bpt->val);
3731 if (VALUE_LAZY (bpt->val))
3732 value_fetch_lazy (bpt->val);
3734 if (bpt->type == bp_hardware_watchpoint ||
3735 bpt->type == bp_read_watchpoint ||
3736 bpt->type == bp_access_watchpoint)
3738 int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
3739 int mem_cnt = can_use_hardware_watchpoint (bpt->val);
3741 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
3742 bpt->type, i + mem_cnt, other_type_used);
3743 /* we can consider of type is bp_hardware_watchpoint, convert to
3744 bp_watchpoint in the following condition */
3745 if (target_resources_ok < 0)
3748 Cannot enable watchpoint %d because target watch resources\n\
3749 have been allocated for other watchpoints.\n", bpt->number);
3750 bpt->enable = disabled;
3751 value_free_to_mark (mark);
3756 if (save_selected_frame_level >= 0)
3757 select_frame (save_selected_frame, save_selected_frame_level);
3758 value_free_to_mark (mark);
3760 if (modify_breakpoint_hook)
3761 modify_breakpoint_hook (bpt);
3765 enable_breakpoint (bpt)
3766 struct breakpoint *bpt;
3768 do_enable_breakpoint (bpt, donttouch);
3771 /* The enable command enables the specified breakpoints (or all defined
3772 breakpoints) so they once again become (or continue to be) effective
3773 in stopping the inferior. */
3777 enable_command (args, from_tty)
3781 register struct breakpoint *bpt;
3783 ALL_BREAKPOINTS (bpt)
3787 case bp_hardware_breakpoint:
3789 case bp_hardware_watchpoint:
3790 case bp_read_watchpoint:
3791 case bp_access_watchpoint:
3792 enable_breakpoint (bpt);
3797 map_breakpoint_numbers (args, enable_breakpoint);
3801 enable_once_breakpoint (bpt)
3802 struct breakpoint *bpt;
3804 do_enable_breakpoint (bpt, disable);
3809 enable_once_command (args, from_tty)
3813 map_breakpoint_numbers (args, enable_once_breakpoint);
3817 enable_delete_breakpoint (bpt)
3818 struct breakpoint *bpt;
3820 do_enable_breakpoint (bpt, del);
3825 enable_delete_command (args, from_tty)
3829 map_breakpoint_numbers (args, enable_delete_breakpoint);
3832 /* Use default_breakpoint_'s, or nothing if they aren't valid. */
3834 struct symtabs_and_lines
3835 decode_line_spec_1 (string, funfirstline)
3839 struct symtabs_and_lines sals;
3841 error ("Empty line specification.");
3842 if (default_breakpoint_valid)
3843 sals = decode_line_1 (&string, funfirstline,
3844 default_breakpoint_symtab, default_breakpoint_line,
3847 sals = decode_line_1 (&string, funfirstline,
3848 (struct symtab *)NULL, 0, (char ***)NULL);
3850 error ("Junk at end of line specification: %s", string);
3855 _initialize_breakpoint ()
3857 breakpoint_chain = 0;
3858 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
3859 before a breakpoint is set. */
3860 breakpoint_count = 0;
3862 add_com ("ignore", class_breakpoint, ignore_command,
3863 "Set ignore-count of breakpoint number N to COUNT.\n\
3864 Usage is `ignore N COUNT'.");
3866 add_com ("commands", class_breakpoint, commands_command,
3867 "Set commands to be executed when a breakpoint is hit.\n\
3868 Give breakpoint number as argument after \"commands\".\n\
3869 With no argument, the targeted breakpoint is the last one set.\n\
3870 The commands themselves follow starting on the next line.\n\
3871 Type a line containing \"end\" to indicate the end of them.\n\
3872 Give \"silent\" as the first line to make the breakpoint silent;\n\
3873 then no output is printed when it is hit, except what the commands print.");
3875 add_com ("condition", class_breakpoint, condition_command,
3876 "Specify breakpoint number N to break only if COND is true.\n\
3877 Usage is `condition N COND', where N is an integer and COND is an\n\
3878 expression to be evaluated whenever breakpoint N is reached. ");
3880 add_com ("tbreak", class_breakpoint, tbreak_command,
3881 "Set a temporary breakpoint. Args like \"break\" command.\n\
3882 Like \"break\" except the breakpoint is only temporary,\n\
3883 so it will be deleted when hit. Equivalent to \"break\" followed\n\
3884 by using \"enable delete\" on the breakpoint number.");
3886 add_com ("hbreak", class_breakpoint, hbreak_command,
3887 "Set a hardware assisted breakpoint. Args like \"break\" command.\n\
3888 Like \"break\" except the breakpoint requires hardware support,\n\
3889 some target hardware may not have this support.");
3891 add_com ("thbreak", class_breakpoint, thbreak_command,
3892 "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
3893 Like \"hbreak\" except the breakpoint is only temporary,\n\
3894 so it will be deleted when hit.");
3896 add_prefix_cmd ("enable", class_breakpoint, enable_command,
3897 "Enable some breakpoints.\n\
3898 Give breakpoint numbers (separated by spaces) as arguments.\n\
3899 With no subcommand, breakpoints are enabled until you command otherwise.\n\
3900 This is used to cancel the effect of the \"disable\" command.\n\
3901 With a subcommand you can enable temporarily.",
3902 &enablelist, "enable ", 1, &cmdlist);
3904 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
3905 "Enable some breakpoints.\n\
3906 Give breakpoint numbers (separated by spaces) as arguments.\n\
3907 This is used to cancel the effect of the \"disable\" command.\n\
3908 May be abbreviated to simply \"enable\".\n",
3909 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
3911 add_cmd ("once", no_class, enable_once_command,
3912 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
3913 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
3916 add_cmd ("delete", no_class, enable_delete_command,
3917 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
3918 If a breakpoint is hit while enabled in this fashion, it is deleted.",
3921 add_cmd ("delete", no_class, enable_delete_command,
3922 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
3923 If a breakpoint is hit while enabled in this fashion, it is deleted.",
3926 add_cmd ("once", no_class, enable_once_command,
3927 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
3928 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
3931 add_prefix_cmd ("disable", class_breakpoint, disable_command,
3932 "Disable some breakpoints.\n\
3933 Arguments are breakpoint numbers with spaces in between.\n\
3934 To disable all breakpoints, give no argument.\n\
3935 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
3936 &disablelist, "disable ", 1, &cmdlist);
3937 add_com_alias ("dis", "disable", class_breakpoint, 1);
3938 add_com_alias ("disa", "disable", class_breakpoint, 1);
3940 add_cmd ("breakpoints", class_alias, disable_command,
3941 "Disable some breakpoints.\n\
3942 Arguments are breakpoint numbers with spaces in between.\n\
3943 To disable all breakpoints, give no argument.\n\
3944 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
3945 This command may be abbreviated \"disable\".",
3948 add_prefix_cmd ("delete", class_breakpoint, delete_command,
3949 "Delete some breakpoints or auto-display expressions.\n\
3950 Arguments are breakpoint numbers with spaces in between.\n\
3951 To delete all breakpoints, give no argument.\n\
3953 Also a prefix command for deletion of other GDB objects.\n\
3954 The \"unset\" command is also an alias for \"delete\".",
3955 &deletelist, "delete ", 1, &cmdlist);
3956 add_com_alias ("d", "delete", class_breakpoint, 1);
3958 add_cmd ("breakpoints", class_alias, delete_command,
3959 "Delete some breakpoints or auto-display expressions.\n\
3960 Arguments are breakpoint numbers with spaces in between.\n\
3961 To delete all breakpoints, give no argument.\n\
3962 This command may be abbreviated \"delete\".",
3965 add_com ("clear", class_breakpoint, clear_command,
3966 concat ("Clear breakpoint at specified line or function.\n\
3967 Argument may be line number, function name, or \"*\" and an address.\n\
3968 If line number is specified, all breakpoints in that line are cleared.\n\
3969 If function is specified, breakpoints at beginning of function are cleared.\n\
3970 If an address is specified, breakpoints at that address are cleared.\n\n",
3971 "With no argument, clears all breakpoints in the line that the selected frame\n\
3974 See also the \"delete\" command which clears breakpoints by number.", NULL));
3976 add_com ("break", class_breakpoint, break_command,
3977 concat ("Set breakpoint at specified line or function.\n\
3978 Argument may be line number, function name, or \"*\" and an address.\n\
3979 If line number is specified, break at start of code for that line.\n\
3980 If function is specified, break at start of code for that function.\n\
3981 If an address is specified, break at that exact address.\n",
3982 "With no arg, uses current execution address of selected stack frame.\n\
3983 This is useful for breaking on return to a stack frame.\n\
3985 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
3987 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
3988 add_com_alias ("b", "break", class_run, 1);
3989 add_com_alias ("br", "break", class_run, 1);
3990 add_com_alias ("bre", "break", class_run, 1);
3991 add_com_alias ("brea", "break", class_run, 1);
3993 add_info ("breakpoints", breakpoints_info,
3994 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
3995 The \"Type\" column indicates one of:\n\
3996 \tbreakpoint - normal breakpoint\n\
3997 \twatchpoint - watchpoint\n\
3998 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
3999 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
4000 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
4001 address and file/line number respectively.\n\n",
4002 "Convenience variable \"$_\" and default examine address for \"x\"\n\
4003 are set to the address of the last breakpoint listed.\n\n\
4004 Convenience variable \"$bpnum\" contains the number of the last\n\
4005 breakpoint set.", NULL));
4007 #if MAINTENANCE_CMDS
4009 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
4010 concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
4011 The \"Type\" column indicates one of:\n\
4012 \tbreakpoint - normal breakpoint\n\
4013 \twatchpoint - watchpoint\n\
4014 \tlongjmp - internal breakpoint used to step through longjmp()\n\
4015 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
4016 \tuntil - internal breakpoint used by the \"until\" command\n\
4017 \tfinish - internal breakpoint used by the \"finish\" command\n",
4018 "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
4019 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
4020 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
4021 address and file/line number respectively.\n\n",
4022 "Convenience variable \"$_\" and default examine address for \"x\"\n\
4023 are set to the address of the last breakpoint listed.\n\n\
4024 Convenience variable \"$bpnum\" contains the number of the last\n\
4025 breakpoint set.", NULL),
4026 &maintenanceinfolist);
4028 #endif /* MAINTENANCE_CMDS */
4030 add_com ("catch", class_breakpoint, catch_command,
4031 "Set breakpoints to catch exceptions that are raised.\n\
4032 Argument may be a single exception to catch, multiple exceptions\n\
4033 to catch, or the default exception \"default\". If no arguments\n\
4034 are given, breakpoints are set at all exception handlers catch clauses\n\
4035 within the current scope.\n\
4037 A condition specified for the catch applies to all breakpoints set\n\
4038 with this command\n\
4040 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
4042 add_com ("watch", class_breakpoint, watch_command,
4043 "Set a watchpoint for an expression.\n\
4044 A watchpoint stops execution of your program whenever the value of\n\
4045 an expression changes.");
4047 add_com ("rwatch", class_breakpoint, rwatch_command,
4048 "Set a read watchpoint for an expression.\n\
4049 A watchpoint stops execution of your program whenever the value of\n\
4050 an expression is read.");
4052 add_com ("awatch", class_breakpoint, awatch_command,
4053 "Set a watchpoint for an expression.\n\
4054 A watchpoint stops execution of your program whenever the value of\n\
4055 an expression is either read or written.");
4057 add_info ("watchpoints", breakpoints_info,
4058 "Synonym for ``info breakpoints''.");