1 /* Everything about breakpoints, for GDB.
2 Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 1998
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"
42 /* Prototypes for local functions. */
45 catch_command_1 PARAMS ((char *, int, int));
48 enable_delete_command PARAMS ((char *, int));
51 enable_delete_breakpoint PARAMS ((struct breakpoint *));
54 enable_once_command PARAMS ((char *, int));
57 enable_once_breakpoint PARAMS ((struct breakpoint *));
60 disable_command PARAMS ((char *, int));
63 enable_command PARAMS ((char *, int));
66 map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
69 ignore_command PARAMS ((char *, int));
72 breakpoint_re_set_one PARAMS ((char *));
75 clear_command PARAMS ((char *, int));
78 catch_command PARAMS ((char *, int));
81 handle_gnu_4_16_catch_command PARAMS ((char *, int, int));
83 static struct symtabs_and_lines
84 get_catch_sals PARAMS ((int));
87 watch_command PARAMS ((char *, int));
90 can_use_hardware_watchpoint PARAMS ((struct value *));
93 tbreak_command PARAMS ((char *, int));
96 break_command_1 PARAMS ((char *, int, int));
99 mention PARAMS ((struct breakpoint *));
102 set_raw_breakpoint PARAMS ((struct symtab_and_line));
105 check_duplicates PARAMS ((CORE_ADDR, asection *));
108 describe_other_breakpoints PARAMS ((CORE_ADDR, asection *));
111 breakpoints_info PARAMS ((char *, int));
114 breakpoint_1 PARAMS ((int, int));
117 bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
120 breakpoint_cond_eval PARAMS ((char *));
123 cleanup_executing_breakpoints PARAMS ((PTR));
126 commands_command PARAMS ((char *, int));
129 condition_command PARAMS ((char *, int));
132 get_number PARAMS ((char **));
135 set_breakpoint_count PARAMS ((int));
138 static struct breakpoint *
139 create_temp_exception_breakpoint PARAMS ((CORE_ADDR));
148 remove_breakpoint PARAMS ((struct breakpoint *, insertion_state_t));
150 static int print_it_normal PARAMS ((bpstat));
153 enum exception_event_kind kind;
155 } args_for_catchpoint_enable;
157 static int watchpoint_check PARAMS ((char *));
159 static struct symtab_and_line *
160 cover_target_enable_exception_callback PARAMS ((args_for_catchpoint_enable *));
162 static int print_it_done PARAMS ((bpstat));
164 static int print_it_noop PARAMS ((bpstat));
166 static void maintenance_info_breakpoints PARAMS ((char *, int));
168 #ifdef GET_LONGJMP_TARGET
169 static void create_longjmp_breakpoint PARAMS ((char *));
172 static int hw_breakpoint_used_count PARAMS ((void));
174 static int hw_watchpoint_used_count PARAMS ((enum bptype, int *));
176 static void hbreak_command PARAMS ((char *, int));
178 static void thbreak_command PARAMS ((char *, int));
180 static void watch_command_1 PARAMS ((char *, int, int));
182 static void rwatch_command PARAMS ((char *, int));
184 static void awatch_command PARAMS ((char *, int));
186 static void do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
188 /* Prototypes for exported functions. */
191 awatch_command PARAMS ((char *, int));
194 do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
196 /* If FALSE, gdb will not use hardware support for watchpoints, even
197 if such is available. */
198 static int can_use_hw_watchpoints;
200 void delete_command PARAMS ((char *, int));
202 void _initialize_breakpoint PARAMS ((void));
204 void set_breakpoint_count PARAMS ((int));
206 extern int addressprint; /* Print machine addresses? */
208 #if defined (GET_LONGJMP_TARGET) || defined (SOLIB_ADD)
209 static int internal_breakpoint_number = -1;
212 /* Are we executing breakpoint commands? */
213 static int executing_breakpoint_commands;
215 /* Walk the following statement or block through all breakpoints.
216 ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
219 #define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
221 #define ALL_BREAKPOINTS_SAFE(b,tmp) \
222 for (b = breakpoint_chain; \
223 b? (tmp=b->next, 1): 0; \
226 /* True if SHIFT_INST_REGS defined, false otherwise. */
228 int must_shift_inst_regs =
229 #if defined(SHIFT_INST_REGS)
236 /* True if breakpoint hit counts should be displayed in breakpoint info. */
238 int show_breakpoint_hit_counts = 1;
240 /* Chain of all breakpoints defined. */
242 struct breakpoint *breakpoint_chain;
244 /* Number of last breakpoint made. */
246 int breakpoint_count;
248 /* Pointer to current exception event record */
249 static struct exception_event_record * current_exception_event;
251 /* Indicator of whether exception catchpoints should be nuked
252 between runs of a program */
253 int exception_catchpoints_are_fragile = 0;
255 /* Indicator of when exception catchpoints set-up should be
256 reinitialized -- e.g. when program is re-run */
257 int exception_support_initialized = 0;
260 /* Set breakpoint count to NUM. */
263 set_breakpoint_count (num)
266 breakpoint_count = num;
267 set_internalvar (lookup_internalvar ("bpnum"),
268 value_from_longest (builtin_type_int, (LONGEST) num));
271 /* Used in run_command to zero the hit count when a new run starts. */
274 clear_breakpoint_hit_counts ()
276 struct breakpoint *b;
282 /* Default address, symtab and line to put a breakpoint at
283 for "break" command with no arg.
284 if default_breakpoint_valid is zero, the other three are
285 not valid, and "break" with no arg is an error.
287 This set by print_stack_frame, which calls set_default_breakpoint. */
289 int default_breakpoint_valid;
290 CORE_ADDR default_breakpoint_address;
291 struct symtab *default_breakpoint_symtab;
292 int default_breakpoint_line;
294 /* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
295 Advance *PP after the string and any trailing whitespace.
297 Currently the string can either be a number or "$" followed by the name
298 of a convenience variable. Making it an expression wouldn't work well
299 for map_breakpoint_numbers (e.g. "4 + 5 + 6"). */
308 /* Empty line means refer to the last breakpoint. */
309 return breakpoint_count;
312 /* Make a copy of the name, so we can null-terminate it
313 to pass to lookup_internalvar(). */
318 while (isalnum (*p) || *p == '_')
320 varname = (char *) alloca (p - start + 1);
321 strncpy (varname, start, p - start);
322 varname[p - start] = '\0';
323 val = value_of_internalvar (lookup_internalvar (varname));
324 if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
326 "Convenience variables used to specify breakpoints must have integer values."
328 retval = (int) value_as_long (val);
334 while (*p >= '0' && *p <= '9')
337 /* There is no number here. (e.g. "cond a == b"). */
338 error_no_arg ("breakpoint number");
341 if (!(isspace (*p) || *p == '\0'))
342 error ("breakpoint number expected");
349 /* condition N EXP -- set break condition of breakpoint N to EXP. */
352 condition_command (arg, from_tty)
356 register struct breakpoint *b;
361 error_no_arg ("breakpoint number");
364 bnum = get_number (&p);
367 if (b->number == bnum)
374 if (b->cond_string != NULL)
375 free ((PTR)b->cond_string);
380 b->cond_string = NULL;
382 printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
387 /* I don't know if it matters whether this is the string the user
388 typed in or the decompiled expression. */
389 b->cond_string = savestring (arg, strlen (arg));
390 b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
392 error ("Junk at end of expression");
394 breakpoints_changed ();
398 error ("No breakpoint number %d.", bnum);
403 commands_command (arg, from_tty)
407 register struct breakpoint *b;
410 struct command_line *l;
412 /* If we allowed this, we would have problems with when to
413 free the storage, if we change the commands currently
416 if (executing_breakpoint_commands)
417 error ("Can't use the \"commands\" command among a breakpoint's commands.");
420 bnum = get_number (&p);
422 error ("Unexpected extra arguments following breakpoint number.");
425 if (b->number == bnum)
428 sprintf (tmpbuf, "Type commands for when breakpoint %d is hit, one per line.", bnum);
429 l = read_command_lines (tmpbuf, from_tty);
430 free_command_lines (&b->commands);
432 breakpoints_changed ();
435 error ("No breakpoint number %d.", bnum);
438 /* Like target_read_memory() but if breakpoints are inserted, return
439 the shadow contents instead of the breakpoints themselves.
441 Read "memory data" from whatever target or inferior we have.
442 Returns zero if successful, errno value if not. EIO is used
443 for address out of bounds. If breakpoints are inserted, returns
444 shadow contents, not the breakpoints themselves. From breakpoint.c. */
447 read_memory_nobpt (memaddr, myaddr, len)
453 struct breakpoint *b;
454 CORE_ADDR bp_addr = 0;
457 if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
458 /* No breakpoints on this machine. */
459 return target_read_memory (memaddr, myaddr, len);
463 if (b->type == bp_none)
464 warning ("attempted to read through apparently deleted breakpoint #%d?\n", b->number);
466 /* memory breakpoint? */
467 if (b->type == bp_watchpoint
468 || b->type == bp_hardware_watchpoint
469 || b->type == bp_read_watchpoint
470 || b->type == bp_access_watchpoint)
475 /* Addresses and length of the part of the breakpoint that
477 /* XXXX The m68k, sh and h8300 have different local and remote
478 breakpoint values. BREAKPOINT_FROM_PC still manages to
479 correctly determine the breakpoints memory address and size
480 for these targets. */
481 bp_addr = b->address;
483 if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
488 if (bp_addr + bp_size <= memaddr)
489 /* The breakpoint is entirely before the chunk of memory we
492 if (bp_addr >= memaddr + len)
493 /* The breakpoint is entirely after the chunk of memory we are
496 /* Copy the breakpoint from the shadow contents, and recurse for
497 the things before and after. */
499 /* Offset within shadow_contents. */
502 if (bp_addr < memaddr)
504 /* Only copy the second part of the breakpoint. */
505 bp_size -= memaddr - bp_addr;
506 bptoffset = memaddr - bp_addr;
510 if (bp_addr + bp_size > memaddr + len)
512 /* Only copy the first part of the breakpoint. */
513 bp_size -= (bp_addr + bp_size) - (memaddr + len);
516 memcpy (myaddr + bp_addr - memaddr,
517 b->shadow_contents + bptoffset, bp_size);
519 if (bp_addr > memaddr)
521 /* Copy the section of memory before the breakpoint. */
522 status = read_memory_nobpt (memaddr, myaddr, bp_addr - memaddr);
527 if (bp_addr + bp_size < memaddr + len)
529 /* Copy the section of memory after the breakpoint. */
530 status = read_memory_nobpt
532 myaddr + bp_addr + bp_size - memaddr,
533 memaddr + len - (bp_addr + bp_size));
540 /* Nothing overlaps. Just call read_memory_noerr. */
541 return target_read_memory (memaddr, myaddr, len);
545 /* insert_breakpoints is used when starting or continuing the program.
546 remove_breakpoints is used when the program stops.
547 Both return zero if successful,
548 or an `errno' value if could not write the inferior. */
551 insert_breakpoints ()
553 register struct breakpoint *b, *temp;
555 int disabled_breaks = 0;
557 static char message1[] = "Error inserting catchpoint %d:\n";
558 static char message[sizeof (message1) + 30];
561 ALL_BREAKPOINTS_SAFE (b, temp)
563 if (b->type != bp_watchpoint
564 && b->type != bp_hardware_watchpoint
565 && b->type != bp_read_watchpoint
566 && b->type != bp_access_watchpoint
567 && b->type != bp_catch_fork
568 && b->type != bp_catch_vfork
569 && b->type != bp_catch_exec
570 && b->type != bp_catch_throw
571 && b->type != bp_catch_catch
572 && b->enable != disabled
573 && b->enable != shlib_disabled
574 && b->enable != call_disabled
578 if (b->type == bp_hardware_breakpoint)
579 val = target_insert_hw_breakpoint(b->address, b->shadow_contents);
582 /* Check to see if breakpoint is in an overlay section;
583 if so, we should set the breakpoint at the LMA address.
584 Only if the section is currently mapped should we ALSO
585 set a break at the VMA address. */
586 if (overlay_debugging && b->section &&
587 section_is_overlay (b->section))
591 addr = overlay_unmapped_address (b->address, b->section);
592 val = target_insert_breakpoint (addr, b->shadow_contents);
593 /* This would be the time to check val, to see if the
594 breakpoint write to the load address succeeded.
595 However, this might be an ordinary occurrance, eg. if
596 the unmapped overlay is in ROM. */
597 val = 0; /* in case unmapped address failed */
598 if (section_is_mapped (b->section))
599 val = target_insert_breakpoint (b->address,
602 else /* ordinary (non-overlay) address */
603 val = target_insert_breakpoint(b->address, b->shadow_contents);
607 /* Can't set the breakpoint. */
608 #if defined (DISABLE_UNSETTABLE_BREAK)
609 if (DISABLE_UNSETTABLE_BREAK (b->address))
611 /* See also: disable_breakpoints_in_shlibs. */
613 b->enable = shlib_disabled;
614 if (!disabled_breaks)
616 target_terminal_ours_for_output ();
617 fprintf_unfiltered (gdb_stderr,
618 "Cannot insert breakpoint %d:\n", b->number);
619 printf_filtered ("Temporarily disabling shared library breakpoints:\n");
622 printf_filtered ("%d ", b->number);
627 target_terminal_ours_for_output ();
628 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
629 #ifdef ONE_PROCESS_WRITETEXT
630 fprintf_unfiltered (gdb_stderr,
631 "The same program may be running in another process.\n");
633 memory_error (val, b->address); /* which bombs us out */
639 else if (ep_is_exception_catchpoint (b)
640 && b->enable != disabled
641 && b->enable != shlib_disabled
642 && b->enable != call_disabled
647 /* If we get here, we must have a callback mechanism for exception
648 events -- with g++ style embedded label support, we insert
649 ordinary breakpoints and not catchpoints. */
650 struct symtab_and_line * sal;
651 args_for_catchpoint_enable args;
652 sprintf (message, message1, b->number); /* Format possible error message */
654 val = target_insert_breakpoint(b->address, b->shadow_contents);
657 /* Couldn't set breakpoint for some reason */
658 target_terminal_ours_for_output ();
659 fprintf_unfiltered (gdb_stderr,
660 "Cannot insert catchpoint %d; disabling it\n", b->number);
661 b->enable = disabled;
665 /* Bp set, now make sure callbacks are enabled */
666 args.kind = b->type == bp_catch_catch ? EX_EVENT_CATCH : EX_EVENT_THROW;
668 sal = catch_errors ((int (*) PARAMS ((char *))) cover_target_enable_exception_callback,
670 message, RETURN_MASK_ALL);
671 if (sal && (sal != (struct symtab_and_line *) -1))
675 /* Check if something went wrong; sal == 0 can be ignored */
676 if (sal == (struct symtab_and_line *) -1)
678 /* something went wrong */
679 target_terminal_ours_for_output ();
680 fprintf_unfiltered (gdb_stderr, "Cannot insert catchpoint %d; disabling it\n", b->number);
681 b->enable = disabled;
686 else if ((b->type == bp_hardware_watchpoint ||
687 b->type == bp_read_watchpoint ||
688 b->type == bp_access_watchpoint)
689 && b->enable == enabled
693 struct frame_info *saved_frame;
694 int saved_level, within_current_scope;
695 value_ptr mark = value_mark ();
698 /* Save the current frame and level so we can restore it after
699 evaluating the watchpoint expression on its own frame. */
700 saved_frame = selected_frame;
701 saved_level = selected_frame_level;
703 /* Determine if the watchpoint is within scope. */
704 if (b->exp_valid_block == NULL)
705 within_current_scope = 1;
708 struct frame_info *fi;
710 /* There might be no current frame at this moment if we are
711 resuming from a step over a breakpoint.
712 Set up current frame before trying to find the watchpoint
714 get_current_frame ();
715 fi = find_frame_addr_in_frame_chain (b->watchpoint_frame);
716 within_current_scope = (fi != NULL);
717 if (within_current_scope)
718 select_frame (fi, -1);
721 if (within_current_scope)
723 /* Evaluate the expression and cut the chain of values
724 produced off from the value chain. */
725 v = evaluate_expression (b->exp);
726 value_release_to_mark (mark);
731 /* Look at each value on the value chain. */
732 for ( ; v; v=v->next)
734 /* If it's a memory location, then we must watch it. */
735 if (v->lval == lval_memory)
739 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
740 len = TYPE_LENGTH (VALUE_TYPE (v));
742 if (b->type == bp_read_watchpoint)
744 else if (b->type == bp_access_watchpoint)
747 val = target_insert_watchpoint (addr, len, type);
756 /* Failure to insert a watchpoint on any memory value in the
757 value chain brings us here. */
759 warning ("Hardware watchpoint %d: Could not insert watchpoint\n",
765 Hardware watchpoint %d deleted because the program has left the block in\n\
766 which its expression is valid.\n", b->number);
767 if (b->related_breakpoint)
768 b->related_breakpoint->disposition = del_at_next_stop;
769 b->disposition = del_at_next_stop;
772 /* Restore the frame and level. */
773 if ((saved_frame != selected_frame) ||
774 (saved_level != selected_frame_level))
775 select_and_print_frame (saved_frame, saved_level);
777 else if ((b->type == bp_catch_fork
778 || b->type == bp_catch_vfork
779 || b->type == bp_catch_exec)
780 && b->enable == enabled
788 val = target_insert_fork_catchpoint (inferior_pid);
790 case bp_catch_vfork :
791 val = target_insert_vfork_catchpoint (inferior_pid);
794 val = target_insert_exec_catchpoint (inferior_pid);
799 target_terminal_ours_for_output ();
800 fprintf_unfiltered (gdb_stderr, "Cannot insert catchpoint %d:\n", b->number);
807 printf_filtered ("\n");
814 remove_breakpoints ()
816 register struct breakpoint *b;
823 val = remove_breakpoint (b, mark_uninserted);
832 reattach_breakpoints (pid)
835 register struct breakpoint *b;
837 int saved_inferior_pid = inferior_pid;
839 inferior_pid = pid; /* Because remove_breakpoint will use this global. */
844 remove_breakpoint (b, mark_inserted);
845 if (b->type == bp_hardware_breakpoint)
846 val = target_insert_hw_breakpoint(b->address, b->shadow_contents);
848 val = target_insert_breakpoint(b->address, b->shadow_contents);
851 inferior_pid = saved_inferior_pid;
856 inferior_pid = saved_inferior_pid;
861 update_breakpoints_after_exec ()
863 struct breakpoint * b;
864 struct breakpoint * temp;
866 /* Doing this first prevents the badness of having delete_breakpoint()
867 write a breakpoint's current "shadow contents" to lift the bp. That
868 shadow is NOT valid after an exec()! */
869 mark_breakpoints_out ();
871 ALL_BREAKPOINTS_SAFE (b, temp)
873 /* Solib breakpoints must be explicitly reset after an exec(). */
874 if (b->type == bp_shlib_event)
876 delete_breakpoint (b);
880 /* Step-resume breakpoints are meaningless after an exec(). */
881 if (b->type == bp_step_resume)
883 delete_breakpoint (b);
887 /* Ditto the sigtramp handler breakpoints. */
888 if (b->type == bp_through_sigtramp)
890 delete_breakpoint (b);
894 /* Ditto the exception-handling catchpoints. */
895 if ((b->type == bp_catch_catch) || (b->type == bp_catch_throw))
897 delete_breakpoint (b);
901 /* Don't delete an exec catchpoint, because else the inferior
902 won't stop when it ought!
904 Similarly, we probably ought to keep vfork catchpoints, 'cause
905 on this target, we may not be able to stop when the vfork is seen,
906 but only when the subsequent exec is seen. (And because deleting
907 fork catchpoints here but not vfork catchpoints will seem mysterious
908 to users, keep those too.)
910 ??rehrauer: Let's hope that merely clearing out this catchpoint's
911 target address field, if any, is sufficient to have it be reset
912 automagically. Certainly on HP-UX that's true. */
913 if ((b->type == bp_catch_exec) ||
914 (b->type == bp_catch_vfork) ||
915 (b->type == bp_catch_fork))
921 /* bp_finish is a special case. The only way we ought to be able
922 to see one of these when an exec() has happened, is if the user
923 caught a vfork, and then said "finish". Ordinarily a finish just
924 carries them to the call-site of the current callee, by setting
925 a temporary bp there and resuming. But in this case, the finish
926 will carry them entirely through the vfork & exec.
928 We don't want to allow a bp_finish to remain inserted now. But
929 we can't safely delete it, 'cause finish_command has a handle to
930 the bp on a bpstat, and will later want to delete it. There's a
931 chance (and I've seen it happen) that if we delete the bp_finish
932 here, that its storage will get reused by the time finish_command
933 gets 'round to deleting the "use to be a bp_finish" breakpoint.
934 We really must allow finish_command to delete a bp_finish.
936 In the absense of a general solution for the "how do we know it's
937 safe to delete something others may have handles to?" problem, what
938 we'll do here is just uninsert the bp_finish, and let finish_command
941 (We know the bp_finish is "doomed" in the sense that it's momentary,
942 and will be deleted as soon as finish_command sees the inferior stopped.
943 So it doesn't matter that the bp's address is probably bogus in the
944 new a.out, unlike e.g., the solib breakpoints.) */
945 if (b->type == bp_finish)
950 /* Without a symbolic address, we have little hope of the
951 pre-exec() address meaning the same thing in the post-exec()
953 if (b->addr_string == NULL)
955 delete_breakpoint (b);
959 /* If this breakpoint has survived the above battery of checks, then
960 it must have a symbolic address. Be sure that it gets reevaluated
961 to a target address, rather than reusing the old evaluation. */
967 detach_breakpoints (pid)
970 register struct breakpoint *b;
972 int saved_inferior_pid = inferior_pid;
974 if (pid == inferior_pid)
975 error ("Cannot detach breakpoints of inferior_pid");
977 inferior_pid = pid; /* Because remove_breakpoint will use this global. */
982 val = remove_breakpoint (b, mark_inserted);
985 inferior_pid = saved_inferior_pid;
990 inferior_pid = saved_inferior_pid;
995 remove_breakpoint (b, is)
996 struct breakpoint *b;
997 insertion_state_t is;
1001 if (b->type == bp_none)
1002 warning ("attempted to remove apparently deleted breakpoint #%d?\n", b->number);
1004 if (b->type != bp_watchpoint
1005 && b->type != bp_hardware_watchpoint
1006 && b->type != bp_read_watchpoint
1007 && b->type != bp_access_watchpoint
1008 && b->type != bp_catch_fork
1009 && b->type != bp_catch_vfork
1010 && b->type != bp_catch_exec
1011 && b->type != bp_catch_catch
1012 && b->type != bp_catch_throw)
1015 if (b->type == bp_hardware_breakpoint)
1016 val = target_remove_hw_breakpoint(b->address, b->shadow_contents);
1019 /* Check to see if breakpoint is in an overlay section;
1020 if so, we should remove the breakpoint at the LMA address.
1021 If that is not equal to the raw address, then we should
1022 presumable remove the breakpoint there as well. */
1023 if (overlay_debugging && b->section &&
1024 section_is_overlay (b->section))
1028 addr = overlay_unmapped_address (b->address, b->section);
1029 val = target_remove_breakpoint (addr, b->shadow_contents);
1030 /* This would be the time to check val, to see if the
1031 shadow breakpoint write to the load address succeeded.
1032 However, this might be an ordinary occurrance, eg. if
1033 the unmapped overlay is in ROM. */
1034 val = 0; /* in case unmapped address failed */
1035 if (section_is_mapped (b->section))
1036 val = target_remove_breakpoint (b->address,
1037 b->shadow_contents);
1039 else /* ordinary (non-overlay) address */
1040 val = target_remove_breakpoint(b->address, b->shadow_contents);
1044 b->inserted = (is == mark_inserted);
1046 else if ((b->type == bp_hardware_watchpoint ||
1047 b->type == bp_read_watchpoint ||
1048 b->type == bp_access_watchpoint)
1049 && b->enable == enabled
1054 b->inserted = (is == mark_inserted);
1055 /* Walk down the saved value chain. */
1056 for (v = b->val_chain; v; v = v->next)
1058 /* For each memory reference remove the watchpoint
1060 if (v->lval == lval_memory)
1062 int addr, len, type;
1064 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1065 len = TYPE_LENGTH (VALUE_TYPE (v));
1067 if (b->type == bp_read_watchpoint)
1069 else if (b->type == bp_access_watchpoint)
1072 val = target_remove_watchpoint (addr, len, type);
1078 /* Failure to remove any of the hardware watchpoints comes here. */
1079 if ((is == mark_uninserted) && (b->inserted))
1080 warning ("Hardware watchpoint %d: Could not remove watchpoint\n",
1083 /* Free the saved value chain. We will construct a new one
1084 the next time the watchpoint is inserted. */
1085 for (v = b->val_chain; v; v = n)
1090 b->val_chain = NULL;
1092 else if ((b->type == bp_catch_fork ||
1093 b->type == bp_catch_vfork ||
1094 b->type == bp_catch_exec)
1095 && b->enable == enabled
1102 val = target_remove_fork_catchpoint (inferior_pid);
1104 case bp_catch_vfork :
1105 val = target_remove_vfork_catchpoint (inferior_pid);
1107 case bp_catch_exec :
1108 val = target_remove_exec_catchpoint (inferior_pid);
1113 b->inserted = (is == mark_inserted);
1115 else if ((b->type == bp_catch_catch ||
1116 b->type == bp_catch_throw)
1117 && b->enable == enabled
1121 val = target_remove_breakpoint(b->address, b->shadow_contents);
1124 b->inserted = (is == mark_inserted);
1126 else if (ep_is_exception_catchpoint (b)
1127 && b->inserted /* sometimes previous insert doesn't happen */
1128 && b->enable == enabled
1132 val = target_remove_breakpoint(b->address, b->shadow_contents);
1136 b->inserted = (is == mark_inserted);
1142 /* Clear the "inserted" flag in all breakpoints. */
1145 mark_breakpoints_out ()
1147 register struct breakpoint *b;
1153 /* Clear the "inserted" flag in all breakpoints and delete any breakpoints
1154 which should go away between runs of the program.
1156 Plus other such housekeeping that has to be done for breakpoints
1159 Note: this function gets called at the end of a run (by generic_mourn_inferior)
1160 and when a run begins (by init_wait_for_inferior). */
1165 breakpoint_init_inferior (context)
1166 enum inf_context context;
1168 register struct breakpoint *b, *temp;
1169 static int warning_needed = 0;
1171 ALL_BREAKPOINTS_SAFE (b, temp)
1178 case bp_watchpoint_scope:
1180 /* If the call dummy breakpoint is at the entry point it will
1181 cause problems when the inferior is rerun, so we better
1184 Also get rid of scope breakpoints. */
1185 delete_breakpoint (b);
1189 case bp_hardware_watchpoint:
1190 case bp_read_watchpoint:
1191 case bp_access_watchpoint:
1193 /* Likewise for watchpoints on local expressions. */
1194 if (b->exp_valid_block != NULL)
1195 delete_breakpoint (b);
1198 /* Likewise for exception catchpoints in dynamic-linked
1199 executables where required */
1200 if (ep_is_exception_catchpoint (b) &&
1201 exception_catchpoints_are_fragile)
1204 delete_breakpoint (b);
1210 if (exception_catchpoints_are_fragile)
1211 exception_support_initialized = 0;
1213 /* Don't issue the warning unless it's really needed... */
1214 if (warning_needed && (context != inf_exited))
1216 warning ("Exception catchpoints from last run were deleted, you must reinsert them explicitly");
1221 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
1222 When continuing from a location with a breakpoint,
1223 we actually single step once before calling insert_breakpoints. */
1226 breakpoint_here_p (pc)
1229 register struct breakpoint *b;
1232 if (b->enable == enabled
1233 && b->enable != shlib_disabled
1234 && b->enable != call_disabled
1235 && b->address == pc) /* bp is enabled and matches pc */
1237 if (overlay_debugging &&
1238 section_is_overlay (b->section) &&
1239 !section_is_mapped (b->section))
1240 continue; /* unmapped overlay -- can't be a match */
1248 /* breakpoint_inserted_here_p (PC) is just like breakpoint_here_p(), but it
1249 only returns true if there is actually a breakpoint inserted at PC. */
1252 breakpoint_inserted_here_p (pc)
1255 register struct breakpoint *b;
1259 && b->address == pc) /* bp is inserted and matches pc */
1261 if (overlay_debugging &&
1262 section_is_overlay (b->section) &&
1263 !section_is_mapped (b->section))
1264 continue; /* unmapped overlay -- can't be a match */
1272 /* Return nonzero if FRAME is a dummy frame. We can't use PC_IN_CALL_DUMMY
1273 because figuring out the saved SP would take too much time, at least using
1274 get_saved_register on the 68k. This means that for this function to
1275 work right a port must use the bp_call_dummy breakpoint. */
1278 frame_in_dummy (frame)
1279 struct frame_info *frame;
1282 #ifdef USE_GENERIC_DUMMY_FRAMES
1283 return generic_pc_in_call_dummy (frame->pc, frame->frame);
1285 struct breakpoint *b;
1289 static ULONGEST dummy[] = CALL_DUMMY;
1291 if (b->type == bp_call_dummy
1292 && b->frame == frame->frame
1294 /* We need to check the PC as well as the frame on the sparc,
1295 for signals.exp in the testsuite. */
1298 - sizeof (dummy) / sizeof (LONGEST) * REGISTER_SIZE))
1299 && frame->pc <= b->address)
1302 #endif /* GENERIC_DUMMY_FRAMES */
1303 #endif /* CALL_DUMMY */
1307 /* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
1308 is valid for process/thread PID. */
1311 breakpoint_thread_match (pc, pid)
1315 struct breakpoint *b;
1318 thread = pid_to_thread_id (pid);
1321 if (b->enable != disabled
1322 && b->enable != shlib_disabled
1323 && b->enable != call_disabled
1325 && (b->thread == -1 || b->thread == thread))
1327 if (overlay_debugging &&
1328 section_is_overlay (b->section) &&
1329 !section_is_mapped (b->section))
1330 continue; /* unmapped overlay -- can't be a match */
1339 /* bpstat stuff. External routines' interfaces are documented
1343 ep_is_catchpoint (ep)
1344 struct breakpoint * ep;
1347 (ep->type == bp_catch_load)
1348 || (ep->type == bp_catch_unload)
1349 || (ep->type == bp_catch_fork)
1350 || (ep->type == bp_catch_vfork)
1351 || (ep->type == bp_catch_exec)
1352 || (ep->type == bp_catch_catch)
1353 || (ep->type == bp_catch_throw)
1356 /* ??rehrauer: Add more kinds here, as are implemented... */
1361 ep_is_shlib_catchpoint (ep)
1362 struct breakpoint * ep;
1365 (ep->type == bp_catch_load)
1366 || (ep->type == bp_catch_unload)
1371 ep_is_exception_catchpoint (ep)
1372 struct breakpoint * ep;
1375 (ep->type == bp_catch_catch)
1376 || (ep->type == bp_catch_throw)
1380 /* Clear a bpstat so that it says we are not at any breakpoint.
1381 Also free any storage that is part of a bpstat. */
1396 if (p->old_val != NULL)
1397 value_free (p->old_val);
1404 /* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
1405 is part of the bpstat is copied as well. */
1413 bpstat retval = NULL;
1418 for (; bs != NULL; bs = bs->next)
1420 tmp = (bpstat) xmalloc (sizeof (*tmp));
1421 memcpy (tmp, bs, sizeof (*tmp));
1423 /* This is the first thing in the chain. */
1433 /* Find the bpstat associated with this breakpoint */
1436 bpstat_find_breakpoint(bsp, breakpoint)
1438 struct breakpoint *breakpoint;
1440 if (bsp == NULL) return NULL;
1442 for (;bsp != NULL; bsp = bsp->next) {
1443 if (bsp->breakpoint_at == breakpoint) return bsp;
1448 /* Find a step_resume breakpoint associated with this bpstat.
1449 (If there are multiple step_resume bp's on the list, this function
1450 will arbitrarily pick one.)
1452 It is an error to use this function if BPSTAT doesn't contain a
1453 step_resume breakpoint.
1455 See wait_for_inferior's use of this function. */
1457 bpstat_find_step_resume_breakpoint (bsp)
1461 error ("Internal error (bpstat_find_step_resume_breakpoint)");
1463 for (; bsp != NULL; bsp = bsp->next)
1465 if ((bsp->breakpoint_at != NULL) &&
1466 (bsp->breakpoint_at->type == bp_step_resume))
1467 return bsp->breakpoint_at;
1470 error ("Internal error (no step_resume breakpoint found)");
1474 /* Return the breakpoint number of the first breakpoint we are stopped
1475 at. *BSP upon return is a bpstat which points to the remaining
1476 breakpoints stopped at (but which is not guaranteed to be good for
1477 anything but further calls to bpstat_num).
1478 Return 0 if passed a bpstat which does not indicate any breakpoints. */
1484 struct breakpoint *b;
1487 return 0; /* No more breakpoint values */
1490 b = (*bsp)->breakpoint_at;
1491 *bsp = (*bsp)->next;
1493 return -1; /* breakpoint that's been deleted since */
1495 return b->number; /* We have its number */
1499 /* Modify BS so that the actions will not be performed. */
1502 bpstat_clear_actions (bs)
1505 for (; bs != NULL; bs = bs->next)
1507 bs->commands = NULL;
1508 if (bs->old_val != NULL)
1510 value_free (bs->old_val);
1516 /* Stub for cleaning up our state if we error-out of a breakpoint command */
1519 cleanup_executing_breakpoints (ignore)
1522 executing_breakpoint_commands = 0;
1525 /* Execute all the commands associated with all the breakpoints at this
1526 location. Any of these commands could cause the process to proceed
1527 beyond this point, etc. We look out for such changes by checking
1528 the global "breakpoint_proceeded" after each command. */
1531 bpstat_do_actions (bsp)
1535 struct cleanup *old_chain;
1536 struct command_line *cmd;
1538 /* Avoid endless recursion if a `source' command is contained
1540 if (executing_breakpoint_commands)
1543 executing_breakpoint_commands = 1;
1544 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
1547 /* Note that (as of this writing), our callers all appear to
1548 be passing us the address of global stop_bpstat. And, if
1549 our calls to execute_control_command cause the inferior to
1550 proceed, that global (and hence, *bsp) will change.
1552 We must be careful to not touch *bsp unless the inferior
1553 has not proceeded. */
1555 /* This pointer will iterate over the list of bpstat's. */
1558 breakpoint_proceeded = 0;
1559 for (; bs != NULL; bs = bs->next)
1564 execute_control_command (cmd);
1566 if (breakpoint_proceeded)
1571 if (breakpoint_proceeded)
1572 /* The inferior is proceeded by the command; bomb out now.
1573 The bpstat chain has been blown away by wait_for_inferior.
1574 But since execution has stopped again, there is a new bpstat
1575 to look at, so start over. */
1578 bs->commands = NULL;
1581 executing_breakpoint_commands = 0;
1582 discard_cleanups (old_chain);
1585 /* This is the normal print_it function for a bpstat. In the future,
1586 much of this logic could (should?) be moved to bpstat_stop_status,
1587 by having it set different print_it functions.
1589 Current scheme: When we stop, bpstat_print() is called.
1590 It loops through the bpstat list of things causing this stop,
1591 calling the print_it function for each one. The default
1592 print_it function, used for breakpoints, is print_it_normal().
1593 (Also see print_it_noop() and print_it_done()).
1595 Return values from this routine (used by bpstat_print() to
1597 1: Means we printed something, and we do *not* desire that
1598 something to be followed by a location.
1599 0: Means we printed something, and we *do* desire that
1600 something to be followed by a location.
1601 -1: Means we printed nothing. */
1604 print_it_normal (bs)
1607 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
1608 which has since been deleted. */
1609 if (bs->breakpoint_at == NULL
1610 || (bs->breakpoint_at->type != bp_breakpoint
1611 && bs->breakpoint_at->type != bp_catch_load
1612 && bs->breakpoint_at->type != bp_catch_unload
1613 && bs->breakpoint_at->type != bp_catch_fork
1614 && bs->breakpoint_at->type != bp_catch_vfork
1615 && bs->breakpoint_at->type != bp_catch_exec
1616 && bs->breakpoint_at->type != bp_catch_catch
1617 && bs->breakpoint_at->type != bp_catch_throw
1618 && bs->breakpoint_at->type != bp_hardware_breakpoint
1619 && bs->breakpoint_at->type != bp_watchpoint
1620 && bs->breakpoint_at->type != bp_read_watchpoint
1621 && bs->breakpoint_at->type != bp_access_watchpoint
1622 && bs->breakpoint_at->type != bp_hardware_watchpoint))
1625 if (ep_is_shlib_catchpoint (bs->breakpoint_at))
1627 annotate_catchpoint (bs->breakpoint_at->number);
1628 printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1629 if (bs->breakpoint_at->type == bp_catch_load)
1630 printf_filtered ("loaded");
1631 else if (bs->breakpoint_at->type == bp_catch_unload)
1632 printf_filtered ("unloaded");
1633 printf_filtered (" %s), ", bs->breakpoint_at->triggered_dll_pathname);
1636 else if (bs->breakpoint_at->type == bp_catch_fork ||
1637 bs->breakpoint_at->type == bp_catch_vfork)
1639 annotate_catchpoint (bs->breakpoint_at->number);
1640 printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1641 if (bs->breakpoint_at->type == bp_catch_fork)
1642 printf_filtered ("forked");
1643 else if (bs->breakpoint_at->type == bp_catch_vfork)
1644 printf_filtered ("vforked");
1645 printf_filtered (" process %d), ", bs->breakpoint_at->forked_inferior_pid);
1648 else if (bs->breakpoint_at->type == bp_catch_exec)
1650 annotate_catchpoint (bs->breakpoint_at->number);
1651 printf_filtered ("\nCatchpoint %d (exec'd %s), ",
1652 bs->breakpoint_at->number,
1653 bs->breakpoint_at->exec_pathname);
1656 else if (bs->breakpoint_at->type == bp_catch_catch)
1658 if (current_exception_event && (CURRENT_EXCEPTION_KIND == EX_EVENT_CATCH))
1660 annotate_catchpoint (bs->breakpoint_at->number);
1661 printf_filtered ("\nCatchpoint %d (exception caught), ", bs->breakpoint_at->number);
1662 printf_filtered ("throw location ");
1663 if (CURRENT_EXCEPTION_THROW_PC && CURRENT_EXCEPTION_THROW_LINE)
1664 printf_filtered ("%s:%d",
1665 CURRENT_EXCEPTION_THROW_FILE,
1666 CURRENT_EXCEPTION_THROW_LINE);
1668 printf_filtered ("unknown");
1670 printf_filtered (", catch location ");
1671 if (CURRENT_EXCEPTION_CATCH_PC && CURRENT_EXCEPTION_CATCH_LINE)
1672 printf_filtered ("%s:%d",
1673 CURRENT_EXCEPTION_CATCH_FILE,
1674 CURRENT_EXCEPTION_CATCH_LINE);
1676 printf_filtered ("unknown");
1678 printf_filtered ("\n");
1679 return 1; /* don't bother to print location frame info */
1683 return -1; /* really throw, some other bpstat will handle it */
1686 else if (bs->breakpoint_at->type == bp_catch_throw)
1688 if (current_exception_event && (CURRENT_EXCEPTION_KIND == EX_EVENT_THROW))
1690 annotate_catchpoint (bs->breakpoint_at->number);
1691 printf_filtered ("\nCatchpoint %d (exception thrown), ", bs->breakpoint_at->number);
1692 printf_filtered ("throw location ");
1693 if (CURRENT_EXCEPTION_THROW_PC && CURRENT_EXCEPTION_THROW_LINE)
1694 printf_filtered ("%s:%d",
1695 CURRENT_EXCEPTION_THROW_FILE,
1696 CURRENT_EXCEPTION_THROW_LINE);
1698 printf_filtered ("unknown");
1700 printf_filtered (", catch location ");
1701 if (CURRENT_EXCEPTION_CATCH_PC && CURRENT_EXCEPTION_CATCH_LINE)
1702 printf_filtered ("%s:%d",
1703 CURRENT_EXCEPTION_CATCH_FILE,
1704 CURRENT_EXCEPTION_CATCH_LINE);
1706 printf_filtered ("unknown");
1708 printf_filtered ("\n");
1709 return 1; /* don't bother to print location frame info */
1713 return -1; /* really catch, some other bpstat willhandle it */
1717 else if (bs->breakpoint_at->type == bp_breakpoint ||
1718 bs->breakpoint_at->type == bp_hardware_breakpoint)
1720 /* I think the user probably only wants to see one breakpoint
1721 number, not all of them. */
1722 annotate_breakpoint (bs->breakpoint_at->number);
1723 printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
1726 else if ((bs->old_val != NULL) &&
1727 (bs->breakpoint_at->type == bp_watchpoint ||
1728 bs->breakpoint_at->type == bp_access_watchpoint ||
1729 bs->breakpoint_at->type == bp_hardware_watchpoint))
1731 annotate_watchpoint (bs->breakpoint_at->number);
1732 mention (bs->breakpoint_at);
1733 printf_filtered ("\nOld value = ");
1734 value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
1735 printf_filtered ("\nNew value = ");
1736 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1737 Val_pretty_default);
1738 printf_filtered ("\n");
1739 value_free (bs->old_val);
1741 /* More than one watchpoint may have been triggered. */
1744 else if (bs->breakpoint_at->type == bp_access_watchpoint ||
1745 bs->breakpoint_at->type == bp_read_watchpoint)
1747 mention (bs->breakpoint_at);
1748 printf_filtered ("\nValue = ");
1749 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1750 Val_pretty_default);
1751 printf_filtered ("\n");
1754 /* We can't deal with it. Maybe another member of the bpstat chain can. */
1758 /* Print a message indicating what happened.
1759 This is called from normal_stop().
1760 The input to this routine is the head of the bpstat list - a list
1761 of the eventpoints that caused this stop.
1762 This routine calls the "print_it" routine(s) associated
1763 with these eventpoints. This will print (for example)
1764 the "Breakpoint n," part of the output.
1765 The return value of this routine is one of:
1767 -1: Means we printed nothing
1768 0: Means we printed something, and expect subsequent
1769 code to print the location. An example is
1770 "Breakpoint 1, " which should be followed by
1772 1 : Means we printed something, but there is no need
1773 to also print the location part of the message.
1774 An example is the catch/throw messages, which
1775 don't require a location appended to the end. */
1786 val = (*bs->print_it) (bs);
1790 /* Maybe another breakpoint in the chain caused us to stop.
1791 (Currently all watchpoints go on the bpstat whether hit or
1792 not. That probably could (should) be changed, provided care is taken
1793 with respect to bpstat_explains_signal). */
1795 return bpstat_print (bs->next);
1797 /* We reached the end of the chain without printing anything. */
1801 /* Evaluate the expression EXP and return 1 if value is zero.
1802 This is used inside a catch_errors to evaluate the breakpoint condition.
1803 The argument is a "struct expression *" that has been cast to char * to
1804 make it pass through catch_errors. */
1807 breakpoint_cond_eval (exp)
1810 value_ptr mark = value_mark ();
1811 int i = !value_true (evaluate_expression ((struct expression *)exp));
1812 value_free_to_mark (mark);
1816 /* Allocate a new bpstat and chain it to the current one. */
1819 bpstat_alloc (b, cbs)
1820 register struct breakpoint *b;
1821 bpstat cbs; /* Current "bs" value */
1825 bs = (bpstat) xmalloc (sizeof (*bs));
1827 bs->breakpoint_at = b;
1828 /* If the condition is false, etc., don't do the commands. */
1829 bs->commands = NULL;
1831 bs->print_it = print_it_normal;
1835 /* Possible return values for watchpoint_check (this can't be an enum
1836 because of check_errors). */
1837 /* The watchpoint has been deleted. */
1838 #define WP_DELETED 1
1839 /* The value has changed. */
1840 #define WP_VALUE_CHANGED 2
1841 /* The value has not changed. */
1842 #define WP_VALUE_NOT_CHANGED 3
1844 #define BP_TEMPFLAG 1
1845 #define BP_HARDWAREFLAG 2
1847 /* Check watchpoint condition. */
1850 watchpoint_check (p)
1853 bpstat bs = (bpstat) p;
1854 struct breakpoint *b;
1855 struct frame_info *fr;
1856 int within_current_scope;
1858 b = bs->breakpoint_at;
1860 if (b->exp_valid_block == NULL)
1861 within_current_scope = 1;
1864 /* There is no current frame at this moment. If we're going to have
1865 any chance of handling watchpoints on local variables, we'll need
1866 the frame chain (so we can determine if we're in scope). */
1867 reinit_frame_cache();
1868 fr = find_frame_addr_in_frame_chain (b->watchpoint_frame);
1869 within_current_scope = (fr != NULL);
1870 if (within_current_scope)
1871 /* If we end up stopping, the current frame will get selected
1872 in normal_stop. So this call to select_frame won't affect
1874 select_frame (fr, -1);
1877 if (within_current_scope)
1879 /* We use value_{,free_to_}mark because it could be a
1880 *long* time before we return to the command level and
1881 call free_all_values. We can't call free_all_values because
1882 we might be in the middle of evaluating a function call. */
1884 value_ptr mark = value_mark ();
1885 value_ptr new_val = evaluate_expression (bs->breakpoint_at->exp);
1886 if (!value_equal (b->val, new_val))
1888 release_value (new_val);
1889 value_free_to_mark (mark);
1890 bs->old_val = b->val;
1892 /* We will stop here */
1893 return WP_VALUE_CHANGED;
1897 /* Nothing changed, don't do anything. */
1898 value_free_to_mark (mark);
1899 /* We won't stop here */
1900 return WP_VALUE_NOT_CHANGED;
1905 /* This seems like the only logical thing to do because
1906 if we temporarily ignored the watchpoint, then when
1907 we reenter the block in which it is valid it contains
1908 garbage (in the case of a function, it may have two
1909 garbage values, one before and one after the prologue).
1910 So we can't even detect the first assignment to it and
1911 watch after that (since the garbage may or may not equal
1912 the first value assigned). */
1914 Watchpoint %d deleted because the program has left the block in\n\
1915 which its expression is valid.\n", bs->breakpoint_at->number);
1916 if (b->related_breakpoint)
1917 b->related_breakpoint->disposition = del_at_next_stop;
1918 b->disposition = del_at_next_stop;
1924 /* This is used when everything which needs to be printed has
1925 already been printed. But we still want to print the frame. */
1927 /* Background: When we stop, bpstat_print() is called.
1928 It loops through the bpstat list of things causing this stop,
1929 calling the print_it function for each one. The default
1930 print_it function, used for breakpoints, is print_it_normal().
1931 Also see print_it_noop() and print_it_done() are the other
1932 two possibilities. See comments in bpstat_print() and
1933 in header of print_it_normal() for more detail. */
1942 /* This is used when nothing should be printed for this bpstat entry. */
1943 /* Background: When we stop, bpstat_print() is called.
1944 It loops through the bpstat list of things causing this stop,
1945 calling the print_it function for each one. The default
1946 print_it function, used for breakpoints, is print_it_normal().
1947 Also see print_it_noop() and print_it_done() are the other
1948 two possibilities. See comments in bpstat_print() and
1949 in header of print_it_normal() for more detail. */
1958 /* Get a bpstat associated with having just stopped at address *PC
1959 and frame address CORE_ADDRESS. Update *PC to point at the
1960 breakpoint (if we hit a breakpoint). NOT_A_BREAKPOINT is nonzero
1961 if this is known to not be a real breakpoint (it could still be a
1962 watchpoint, though). */
1964 /* Determine whether we stopped at a breakpoint, etc, or whether we
1965 don't understand this stop. Result is a chain of bpstat's such that:
1967 if we don't understand the stop, the result is a null pointer.
1969 if we understand why we stopped, the result is not null.
1971 Each element of the chain refers to a particular breakpoint or
1972 watchpoint at which we have stopped. (We may have stopped for
1973 several reasons concurrently.)
1975 Each element of the chain has valid next, breakpoint_at,
1976 commands, FIXME??? fields. */
1979 bpstat_stop_status (pc, not_a_breakpoint)
1981 int not_a_breakpoint;
1983 register struct breakpoint *b, *temp;
1985 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
1986 int real_breakpoint = 0;
1987 /* Root of the chain of bpstat's */
1988 struct bpstats root_bs[1];
1989 /* Pointer to the last thing in the chain currently. */
1990 bpstat bs = root_bs;
1991 static char message1[] =
1992 "Error evaluating expression for watchpoint %d\n";
1993 char message[sizeof (message1) + 30 /* slop */];
1995 /* Get the address where the breakpoint would have been. */
1996 bp_addr = *pc - DECR_PC_AFTER_BREAK;
1998 ALL_BREAKPOINTS_SAFE (b, temp)
2000 if (b->enable == disabled
2001 || b->enable == shlib_disabled
2002 || b->enable == call_disabled)
2005 if (b->type != bp_watchpoint
2006 && b->type != bp_hardware_watchpoint
2007 && b->type != bp_read_watchpoint
2008 && b->type != bp_access_watchpoint
2009 && b->type != bp_hardware_breakpoint
2010 && b->type != bp_catch_fork
2011 && b->type != bp_catch_vfork
2012 && b->type != bp_catch_exec
2013 && b->type != bp_catch_catch
2014 && b->type != bp_catch_throw) /* a non-watchpoint bp */
2015 if (b->address != bp_addr || /* address doesn't match or */
2016 (overlay_debugging && /* overlay doesn't match */
2017 section_is_overlay (b->section) &&
2018 !section_is_mapped (b->section)))
2021 if (b->type == bp_hardware_breakpoint
2022 && b->address != (bp_addr - DECR_PC_AFTER_HW_BREAK))
2025 if (b->type != bp_watchpoint
2026 && b->type != bp_hardware_watchpoint
2027 && b->type != bp_read_watchpoint
2028 && b->type != bp_access_watchpoint
2029 && not_a_breakpoint)
2032 /* Is this a catchpoint of a load or unload? If so, did we
2033 get a load or unload of the specified library? If not,
2035 if ((b->type == bp_catch_load)
2036 #if defined(SOLIB_HAVE_LOAD_EVENT)
2037 && (!SOLIB_HAVE_LOAD_EVENT(inferior_pid)
2038 || ((b->dll_pathname != NULL)
2039 && (strcmp (b->dll_pathname, SOLIB_LOADED_LIBRARY_PATHNAME(inferior_pid)) != 0)))
2044 if ((b->type == bp_catch_unload)
2045 #if defined(SOLIB_HAVE_UNLOAD_EVENT)
2046 && (!SOLIB_HAVE_UNLOAD_EVENT(inferior_pid)
2047 || ((b->dll_pathname != NULL)
2048 && (strcmp (b->dll_pathname, SOLIB_UNLOADED_LIBRARY_PATHNAME(inferior_pid)) != 0)))
2053 if ((b->type == bp_catch_fork)
2054 && ! target_has_forked (inferior_pid, &b->forked_inferior_pid))
2057 if ((b->type == bp_catch_vfork)
2058 && ! target_has_vforked (inferior_pid, &b->forked_inferior_pid))
2061 if ((b->type == bp_catch_exec)
2062 && ! target_has_execd (inferior_pid, &b->exec_pathname))
2065 if (ep_is_exception_catchpoint (b) &&
2066 !(current_exception_event = target_get_current_exception_event ()))
2069 /* Come here if it's a watchpoint, or if the break address matches */
2071 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
2073 /* Watchpoints may change this, if not found to have triggered. */
2077 sprintf (message, message1, b->number);
2078 if (b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
2080 switch (catch_errors ((int (*) PARAMS ((char *))) watchpoint_check, (char *) bs, message,
2084 /* We've already printed what needs to be printed. */
2085 bs->print_it = print_it_done;
2088 case WP_VALUE_CHANGED:
2092 case WP_VALUE_NOT_CHANGED:
2094 bs->print_it = print_it_noop;
2096 /* Don't consider this a hit. */
2103 /* Error from catch_errors. */
2104 printf_filtered ("Watchpoint %d deleted.\n", b->number);
2105 if (b->related_breakpoint)
2106 b->related_breakpoint->disposition = del_at_next_stop;
2107 b->disposition = del_at_next_stop;
2108 /* We've already printed what needs to be printed. */
2109 bs->print_it = print_it_done;
2115 else if (b->type == bp_read_watchpoint || b->type == bp_access_watchpoint)
2121 addr = target_stopped_data_address();
2122 if (addr == 0) continue;
2123 for (v = b->val_chain; v; v = v->next)
2125 if (v->lval == lval_memory)
2129 vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
2135 switch (catch_errors ((int (*) PARAMS ((char *))) watchpoint_check, (char *) bs, message,
2139 /* We've already printed what needs to be printed. */
2140 bs->print_it = print_it_done;
2143 case WP_VALUE_CHANGED:
2144 case WP_VALUE_NOT_CHANGED:
2151 /* Error from catch_errors. */
2152 printf_filtered ("Watchpoint %d deleted.\n", b->number);
2153 if (b->related_breakpoint)
2154 b->related_breakpoint->disposition = del_at_next_stop;
2155 b->disposition = del_at_next_stop;
2156 /* We've already printed what needs to be printed. */
2157 bs->print_it = print_it_done;
2163 /* By definition, an encountered breakpoint is a triggered
2167 if (DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs)
2168 real_breakpoint = 1;
2171 if (b->frame && b->frame != (get_current_frame ())->frame &&
2172 (b->type == bp_step_resume &&
2173 (INNER_THAN (get_current_frame ()->frame, b->frame))))
2177 int value_is_zero = 0;
2181 /* Need to select the frame, with all that implies
2182 so that the conditions will have the right context. */
2183 select_frame (get_current_frame (), 0);
2185 = catch_errors ((int (*) PARAMS ((char *))) breakpoint_cond_eval, (char *)(b->cond),
2186 "Error in testing breakpoint condition:\n",
2188 /* FIXME-someday, should give breakpoint # */
2191 if (b->cond && value_is_zero)
2194 /* Don't consider this a hit. */
2197 else if (b->ignore_count > 0)
2204 /* We will stop here */
2205 if (b->disposition == disable)
2206 b->enable = disabled;
2207 bs->commands = b->commands;
2211 (STREQ ("silent", bs->commands->line) ||
2212 (xdb_commands && STREQ ("Q", bs->commands->line))))
2214 bs->commands = bs->commands->next;
2219 /* Print nothing for this entry if we dont stop or if we dont print. */
2220 if (bs->stop == 0 || bs->print == 0)
2221 bs->print_it = print_it_noop;
2224 bs->next = NULL; /* Terminate the chain */
2225 bs = root_bs->next; /* Re-grab the head of the chain */
2227 if ((DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs) && bs)
2229 if (real_breakpoint)
2232 #if defined (SHIFT_INST_REGS)
2234 #else /* No SHIFT_INST_REGS. */
2236 #endif /* No SHIFT_INST_REGS. */
2240 /* The value of a hardware watchpoint hasn't changed, but the
2241 intermediate memory locations we are watching may have. */
2242 if (bs && ! bs->stop &&
2243 (bs->breakpoint_at->type == bp_hardware_watchpoint ||
2244 bs->breakpoint_at->type == bp_read_watchpoint ||
2245 bs->breakpoint_at->type == bp_access_watchpoint))
2247 remove_breakpoints ();
2248 insert_breakpoints ();
2253 /* Tell what to do about this bpstat. */
2258 /* Classify each bpstat as one of the following. */
2260 /* This bpstat element has no effect on the main_action. */
2263 /* There was a watchpoint, stop but don't print. */
2266 /* There was a watchpoint, stop and print. */
2269 /* There was a breakpoint but we're not stopping. */
2272 /* There was a breakpoint, stop but don't print. */
2275 /* There was a breakpoint, stop and print. */
2278 /* We hit the longjmp breakpoint. */
2281 /* We hit the longjmp_resume breakpoint. */
2284 /* We hit the step_resume breakpoint. */
2287 /* We hit the through_sigtramp breakpoint. */
2290 /* We hit the shared library event breakpoint. */
2293 /* We caught a shared library event. */
2296 /* This is just used to count how many enums there are. */
2300 /* Here is the table which drives this routine. So that we can
2301 format it pretty, we define some abbreviations for the
2302 enum bpstat_what codes. */
2303 #define kc BPSTAT_WHAT_KEEP_CHECKING
2304 #define ss BPSTAT_WHAT_STOP_SILENT
2305 #define sn BPSTAT_WHAT_STOP_NOISY
2306 #define sgl BPSTAT_WHAT_SINGLE
2307 #define slr BPSTAT_WHAT_SET_LONGJMP_RESUME
2308 #define clr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
2309 #define clrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
2310 #define sr BPSTAT_WHAT_STEP_RESUME
2311 #define ts BPSTAT_WHAT_THROUGH_SIGTRAMP
2312 #define shl BPSTAT_WHAT_CHECK_SHLIBS
2313 #define shlr BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK
2315 /* "Can't happen." Might want to print an error message.
2316 abort() is not out of the question, but chances are GDB is just
2317 a bit confused, not unusable. */
2318 #define err BPSTAT_WHAT_STOP_NOISY
2320 /* Given an old action and a class, come up with a new action. */
2321 /* One interesting property of this table is that wp_silent is the same
2322 as bp_silent and wp_noisy is the same as bp_noisy. That is because
2323 after stopping, the check for whether to step over a breakpoint
2324 (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
2325 reference to how we stopped. We retain separate wp_silent and bp_silent
2326 codes in case we want to change that someday. */
2328 /* step_resume entries: a step resume breakpoint overrides another
2329 breakpoint of signal handling (see comment in wait_for_inferior
2330 at first IN_SIGTRAMP where we set the step_resume breakpoint). */
2331 /* We handle the through_sigtramp_breakpoint the same way; having both
2332 one of those and a step_resume_breakpoint is probably very rare (?). */
2334 static const enum bpstat_what_main_action
2335 table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
2338 /* kc ss sn sgl slr clr clrs sr ts shl shlr
2340 /*no_effect*/ {kc, ss, sn, sgl, slr, clr, clrs, sr, ts, shl, shlr},
2341 /*wp_silent*/ {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl, shlr},
2342 /*wp_noisy*/ {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl, shlr},
2343 /*bp_nostop*/ {sgl, ss, sn, sgl, slr, clrs, clrs, sr, ts, shl, shlr},
2344 /*bp_silent*/ {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl, shlr},
2345 /*bp_noisy*/ {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl, shlr},
2346 /*long_jump*/ {slr, ss, sn, slr, err, err, err, sr, ts, shl, shlr},
2347 /*long_resume*/ {clr, ss, sn, clrs, err, err, err, sr, ts, shl, shlr},
2348 /*step_resume*/ {sr, sr, sr, sr, sr, sr, sr, sr, ts, shl, shlr},
2349 /*through_sig*/ {ts, ts, ts, ts, ts, ts, ts, ts, ts, shl, shlr},
2350 /*shlib*/ {shl, shl, shl, shl, shl, shl, shl, shl, ts, shl, shlr},
2351 /*catch_shlib*/ {shlr, shlr, shlr, shlr, shlr, shlr, shlr, shlr, ts, shlr, shlr}
2366 enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
2367 struct bpstat_what retval;
2369 retval.call_dummy = 0;
2370 for (; bs != NULL; bs = bs->next)
2372 enum class bs_class = no_effect;
2373 if (bs->breakpoint_at == NULL)
2374 /* I suspect this can happen if it was a momentary breakpoint
2375 which has since been deleted. */
2377 switch (bs->breakpoint_at->type)
2383 case bp_hardware_breakpoint:
2389 bs_class = bp_noisy;
2391 bs_class = bp_silent;
2394 bs_class = bp_nostop;
2397 case bp_hardware_watchpoint:
2398 case bp_read_watchpoint:
2399 case bp_access_watchpoint:
2403 bs_class = wp_noisy;
2405 bs_class = wp_silent;
2408 /* There was a watchpoint, but we're not stopping. This requires
2409 no further action. */
2410 bs_class = no_effect;
2413 bs_class = long_jump;
2415 case bp_longjmp_resume:
2416 bs_class = long_resume;
2418 case bp_step_resume:
2421 bs_class = step_resume;
2424 /* It is for the wrong frame. */
2425 bs_class = bp_nostop;
2427 case bp_through_sigtramp:
2428 bs_class = through_sig;
2430 case bp_watchpoint_scope:
2431 bs_class = bp_nostop;
2433 case bp_shlib_event:
2434 bs_class = shlib_event;
2437 case bp_catch_unload:
2438 /* Only if this catchpoint triggered should we cause the
2439 step-out-of-dld behaviour. Otherwise, we ignore this
2442 bs_class = catch_shlib_event;
2444 bs_class = no_effect;
2447 case bp_catch_vfork:
2452 bs_class = bp_noisy;
2454 bs_class = bp_silent;
2457 /* There was a catchpoint, but we're not stopping. This requires
2458 no further action. */
2459 bs_class = no_effect;
2461 case bp_catch_catch:
2462 if (!bs->stop || CURRENT_EXCEPTION_KIND != EX_EVENT_CATCH)
2463 bs_class = bp_nostop;
2465 bs_class = bs->print ? bp_noisy : bp_silent;
2467 case bp_catch_throw:
2468 if (!bs->stop || CURRENT_EXCEPTION_KIND != EX_EVENT_THROW)
2469 bs_class = bp_nostop;
2471 bs_class = bs->print ? bp_noisy : bp_silent;
2474 /* Make sure the action is stop (silent or noisy), so infrun.c
2475 pops the dummy frame. */
2476 bs_class = bp_silent;
2477 retval.call_dummy = 1;
2480 current_action = table[(int)bs_class][(int)current_action];
2482 retval.main_action = current_action;
2486 /* Nonzero if we should step constantly (e.g. watchpoints on machines
2487 without hardware support). This isn't related to a specific bpstat,
2488 just to things like whether watchpoints are set. */
2491 bpstat_should_step ()
2493 struct breakpoint *b;
2495 if (b->enable == enabled && b->type == bp_watchpoint)
2500 /* Nonzero if there are enabled hardware watchpoints. */
2502 bpstat_have_active_hw_watchpoints ()
2504 struct breakpoint *b;
2506 if ((b->enable == enabled) &&
2508 ((b->type == bp_hardware_watchpoint) ||
2509 (b->type == bp_read_watchpoint) ||
2510 (b->type == bp_access_watchpoint)))
2516 /* Given a bpstat that records zero or more triggered eventpoints, this
2517 function returns another bpstat which contains only the catchpoints
2518 on that first list, if any. */
2520 bpstat_get_triggered_catchpoints (ep_list, cp_list)
2524 struct bpstats root_bs[1];
2525 bpstat bs = root_bs;
2526 struct breakpoint * ep;
2527 char * dll_pathname;
2529 bpstat_clear (cp_list);
2530 root_bs->next = NULL;
2532 for (; ep_list != NULL; ep_list = ep_list->next )
2534 /* Is this eventpoint a catchpoint? If not, ignore it. */
2535 ep = ep_list->breakpoint_at;
2538 if ((ep->type != bp_catch_load) &&
2539 (ep->type != bp_catch_unload) &&
2540 (ep->type != bp_catch_catch) &&
2541 (ep->type != bp_catch_throw)) /* pai: (temp) ADD fork/vfork here!! */
2544 /* Yes; add it to the list. */
2545 bs = bpstat_alloc (ep, bs);
2550 #if defined(SOLIB_ADD)
2551 /* Also, for each triggered catchpoint, tag it with the name of
2552 the library that caused this trigger. (We copy the name now,
2553 because it's only guaranteed to be available NOW, when the
2554 catchpoint triggers. Clients who may wish to know the name
2555 later must get it from the catchpoint itself.) */
2556 if (ep->triggered_dll_pathname != NULL)
2557 free (ep->triggered_dll_pathname);
2558 if (ep->type == bp_catch_load)
2559 dll_pathname = SOLIB_LOADED_LIBRARY_PATHNAME (inferior_pid);
2561 dll_pathname = SOLIB_UNLOADED_LIBRARY_PATHNAME (inferior_pid);
2563 dll_pathname = NULL;
2567 ep->triggered_dll_pathname = (char *) xmalloc (strlen (dll_pathname) + 1);
2568 strcpy (ep->triggered_dll_pathname, dll_pathname);
2571 ep->triggered_dll_pathname = NULL;
2577 /* Print information on breakpoint number BNUM, or -1 if all.
2578 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
2579 is nonzero, process only watchpoints. */
2584 } ep_type_description_t;
2587 breakpoint_1 (bnum, allflag)
2591 register struct breakpoint *b;
2592 register struct command_line *l;
2593 register struct symbol *sym;
2594 CORE_ADDR last_addr = (CORE_ADDR)-1;
2595 int found_a_breakpoint = 0;
2596 static ep_type_description_t bptypes[] =
2598 {bp_none, "?deleted?"},
2599 {bp_breakpoint, "breakpoint"},
2600 {bp_hardware_breakpoint, "hw breakpoint"},
2601 {bp_until, "until"},
2602 {bp_finish, "finish"},
2603 {bp_watchpoint, "watchpoint"},
2604 {bp_hardware_watchpoint, "hw watchpoint"},
2605 {bp_read_watchpoint, "read watchpoint"},
2606 {bp_access_watchpoint, "acc watchpoint"},
2607 {bp_longjmp, "longjmp"},
2608 {bp_longjmp_resume, "longjmp resume"},
2609 {bp_step_resume, "step resume"},
2610 {bp_through_sigtramp, "sigtramp"},
2611 {bp_watchpoint_scope, "watchpoint scope"},
2612 {bp_call_dummy, "call dummy"},
2613 {bp_shlib_event, "shlib events"},
2614 {bp_catch_load, "catch load"},
2615 {bp_catch_unload, "catch unload"},
2616 {bp_catch_fork, "catch fork"},
2617 {bp_catch_vfork, "catch vfork"},
2618 {bp_catch_exec, "catch exec"},
2619 {bp_catch_catch, "catch catch"},
2620 {bp_catch_throw, "catch throw"}
2623 static char *bpdisps[] = {"del", "dstp", "dis", "keep"};
2624 static char bpenables[] = "nyn";
2625 char wrap_indent[80];
2629 || bnum == b->number)
2631 /* We only print out user settable breakpoints unless the allflag is set. */
2633 && b->type != bp_breakpoint
2634 && b->type != bp_catch_load
2635 && b->type != bp_catch_unload
2636 && b->type != bp_catch_fork
2637 && b->type != bp_catch_vfork
2638 && b->type != bp_catch_exec
2639 && b->type != bp_catch_catch
2640 && b->type != bp_catch_throw
2641 && b->type != bp_hardware_breakpoint
2642 && b->type != bp_watchpoint
2643 && b->type != bp_read_watchpoint
2644 && b->type != bp_access_watchpoint
2645 && b->type != bp_hardware_watchpoint)
2648 if (!found_a_breakpoint++)
2650 annotate_breakpoints_headers ();
2653 printf_filtered ("Num ");
2655 printf_filtered ("Type ");
2657 printf_filtered ("Disp ");
2659 printf_filtered ("Enb ");
2663 printf_filtered ("Address ");
2666 printf_filtered ("What\n");
2668 annotate_breakpoints_table ();
2673 printf_filtered ("%-3d ", b->number);
2675 if ((int)b->type > (sizeof(bptypes)/sizeof(bptypes[0])))
2676 error ("bptypes table does not describe type #%d.", (int)b->type);
2677 if ((int)b->type != bptypes[(int)b->type].type)
2678 error ("bptypes table does not describe type #%d?", (int)b->type);
2679 printf_filtered ("%-14s ", bptypes[(int)b->type].description);
2681 printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
2683 printf_filtered ("%-3c ", bpenables[(int)b->enable]);
2685 strcpy (wrap_indent, " ");
2687 strcat (wrap_indent, " ");
2691 case bp_hardware_watchpoint:
2692 case bp_read_watchpoint:
2693 case bp_access_watchpoint:
2694 /* Field 4, the address, is omitted (which makes the columns
2695 not line up too nicely with the headers, but the effect
2696 is relatively readable). */
2698 print_expression (b->exp, gdb_stdout);
2702 case bp_catch_unload:
2703 /* Field 4, the address, is omitted (which makes the columns
2704 not line up too nicely with the headers, but the effect
2705 is relatively readable). */
2707 if (b->dll_pathname == NULL)
2708 printf_filtered ("<any library> ");
2710 printf_filtered ("library \"%s\" ", b->dll_pathname);
2714 case bp_catch_vfork:
2715 /* Field 4, the address, is omitted (which makes the columns
2716 not line up too nicely with the headers, but the effect
2717 is relatively readable). */
2719 if (b->forked_inferior_pid != 0)
2720 printf_filtered ("process %d ", b->forked_inferior_pid);
2724 /* Field 4, the address, is omitted (which makes the columns
2725 not line up too nicely with the headers, but the effect
2726 is relatively readable). */
2728 if (b->exec_pathname != NULL)
2729 printf_filtered ("program \"%s\" ", b->exec_pathname);
2731 case bp_catch_catch:
2732 /* Field 4, the address, is omitted (which makes the columns
2733 not line up too nicely with the headers, but the effect
2734 is relatively readable). */
2736 printf_filtered ("exception catch ");
2738 case bp_catch_throw:
2739 /* Field 4, the address, is omitted (which makes the columns
2740 not line up too nicely with the headers, but the effect
2741 is relatively readable). */
2743 printf_filtered ("exception throw ");
2747 case bp_hardware_breakpoint:
2751 case bp_longjmp_resume:
2752 case bp_step_resume:
2753 case bp_through_sigtramp:
2754 case bp_watchpoint_scope:
2756 case bp_shlib_event:
2760 /* FIXME-32x64: need a print_address_numeric with
2764 local_hex_string_custom
2765 ((unsigned long) b->address, "08l"));
2770 last_addr = b->address;
2773 sym = find_pc_sect_function (b->address, b->section);
2776 fputs_filtered ("in ", gdb_stdout);
2777 fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
2778 wrap_here (wrap_indent);
2779 fputs_filtered (" at ", gdb_stdout);
2781 fputs_filtered (b->source_file, gdb_stdout);
2782 printf_filtered (":%d", b->line_number);
2785 print_address_symbolic (b->address, gdb_stdout, demangle, " ");
2789 if (b->thread != -1)
2790 printf_filtered (" thread %d", b->thread );
2792 printf_filtered ("\n");
2798 printf_filtered ("\tstop only in stack frame at ");
2799 print_address_numeric (b->frame, 1, gdb_stdout);
2800 printf_filtered ("\n");
2807 printf_filtered ("\tstop only if ");
2808 print_expression (b->cond, gdb_stdout);
2809 printf_filtered ("\n");
2812 if (b->thread != -1)
2814 /* FIXME should make an annotation for this */
2815 printf_filtered ("\tstop only in thread %d\n", b->thread);
2818 if (show_breakpoint_hit_counts && b->hit_count)
2820 /* FIXME should make an annotation for this */
2821 if (ep_is_catchpoint (b))
2822 printf_filtered ("\tcatchpoint");
2824 printf_filtered ("\tbreakpoint");
2825 printf_filtered (" already hit %d time%s\n",
2826 b->hit_count, (b->hit_count == 1 ? "" : "s"));
2829 if (b->ignore_count)
2833 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
2836 if ((l = b->commands))
2842 print_command_line (l, 4);
2848 if (!found_a_breakpoint)
2851 printf_filtered ("No breakpoints or watchpoints.\n");
2853 printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
2856 /* Compare against (CORE_ADDR)-1 in case some compiler decides
2857 that a comparison of an unsigned with -1 is always false. */
2858 if (last_addr != (CORE_ADDR)-1)
2859 set_next_address (last_addr);
2861 annotate_breakpoints_table_end ();
2866 breakpoints_info (bnum_exp, from_tty)
2873 bnum = parse_and_eval_address (bnum_exp);
2875 breakpoint_1 (bnum, 0);
2878 #if MAINTENANCE_CMDS
2882 maintenance_info_breakpoints (bnum_exp, from_tty)
2889 bnum = parse_and_eval_address (bnum_exp);
2891 breakpoint_1 (bnum, 1);
2896 /* Print a message describing any breakpoints set at PC. */
2899 describe_other_breakpoints (pc, section)
2903 register int others = 0;
2904 register struct breakpoint *b;
2907 if (b->address == pc)
2908 if (overlay_debugging == 0 ||
2909 b->section == section)
2913 printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
2915 if (b->address == pc)
2916 if (overlay_debugging == 0 ||
2917 b->section == section)
2923 ((b->enable == disabled || b->enable == shlib_disabled || b->enable == call_disabled)
2924 ? " (disabled)" : ""),
2925 (others > 1) ? "," : ((others == 1) ? " and" : ""));
2927 printf_filtered ("also set at pc ");
2928 print_address_numeric (pc, 1, gdb_stdout);
2929 printf_filtered (".\n");
2933 /* Set the default place to put a breakpoint
2934 for the `break' command with no arguments. */
2937 set_default_breakpoint (valid, addr, symtab, line)
2940 struct symtab *symtab;
2943 default_breakpoint_valid = valid;
2944 default_breakpoint_address = addr;
2945 default_breakpoint_symtab = symtab;
2946 default_breakpoint_line = line;
2949 /* Rescan breakpoints at address ADDRESS,
2950 marking the first one as "first" and any others as "duplicates".
2951 This is so that the bpt instruction is only inserted once. */
2954 check_duplicates (address, section)
2958 register struct breakpoint *b;
2959 register int count = 0;
2961 if (address == 0) /* Watchpoints are uninteresting */
2965 if (b->enable != disabled
2966 && b->enable != shlib_disabled
2967 && b->enable != call_disabled
2968 && b->address == address
2969 && (overlay_debugging == 0 || b->section == section))
2972 b->duplicate = count > 1;
2976 /* Low level routine to set a breakpoint.
2977 Takes as args the three things that every breakpoint must have.
2978 Returns the breakpoint object so caller can set other things.
2979 Does not set the breakpoint number!
2980 Does not print anything.
2982 ==> This routine should not be called if there is a chance of later
2983 error(); otherwise it leaves a bogus breakpoint on the chain. Validate
2984 your arguments BEFORE calling this routine! */
2987 set_raw_breakpoint (sal)
2988 struct symtab_and_line sal;
2990 register struct breakpoint *b, *b1;
2992 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
2993 memset (b, 0, sizeof (*b));
2994 b->address = sal.pc;
2995 if (sal.symtab == NULL)
2996 b->source_file = NULL;
2998 b->source_file = savestring (sal.symtab->filename,
2999 strlen (sal.symtab->filename));
3000 b->section = sal.section;
3001 b->language = current_language->la_language;
3002 b->input_radix = input_radix;
3004 b->line_number = sal.line;
3005 b->enable = enabled;
3008 b->ignore_count = 0;
3011 b->dll_pathname = NULL;
3012 b->triggered_dll_pathname = NULL;
3013 b->forked_inferior_pid = 0;
3014 b->exec_pathname = NULL;
3016 /* Add this breakpoint to the end of the chain
3017 so that a list of breakpoints will come out in order
3018 of increasing numbers. */
3020 b1 = breakpoint_chain;
3022 breakpoint_chain = b;
3030 check_duplicates (sal.pc, sal.section);
3031 breakpoints_changed ();
3036 #ifdef GET_LONGJMP_TARGET
3039 create_longjmp_breakpoint (func_name)
3042 struct symtab_and_line sal;
3043 struct breakpoint *b;
3045 INIT_SAL (&sal); /* initialize to zeroes */
3046 if (func_name != NULL)
3048 struct minimal_symbol *m;
3050 m = lookup_minimal_symbol_text (func_name, NULL, (struct objfile *)NULL);
3052 sal.pc = SYMBOL_VALUE_ADDRESS (m);
3056 sal.section = find_pc_overlay (sal.pc);
3057 b = set_raw_breakpoint (sal);
3060 b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
3061 b->disposition = donttouch;
3062 b->enable = disabled;
3065 b->addr_string = strsave(func_name);
3066 b->number = internal_breakpoint_number--;
3069 #endif /* #ifdef GET_LONGJMP_TARGET */
3071 /* Call this routine when stepping and nexting to enable a breakpoint if we do
3072 a longjmp(). When we hit that breakpoint, call
3073 set_longjmp_resume_breakpoint() to figure out where we are going. */
3076 enable_longjmp_breakpoint()
3078 register struct breakpoint *b;
3081 if (b->type == bp_longjmp)
3083 b->enable = enabled;
3084 check_duplicates (b->address, b->section);
3089 disable_longjmp_breakpoint()
3091 register struct breakpoint *b;
3094 if ( b->type == bp_longjmp
3095 || b->type == bp_longjmp_resume)
3097 b->enable = disabled;
3098 check_duplicates (b->address, b->section);
3104 remove_solib_event_breakpoints ()
3106 register struct breakpoint *b, *temp;
3108 ALL_BREAKPOINTS_SAFE (b, temp)
3109 if (b->type == bp_shlib_event)
3110 delete_breakpoint (b);
3114 create_solib_event_breakpoint (address)
3117 struct breakpoint *b;
3118 struct symtab_and_line sal;
3120 INIT_SAL (&sal); /* initialize to zeroes */
3122 sal.section = find_pc_overlay (sal.pc);
3123 b = set_raw_breakpoint (sal);
3124 b->number = internal_breakpoint_number--;
3125 b->disposition = donttouch;
3126 b->type = bp_shlib_event;
3130 disable_breakpoints_in_shlibs ()
3132 struct breakpoint * b;
3133 int disabled_shlib_breaks = 0;
3135 /* See also: insert_breakpoints, under DISABLE_UNSETTABLE_BREAK. */
3138 #if defined (PC_SOLIB)
3139 if (((b->type == bp_breakpoint) ||
3140 (b->type == bp_hardware_breakpoint)) &&
3141 (b->enable != shlib_disabled) &&
3142 (b->enable != call_disabled) &&
3144 PC_SOLIB (b->address))
3146 b->enable = shlib_disabled;
3147 if (!disabled_shlib_breaks)
3149 target_terminal_ours_for_output ();
3150 printf_filtered ("Temporarily disabling shared library breakpoints:\n");
3152 disabled_shlib_breaks = 1;
3153 printf_filtered ("%d ", b->number);
3157 if (disabled_shlib_breaks)
3158 printf_filtered ("\n");
3161 /* Try to reenable any breakpoints in shared libraries. */
3163 re_enable_breakpoints_in_shlibs ()
3165 struct breakpoint *b;
3168 if (b->enable == shlib_disabled)
3172 /* Do not reenable the breakpoint if the shared library
3173 is still not mapped in. */
3174 if (target_read_memory (b->address, buf, 1) == 0)
3175 b->enable = enabled;
3182 create_solib_load_unload_event_breakpoint (hookname, tempflag, dll_pathname, cond_string, bp_kind)
3185 char * dll_pathname;
3187 enum bptype bp_kind;
3189 struct breakpoint * b;
3190 struct symtabs_and_lines sals;
3191 struct symtab_and_line sal;
3192 struct cleanup * old_chain;
3193 struct cleanup * canonical_strings_chain = NULL;
3195 char * addr_start = hookname;
3196 char * addr_end = NULL;
3197 char ** canonical = (char **) NULL;
3198 int thread = -1; /* All threads. */
3200 /* Set a breakpoint on the specified hook. */
3201 sals = decode_line_1 (&hookname, 1, (struct symtab *) NULL, 0, &canonical);
3202 addr_end = hookname;
3204 if (sals.nelts == 0)
3206 warning ("Unable to set a breakpoint on dynamic linker callback.");
3207 warning ("Suggest linking with /opt/langtools/lib/end.o.");
3208 warning ("GDB will be unable to track shl_load/shl_unload calls");
3211 if (sals.nelts != 1)
3213 warning ("Unable to set a unique breakpoint on dynamic linker callback.");
3214 warning ("GDB will be unable to track shl_load/shl_unload calls");
3218 /* Make sure that all storage allocated in decode_line_1 gets freed in case
3219 the following errors out. */
3220 old_chain = make_cleanup (free, sals.sals);
3221 if (canonical != (char **)NULL)
3223 make_cleanup (free, canonical);
3224 canonical_strings_chain = make_cleanup (null_cleanup, 0);
3225 if (canonical[0] != NULL)
3226 make_cleanup (free, canonical[0]);
3229 resolve_sal_pc (&sals.sals[0]);
3231 /* Remove the canonical strings from the cleanup, they are needed below. */
3232 if (canonical != (char **)NULL)
3233 discard_cleanups (canonical_strings_chain);
3235 b = set_raw_breakpoint (sals.sals[0]);
3236 set_breakpoint_count (breakpoint_count + 1);
3237 b->number = breakpoint_count;
3239 b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3242 if (canonical != (char **)NULL && canonical[0] != NULL)
3243 b->addr_string = canonical[0];
3244 else if (addr_start)
3245 b->addr_string = savestring (addr_start, addr_end - addr_start);
3247 b->enable = enabled;
3248 b->disposition = tempflag ? del : donttouch;
3250 if (dll_pathname == NULL)
3251 b->dll_pathname = NULL;
3254 b->dll_pathname = (char *) xmalloc (strlen (dll_pathname) + 1);
3255 strcpy (b->dll_pathname, dll_pathname);
3260 do_cleanups (old_chain);
3264 create_solib_load_event_breakpoint (hookname, tempflag, dll_pathname, cond_string)
3267 char * dll_pathname;
3270 create_solib_load_unload_event_breakpoint (hookname,
3278 create_solib_unload_event_breakpoint (hookname, tempflag, dll_pathname, cond_string)
3281 char * dll_pathname;
3284 create_solib_load_unload_event_breakpoint (hookname,
3292 create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_kind)
3295 enum bptype bp_kind;
3297 struct symtab_and_line sal;
3298 struct breakpoint * b;
3299 int thread = -1; /* All threads. */
3306 b = set_raw_breakpoint (sal);
3307 set_breakpoint_count (breakpoint_count + 1);
3308 b->number = breakpoint_count;
3310 b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3312 b->addr_string = NULL;
3313 b->enable = enabled;
3314 b->disposition = tempflag ? del : donttouch;
3315 b->forked_inferior_pid = 0;
3323 create_fork_event_catchpoint (tempflag, cond_string)
3327 create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_fork);
3331 create_vfork_event_catchpoint (tempflag, cond_string)
3335 create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_vfork);
3339 create_exec_event_catchpoint (tempflag, cond_string)
3343 struct symtab_and_line sal;
3344 struct breakpoint * b;
3345 int thread = -1; /* All threads. */
3352 b = set_raw_breakpoint (sal);
3353 set_breakpoint_count (breakpoint_count + 1);
3354 b->number = breakpoint_count;
3356 b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3358 b->addr_string = NULL;
3359 b->enable = enabled;
3360 b->disposition = tempflag ? del : donttouch;
3362 b->type = bp_catch_exec;
3368 hw_breakpoint_used_count()
3370 register struct breakpoint *b;
3375 if (b->type == bp_hardware_breakpoint && b->enable == enabled)
3383 hw_watchpoint_used_count(type, other_type_used)
3385 int *other_type_used;
3387 register struct breakpoint *b;
3390 *other_type_used = 0;
3393 if (b->enable == enabled)
3395 if (b->type == type) i++;
3396 else if ((b->type == bp_hardware_watchpoint ||
3397 b->type == bp_read_watchpoint ||
3398 b->type == bp_access_watchpoint)
3399 && b->enable == enabled)
3400 *other_type_used = 1;
3406 /* Call this after hitting the longjmp() breakpoint. Use this to set a new
3407 breakpoint at the target of the jmp_buf.
3409 FIXME - This ought to be done by setting a temporary breakpoint that gets
3410 deleted automatically... */
3413 set_longjmp_resume_breakpoint(pc, frame)
3415 struct frame_info *frame;
3417 register struct breakpoint *b;
3420 if (b->type == bp_longjmp_resume)
3423 b->enable = enabled;
3425 b->frame = frame->frame;
3428 check_duplicates (b->address, b->section);
3434 disable_watchpoints_before_interactive_call_start ()
3436 struct breakpoint * b;
3440 if (((b->type == bp_watchpoint)
3441 || (b->type == bp_hardware_watchpoint)
3442 || (b->type == bp_read_watchpoint)
3443 || (b->type == bp_access_watchpoint)
3444 || ep_is_exception_catchpoint (b))
3445 && (b->enable == enabled))
3447 b->enable = call_disabled;
3448 check_duplicates (b->address, b->section);
3454 enable_watchpoints_after_interactive_call_stop ()
3456 struct breakpoint * b;
3460 if (((b->type == bp_watchpoint)
3461 || (b->type == bp_hardware_watchpoint)
3462 || (b->type == bp_read_watchpoint)
3463 || (b->type == bp_access_watchpoint)
3464 || ep_is_exception_catchpoint (b))
3465 && (b->enable == call_disabled))
3467 b->enable = enabled;
3468 check_duplicates (b->address, b->section);
3474 /* Set a breakpoint that will evaporate an end of command
3475 at address specified by SAL.
3476 Restrict it to frame FRAME if FRAME is nonzero. */
3479 set_momentary_breakpoint (sal, frame, type)
3480 struct symtab_and_line sal;
3481 struct frame_info *frame;
3484 register struct breakpoint *b;
3485 b = set_raw_breakpoint (sal);
3487 b->enable = enabled;
3488 b->disposition = donttouch;
3489 b->frame = (frame ? frame->frame : 0);
3491 /* If we're debugging a multi-threaded program, then we
3492 want momentary breakpoints to be active in only a
3493 single thread of control. */
3494 if (in_thread_list (inferior_pid))
3495 b->thread = pid_to_thread_id (inferior_pid);
3501 /* Tell the user we have just set a breakpoint B. */
3505 struct breakpoint *b;
3509 /* FIXME: This is misplaced; mention() is called by things (like hitting a
3510 watchpoint) other than breakpoint creation. It should be possible to
3511 clean this up and at the same time replace the random calls to
3512 breakpoint_changed with this hook, as has already been done for
3513 delete_breakpoint_hook and so on. */
3514 if (create_breakpoint_hook)
3515 create_breakpoint_hook (b);
3520 printf_filtered ("(apparently deleted?) Eventpoint %d: ", b->number);
3523 printf_filtered ("Watchpoint %d: ", b->number);
3524 print_expression (b->exp, gdb_stdout);
3526 case bp_hardware_watchpoint:
3527 printf_filtered ("Hardware watchpoint %d: ", b->number);
3528 print_expression (b->exp, gdb_stdout);
3530 case bp_read_watchpoint:
3531 printf_filtered ("Hardware read watchpoint %d: ", b->number);
3532 print_expression (b->exp, gdb_stdout);
3534 case bp_access_watchpoint:
3535 printf_filtered ("Hardware access (read/write) watchpoint %d: ",b->number);
3536 print_expression (b->exp, gdb_stdout);
3539 printf_filtered ("Breakpoint %d", b->number);
3542 case bp_hardware_breakpoint:
3543 printf_filtered ("Hardware assisted breakpoint %d", b->number);
3547 case bp_catch_unload:
3548 printf_filtered ("Catchpoint %d (%s %s)",
3550 (b->type == bp_catch_load) ? "load" : "unload",
3551 (b->dll_pathname != NULL) ? b->dll_pathname : "<any library>");
3554 case bp_catch_vfork:
3555 printf_filtered ("Catchpoint %d (%s)",
3557 (b->type == bp_catch_fork) ? "fork" : "vfork");
3560 printf_filtered ("Catchpoint %d (exec)",
3563 case bp_catch_catch:
3564 case bp_catch_throw:
3565 printf_filtered ("Catchpoint %d (%s)",
3567 (b->type == bp_catch_catch) ? "catch" : "throw");
3573 case bp_longjmp_resume:
3574 case bp_step_resume:
3575 case bp_through_sigtramp:
3577 case bp_watchpoint_scope:
3578 case bp_shlib_event:
3583 if (addressprint || b->source_file == NULL)
3585 printf_filtered (" at ");
3586 print_address_numeric (b->address, 1, gdb_stdout);
3589 printf_filtered (": file %s, line %d.",
3590 b->source_file, b->line_number);
3591 TUIDO(((TuiOpaqueFuncPtr)tui_vAllSetHasBreakAt, b, 1));
3592 TUIDO(((TuiOpaqueFuncPtr)tuiUpdateAllExecInfos));
3594 printf_filtered ("\n");
3598 /* Set a breakpoint according to ARG (function, linenum or *address)
3599 flag: first bit : 0 non-temporary, 1 temporary.
3600 second bit : 0 normal breakpoint, 1 hardware breakpoint. */
3603 break_command_1 (arg, flag, from_tty)
3607 int tempflag, hardwareflag;
3608 struct symtabs_and_lines sals;
3609 struct symtab_and_line sal;
3610 register struct expression *cond = 0;
3611 register struct breakpoint *b;
3613 /* Pointers in arg to the start, and one past the end, of the condition. */
3614 char *cond_start = NULL;
3615 char *cond_end = NULL;
3616 /* Pointers in arg to the start, and one past the end,
3617 of the address part. */
3618 char *addr_start = NULL;
3619 char *addr_end = NULL;
3620 struct cleanup *old_chain;
3621 struct cleanup *canonical_strings_chain = NULL;
3622 char **canonical = (char **)NULL;
3626 hardwareflag = flag & BP_HARDWAREFLAG;
3627 tempflag = flag & BP_TEMPFLAG;
3632 INIT_SAL (&sal); /* initialize to zeroes */
3634 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
3636 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
3637 && (arg[2] == ' ' || arg[2] == '\t')))
3639 if (default_breakpoint_valid)
3641 sals.sals = (struct symtab_and_line *)
3642 xmalloc (sizeof (struct symtab_and_line));
3643 sal.pc = default_breakpoint_address;
3644 sal.line = default_breakpoint_line;
3645 sal.symtab = default_breakpoint_symtab;
3646 sal.section = find_pc_overlay (sal.pc);
3651 error ("No default breakpoint address now.");
3657 /* Force almost all breakpoints to be in terms of the
3658 current_source_symtab (which is decode_line_1's default). This
3659 should produce the results we want almost all of the time while
3660 leaving default_breakpoint_* alone. */
3661 if (default_breakpoint_valid
3662 && (!current_source_symtab
3663 || (arg && (*arg == '+' || *arg == '-'))))
3664 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
3665 default_breakpoint_line, &canonical);
3667 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, &canonical);
3675 /* Make sure that all storage allocated in decode_line_1 gets freed in case
3676 the following `for' loop errors out. */
3677 old_chain = make_cleanup (free, sals.sals);
3678 if (canonical != (char **)NULL)
3680 make_cleanup (free, canonical);
3681 canonical_strings_chain = make_cleanup (null_cleanup, 0);
3682 for (i = 0; i < sals.nelts; i++)
3684 if (canonical[i] != NULL)
3685 make_cleanup (free, canonical[i]);
3689 thread = -1; /* No specific thread yet */
3691 /* Resolve all line numbers to PC's, and verify that conditions
3692 can be parsed, before setting any breakpoints. */
3693 for (i = 0; i < sals.nelts; i++)
3695 char *tok, *end_tok;
3698 resolve_sal_pc (&sals.sals[i]);
3700 /* It's possible for the PC to be nonzero, but still an illegal
3701 value on some targets.
3703 For example, on HP-UX if you start gdb, and before running the
3704 inferior you try to set a breakpoint on a shared library function
3705 "foo" where the inferior doesn't call "foo" directly but does
3706 pass its address to another function call, then we do find a
3707 minimal symbol for the "foo", but it's address is invalid.
3708 (Appears to be an index into a table that the loader sets up
3709 when the inferior is run.)
3711 Give the target a chance to bless sals.sals[i].pc before we
3712 try to make a breakpoint for it. */
3713 if (PC_REQUIRES_RUN_BEFORE_USE(sals.sals[i].pc))
3715 error ("Cannot break on %s without a running program.", addr_start);
3722 while (*tok == ' ' || *tok == '\t')
3727 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
3730 toklen = end_tok - tok;
3732 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
3734 tok = cond_start = end_tok + 1;
3735 cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
3738 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
3744 thread = strtol (tok, &tok, 0);
3746 error ("Junk after thread keyword.");
3747 if (!valid_thread_id (thread))
3748 error ("Unknown thread %d\n", thread);
3751 error ("Junk at end of arguments.");
3756 int i, target_resources_ok;
3758 i = hw_breakpoint_used_count ();
3759 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
3760 bp_hardware_breakpoint, i + sals.nelts, 0);
3761 if (target_resources_ok == 0)
3762 error ("No hardware breakpoint support in the target.");
3763 else if (target_resources_ok < 0)
3764 error ("Hardware breakpoints used exceeds limit.");
3767 /* Remove the canonical strings from the cleanup, they are needed below. */
3768 if (canonical != (char **)NULL)
3769 discard_cleanups (canonical_strings_chain);
3771 /* Now set all the breakpoints. */
3772 for (i = 0; i < sals.nelts; i++)
3777 describe_other_breakpoints (sal.pc, sal.section);
3779 b = set_raw_breakpoint (sal);
3780 set_breakpoint_count (breakpoint_count + 1);
3781 b->number = breakpoint_count;
3782 b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
3786 /* If a canonical line spec is needed use that instead of the
3788 if (canonical != (char **)NULL && canonical[i] != NULL)
3789 b->addr_string = canonical[i];
3790 else if (addr_start)
3791 b->addr_string = savestring (addr_start, addr_end - addr_start);
3793 b->cond_string = savestring (cond_start, cond_end - cond_start);
3795 b->enable = enabled;
3796 b->disposition = tempflag ? del : donttouch;
3802 printf_filtered ("Multiple breakpoints were set.\n");
3803 printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
3805 do_cleanups (old_chain);
3809 break_at_finish_at_depth_command_1 (arg, flag, from_tty)
3814 struct frame_info *frame;
3815 CORE_ADDR low, high, selected_pc = 0;
3816 char *extra_args, *level_arg, *addr_string;
3817 int extra_args_len = 0, if_arg = 0;
3820 (arg[0] == 'i' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\t')))
3823 if (default_breakpoint_valid)
3827 selected_pc = selected_frame->pc;
3832 error ("No selected frame.");
3835 error ("No default breakpoint address now.");
3839 extra_args = strchr (arg, ' ');
3843 extra_args_len = strlen (extra_args);
3844 level_arg = (char *) xmalloc (extra_args - arg);
3845 strncpy (level_arg, arg, extra_args - arg - 1);
3846 level_arg[extra_args - arg - 1] = '\0';
3850 level_arg = (char *) xmalloc (strlen (arg) + 1);
3851 strcpy (level_arg, arg);
3854 frame = parse_frame_specification (level_arg);
3856 selected_pc = frame->pc;
3863 extra_args_len = strlen (arg);
3868 if (find_pc_partial_function(selected_pc, (char **)NULL, &low, &high))
3870 addr_string = (char *) xmalloc (26 + extra_args_len);
3872 sprintf (addr_string, "*0x%x %s", high, extra_args);
3874 sprintf (addr_string, "*0x%x", high);
3875 break_command_1 (addr_string, flag, from_tty);
3879 error ("No function contains the specified address");
3882 error ("Unable to set breakpoint at procedure exit");
3887 break_at_finish_command_1 (arg, flag, from_tty)
3892 char *addr_string, *break_string, *beg_addr_string;
3893 CORE_ADDR low, high;
3894 struct symtabs_and_lines sals;
3895 struct symtab_and_line sal;
3896 struct cleanup *old_chain;
3898 int extra_args_len = 0;
3902 (arg[0] == 'i' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\t')))
3904 if (default_breakpoint_valid)
3908 addr_string = (char *) xmalloc (15);
3909 sprintf (addr_string, "*0x%x", selected_frame->pc);
3914 error ("No selected frame.");
3917 error ("No default breakpoint address now.");
3921 addr_string = (char *) xmalloc (strlen (arg) + 1);
3922 strcpy (addr_string, arg);
3928 extra_args_len = strlen (arg);
3933 /* get the stuff after the function name or address */
3934 extra_args = strchr (arg, ' ');
3938 extra_args_len = strlen (extra_args);
3945 beg_addr_string = addr_string;
3946 sals = decode_line_1 (&addr_string, 1, (struct symtab *)NULL, 0,
3949 free (beg_addr_string);
3950 old_chain = make_cleanup (free, sals.sals);
3951 for (i = 0; (i < sals.nelts); i++)
3954 if (find_pc_partial_function (sal.pc, (char **)NULL, &low, &high))
3956 break_string = (char *) xmalloc (extra_args_len + 26);
3958 sprintf (break_string, "*0x%x %s", high, extra_args);
3960 sprintf (break_string, "*0x%x", high);
3961 break_command_1 (break_string, flag, from_tty);
3965 error ("No function contains the specified address");
3969 printf_filtered ("Multiple breakpoints were set.\n");
3970 printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
3972 do_cleanups(old_chain);
3976 /* Helper function for break_command_1 and disassemble_command. */
3979 resolve_sal_pc (sal)
3980 struct symtab_and_line *sal;
3984 if (sal->pc == 0 && sal->symtab != NULL)
3986 if (!find_line_pc (sal->symtab, sal->line, &pc))
3987 error ("No line %d in file \"%s\".",
3988 sal->line, sal->symtab->filename);
3992 if (sal->section == 0 && sal->symtab != NULL)
3994 struct blockvector *bv;
3999 bv = blockvector_for_pc_sect (sal->pc, 0, &index, sal->symtab);
4002 b = BLOCKVECTOR_BLOCK (bv, index);
4003 sym = block_function (b);
4006 fixup_symbol_section (sym, sal->symtab->objfile);
4007 sal->section = SYMBOL_BFD_SECTION (sym);
4011 /* It really is worthwhile to have the section, so we'll just
4012 have to look harder. This case can be executed if we have
4013 line numbers but no functions (as can happen in assembly
4016 struct minimal_symbol *msym;
4018 msym = lookup_minimal_symbol_by_pc (sal->pc);
4020 sal->section = SYMBOL_BFD_SECTION (msym);
4027 break_command (arg, from_tty)
4031 break_command_1 (arg, 0, from_tty);
4035 break_at_finish_command (arg, from_tty)
4039 break_at_finish_command_1 (arg, 0, from_tty);
4043 break_at_finish_at_depth_command (arg, from_tty)
4047 break_at_finish_at_depth_command_1 (arg, 0, from_tty);
4051 tbreak_command (arg, from_tty)
4055 break_command_1 (arg, BP_TEMPFLAG, from_tty);
4059 tbreak_at_finish_command (arg, from_tty)
4063 break_at_finish_command_1 (arg, BP_TEMPFLAG, from_tty);
4067 hbreak_command (arg, from_tty)
4071 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
4075 thbreak_command (arg, from_tty)
4079 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
4083 stop_command (arg, from_tty)
4087 printf_filtered ("Specify the type of breakpoint to set.\n\
4088 Usage: stop in <function | address>\n\
4093 stopin_command (arg, from_tty)
4099 if (arg == (char *)NULL)
4101 else if (*arg != '*')
4106 /* look for a ':'. If this is a line number specification, then say
4107 it is bad, otherwise, it should be an address or function/method
4109 while (*argptr && !hasColon)
4111 hasColon = (*argptr == ':');
4116 badInput = (*argptr != ':'); /* Not a class::method */
4118 badInput = isdigit(*arg); /* a simple line number */
4122 printf_filtered("Usage: stop in <function | address>\n");
4124 break_command_1 (arg, 0, from_tty);
4128 stopat_command (arg, from_tty)
4134 if (arg == (char *)NULL || *arg == '*') /* no line number */
4141 /* look for a ':'. If there is a '::' then get out, otherwise
4142 it is probably a line number. */
4143 while (*argptr && !hasColon)
4145 hasColon = (*argptr == ':');
4150 badInput = (*argptr == ':'); /* we have class::method */
4152 badInput = !isdigit(*arg); /* not a line number */
4156 printf_filtered("Usage: stop at <line>\n");
4158 break_command_1 (arg, 0, from_tty);
4162 /* accessflag: 0: watch write, 1: watch read, 2: watch access(read or write) */
4164 watch_command_1 (arg, accessflag, from_tty)
4169 struct breakpoint *b;
4170 struct symtab_and_line sal;
4171 struct expression *exp;
4172 struct block *exp_valid_block;
4173 struct value *val, *mark;
4174 struct frame_info *frame;
4175 struct frame_info *prev_frame = NULL;
4176 char *exp_start = NULL;
4177 char *exp_end = NULL;
4178 char *tok, *end_tok;
4180 char *cond_start = NULL;
4181 char *cond_end = NULL;
4182 struct expression *cond = NULL;
4183 int i, other_type_used, target_resources_ok = 0;
4184 enum bptype bp_type;
4187 INIT_SAL (&sal); /* initialize to zeroes */
4189 /* Parse arguments. */
4190 innermost_block = NULL;
4192 exp = parse_exp_1 (&arg, 0, 0);
4194 exp_valid_block = innermost_block;
4195 mark = value_mark ();
4196 val = evaluate_expression (exp);
4197 release_value (val);
4198 if (VALUE_LAZY (val))
4199 value_fetch_lazy (val);
4202 while (*tok == ' ' || *tok == '\t')
4206 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
4209 toklen = end_tok - tok;
4210 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
4212 tok = cond_start = end_tok + 1;
4213 cond = parse_exp_1 (&tok, 0, 0);
4217 error("Junk at end of command.");
4219 if (accessflag == 1) bp_type = bp_read_watchpoint;
4220 else if (accessflag == 2) bp_type = bp_access_watchpoint;
4221 else bp_type = bp_hardware_watchpoint;
4223 mem_cnt = can_use_hardware_watchpoint (val);
4224 if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
4225 error ("Expression cannot be implemented with read/access watchpoint.");
4227 i = hw_watchpoint_used_count (bp_type, &other_type_used);
4228 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
4229 bp_type, i + mem_cnt, other_type_used);
4230 if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
4231 error ("Target does not have this type of hardware watchpoint support.");
4232 if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
4233 error ("Target resources have been allocated for other types of watchpoints.");
4236 #if defined(HPUXHPPA)
4237 /* ??rehrauer: DTS #CHFts23014 notes that on HP-UX if you set a h/w
4238 watchpoint before the "run" command, the inferior dies with a e.g.,
4239 SIGILL once you start it. I initially believed this was due to a
4240 bad interaction between page protection traps and the initial
4241 startup sequence by the dynamic linker.
4243 However, I tried avoiding that by having HP-UX's implementation of
4244 TARGET_CAN_USE_HW_WATCHPOINT return FALSE if there was no inferior_pid
4245 yet, which forced slow watches before a "run" or "attach", and it
4246 still fails somewhere in the startup code.
4248 Until I figure out what's happening, I'm disallowing watches altogether
4249 before the "run" or "attach" command. We'll tell the user they must
4250 set watches after getting the program started. */
4251 if (! target_has_execution)
4253 warning ("can't do that without a running program; try \"break main\", \"run\" first");
4256 #endif /* HPUXHPPA */
4258 /* Now set up the breakpoint. */
4259 b = set_raw_breakpoint (sal);
4260 set_breakpoint_count (breakpoint_count + 1);
4261 b->number = breakpoint_count;
4262 b->disposition = donttouch;
4264 b->exp_valid_block = exp_valid_block;
4265 b->exp_string = savestring (exp_start, exp_end - exp_start);
4269 b->cond_string = savestring (cond_start, cond_end - cond_start);
4273 frame = block_innermost_frame (exp_valid_block);
4276 prev_frame = get_prev_frame (frame);
4277 b->watchpoint_frame = frame->frame;
4280 b->watchpoint_frame = (CORE_ADDR)0;
4282 if (mem_cnt && target_resources_ok > 0)
4285 b->type = bp_watchpoint;
4287 /* If the expression is "local", then set up a "watchpoint scope"
4288 breakpoint at the point where we've left the scope of the watchpoint
4290 if (innermost_block)
4294 struct breakpoint *scope_breakpoint;
4295 struct symtab_and_line scope_sal;
4297 INIT_SAL (&scope_sal); /* initialize to zeroes */
4298 scope_sal.pc = get_frame_pc (prev_frame);
4299 scope_sal.section = find_pc_overlay (scope_sal.pc);
4301 scope_breakpoint = set_raw_breakpoint (scope_sal);
4302 set_breakpoint_count (breakpoint_count + 1);
4303 scope_breakpoint->number = breakpoint_count;
4305 scope_breakpoint->type = bp_watchpoint_scope;
4306 scope_breakpoint->enable = enabled;
4308 /* Automatically delete the breakpoint when it hits. */
4309 scope_breakpoint->disposition = del;
4311 /* Only break in the proper frame (help with recursion). */
4312 scope_breakpoint->frame = prev_frame->frame;
4314 /* Set the address at which we will stop. */
4315 scope_breakpoint->address = get_frame_pc (prev_frame);
4317 /* The scope breakpoint is related to the watchpoint. We
4318 will need to act on them together. */
4319 b->related_breakpoint = scope_breakpoint;
4322 value_free_to_mark (mark);
4326 /* Return count of locations need to be watched and can be handled
4327 in hardware. If the watchpoint can not be handled
4328 in hardware return zero. */
4330 #if !defined(TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT)
4331 #define TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(byte_size) \
4332 ((byte_size) <= (REGISTER_SIZE))
4336 can_use_hardware_watchpoint (v)
4339 int found_memory_cnt = 0;
4341 /* Did the user specifically forbid us to use hardware watchpoints? */
4342 if (! can_use_hw_watchpoints)
4345 /* Make sure all the intermediate values are in memory. Also make sure
4346 we found at least one memory expression. Guards against watch 0x12345,
4347 which is meaningless, but could cause errors if one tries to insert a
4348 hardware watchpoint for the constant expression. */
4349 for ( ; v; v = v->next)
4351 if (v->lval == lval_memory)
4353 if (TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT (TYPE_LENGTH (VALUE_TYPE (v))))
4356 else if (v->lval != not_lval && v->modifiable == 0)
4360 /* The expression itself looks suitable for using a hardware
4361 watchpoint, but give the target machine a chance to reject it. */
4362 return found_memory_cnt;
4365 static void watch_command (arg, from_tty)
4369 watch_command_1 (arg, 0, from_tty);
4372 static void rwatch_command (arg, from_tty)
4376 watch_command_1 (arg, 1, from_tty);
4379 static void awatch_command (arg, from_tty)
4383 watch_command_1 (arg, 2, from_tty);
4387 /* Helper routine for the until_command routine in infcmd.c. Here
4388 because it uses the mechanisms of breakpoints. */
4392 until_break_command (arg, from_tty)
4396 struct symtabs_and_lines sals;
4397 struct symtab_and_line sal;
4398 struct frame_info *prev_frame = get_prev_frame (selected_frame);
4399 struct breakpoint *breakpoint;
4400 struct cleanup *old_chain;
4402 clear_proceed_status ();
4404 /* Set a breakpoint where the user wants it and at return from
4407 if (default_breakpoint_valid)
4408 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
4409 default_breakpoint_line, (char ***)NULL);
4411 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, (char ***)NULL);
4413 if (sals.nelts != 1)
4414 error ("Couldn't get information on specified line.");
4417 free ((PTR)sals.sals); /* malloc'd, so freed */
4420 error ("Junk at end of arguments.");
4422 resolve_sal_pc (&sal);
4424 breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
4426 old_chain = make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
4428 /* Keep within the current frame */
4432 sal = find_pc_line (prev_frame->pc, 0);
4433 sal.pc = prev_frame->pc;
4434 breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
4435 make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
4438 proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
4439 do_cleanups(old_chain);
4443 /* These aren't used; I don't konw what they were for. */
4444 /* Set a breakpoint at the catch clause for NAME. */
4446 catch_breakpoint (name)
4452 disable_catch_breakpoint ()
4457 delete_catch_breakpoint ()
4462 enable_catch_breakpoint ()
4469 struct sal_chain *next;
4470 struct symtab_and_line sal;
4473 /* Not really used -- invocation in handle_gnu_4_16_catch_command
4474 had been commented out in the v.4.16 sources, and stays
4475 disabled there now because "catch NAME" syntax isn't allowed.
4477 /* This isn't used; I don't know what it was for. */
4478 /* For each catch clause identified in ARGS, run FUNCTION
4479 with that clause as an argument. */
4480 static struct symtabs_and_lines
4481 map_catch_names (args, function)
4485 register char *p = args;
4487 struct symtabs_and_lines sals;
4489 struct sal_chain *sal_chain = 0;
4493 error_no_arg ("one or more catch names");
4501 /* Don't swallow conditional part. */
4502 if (p1[0] == 'i' && p1[1] == 'f'
4503 && (p1[2] == ' ' || p1[2] == '\t'))
4509 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
4513 if (*p1 && *p1 != ' ' && *p1 != '\t')
4514 error ("Arguments must be catch names.");
4520 struct sal_chain *next = (struct sal_chain *)
4521 alloca (sizeof (struct sal_chain));
4522 next->next = sal_chain;
4523 next->sal = get_catch_sal (p);
4528 printf_unfiltered ("No catch clause for exception %s.\n", p);
4533 while (*p == ' ' || *p == '\t') p++;
4537 /* This shares a lot of code with `print_frame_label_vars' from stack.c. */
4539 static struct symtabs_and_lines
4540 get_catch_sals (this_level_only)
4541 int this_level_only;
4543 register struct blockvector *bl;
4544 register struct block *block;
4545 int index, have_default = 0;
4547 struct symtabs_and_lines sals;
4548 struct sal_chain *sal_chain = 0;
4549 char *blocks_searched;
4551 /* Not sure whether an error message is always the correct response,
4552 but it's better than a core dump. */
4553 if (selected_frame == NULL)
4554 error ("No selected frame.");
4555 block = get_frame_block (selected_frame);
4556 pc = selected_frame->pc;
4562 error ("No symbol table info available.\n");
4564 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
4565 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
4566 memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
4570 CORE_ADDR end = BLOCK_END (block) - 4;
4573 if (bl != blockvector_for_pc (end, &index))
4574 error ("blockvector blotch");
4575 if (BLOCKVECTOR_BLOCK (bl, index) != block)
4576 error ("blockvector botch");
4577 last_index = BLOCKVECTOR_NBLOCKS (bl);
4580 /* Don't print out blocks that have gone by. */
4581 while (index < last_index
4582 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
4585 while (index < last_index
4586 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
4588 if (blocks_searched[index] == 0)
4590 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
4593 register struct symbol *sym;
4595 nsyms = BLOCK_NSYMS (b);
4597 for (i = 0; i < nsyms; i++)
4599 sym = BLOCK_SYM (b, i);
4600 if (STREQ (SYMBOL_NAME (sym), "default"))
4606 if (SYMBOL_CLASS (sym) == LOC_LABEL)
4608 struct sal_chain *next = (struct sal_chain *)
4609 alloca (sizeof (struct sal_chain));
4610 next->next = sal_chain;
4611 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
4615 blocks_searched[index] = 1;
4621 if (sal_chain && this_level_only)
4624 /* After handling the function's top-level block, stop.
4625 Don't continue to its superblock, the block of
4626 per-file symbols. */
4627 if (BLOCK_FUNCTION (block))
4629 block = BLOCK_SUPERBLOCK (block);
4634 struct sal_chain *tmp_chain;
4636 /* Count the number of entries. */
4637 for (index = 0, tmp_chain = sal_chain; tmp_chain;
4638 tmp_chain = tmp_chain->next)
4642 sals.sals = (struct symtab_and_line *)
4643 xmalloc (index * sizeof (struct symtab_and_line));
4644 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
4645 sals.sals[index] = sal_chain->sal;
4652 ep_skip_leading_whitespace (s)
4655 if ((s == NULL) || (*s == NULL))
4657 while (isspace(**s))
4661 /* This function examines a string, and attempts to find a token
4662 that might be an event name in the leading characters. If a
4663 possible match is found, a pointer to the last character of
4664 the token is returned. Else, NULL is returned. */
4666 ep_find_event_name_end (arg)
4670 char * event_name_end = NULL;
4672 /* If we could depend upon the presense of strrpbrk, we'd use that... */
4676 /* We break out of the loop when we find a token delimiter.
4677 Basically, we're looking for alphanumerics and underscores;
4678 anything else delimites the token. */
4681 if (! isalnum(*s) && (*s != '_'))
4687 return event_name_end;
4691 /* This function attempts to parse an optional "if <cond>" clause
4692 from the arg string. If one is not found, it returns NULL.
4694 Else, it returns a pointer to the condition string. (It does not
4695 attempt to evaluate the string against a particular block.) And,
4696 it updates arg to point to the first character following the parsed
4697 if clause in the arg string. */
4699 ep_parse_optional_if_clause (arg)
4704 if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace((*arg)[2]))
4707 /* Skip the "if" keyword. */
4710 /* Skip any extra leading whitespace, and record the start of the
4711 condition string. */
4712 ep_skip_leading_whitespace (arg);
4715 /* Assume that the condition occupies the remainder of the arg string. */
4716 (*arg) += strlen (cond_string);
4721 /* This function attempts to parse an optional filename from the arg
4722 string. If one is not found, it returns NULL.
4724 Else, it returns a pointer to the parsed filename. (This function
4725 makes no attempt to verify that a file of that name exists, or is
4726 accessible.) And, it updates arg to point to the first character
4727 following the parsed filename in the arg string.
4729 Note that clients needing to preserve the returned filename for
4730 future access should copy it to their own buffers. */
4732 ep_parse_optional_filename (arg)
4735 static char filename [1024];
4736 char * arg_p = *arg;
4740 if ((*arg_p == '\0') || isspace (*arg_p))
4758 /* Commands to deal with catching events, such as signals, exceptions,
4759 process start/exit, etc. */
4761 typedef enum {catch_fork, catch_vfork} catch_fork_kind;
4764 catch_fork_command_1 (fork_kind, arg, tempflag, from_tty)
4765 catch_fork_kind fork_kind;
4770 char * cond_string = NULL;
4772 ep_skip_leading_whitespace (&arg);
4774 /* The allowed syntax is:
4776 catch [v]fork if <cond>
4778 First, check if there's an if clause. */
4779 cond_string = ep_parse_optional_if_clause (&arg);
4781 if ((*arg != '\0') && !isspace (*arg))
4782 error ("Junk at end of arguments.");
4784 /* If this target supports it, create a fork or vfork catchpoint
4785 and enable reporting of such events. */
4786 switch (fork_kind) {
4788 create_fork_event_catchpoint (tempflag, cond_string);
4791 create_vfork_event_catchpoint (tempflag, cond_string);
4794 error ("unsupported or unknown fork kind; cannot catch it");
4800 catch_exec_command_1 (arg, tempflag, from_tty)
4805 char * cond_string = NULL;
4807 ep_skip_leading_whitespace (&arg);
4809 /* The allowed syntax is:
4811 catch exec if <cond>
4813 First, check if there's an if clause. */
4814 cond_string = ep_parse_optional_if_clause (&arg);
4816 if ((*arg != '\0') && !isspace (*arg))
4817 error ("Junk at end of arguments.");
4819 /* If this target supports it, create an exec catchpoint
4820 and enable reporting of such events. */
4821 create_exec_event_catchpoint (tempflag, cond_string);
4824 #if defined(SOLIB_ADD)
4826 catch_load_command_1 (arg, tempflag, from_tty)
4831 char * dll_pathname = NULL;
4832 char * cond_string = NULL;
4834 ep_skip_leading_whitespace (&arg);
4836 /* The allowed syntax is:
4838 catch load if <cond>
4839 catch load <filename>
4840 catch load <filename> if <cond>
4842 The user is not allowed to specify the <filename> after an
4845 We'll ignore the pathological case of a file named "if".
4847 First, check if there's an if clause. If so, then there
4848 cannot be a filename. */
4849 cond_string = ep_parse_optional_if_clause (&arg);
4851 /* If there was an if clause, then there cannot be a filename.
4852 Else, there might be a filename and an if clause. */
4853 if (cond_string == NULL)
4855 dll_pathname = ep_parse_optional_filename (&arg);
4856 ep_skip_leading_whitespace (&arg);
4857 cond_string = ep_parse_optional_if_clause (&arg);
4860 if ((*arg != '\0') && !isspace (*arg))
4861 error ("Junk at end of arguments.");
4863 /* Create a load breakpoint that only triggers when a load of
4864 the specified dll (or any dll, if no pathname was specified)
4866 SOLIB_CREATE_CATCH_LOAD_HOOK (inferior_pid, tempflag, dll_pathname, cond_string);
4870 catch_unload_command_1 (arg, tempflag, from_tty)
4875 char * dll_pathname = NULL;
4876 char * cond_string = NULL;
4878 ep_skip_leading_whitespace (&arg);
4880 /* The allowed syntax is:
4882 catch unload if <cond>
4883 catch unload <filename>
4884 catch unload <filename> if <cond>
4886 The user is not allowed to specify the <filename> after an
4889 We'll ignore the pathological case of a file named "if".
4891 First, check if there's an if clause. If so, then there
4892 cannot be a filename. */
4893 cond_string = ep_parse_optional_if_clause (&arg);
4895 /* If there was an if clause, then there cannot be a filename.
4896 Else, there might be a filename and an if clause. */
4897 if (cond_string == NULL)
4899 dll_pathname = ep_parse_optional_filename (&arg);
4900 ep_skip_leading_whitespace (&arg);
4901 cond_string = ep_parse_optional_if_clause (&arg);
4904 if ((*arg != '\0') && !isspace (*arg))
4905 error ("Junk at end of arguments.");
4907 /* Create an unload breakpoint that only triggers when an unload of
4908 the specified dll (or any dll, if no pathname was specified)
4910 SOLIB_CREATE_CATCH_UNLOAD_HOOK (inferior_pid, tempflag, dll_pathname, cond_string);
4912 #endif /* SOLIB_ADD */
4914 /* Commands to deal with catching exceptions. */
4916 /* Set a breakpoint at the specified callback routine for an
4917 exception event callback */
4920 create_exception_catchpoint (tempflag, cond_string, ex_event, sal)
4923 enum exception_event_kind ex_event;
4924 struct symtab_and_line * sal;
4926 struct breakpoint * b;
4928 int thread = -1; /* All threads. */
4930 if (!sal) /* no exception support? */
4933 b = set_raw_breakpoint (*sal);
4934 set_breakpoint_count (breakpoint_count + 1);
4935 b->number = breakpoint_count;
4937 b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
4939 b->addr_string = NULL;
4940 b->enable = enabled;
4941 b->disposition = tempflag ? del : donttouch;
4944 case EX_EVENT_THROW:
4945 b->type = bp_catch_throw;
4947 case EX_EVENT_CATCH:
4948 b->type = bp_catch_catch;
4950 default: /* error condition */
4952 b->enable = disabled;
4953 error ("Internal error -- invalid catchpoint kind");
4958 /* Deal with "catch catch" and "catch throw" commands */
4961 catch_exception_command_1 (ex_event, arg, tempflag, from_tty)
4962 enum exception_event_kind ex_event;
4967 char * cond_string = NULL;
4968 struct symtab_and_line * sal = NULL;
4970 ep_skip_leading_whitespace (&arg);
4972 cond_string = ep_parse_optional_if_clause (&arg);
4974 if ((*arg != '\0') && !isspace (*arg))
4975 error ("Junk at end of arguments.");
4977 if ((ex_event != EX_EVENT_THROW) &&
4978 (ex_event != EX_EVENT_CATCH))
4979 error ("Unsupported or unknown exception event; cannot catch it");
4981 /* See if we can find a callback routine */
4982 sal = target_enable_exception_callback (ex_event, 1);
4986 /* We have callbacks from the runtime system for exceptions.
4987 Set a breakpoint on the sal found, if no errors */
4988 if (sal != (struct symtab_and_line *) -1)
4989 create_exception_catchpoint (tempflag, cond_string, ex_event, sal);
4991 return; /* something went wrong with setting up callbacks */
4995 /* No callbacks from runtime system for exceptions.
4996 Try GNU C++ exception breakpoints using labels in debug info. */
4997 if (ex_event == EX_EVENT_CATCH)
4999 handle_gnu_4_16_catch_command (arg, tempflag, from_tty);
5001 else if (ex_event == EX_EVENT_THROW)
5003 /* Set a breakpoint on __raise_exception () */
5005 fprintf_filtered (gdb_stderr, "Unsupported with this platform/compiler combination.\n");
5006 fprintf_filtered (gdb_stderr, "Perhaps you can achieve the effect you want by setting\n");
5007 fprintf_filtered (gdb_stderr, "a breakpoint on __raise_exception().\n");
5012 /* Cover routine to allow wrapping target_enable_exception_catchpoints
5013 inside a catch_errors */
5015 static struct symtab_and_line *
5016 cover_target_enable_exception_callback (args)
5017 args_for_catchpoint_enable * args;
5019 target_enable_exception_callback (args->kind, args->enable);
5024 /* This is the original v.4.16 and earlier version of the
5025 catch_command_1() function. Now that other flavours of "catch"
5026 have been introduced, and since exception handling can be handled
5027 in other ways (through target ops) also, this is used only for the
5028 GNU C++ exception handling system.
5029 Note: Only the "catch" flavour of GDB 4.16 is handled here. The
5030 "catch NAME" is now no longer allowed in catch_command_1(). Also,
5031 there was no code in GDB 4.16 for "catch throw".
5033 Called from catch_exception_command_1 () */
5037 handle_gnu_4_16_catch_command (arg, tempflag, from_tty)
5042 /* First, translate ARG into something we can deal with in terms
5045 struct symtabs_and_lines sals;
5046 struct symtab_and_line sal;
5047 register struct expression *cond = 0;
5048 register struct breakpoint *b;
5052 INIT_SAL (&sal); /* initialize to zeroes */
5054 /* If no arg given, or if first arg is 'if ', all active catch clauses
5055 are breakpointed. */
5057 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
5058 && (arg[2] == ' ' || arg[2] == '\t')))
5060 /* Grab all active catch clauses. */
5061 sals = get_catch_sals (0);
5065 /* Grab selected catch clauses. */
5066 error ("catch NAME not implemented");
5069 /* Not sure why this code has been disabled. I'm leaving
5070 it disabled. We can never come here now anyway
5071 since we don't allow the "catch NAME" syntax.
5074 /* This isn't used; I don't know what it was for. */
5075 sals = map_catch_names (arg, catch_breakpoint);
5083 for (i = 0; i < sals.nelts; i++)
5085 resolve_sal_pc (&sals.sals[i]);
5089 if (arg[0] == 'i' && arg[1] == 'f'
5090 && (arg[2] == ' ' || arg[2] == '\t'))
5091 cond = parse_exp_1 ((arg += 2, &arg),
5092 block_for_pc (sals.sals[i].pc), 0);
5094 error ("Junk at end of arguments.");
5099 for (i = 0; i < sals.nelts; i++)
5104 describe_other_breakpoints (sal.pc, sal.section);
5106 b = set_raw_breakpoint (sal);
5107 set_breakpoint_count (breakpoint_count + 1);
5108 b->number = breakpoint_count;
5109 b->type = bp_breakpoint; /* Important -- this is an ordinary breakpoint.
5110 For platforms with callback support for exceptions,
5111 create_exception_catchpoint() will create special
5112 bp types (bp_catch_catch and bp_catch_throw), and
5113 there is code in insert_breakpoints() and elsewhere
5114 that depends on that. */
5117 b->enable = enabled;
5118 b->disposition = tempflag ? del : donttouch;
5125 printf_unfiltered ("Multiple breakpoints were set.\n");
5126 printf_unfiltered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
5128 free ((PTR)sals.sals);
5132 /* This creates a temporary internal breakpoint
5133 just to placate infrun */
5134 static struct breakpoint *
5135 create_temp_exception_breakpoint (pc)
5138 struct symtab_and_line sal;
5139 struct breakpoint *b;
5146 b = set_raw_breakpoint (sal);
5148 error ("Internal error -- couldn't set temp exception breakpoint");
5150 b->type = bp_breakpoint;
5151 b->disposition = del;
5152 b->enable = enabled;
5154 b->number = internal_breakpoint_number--;
5160 catch_command_1 (arg, tempflag, from_tty)
5166 /* The first argument may be an event name, such as "start" or "load".
5167 If so, then handle it as such. If it doesn't match an event name,
5168 then attempt to interpret it as an exception name. (This latter is
5169 the v4.16-and-earlier GDB meaning of the "catch" command.)
5171 First, try to find the bounds of what might be an event name. */
5172 char * arg1_start = arg;
5176 if (arg1_start == NULL)
5178 /* Old behaviour was to use pre-v-4.16 syntax */
5179 /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
5181 /* Now, this is not allowed */
5182 error ("Catch requires an event name");
5185 arg1_end = ep_find_event_name_end (arg1_start);
5186 if (arg1_end == NULL)
5187 error ("catch requires an event");
5188 arg1_length = arg1_end + 1 - arg1_start;
5190 /* Try to match what we found against known event names. */
5191 if (strncmp (arg1_start, "signal", arg1_length) == 0)
5193 error ("Catch of signal not yet implemented");
5195 else if (strncmp (arg1_start, "catch", arg1_length) == 0)
5197 catch_exception_command_1 (EX_EVENT_CATCH, arg1_end+1, tempflag, from_tty);
5199 else if (strncmp (arg1_start, "throw", arg1_length) == 0)
5201 catch_exception_command_1 (EX_EVENT_THROW, arg1_end+1, tempflag, from_tty);
5203 else if (strncmp (arg1_start, "thread_start", arg1_length) == 0)
5205 error ("Catch of thread_start not yet implemented");
5207 else if (strncmp (arg1_start, "thread_exit", arg1_length) == 0)
5209 error ("Catch of thread_exit not yet implemented");
5211 else if (strncmp (arg1_start, "thread_join", arg1_length) == 0)
5213 error ("Catch of thread_join not yet implemented");
5215 else if (strncmp (arg1_start, "start", arg1_length) == 0)
5217 error ("Catch of start not yet implemented");
5219 else if (strncmp (arg1_start, "exit", arg1_length) == 0)
5221 error ("Catch of exit not yet implemented");
5223 else if (strncmp (arg1_start, "fork", arg1_length) == 0)
5225 #if defined(CHILD_INSERT_FORK_CATCHPOINT)
5226 catch_fork_command_1 (catch_fork, arg1_end+1, tempflag, from_tty);
5228 error ("Catch of fork not yet implemented");
5231 else if (strncmp (arg1_start, "vfork", arg1_length) == 0)
5233 #if defined(CHILD_INSERT_VFORK_CATCHPOINT)
5234 catch_fork_command_1 (catch_vfork, arg1_end+1, tempflag, from_tty);
5236 error ("Catch of vfork not yet implemented");
5239 else if (strncmp (arg1_start, "exec", arg1_length) == 0)
5241 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
5242 catch_exec_command_1 (arg1_end+1, tempflag, from_tty);
5244 error ("Catch of exec not yet implemented");
5247 else if (strncmp (arg1_start, "load", arg1_length) == 0)
5249 #if defined(SOLIB_ADD)
5250 catch_load_command_1 (arg1_end+1, tempflag, from_tty);
5252 error ("Catch of load not implemented");
5255 else if (strncmp (arg1_start, "unload", arg1_length) == 0)
5257 #if defined(SOLIB_ADD)
5258 catch_unload_command_1 (arg1_end+1, tempflag, from_tty);
5260 error ("Catch of load not implemented");
5263 else if (strncmp (arg1_start, "stop", arg1_length) == 0)
5265 error ("Catch of stop not yet implemented");
5268 /* This doesn't appear to be an event name */
5272 /* Pre-v.4.16 behaviour was to treat the argument
5273 as the name of an exception */
5274 /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
5275 /* Now this is not allowed */
5276 error ("Unknown event kind specified for catch");
5281 /* Used by the gui, could be made a worker for other things. */
5284 set_breakpoint_sal (sal)
5285 struct symtab_and_line sal;
5287 struct breakpoint *b;
5288 b = set_raw_breakpoint (sal);
5289 set_breakpoint_count (breakpoint_count + 1);
5290 b->number = breakpoint_count;
5291 b->type = bp_breakpoint;
5298 /* These aren't used; I don't know what they were for. */
5299 /* Disable breakpoints on all catch clauses described in ARGS. */
5301 disable_catch (args)
5304 /* Map the disable command to catch clauses described in ARGS. */
5307 /* Enable breakpoints on all catch clauses described in ARGS. */
5312 /* Map the disable command to catch clauses described in ARGS. */
5315 /* Delete breakpoints on all catch clauses in the active scope. */
5320 /* Map the delete command to catch clauses described in ARGS. */
5325 catch_command (arg, from_tty)
5329 catch_command_1 (arg, 0, from_tty);
5334 tcatch_command (arg, from_tty)
5338 catch_command_1 (arg, 1, from_tty);
5343 clear_command (arg, from_tty)
5347 register struct breakpoint *b, *b1;
5349 struct symtabs_and_lines sals;
5350 struct symtab_and_line sal;
5351 register struct breakpoint *found;
5356 sals = decode_line_spec (arg, 1);
5361 sals.sals = (struct symtab_and_line *)
5362 xmalloc (sizeof (struct symtab_and_line));
5363 INIT_SAL (&sal); /* initialize to zeroes */
5364 sal.line = default_breakpoint_line;
5365 sal.symtab = default_breakpoint_symtab;
5366 sal.pc = default_breakpoint_address;
5367 if (sal.symtab == 0)
5368 error ("No source file specified.");
5376 /* For each line spec given, delete bps which correspond
5377 to it. We do this in two loops: the first loop looks at
5378 the initial bp(s) in the chain which should be deleted,
5379 the second goes down the rest of the chain looking ahead
5380 one so it can take those bps off the chain without messing
5384 for (i = 0; i < sals.nelts; i++)
5386 /* If exact pc given, clear bpts at that pc.
5387 If line given (pc == 0), clear all bpts on specified line.
5388 If defaulting, clear all bpts on default line
5391 defaulting sal.pc != 0 tests to do
5396 1 0 <can't happen> */
5399 found = (struct breakpoint *) 0;
5402 while (breakpoint_chain
5403 /* Why don't we check here that this is not
5404 a watchpoint, etc., as we do below?
5405 I can't make it fail, but don't know
5406 what's stopping the failure: a watchpoint
5407 of the same address as "sal.pc" should
5408 wind up being deleted. */
5410 && ( ((sal.pc && (breakpoint_chain->address == sal.pc)) &&
5411 (overlay_debugging == 0 ||
5412 breakpoint_chain->section == sal.section))
5413 || ((default_match || (0 == sal.pc))
5414 && breakpoint_chain->source_file != NULL
5415 && sal.symtab != NULL
5416 && STREQ (breakpoint_chain->source_file, sal.symtab->filename)
5417 && breakpoint_chain->line_number == sal.line)))
5420 b1 = breakpoint_chain;
5421 breakpoint_chain = b1->next;
5429 && b->next->type != bp_none
5430 && b->next->type != bp_watchpoint
5431 && b->next->type != bp_hardware_watchpoint
5432 && b->next->type != bp_read_watchpoint
5433 && b->next->type != bp_access_watchpoint
5434 && ( ((sal.pc && (b->next->address == sal.pc)) &&
5435 (overlay_debugging == 0 ||
5436 b->next->section == sal.section))
5437 || ((default_match || (0 == sal.pc))
5438 && b->next->source_file != NULL
5439 && sal.symtab != NULL
5440 && STREQ (b->next->source_file, sal.symtab->filename)
5441 && b->next->line_number == sal.line)))
5454 error ("No breakpoint at %s.", arg);
5456 error ("No breakpoint at this line.");
5459 if (found->next) from_tty = 1; /* Always report if deleted more than one */
5460 if (from_tty) printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
5461 breakpoints_changed ();
5464 if (from_tty) printf_unfiltered ("%d ", found->number);
5466 delete_breakpoint (found);
5469 if (from_tty) putchar_unfiltered ('\n');
5471 free ((PTR)sals.sals);
5474 /* Delete breakpoint in BS if they are `delete' breakpoints and
5475 all breakpoints that are marked for deletion, whether hit or not.
5476 This is called after any breakpoint is hit, or after errors. */
5479 breakpoint_auto_delete (bs)
5482 struct breakpoint *b, *temp;
5484 for (; bs; bs = bs->next)
5485 if (bs->breakpoint_at && bs->breakpoint_at->disposition == del
5487 delete_breakpoint (bs->breakpoint_at);
5489 ALL_BREAKPOINTS_SAFE (b, temp)
5491 if (b->disposition == del_at_next_stop)
5492 delete_breakpoint (b);
5496 /* Delete a breakpoint and clean up all traces of it in the data structures. */
5499 delete_breakpoint (bpt)
5500 struct breakpoint *bpt;
5502 register struct breakpoint *b;
5506 error ("Internal error (attempted to delete a NULL breakpoint)");
5509 /* Has this bp already been deleted? This can happen because multiple
5510 lists can hold pointers to bp's. bpstat lists are especial culprits.
5512 One example of this happening is a watchpoint's scope bp. When the
5513 scope bp triggers, we notice that the watchpoint is out of scope, and
5514 delete it. We also delete its scope bp. But the scope bp is marked
5515 "auto-deleting", and is already on a bpstat. That bpstat is then
5516 checked for auto-deleting bp's, which are deleted.
5518 A real solution to this problem might involve reference counts in bp's,
5519 and/or giving them pointers back to their referencing bpstat's, and
5520 teaching delete_breakpoint to only free a bp's storage when no more
5521 references were extent. A cheaper bandaid was chosen. */
5522 if (bpt->type == bp_none)
5525 if (delete_breakpoint_hook)
5526 delete_breakpoint_hook (bpt);
5529 remove_breakpoint (bpt, mark_uninserted);
5531 if (breakpoint_chain == bpt)
5532 breakpoint_chain = bpt->next;
5534 /* If we have callback-style exception catchpoints, don't go through
5535 the adjustments to the C++ runtime library etc. if the inferior
5536 isn't actually running. target_enable_exception_callback for a
5537 null target ops vector gives an undesirable error message, so we
5538 check here and avoid it. Since currently (1997-09-17) only HP-UX aCC's
5539 exceptions are supported in this way, it's OK for now. FIXME */
5540 if (ep_is_exception_catchpoint (bpt) && target_has_execution)
5542 static char message1[] = "Error in deleting catchpoint %d:\n";
5543 static char message[sizeof (message1) + 30];
5544 args_for_catchpoint_enable args;
5546 sprintf (message, message1, bpt->number); /* Format possible error msg */
5547 args.kind = bpt->type == bp_catch_catch ? EX_EVENT_CATCH : EX_EVENT_THROW;
5549 (void) catch_errors ((int (*) PARAMS ((char *))) cover_target_enable_exception_callback,
5551 message, RETURN_MASK_ALL);
5558 b->next = bpt->next;
5562 /* Before turning off the visuals for the bp, check to see that
5563 there are no other bps at the same address. */
5570 clearIt = (b->address != bpt->address);
5577 TUIDO(((TuiOpaqueFuncPtr)tui_vAllSetHasBreakAt, bpt, 0));
5578 TUIDO(((TuiOpaqueFuncPtr)tuiUpdateAllExecInfos));
5582 check_duplicates (bpt->address, bpt->section);
5583 /* If this breakpoint was inserted, and there is another breakpoint
5584 at the same address, we need to insert the other breakpoint. */
5586 && bpt->type != bp_hardware_watchpoint
5587 && bpt->type != bp_read_watchpoint
5588 && bpt->type != bp_access_watchpoint
5589 && bpt->type != bp_catch_fork
5590 && bpt->type != bp_catch_vfork
5591 && bpt->type != bp_catch_exec)
5594 if (b->address == bpt->address
5595 && b->section == bpt->section
5597 && b->enable != disabled
5598 && b->enable != shlib_disabled
5599 && b->enable != call_disabled)
5602 val = target_insert_breakpoint (b->address, b->shadow_contents);
5605 target_terminal_ours_for_output ();
5606 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
5607 memory_error (val, b->address); /* which bombs us out */
5614 free_command_lines (&bpt->commands);
5617 if (bpt->cond_string != NULL)
5618 free (bpt->cond_string);
5619 if (bpt->addr_string != NULL)
5620 free (bpt->addr_string);
5621 if (bpt->exp != NULL)
5623 if (bpt->exp_string != NULL)
5624 free (bpt->exp_string);
5625 if (bpt->val != NULL)
5626 value_free (bpt->val);
5627 if (bpt->source_file != NULL)
5628 free (bpt->source_file);
5629 if (bpt->dll_pathname != NULL)
5630 free (bpt->dll_pathname);
5631 if (bpt->triggered_dll_pathname != NULL)
5632 free (bpt->triggered_dll_pathname);
5633 if (bpt->exec_pathname != NULL)
5634 free (bpt->exec_pathname);
5636 /* Be sure no bpstat's are pointing at it after it's been freed. */
5637 /* FIXME, how can we find all bpstat's?
5638 We just check stop_bpstat for now. */
5639 for (bs = stop_bpstat; bs; bs = bs->next)
5640 if (bs->breakpoint_at == bpt)
5642 bs->breakpoint_at = NULL;
5644 /* we'd call bpstat_clear_actions, but that free's stuff and due
5645 to the multiple pointers pointing to one item with no
5646 reference counts found anywhere through out the bpstat's (how
5647 do you spell fragile?), we don't want to free things twice --
5648 better a memory leak than a corrupt malloc pool! */
5649 bs->commands = NULL;
5652 /* On the chance that someone will soon try again to delete this same
5653 bp, we mark it as deleted before freeing its storage. */
5654 bpt->type = bp_none;
5660 delete_command (arg, from_tty)
5664 struct breakpoint *b, *temp;
5668 int breaks_to_delete = 0;
5670 /* Delete all breakpoints if no argument.
5671 Do not delete internal or call-dummy breakpoints, these
5672 have to be deleted with an explicit breakpoint number argument. */
5675 if (b->type != bp_call_dummy &&
5676 b->type != bp_shlib_event &&
5678 breaks_to_delete = 1;
5681 /* Ask user only if there are some breakpoints to delete. */
5683 || (breaks_to_delete && query ("Delete all breakpoints? ")))
5685 ALL_BREAKPOINTS_SAFE (b, temp)
5687 if (b->type != bp_call_dummy &&
5688 b->type != bp_shlib_event &&
5690 delete_breakpoint (b);
5695 map_breakpoint_numbers (arg, delete_breakpoint);
5698 /* Reset a breakpoint given it's struct breakpoint * BINT.
5699 The value we return ends up being the return value from catch_errors.
5700 Unused in this case. */
5703 breakpoint_re_set_one (bint)
5706 struct breakpoint *b = (struct breakpoint *)bint; /* get past catch_errs */
5709 struct symtabs_and_lines sals;
5711 enum enable save_enable;
5716 warning ("attempted to reset apparently deleted breakpoint #%d?\n", b->number);
5719 case bp_hardware_breakpoint:
5721 case bp_catch_unload:
5722 if (b->addr_string == NULL)
5724 /* Anything without a string can't be re-set. */
5725 delete_breakpoint (b);
5728 /* In case we have a problem, disable this breakpoint. We'll restore
5729 its status if we succeed. */
5730 save_enable = b->enable;
5731 b->enable = disabled;
5733 set_language (b->language);
5734 input_radix = b->input_radix;
5736 sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0, (char ***)NULL);
5737 for (i = 0; i < sals.nelts; i++)
5739 resolve_sal_pc (&sals.sals[i]);
5741 /* Reparse conditions, they might contain references to the
5743 if (b->cond_string != NULL)
5747 free ((PTR)b->cond);
5748 b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
5751 /* We need to re-set the breakpoint if the address changes...*/
5752 if (b->address != sals.sals[i].pc
5753 /* ...or new and old breakpoints both have source files, and
5754 the source file name or the line number changes... */
5755 || (b->source_file != NULL
5756 && sals.sals[i].symtab != NULL
5757 && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
5758 || b->line_number != sals.sals[i].line)
5760 /* ...or we switch between having a source file and not having
5762 || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
5765 if (b->source_file != NULL)
5766 free (b->source_file);
5767 if (sals.sals[i].symtab == NULL)
5768 b->source_file = NULL;
5771 savestring (sals.sals[i].symtab->filename,
5772 strlen (sals.sals[i].symtab->filename));
5773 b->line_number = sals.sals[i].line;
5774 b->address = sals.sals[i].pc;
5776 /* Used to check for duplicates here, but that can
5777 cause trouble, as it doesn't check for disable
5782 /* Might be better to do this just once per breakpoint_re_set,
5783 rather than once for every breakpoint. */
5784 breakpoints_changed ();
5786 b->section = sals.sals[i].section;
5787 b->enable = save_enable; /* Restore it, this worked. */
5790 /* Now that this is re-enabled, check_duplicates
5792 check_duplicates (b->address, b->section);
5795 free ((PTR)sals.sals);
5799 case bp_hardware_watchpoint:
5800 case bp_read_watchpoint:
5801 case bp_access_watchpoint:
5802 innermost_block = NULL;
5803 /* The issue arises of what context to evaluate this in. The same
5804 one as when it was set, but what does that mean when symbols have
5805 been re-read? We could save the filename and functionname, but
5806 if the context is more local than that, the best we could do would
5807 be something like how many levels deep and which index at that
5808 particular level, but that's going to be less stable than filenames
5809 or functionnames. */
5810 /* So for now, just use a global context. */
5813 b->exp = parse_expression (b->exp_string);
5814 b->exp_valid_block = innermost_block;
5815 mark = value_mark ();
5817 value_free (b->val);
5818 b->val = evaluate_expression (b->exp);
5819 release_value (b->val);
5820 if (VALUE_LAZY (b->val))
5821 value_fetch_lazy (b->val);
5823 if (b->cond_string != NULL)
5827 free ((PTR)b->cond);
5828 b->cond = parse_exp_1 (&s, (struct block *)0, 0);
5830 if (b->enable == enabled)
5832 value_free_to_mark (mark);
5834 case bp_catch_catch:
5835 case bp_catch_throw:
5837 /* We needn't really do anything to reset these, since the mask
5838 that requests them is unaffected by e.g., new libraries being
5841 case bp_catch_vfork:
5846 printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
5848 /* Delete longjmp breakpoints, they will be reset later by
5849 breakpoint_re_set. */
5851 case bp_longjmp_resume:
5852 delete_breakpoint (b);
5855 /* This breakpoint is special, it's set up when the inferior
5856 starts and we really don't want to touch it. */
5857 case bp_shlib_event:
5859 /* Keep temporary breakpoints, which can be encountered when we step
5860 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
5861 Otherwise these should have been blown away via the cleanup chain
5862 or by breakpoint_init_inferior when we rerun the executable. */
5865 case bp_watchpoint_scope:
5867 case bp_step_resume:
5874 /* Re-set all breakpoints after symbols have been re-loaded. */
5876 breakpoint_re_set ()
5878 struct breakpoint *b, *temp;
5879 enum language save_language;
5880 int save_input_radix;
5881 static char message1[] = "Error in re-setting breakpoint %d:\n";
5882 char message[sizeof (message1) + 30 /* slop */];
5884 save_language = current_language->la_language;
5885 save_input_radix = input_radix;
5886 ALL_BREAKPOINTS_SAFE (b, temp)
5888 sprintf (message, message1, b->number); /* Format possible error msg */
5889 catch_errors ((int (*) PARAMS ((char *))) breakpoint_re_set_one, (char *) b, message,
5892 set_language (save_language);
5893 input_radix = save_input_radix;
5895 #ifdef GET_LONGJMP_TARGET
5896 create_longjmp_breakpoint ("longjmp");
5897 create_longjmp_breakpoint ("_longjmp");
5898 create_longjmp_breakpoint ("siglongjmp");
5899 create_longjmp_breakpoint ("_siglongjmp");
5900 create_longjmp_breakpoint (NULL);
5904 /* Took this out (temporarily at least), since it produces an extra
5905 blank line at startup. This messes up the gdbtests. -PB */
5906 /* Blank line to finish off all those mention() messages we just printed. */
5907 printf_filtered ("\n");
5911 /* Set ignore-count of breakpoint number BPTNUM to COUNT.
5912 If from_tty is nonzero, it prints a message to that effect,
5913 which ends with a period (no newline). */
5915 /* Reset the thread number of this breakpoint:
5917 - If the breakpoint is for all threads, leave it as-is.
5918 - Else, reset it to the current thread for inferior_pid. */
5920 breakpoint_re_set_thread (b)
5921 struct breakpoint * b;
5923 if (b->thread != -1)
5925 if (in_thread_list (inferior_pid))
5926 b->thread = pid_to_thread_id (inferior_pid);
5931 set_ignore_count (bptnum, count, from_tty)
5932 int bptnum, count, from_tty;
5934 register struct breakpoint *b;
5940 if (b->number == bptnum)
5942 b->ignore_count = count;
5945 else if (count == 0)
5946 printf_filtered ("Will stop next time breakpoint %d is reached.",
5948 else if (count == 1)
5949 printf_filtered ("Will ignore next crossing of breakpoint %d.",
5952 printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
5954 breakpoints_changed ();
5958 error ("No breakpoint number %d.", bptnum);
5961 /* Clear the ignore counts of all breakpoints. */
5963 breakpoint_clear_ignore_counts ()
5965 struct breakpoint *b;
5968 b->ignore_count = 0;
5971 /* Command to set ignore-count of breakpoint N to COUNT. */
5974 ignore_command (args, from_tty)
5982 error_no_arg ("a breakpoint number");
5984 num = get_number (&p);
5987 error ("Second argument (specified ignore-count) is missing.");
5989 set_ignore_count (num,
5990 longest_to_int (value_as_long (parse_and_eval (p))),
5992 printf_filtered ("\n");
5993 breakpoints_changed ();
5996 /* Call FUNCTION on each of the breakpoints
5997 whose numbers are given in ARGS. */
6000 map_breakpoint_numbers (args, function)
6002 void (*function) PARAMS ((struct breakpoint *));
6004 register char *p = args;
6007 register struct breakpoint *b;
6010 error_no_arg ("one or more breakpoint numbers");
6016 num = get_number (&p1);
6019 if (b->number == num)
6021 struct breakpoint *related_breakpoint = b->related_breakpoint;
6023 if (related_breakpoint)
6024 function (related_breakpoint);
6027 printf_unfiltered ("No breakpoint number %d.\n", num);
6034 disable_breakpoint (bpt)
6035 struct breakpoint *bpt;
6037 /* Never disable a watchpoint scope breakpoint; we want to
6038 hit them when we leave scope so we can delete both the
6039 watchpoint and its scope breakpoint at that time. */
6040 if (bpt->type == bp_watchpoint_scope)
6043 bpt->enable = disabled;
6045 check_duplicates (bpt->address, bpt->section);
6047 if (modify_breakpoint_hook)
6048 modify_breakpoint_hook (bpt);
6053 disable_command (args, from_tty)
6057 register struct breakpoint *bpt;
6059 ALL_BREAKPOINTS (bpt)
6063 warning ("attempted to disable apparently deleted breakpoint #%d?\n", bpt->number);
6067 case bp_catch_unload:
6069 case bp_catch_vfork:
6071 case bp_catch_catch:
6072 case bp_catch_throw:
6073 case bp_hardware_breakpoint:
6075 case bp_hardware_watchpoint:
6076 case bp_read_watchpoint:
6077 case bp_access_watchpoint:
6078 disable_breakpoint (bpt);
6083 map_breakpoint_numbers (args, disable_breakpoint);
6087 do_enable_breakpoint (bpt, disposition)
6088 struct breakpoint *bpt;
6089 enum bpdisp disposition;
6091 struct frame_info *save_selected_frame = NULL;
6092 int save_selected_frame_level = -1;
6093 int target_resources_ok, other_type_used;
6096 if (bpt->type == bp_hardware_breakpoint)
6099 i = hw_breakpoint_used_count();
6100 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
6101 bp_hardware_breakpoint, i+1, 0);
6102 if (target_resources_ok == 0)
6103 error ("No hardware breakpoint support in the target.");
6104 else if (target_resources_ok < 0)
6105 error ("Hardware breakpoints used exceeds limit.");
6108 bpt->enable = enabled;
6109 bpt->disposition = disposition;
6110 check_duplicates (bpt->address, bpt->section);
6111 breakpoints_changed ();
6113 if (bpt->type == bp_watchpoint || bpt->type == bp_hardware_watchpoint ||
6114 bpt->type == bp_read_watchpoint || bpt->type == bp_access_watchpoint)
6116 if (bpt->exp_valid_block != NULL)
6118 struct frame_info *fr =
6120 /* Ensure that we have the current frame. Else, this
6121 next query may pessimistically be answered as, "No,
6122 not within current scope". */
6123 get_current_frame ();
6124 fr = find_frame_addr_in_frame_chain (bpt->watchpoint_frame);
6128 Cannot enable watchpoint %d because the block in which its expression\n\
6129 is valid is not currently in scope.\n", bpt->number);
6130 bpt->enable = disabled;
6134 save_selected_frame = selected_frame;
6135 save_selected_frame_level = selected_frame_level;
6136 select_frame (fr, -1);
6139 value_free (bpt->val);
6140 mark = value_mark ();
6141 bpt->val = evaluate_expression (bpt->exp);
6142 release_value (bpt->val);
6143 if (VALUE_LAZY (bpt->val))
6144 value_fetch_lazy (bpt->val);
6146 if (bpt->type == bp_hardware_watchpoint ||
6147 bpt->type == bp_read_watchpoint ||
6148 bpt->type == bp_access_watchpoint)
6150 int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
6151 int mem_cnt = can_use_hardware_watchpoint (bpt->val);
6153 /* Hack around 'unused var' error for some targets here */
6155 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
6156 bpt->type, i + mem_cnt, other_type_used);
6157 /* we can consider of type is bp_hardware_watchpoint, convert to
6158 bp_watchpoint in the following condition */
6159 if (target_resources_ok < 0)
6162 Cannot enable watchpoint %d because target watch resources\n\
6163 have been allocated for other watchpoints.\n", bpt->number);
6164 bpt->enable = disabled;
6165 value_free_to_mark (mark);
6170 if (save_selected_frame_level >= 0)
6171 select_and_print_frame (save_selected_frame, save_selected_frame_level);
6172 value_free_to_mark (mark);
6174 if (modify_breakpoint_hook)
6175 modify_breakpoint_hook (bpt);
6179 enable_breakpoint (bpt)
6180 struct breakpoint *bpt;
6182 do_enable_breakpoint (bpt, bpt->disposition);
6185 /* The enable command enables the specified breakpoints (or all defined
6186 breakpoints) so they once again become (or continue to be) effective
6187 in stopping the inferior. */
6191 enable_command (args, from_tty)
6195 register struct breakpoint *bpt;
6197 ALL_BREAKPOINTS (bpt)
6201 warning ("attempted to enable apparently deleted breakpoint #%d?\n", bpt->number);
6205 case bp_catch_unload:
6207 case bp_catch_vfork:
6209 case bp_catch_catch:
6210 case bp_catch_throw:
6211 case bp_hardware_breakpoint:
6213 case bp_hardware_watchpoint:
6214 case bp_read_watchpoint:
6215 case bp_access_watchpoint:
6216 enable_breakpoint (bpt);
6221 map_breakpoint_numbers (args, enable_breakpoint);
6225 enable_once_breakpoint (bpt)
6226 struct breakpoint *bpt;
6228 do_enable_breakpoint (bpt, disable);
6233 enable_once_command (args, from_tty)
6237 map_breakpoint_numbers (args, enable_once_breakpoint);
6241 enable_delete_breakpoint (bpt)
6242 struct breakpoint *bpt;
6244 do_enable_breakpoint (bpt, del);
6249 enable_delete_command (args, from_tty)
6253 map_breakpoint_numbers (args, enable_delete_breakpoint);
6256 /* Use default_breakpoint_'s, or nothing if they aren't valid. */
6258 struct symtabs_and_lines
6259 decode_line_spec_1 (string, funfirstline)
6263 struct symtabs_and_lines sals;
6265 error ("Empty line specification.");
6266 if (default_breakpoint_valid)
6267 sals = decode_line_1 (&string, funfirstline,
6268 default_breakpoint_symtab, default_breakpoint_line,
6271 sals = decode_line_1 (&string, funfirstline,
6272 (struct symtab *)NULL, 0, (char ***)NULL);
6274 error ("Junk at end of line specification: %s", string);
6279 _initialize_breakpoint ()
6281 struct cmd_list_element *c;
6283 breakpoint_chain = 0;
6284 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
6285 before a breakpoint is set. */
6286 breakpoint_count = 0;
6288 add_com ("ignore", class_breakpoint, ignore_command,
6289 "Set ignore-count of breakpoint number N to COUNT.\n\
6290 Usage is `ignore N COUNT'.");
6292 add_com_alias("bc", "ignore", class_breakpoint, 1);
6294 add_com ("commands", class_breakpoint, commands_command,
6295 "Set commands to be executed when a breakpoint is hit.\n\
6296 Give breakpoint number as argument after \"commands\".\n\
6297 With no argument, the targeted breakpoint is the last one set.\n\
6298 The commands themselves follow starting on the next line.\n\
6299 Type a line containing \"end\" to indicate the end of them.\n\
6300 Give \"silent\" as the first line to make the breakpoint silent;\n\
6301 then no output is printed when it is hit, except what the commands print.");
6303 add_com ("condition", class_breakpoint, condition_command,
6304 "Specify breakpoint number N to break only if COND is true.\n\
6305 Usage is `condition N COND', where N is an integer and COND is an\n\
6306 expression to be evaluated whenever breakpoint N is reached. ");
6308 add_com ("tbreak", class_breakpoint, tbreak_command,
6309 "Set a temporary breakpoint. Args like \"break\" command.\n\
6310 Like \"break\" except the breakpoint is only temporary,\n\
6311 so it will be deleted when hit. Equivalent to \"break\" followed\n\
6312 by using \"enable delete\" on the breakpoint number.");
6313 add_com("txbreak", class_breakpoint, tbreak_at_finish_command,
6314 "Set temporary breakpoint at procedure exit. Either there should\n\
6315 be no argument or the argument must be a depth.\n");
6317 add_com ("hbreak", class_breakpoint, hbreak_command,
6318 "Set a hardware assisted breakpoint. Args like \"break\" command.\n\
6319 Like \"break\" except the breakpoint requires hardware support,\n\
6320 some target hardware may not have this support.");
6322 add_com ("thbreak", class_breakpoint, thbreak_command,
6323 "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
6324 Like \"hbreak\" except the breakpoint is only temporary,\n\
6325 so it will be deleted when hit.");
6327 add_prefix_cmd ("enable", class_breakpoint, enable_command,
6328 "Enable some breakpoints.\n\
6329 Give breakpoint numbers (separated by spaces) as arguments.\n\
6330 With no subcommand, breakpoints are enabled until you command otherwise.\n\
6331 This is used to cancel the effect of the \"disable\" command.\n\
6332 With a subcommand you can enable temporarily.",
6333 &enablelist, "enable ", 1, &cmdlist);
6335 add_com("ab", class_breakpoint, enable_command,
6336 "Enable some breakpoints.\n\
6337 Give breakpoint numbers (separated by spaces) as arguments.\n\
6338 With no subcommand, breakpoints are enabled until you command otherwise.\n\
6339 This is used to cancel the effect of the \"disable\" command.\n\
6340 With a subcommand you can enable temporarily.");
6342 add_com_alias ("en", "enable", class_breakpoint, 1);
6344 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
6345 "Enable some breakpoints.\n\
6346 Give breakpoint numbers (separated by spaces) as arguments.\n\
6347 This is used to cancel the effect of the \"disable\" command.\n\
6348 May be abbreviated to simply \"enable\".\n",
6349 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
6351 add_cmd ("once", no_class, enable_once_command,
6352 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
6353 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
6356 add_cmd ("delete", no_class, enable_delete_command,
6357 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
6358 If a breakpoint is hit while enabled in this fashion, it is deleted.",
6361 add_cmd ("delete", no_class, enable_delete_command,
6362 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
6363 If a breakpoint is hit while enabled in this fashion, it is deleted.",
6366 add_cmd ("once", no_class, enable_once_command,
6367 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
6368 If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
6371 add_prefix_cmd ("disable", class_breakpoint, disable_command,
6372 "Disable some breakpoints.\n\
6373 Arguments are breakpoint numbers with spaces in between.\n\
6374 To disable all breakpoints, give no argument.\n\
6375 A disabled breakpoint is not forgotten, but has no effect until reenabled.",
6376 &disablelist, "disable ", 1, &cmdlist);
6377 add_com_alias ("dis", "disable", class_breakpoint, 1);
6378 add_com_alias ("disa", "disable", class_breakpoint, 1);
6380 add_com("sb", class_breakpoint, disable_command,
6381 "Disable some breakpoints.\n\
6382 Arguments are breakpoint numbers with spaces in between.\n\
6383 To disable all breakpoints, give no argument.\n\
6384 A disabled breakpoint is not forgotten, but has no effect until reenabled.");
6386 add_cmd ("breakpoints", class_alias, disable_command,
6387 "Disable some breakpoints.\n\
6388 Arguments are breakpoint numbers with spaces in between.\n\
6389 To disable all breakpoints, give no argument.\n\
6390 A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
6391 This command may be abbreviated \"disable\".",
6394 add_prefix_cmd ("delete", class_breakpoint, delete_command,
6395 "Delete some breakpoints or auto-display expressions.\n\
6396 Arguments are breakpoint numbers with spaces in between.\n\
6397 To delete all breakpoints, give no argument.\n\
6399 Also a prefix command for deletion of other GDB objects.\n\
6400 The \"unset\" command is also an alias for \"delete\".",
6401 &deletelist, "delete ", 1, &cmdlist);
6402 add_com_alias ("d", "delete", class_breakpoint, 1);
6404 add_com ("db", class_breakpoint, delete_command,
6405 "Delete some breakpoints.\n\
6406 Arguments are breakpoint numbers with spaces in between.\n\
6407 To delete all breakpoints, give no argument.\n");
6409 add_cmd ("breakpoints", class_alias, delete_command,
6410 "Delete some breakpoints or auto-display expressions.\n\
6411 Arguments are breakpoint numbers with spaces in between.\n\
6412 To delete all breakpoints, give no argument.\n\
6413 This command may be abbreviated \"delete\".",
6416 add_com ("clear", class_breakpoint, clear_command,
6417 concat ("Clear breakpoint at specified line or function.\n\
6418 Argument may be line number, function name, or \"*\" and an address.\n\
6419 If line number is specified, all breakpoints in that line are cleared.\n\
6420 If function is specified, breakpoints at beginning of function are cleared.\n\
6421 If an address is specified, breakpoints at that address are cleared.\n\n",
6422 "With no argument, clears all breakpoints in the line that the selected frame\n\
6425 See also the \"delete\" command which clears breakpoints by number.", NULL));
6427 add_com ("break", class_breakpoint, break_command,
6428 concat ("Set breakpoint at specified line or function.\n\
6429 Argument may be line number, function name, or \"*\" and an address.\n\
6430 If line number is specified, break at start of code for that line.\n\
6431 If function is specified, break at start of code for that function.\n\
6432 If an address is specified, break at that exact address.\n",
6433 "With no arg, uses current execution address of selected stack frame.\n\
6434 This is useful for breaking on return to a stack frame.\n\
6436 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
6438 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
6439 add_com_alias ("b", "break", class_run, 1);
6440 add_com_alias ("br", "break", class_run, 1);
6441 add_com_alias ("bre", "break", class_run, 1);
6442 add_com_alias ("brea", "break", class_run, 1);
6444 add_com("xbreak", class_breakpoint, break_at_finish_command,
6445 concat("Set breakpoint at procedure exit. \n\
6446 Argument may be function name, or \"*\" and an address.\n\
6447 If function is specified, break at end of code for that function.\n\
6448 If an address is specified, break at the end of the function that contains \n\
6449 that exact address.\n",
6450 "With no arg, uses current execution address of selected stack frame.\n\
6451 This is useful for breaking on return to a stack frame.\n\
6453 Multiple breakpoints at one place are permitted, and useful if conditional.\n\
6455 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
6456 add_com_alias ("xb", "xbreak", class_breakpoint, 1);
6457 add_com_alias ("xbr", "xbreak", class_breakpoint, 1);
6458 add_com_alias ("xbre", "xbreak", class_breakpoint, 1);
6459 add_com_alias ("xbrea", "xbreak", class_breakpoint, 1);
6463 add_com_alias ("ba", "break", class_breakpoint, 1);
6464 add_com_alias ("bu", "ubreak", class_breakpoint, 1);
6465 add_com ("bx", class_breakpoint, break_at_finish_at_depth_command,
6466 "Set breakpoint at procedure exit. Either there should\n\
6467 be no argument or the argument must be a depth.\n");
6472 add_abbrev_prefix_cmd("stop", class_breakpoint, stop_command,
6473 "Break in function/address or break at a line in the current file.",
6474 &stoplist, "stop ", 1, &cmdlist);
6475 add_cmd("in", class_breakpoint, stopin_command,
6476 "Break in function or address.\n", &stoplist);
6477 add_cmd("at", class_breakpoint, stopat_command,
6478 "Break at a line in the current file.\n", &stoplist);
6479 add_com("status", class_info, breakpoints_info,
6480 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
6481 The \"Type\" column indicates one of:\n\
6482 \tbreakpoint - normal breakpoint\n\
6483 \twatchpoint - watchpoint\n\
6484 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6485 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
6486 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
6487 address and file/line number respectively.\n\n",
6488 "Convenience variable \"$_\" and default examine address for \"x\"\n\
6489 are set to the address of the last breakpoint listed.\n\n\
6490 Convenience variable \"$bpnum\" contains the number of the last\n\
6491 breakpoint set.", NULL));
6494 add_info ("breakpoints", breakpoints_info,
6495 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
6496 The \"Type\" column indicates one of:\n\
6497 \tbreakpoint - normal breakpoint\n\
6498 \twatchpoint - watchpoint\n\
6499 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6500 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
6501 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
6502 address and file/line number respectively.\n\n",
6503 "Convenience variable \"$_\" and default examine address for \"x\"\n\
6504 are set to the address of the last breakpoint listed.\n\n\
6505 Convenience variable \"$bpnum\" contains the number of the last\n\
6506 breakpoint set.", NULL));
6509 add_com("lb", class_breakpoint, breakpoints_info,
6510 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
6511 The \"Type\" column indicates one of:\n\
6512 \tbreakpoint - normal breakpoint\n\
6513 \twatchpoint - watchpoint\n\
6514 The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6515 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
6516 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
6517 address and file/line number respectively.\n\n",
6518 "Convenience variable \"$_\" and default examine address for \"x\"\n\
6519 are set to the address of the last breakpoint listed.\n\n\
6520 Convenience variable \"$bpnum\" contains the number of the last\n\
6521 breakpoint set.", NULL));
6523 #if MAINTENANCE_CMDS
6525 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
6526 concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
6527 The \"Type\" column indicates one of:\n\
6528 \tbreakpoint - normal breakpoint\n\
6529 \twatchpoint - watchpoint\n\
6530 \tlongjmp - internal breakpoint used to step through longjmp()\n\
6531 \tlongjmp resume - internal breakpoint at the target of longjmp()\n\
6532 \tuntil - internal breakpoint used by the \"until\" command\n\
6533 \tfinish - internal breakpoint used by the \"finish\" command\n",
6534 "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6535 the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
6536 breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
6537 address and file/line number respectively.\n\n",
6538 "Convenience variable \"$_\" and default examine address for \"x\"\n\
6539 are set to the address of the last breakpoint listed.\n\n\
6540 Convenience variable \"$bpnum\" contains the number of the last\n\
6541 breakpoint set.", NULL),
6542 &maintenanceinfolist);
6544 #endif /* MAINTENANCE_CMDS */
6546 add_com ("catch", class_breakpoint, catch_command,
6547 "Set catchpoints to catch events.\n\
6548 Raised signals may be caught:\n\
6549 \tcatch signal - all signals\n\
6550 \tcatch signal <signame> - a particular signal\n\
6551 Raised exceptions may be caught:\n\
6552 \tcatch throw - all exceptions, when thrown\n\
6553 \tcatch throw <exceptname> - a particular exception, when thrown\n\
6554 \tcatch catch - all exceptions, when caught\n\
6555 \tcatch catch <exceptname> - a particular exception, when caught\n\
6556 Thread or process events may be caught:\n\
6557 \tcatch thread_start - any threads, just after creation\n\
6558 \tcatch thread_exit - any threads, just before expiration\n\
6559 \tcatch thread_join - any threads, just after joins\n\
6560 Process events may be caught:\n\
6561 \tcatch start - any processes, just after creation\n\
6562 \tcatch exit - any processes, just before expiration\n\
6563 \tcatch fork - calls to fork()\n\
6564 \tcatch vfork - calls to vfork()\n\
6565 \tcatch exec - calls to exec()\n\
6566 Dynamically-linked library events may be caught:\n\
6567 \tcatch load - loads of any library\n\
6568 \tcatch load <libname> - loads of a particular library\n\
6569 \tcatch unload - unloads of any library\n\
6570 \tcatch unload <libname> - unloads of a particular library\n\
6571 The act of your program's execution stopping may also be caught:\n\
6573 C++ exceptions may be caught:\n\
6574 \tcatch throw - all exceptions, when thrown\n\
6575 \tcatch catch - all exceptions, when caught\n\
6577 Do \"help set follow-fork-mode\" for info on debugging your program\n\
6578 after a fork or vfork is caught.\n\n\
6579 Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
6581 add_com ("tcatch", class_breakpoint, tcatch_command,
6582 "Set temporary catchpoints to catch events.\n\
6583 Args like \"catch\" command.\n\
6584 Like \"catch\" except the catchpoint is only temporary,\n\
6585 so it will be deleted when hit. Equivalent to \"catch\" followed\n\
6586 by using \"enable delete\" on the catchpoint number.");
6588 add_com ("watch", class_breakpoint, watch_command,
6590 "Set a watchpoint for an expression.\n\
6591 A watchpoint stops execution of your program whenever the value of\n\
6592 an expression changes.");
6594 add_com ("rwatch", class_breakpoint, rwatch_command,
6595 "Set a read watchpoint for an expression.\n\
6596 A watchpoint stops execution of your program whenever the value of\n\
6597 an expression is read.");
6599 add_com ("awatch", class_breakpoint, awatch_command,
6600 "Set a watchpoint for an expression.\n\
6601 A watchpoint stops execution of your program whenever the value of\n\
6602 an expression is either read or written.");
6604 add_info ("watchpoints", breakpoints_info,
6605 "Synonym for ``info breakpoints''.");
6608 c = add_set_cmd ("can-use-hw-watchpoints", class_support, var_zinteger,
6609 (char *) &can_use_hw_watchpoints,
6610 "Set debugger's willingness to use watchpoint hardware.\n\
6611 If zero, gdb will not use hardware for new watchpoints, even if\n\
6612 such is available. (However, any hardware watchpoints that were\n\
6613 created before setting this to nonzero, will continue to use watchpoint\n\
6616 add_show_from_set (c, &showlist);
6618 can_use_hw_watchpoints = 1;